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) {