This page describes the implementation of xllmnrd briefly.
Single UDP socket
xllmnrd uses a single UDP socket for all the IPv6 interfaces. It reduces the number of file descriptors used for UDP sockets on a host with many network interfaces, in contrast to binding one socket for each interface.
To operate with only one socket, xllmnrd uses the IPV6_RECVPKTINFO socket option, which enables a program to know from which interface a packet is received. xllmnrd uses the information to get the interface address to be answered.
xllmnrd uses a RTNETLINK socket to keep track of address changes on network interfaces on GNU/Linux platforms.
[To be described more.]
The current implementation has several limitations:
- It does not listen any IPv4 queries,
- It does not listen on any TCP port, and
- It does not handle name collisions.
No IPv4 queries
This limitation is merely a design decision. There are several reasons:
- The currently known operating systems that supports LLMNR sends queries both in IPv6 and in IPv4,
- For IPv4 networks, we already have NetBIOS over TCP/IP working, and
- Socket API’s for IPv4 multicasts are not well standardized.
No TCP port
[To be described.]