mirror of https://github.com/ipxe/ipxe.git
[ipv6] Use given source address only if it is not the unspecified address
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/17/head
parent
4484edd1c0
commit
95623e353b
|
@ -50,6 +50,12 @@ struct in6_addr {
|
|||
#define s6_addr32 in6_u.u6_addr32
|
||||
};
|
||||
|
||||
#define IN6_IS_ADDR_UNSPECIFIED( addr ) \
|
||||
( ( ( ( ( const uint32_t * ) (addr) )[0] ) | \
|
||||
( ( ( const uint32_t * ) (addr) )[1] ) | \
|
||||
( ( ( const uint32_t * ) (addr) )[2] ) | \
|
||||
( ( ( const uint32_t * ) (addr) )[3] ) ) == 0 )
|
||||
|
||||
#define IN6_IS_ADDR_MULTICAST( addr ) \
|
||||
( *( ( const uint8_t * ) (addr) ) == 0xff )
|
||||
|
||||
|
|
|
@ -399,7 +399,7 @@ static int ipv6_tx ( struct io_buffer *iobuf,
|
|||
rc = -ENETUNREACH;
|
||||
goto err;
|
||||
}
|
||||
if ( sin6_src )
|
||||
if ( sin6_src && ! IN6_IS_ADDR_UNSPECIFIED ( &sin6_src->sin6_addr ) )
|
||||
src = &sin6_src->sin6_addr;
|
||||
memcpy ( &iphdr->src, src, sizeof ( iphdr->src ) );
|
||||
|
||||
|
|
Loading…
Reference in New Issue