Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 9 Feb 2016 22:51:14 +0100
From:      Jeremy Boy <jb@jboy.eu>
To:        freebsd-net@freebsd.org
Cc:        Jeremy Boy <jb@jboy.eu>
Subject:   ifconfig with quoted arguments
Message-ID:  <76A08658-ACD2-426B-865A-45A6A79BBFB4@jboy.eu>

next in thread | raw e-mail | index | archive | help
Hello list,

please CC me in replies to this mail, since I am no subscriber to this =
list.

For safety reasons, we enclose user input to shell commands in quotes. =
Until today, the resulting command for ifconfig(8) looked like this:

> ifconfig ue0 inet "192.168.2.176 netmask 255.255.255.0"


As we figured out, this means that ifconfig sometimes doesn't set the =
netmask as we expect it to do:

> root@csbuild:~ # ifconfig ue0
> ue0: flags=3D8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu =
1500
>         options=3D80001<RXCSUM,LINKSTATE>
>         ether b8:27:eb:fd:58:69
>         inet 192.168.2.176 netmask 0xffff0000 broadcast =
192.168.255.255=20
>         media: Ethernet autoselect (100baseTX <full-duplex>)
>         status: active
>         nd6 options=3D29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
> root@csbuild:~ # ifconfig ue0 inet "192.168.2.176 netmask 255.0.0.0"
> root@csbuild:~ # echo $?
> 0
> root@csbuild:~ # ifconfig ue0
> ue0: flags=3D8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu =
1500
>         options=3D80001<RXCSUM,LINKSTATE>
>         ether b8:27:eb:fd:58:69
>         inet 192.168.2.176 netmask 0xffffff00 broadcast 192.168.2.255=20=

>         media: Ethernet autoselect (100baseTX <full-duplex>)
>         status: active
>         nd6 options=3D29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
> root@csbuild:~ #=20


As you can see, ifconfig sets the netmask to 255.255.255.0, ignoring the =
netmask we provided. If provided with a 10.* address, ifconfig sets the =
netmask to 255.0.0.0, no matter what actual netmask we entered. Also, it =
doesn't exit with a status indicating error, which made it a little =
harder to debug this issue. The following works as expected:

> root@csbuild:~ # ifconfig ue0
> ue0: flags=3D8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu =
1500
>         options=3D80001<RXCSUM,LINKSTATE>
>         ether b8:27:eb:fd:58:69
>         inet 192.168.2.176 netmask 0xffffff00 broadcast 192.168.2.255=20=

>         media: Ethernet autoselect (100baseTX <full-duplex>)
>         status: active
>         nd6 options=3D29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
> root@csbuild:~ # ifconfig ue0 inet "192.168.2.176" netmask "255.0.0.0"
> root@csbuild:~ # ifconfig ue0
> ue0: flags=3D8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu =
1500
>         options=3D80001<RXCSUM,LINKSTATE>
>         ether b8:27:eb:fd:58:69
>         inet 192.168.2.176 netmask 0xff000000 broadcast =
192.255.255.255=20
>         media: Ethernet autoselect (100baseTX <full-duplex>)
>         status: active
>         nd6 options=3D29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
> root@csbuild:~ #=20

What exactly does ifconfig do? It seems to me that it reads the IP =
address from the quoted string but truncates the netmask. Is this a bug =
in ifconfig or intended behavior?


Best wishes
Jeremy=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?76A08658-ACD2-426B-865A-45A6A79BBFB4>