Mercurial > illumos > illumos-gate
changeset 12595:6c7cb543efd1
6957205 IP_PKTINFO is not handled correctly since snv_129
author | Marcel Telka <Marcel.Telka@Sun.COM> |
---|---|
date | Thu, 10 Jun 2010 08:35:29 +0200 |
parents | d6a845bf8951 |
children | d42e6e6980b3 |
files | usr/src/uts/common/inet/ip/conn_opt.c usr/src/uts/common/inet/ip/icmp.c usr/src/uts/common/inet/udp/udp.c |
diffstat | 3 files changed, 10 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- 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);
--- 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) {
--- 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) {