Date: Tue, 25 Jun 1996 16:17:15 +0100 (BST) From: Jonathan Laventhol <jcl@pavilion.co.uk> To: hackers@freebsd.org Subject: Multiple delivery of UDP and IP aliases Message-ID: <199606251517.QAA13345@deputy.pavilion.co.uk>
next in thread | raw e-mail | index | archive | help
Dear BSD Clever People -- (Please respond directly: I'm not on the mailing lists. Thanks.) Anybody understand the following: I'm getting multiple delivery of UDP packets under particular circumstances to do with SO_REUSEADDR and aliases on interfaces. Briefly, a packet sent to an alias is getting delivered twice, to different sockets, whereas the packet to the main address only gets delivered once. This is a real problem to do with named serving on alias ip addresses, but I've got test code if anyone wants to play with it. Get an interface with two alias addresses: ifconfig de0 inet 192.9.200.1 netmask 255.255.255.0 ifconfig de0 inet alias 192.9.200.2 netmask 255.255.255.255 ifconfig de0 inet alias 192.9.200.3 netmask 255.255.255.255 Get two DGRAM sockets, both marked SO_REUSEADDR: bind socket1 to 192.9.200.2 port 2000 bind socket0 to INADDR_ANY port 2000 Get another host, 192.9.200.9. Transmit a UDP packet from to arrives 192.9.200.9 192.9.100.1 socket0 192.9.200.9 192.9.200.2 *** socket1 and socket0 *** 192.9.200.9 192.9.200.3 socket0 But ... get two DGRAM sockets, both marked SO_REUSEADDR: bind socket1 to 192.9.200.1 port 2000 (the 'real' address) bind socket0 to INADDR_ANY port 2000 Transmit a UDP packet from to arrives 192.9.200.9 192.9.100.1 socket1 192.9.200.9 192.9.200.2 socket0 192.9.200.9 192.9.200.3 socket0 The duplication looks suspect to me. I (briefly) tried to find it in the kernel but didn't see it. I did, however, find this intriguing comment in udp_usrreq.c * udp_usrreq.c,v 1.12 1995/05/30 08:10:02 rgrimes Exp /* * Deliver a multicast or broadcast datagram to *all* sockets * for which the local and remote addresses and ports match * those of the incoming datagram. This allows more than * one process to receive multi/broadcasts on the same port. * (This really ought to be done for unicast datagrams as * well, but that would cause problems with existing * applications that open both address-specific sockets and * a wildcard socket listening to the same port -- they would * end up receiving duplicates of every unicast datagram. * Those applications open the multiple sockets to overcome an * inadequacy of the UDP socket interface, but for backwards * compatibility we avoid the problem here rather than * fixing the interface. Maybe 4.5BSD will remedy this?) */ Anybody know a) where the duplication I'm reporting happens, and b) what the 'inadequacy of the UDP socket interface' is? All help gratefully received. Jonathan. ------------------------------------------------- J o n a t h a n L a v e n t h o l T e c h n i c a l D i r e c t o r P a v i l i o n I n t e r n e t p l c aqua house 24 old steine brighton bn1 1el 01273 607072 phone . 01273 607073 fax -------------------------------------------------
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199606251517.QAA13345>