# HG changeset patch # User Marcel Telka # Date 1276151729 -7200 # Node ID 6c7cb543efd1164648a3ec10d63e4b1bee798479 # Parent d6a845bf8951ab73573876fb6fcb6c017a5e3059 6957205 IP_PKTINFO is not handled correctly since snv_129 diff -r d6a845bf8951 -r 6c7cb543efd1 usr/src/uts/common/inet/ip/conn_opt.c --- a/usr/src/uts/common/inet/ip/conn_opt.c Thu Jun 10 09:54:00 2010 +0800 +++ b/usr/src/uts/common/inet/ip/conn_opt.c Thu Jun 10 08:35:29 2010 +0200 @@ -20,8 +20,7 @@ */ /* - * Copyright 2010 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. */ /* Copyright (c) 1990 Mentat Inc. */ @@ -1386,7 +1385,7 @@ /* This is IP_PKTINFO option. */ mutex_enter(&connp->conn_lock); pktinfo = (struct in_pktinfo *)invalp; - if (ipp->ipp_addr_v4 != INADDR_ANY) { + if (pktinfo->ipi_spec_dst.s_addr != INADDR_ANY) { ipp->ipp_fields |= IPPF_ADDR; IN6_INADDR_TO_V4MAPPED(&pktinfo->ipi_spec_dst, &ipp->ipp_addr); diff -r d6a845bf8951 -r 6c7cb543efd1 usr/src/uts/common/inet/ip/icmp.c --- a/usr/src/uts/common/inet/ip/icmp.c Thu Jun 10 09:54:00 2010 +0800 +++ b/usr/src/uts/common/inet/ip/icmp.c Thu Jun 10 08:35:29 2010 +0200 @@ -3451,9 +3451,8 @@ flowinfo = connp->conn_flowinfo; } mutex_exit(&connp->conn_lock); - /* Handle IPV6_PKTINFO setting source address. */ - if (IN6_IS_ADDR_UNSPECIFIED(&v6src) && - (ipp->ipp_fields & IPPF_ADDR)) { + /* Handle IP_PKTINFO/IPV6_PKTINFO setting source address. */ + if (ipp->ipp_fields & IPPF_ADDR) { if (ixa->ixa_flags & IXAF_IS_IPV4) { if (IN6_IS_ADDR_V4MAPPED(&ipp->ipp_addr)) v6src = ipp->ipp_addr; @@ -4434,9 +4433,8 @@ else ixa->ixa_flags &= ~IXAF_IS_IPV4; } - /* Handle IPV6_PKTINFO setting source address. */ - if (IN6_IS_ADDR_UNSPECIFIED(&v6src) && - (connp->conn_xmit_ipp.ipp_fields & IPPF_ADDR)) { + /* Handle IP_PKTINFO/IPV6_PKTINFO setting source address. */ + if (connp->conn_xmit_ipp.ipp_fields & IPPF_ADDR) { ip_pkt_t *ipp = &connp->conn_xmit_ipp; if (ixa->ixa_flags & IXAF_IS_IPV4) { diff -r d6a845bf8951 -r 6c7cb543efd1 usr/src/uts/common/inet/udp/udp.c --- a/usr/src/uts/common/inet/udp/udp.c Thu Jun 10 09:54:00 2010 +0800 +++ b/usr/src/uts/common/inet/udp/udp.c Thu Jun 10 08:35:29 2010 +0200 @@ -3038,9 +3038,8 @@ } mutex_exit(&connp->conn_lock); - /* Handle IPV6_PKTINFO setting source address. */ - if (IN6_IS_ADDR_UNSPECIFIED(&v6src) && - (ipp->ipp_fields & IPPF_ADDR)) { + /* Handle IP_PKTINFO/IPV6_PKTINFO setting source address. */ + if (ipp->ipp_fields & IPPF_ADDR) { if (ixa->ixa_flags & IXAF_IS_IPV4) { if (IN6_IS_ADDR_V4MAPPED(&ipp->ipp_addr)) v6src = ipp->ipp_addr; @@ -4048,9 +4047,8 @@ else ixa->ixa_flags &= ~IXAF_IS_IPV4; } - /* Handle IPV6_PKTINFO setting source address. */ - if (IN6_IS_ADDR_UNSPECIFIED(&v6src) && - (connp->conn_xmit_ipp.ipp_fields & IPPF_ADDR)) { + /* Handle IP_PKTINFO/IPV6_PKTINFO setting source address. */ + if (connp->conn_xmit_ipp.ipp_fields & IPPF_ADDR) { ip_pkt_t *ipp = &connp->conn_xmit_ipp; if (ixa->ixa_flags & IXAF_IS_IPV4) {