From: Michael Brown Date: Fri, 23 May 2014 12:29:40 +0000 (+0100) Subject: [dhcpv6] Do not set sin6_scope_id on the unspecified client socket address X-Git-Tag: v1.20.1~1167 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6206f8f0f9b3c6fb822b6639eaffb460f5ddb9d2;p=thirdparty%2Fipxe.git [dhcpv6] Do not set sin6_scope_id on the unspecified client socket address 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 Tested-by: Anton D. Kachalov Signed-off-by: Michael Brown --- diff --git a/src/net/udp/dhcpv6.c b/src/net/udp/dhcpv6.c index cbc8d794a..f7736d08e 100644 --- a/src/net/udp/dhcpv6.c +++ b/src/net/udp/dhcpv6.c @@ -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 );