[TEST ATTACHED] Inconsistencies with IP_ONESBCAST and/or IP_SENDSRCADDR

Bruce M Simpson bms at incunabulum.net
Wed Jan 31 16:57:04 UTC 2007


Hello,

In preparation for tightening up our handling of INADDR_BROADCAST sends, 
I ran some brief tests today on the network stack with the attached test 
code.

I found some inconsistencies when run against 6.2-RELEASE;

1. IP_ONESBCAST breaks if SO_DONTROUTE is specified.

One thing appears to be consistent about the failure mode: bad UDP 
checksums.
dc(4) is being used on the destination end of the test network, so 
checksum offloading should not be an issue.
I am also seeing the wrong destination address being used in most cases. 
This is intermittent regardless of whether the socket is bound or unbound.

2. IP_SENDSRCADDR has some other inconsistencies.
 a. The option is always rejected if the socket is not bound.
I find this behaviour suspect; the whole point of the option is to 
specify, for SOCK_DGRAM and SOCK_RAW, the source address of a packet.

 b. 0.0.0.0 is always accepted.
A regular interface lookup is used based on destination if this is 
specified. This appears suspect to me because such an option is redundant.

In theory a developer should be able to write code which uses 
SO_DONTROUTE and IP_SENDSRCADDR to bypass the routing table lookup when 
sending to 255.255.255.255.

Currently this doesn't appear to be the case, though IP_SENDSRCADDR is a 
separate issue from IP_ONESBCAST.

Regards,
BMS


More information about the freebsd-net mailing list