On 10/02/2016 5:51 AM, Jeremy Boy wrote:
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=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
         options=80001<RXCSUM,LINKSTATE>
         ether b8:27:eb:fd:58:69
         inet 192.168.2.176 netmask 0xffff0000 broadcast 192.168.255.255
         media: Ethernet autoselect (100baseTX <full-duplex>)
         status: active
         nd6 options=29<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=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
         options=80001<RXCSUM,LINKSTATE>
         ether b8:27:eb:fd:58:69
         inet 192.168.2.176 netmask 0xffffff00 broadcast 192.168.2.255
         media: Ethernet autoselect (100baseTX <full-duplex>)
         status: active
         nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
root@csbuild:~ #

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=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
         options=80001<RXCSUM,LINKSTATE>
         ether b8:27:eb:fd:58:69
         inet 192.168.2.176 netmask 0xffffff00 broadcast 192.168.2.255
         media: Ethernet autoselect (100baseTX <full-duplex>)
         status: active
         nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
root@csbuild:~ # ifconfig ue0 inet "192.168.2.176" netmask "255.0.0.0"
root@csbuild:~ # ifconfig ue0
ue0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
         options=80001<RXCSUM,LINKSTATE>
         ether b8:27:eb:fd:58:69
         inet 192.168.2.176 netmask 0xff000000 broadcast 192.255.255.255
         media: Ethernet autoselect (100baseTX <full-duplex>)
         status: active
         nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
root@csbuild:~ #
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?
it's not so much as ifconfig, as the shell

you have ifconfig with 3 arguments, the last of which is

  "192.168.2.176 netmask 255.255.255.0"

which ifconfig inspects to see if it has an IP address in it (followed by a space which terminates the test successfully).

this is expected behaviour. Though admittedly a less than clear example of it.





Best wishes
Jeremy
_______________________________________________
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"


_______________________________________________
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to