Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Jan 2004 09:59:16 -0800 (PST)
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 45603 for review
Message-ID:  <200401191759.i0JHxG4t086948@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=45603

Change 45603 by sam@sam_ebb on 2004/01/19 09:58:47

	revert sockaddr assignment optimization not directly related
	to socket locking; this should be kept separate

Affected files ...

.. //depot/projects/netperf_socket/sys/netinet/ip_icmp.c#3 edit

Differences ...

==== //depot/projects/netperf_socket/sys/netinet/ip_icmp.c#3 (text+ko) ====

@@ -248,6 +248,7 @@
 	struct icmp *icp;
 	struct in_ifaddr *ia;
 	struct ip *ip = mtod(m, struct ip *);
+	struct sockaddr_in icmpsrc, icmpdst, icmpgw;
 	int hlen = off;
 	int icmplen = ip->ip_len;
 	int i, code;
@@ -310,6 +311,17 @@
 	if (icp->icmp_type > ICMP_MAXTYPE)
 		goto raw;
 
+	/* Initialize */
+	bzero(&icmpsrc, sizeof(icmpsrc));
+	icmpsrc.sin_len = sizeof(struct sockaddr_in);
+	icmpsrc.sin_family = AF_INET;
+	bzero(&icmpdst, sizeof(icmpdst));
+	icmpdst.sin_len = sizeof(struct sockaddr_in);
+	icmpdst.sin_family = AF_INET;
+	bzero(&icmpgw, sizeof(icmpgw));
+	icmpgw.sin_len = sizeof(struct sockaddr_in);
+	icmpgw.sin_family = AF_INET;
+
 	icmpstat.icps_inhist[icp->icmp_type]++;
 	code = icp->icmp_code;
 	switch (icp->icmp_type) {
@@ -369,10 +381,7 @@
 		if (code)
 			goto badcode;
 		code = PRC_QUENCH;
-	deliver: {
-		struct sockaddr_in icmpsrc =
-			{ sizeof(struct sockaddr_in), AF_INET };
-
+	deliver:
 		/*
 		 * Problem with datagram; advise higher level routines.
 		 */
@@ -442,7 +451,6 @@
 			(*ctlfunc)(code, (struct sockaddr *)&icmpsrc,
 				   (void *)&icp->icmp_ip);
 		break;
-	}
 
 	badcode:
 		icmpstat.icps_badcode++;
@@ -478,10 +486,7 @@
 		else
 			goto reflect;
 
-	case ICMP_MASKREQ: {
-		struct sockaddr_in icmpdst =
-			{ sizeof(struct sockaddr_in), AF_INET };
-
+	case ICMP_MASKREQ:
 		if (icmpmaskrepl == 0)
 			break;
 		/*
@@ -523,16 +528,8 @@
 		icmpstat.icps_outhist[icp->icmp_type]++;
 		icmp_reflect(m);
 		return;
-	}
 
-	case ICMP_REDIRECT: {
-		struct sockaddr_in icmpsrc =
-			{ sizeof(struct sockaddr_in), AF_INET };
-		struct sockaddr_in icmpdst =
-			{ sizeof(struct sockaddr_in), AF_INET };
-		struct sockaddr_in icmpgw =
-			{ sizeof(struct sockaddr_in), AF_INET };
-
+	case ICMP_REDIRECT:
 		if (log_redirect) {
 			u_long src, dst, gw;
 
@@ -589,7 +586,6 @@
 		key_sa_routechange((struct sockaddr *)&icmpsrc);
 #endif
 		break;
-	}
 
 	/*
 	 * No kernel processing for the following;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200401191759.i0JHxG4t086948>