Opened 10 years ago

Last modified 10 years ago

#626 closed defect

SO_IPLINK socket option lacks important functionality of SO_BINDTODEVICE — at Version 3

Reported by: Martin Decky Owned by: Jiri Svoboda
Priority: major Milestone: 0.7.0
Component: helenos/net/udp Version: mainline
Keywords: Cc:
Blocker for: Depends on:
See also:

Description (last modified by Martin Decky)

The currently implemented SO_IPLINK socket option in the UDP server lacks one important functionality of SO_BINDTODEVICE in Linux.

In Linux, the SO_BINDTODEVICE option is used to allow the DHCP client to configure multiple network devices by binding multiple sockets to the same source pair (INADDR_ANY, 68), but on different network devices.

Change History (3)

comment:1 by Jiri Svoboda, 10 years ago

DHCP would not work at all if if could not specify which link to operate on (because the outgoing datagrams must not be routed). Instead of Linux SO_BINDTODEVICE HelenOS's DHCP uses HelenOS-specific SO_IPLINK which allows you to specify the service ID of the IP link to bind the socket to.

SO_IPLINK works to the extent that it will send datagrams to the right link (when you run enable DHCP only on one link). With multiple links, we probably hit several issues:

  • the socket lib / socket layer in UDP does not know about SO_IPLINK and might refuse binding the same (addr, port) pair twice
  • UDP assoc module cannot route received datagram to the right association
  • DHCP should probably call setsockopt(SO_IPLINK, …) before binding the socket

comment:2 by Martin Decky, 10 years ago

Yes, the SO_IPLINK option was apparently meant as HelenOS equivalent of SO_BINDTODEVICE from Linux. I am going to edit this ticket to reflect that.

However, this does not change the actual problem:

  • The DHCP client sets the SO_IPLINK option only after it tries to bind the socket to the colliding source pair (INADDR_ANY, 68). This is not very helpful.
  • The SO_IPLINK option does not lift the requirement for globally unique source pairs in the UDP server.

comment:3 by Martin Decky, 10 years ago

Component: helenos/net/sockethelenos/net/udp
Description: modified (diff)
Owner: set to Jiri Svoboda
Summary: SO_BINDTODEVICE socket option not implementedSO_IPLINK socket option lacks important functionality of SO_BINDTODEVICE
Note: See TracTickets for help on using tickets.