]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[dhcpv6] Do not set sin6_scope_id on the unspecified client socket address
authorMichael Brown <mcb30@ipxe.org>
Fri, 23 May 2014 12:29:40 +0000 (13:29 +0100)
committerMichael Brown <mcb30@ipxe.org>
Fri, 23 May 2014 13:11:11 +0000 (14:11 +0100)
Setting sin6_scope_id to a non-zero value will cause the check against
the "empty socket address" in udp_demux() to fail, and incoming DHCPv6
responses on interfaces other than net0 will be rejected with a
spurious "No UDP connection listening on port 546" error.

The transmitting network device is specified via the destination
address, not the source address.  Fix by simply not setting
sin6_scope_id on the client socket address.

Reported-by: Anton D. Kachalov <mouse@yandex-team.ru>
Tested-by: Anton D. Kachalov <mouse@yandex-team.ru>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/net/udp/dhcpv6.c

index cbc8d794a8cc54791dbb92722d6ae3749a9bd312..f7736d08ebeb9ebd07deac34b9c55a9f622cce03 100644 (file)
@@ -924,7 +924,6 @@ int start_dhcpv6 ( struct interface *job, struct net_device *netdev,
        /* Construct client and server addresses */
        memset ( &addresses, 0, sizeof ( addresses ) );
        addresses.client.sin6.sin6_family = AF_INET6;
-       addresses.client.sin6.sin6_scope_id = netdev->index;
        addresses.client.sin6.sin6_port = htons ( DHCPV6_CLIENT_PORT );
        addresses.server.sin6.sin6_family = AF_INET6;
        ipv6_all_dhcp_relay_and_servers ( &addresses.server.sin6.sin6_addr );