Skip to contentSkip to conversation

New: sk_bound_dev_if should be set for a socket when using IP_MULITCAST_IF or IP_ADD_MEMBERSHIO

Bugme-new Andrew Morton 2 participants 2 messages Jul 29, 2009 – Jul 30, 2009 1 message not in the archive

Subsystems (2)
lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]/

#1 lore raw

(switched to email. Please respond via emailed reply-to-all, not via the bugzilla web interface).

Quoted 40 lines · On Tue, 28 Jul 2009 03:42:38 GMT [email protected] wrote:

http://bugzilla.kernel.org/show_bug.cgi?id=13856

Summary: sk_bound_dev_if should be set for a socket when using
IP_MULITCAST_IF or IP_ADD_MEMBERSHIO
Product: Networking
Version: 2.5
Kernel Version: 2.6.27.7
Platform: All
OS/Version: Linux
Tree: Mainline
Status: NEW
Severity: normal
Priority: P1
Component: IPV4
AssignedTo: [email protected]
ReportedBy: [email protected]
Regression: No

Currently there is no way to tell which interface a multicast packet arrived on except by using a raw socket and issuing the SO_BINDTODEVICE option which forces the sk_bound_dev_if for the socket to be set.

Consider a multi-homed system where a service needs to listen for multicast SSDP messages on a number of interfaces. The system needs to know which interface a search message came in on in order to respond with the correct URL.

The service needs to join the multicast group on all interfaces. It must bind on INADDR_ANY and then issue the IP_ADD_MEMBERSHIP call.

1. If it uses one socket and joins on all interfaces it will receive mulitcast from all interfaces but cannot tell which interface the message came in on

2. It it uses a socket per interface each bound on INADDR_ANY and issues IP_MULTICAST_IF. In this case any mulitcast socket, no matter what interface, will be forwarded to each socket because sk_bound_dev_if was not set (i.e. 0) - see net/ipv4/udp.c [ udp_v4_mcast_next ]

Suggested solution is to set sk_bound_dev_if when IP_MULTICAST_IF is issued.

#2 lore raw
Quoted 5 lines

ReportedBy: [email protected]

Quoted 3 lines

Currently there is no way to tell which interface a multicast packet arrived on except by using a raw socket and issuing the SO_BINDTODEVICE option which forces the sk_bound_dev_if for the socket to be set.

I thought the IP_PKTINFO cmsg was the usual way to do this.

--
John