Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 Jun 2007 16:40:07 GMT
From:      Marko Zec <zec@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 122160 for review
Message-ID:  <200706221640.l5MGe7R0032260@repoman.freebsd.org>

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

Change 122160 by zec@zec_tca51 on 2007/06/22 16:39:47

	Fix a few bugs introduced by recent integrations from HEAD, i.e.
	remove a few variables from global namespace that have already
	been virtualized.

Affected files ...

.. //depot/projects/vimage/src/sys/netinet/in.c#9 edit
.. //depot/projects/vimage/src/sys/netinet/in_mcast.c#2 edit
.. //depot/projects/vimage/src/sys/netinet/tcp_hostcache.c#12 edit
.. //depot/projects/vimage/src/sys/netinet/tcp_subr.c#18 edit
.. //depot/projects/vimage/src/sys/netinet/vinet.h#16 edit

Differences ...

==== //depot/projects/vimage/src/sys/netinet/in.c#9 (text+ko) ====

@@ -67,19 +67,20 @@
 	    struct in_ifaddr *, struct sockaddr_in *, int);
 static void	in_purgemaddrs(struct ifnet *);
 
-static int subnetsarelocal = 0;
-SYSCTL_INT(_net_inet_ip, OID_AUTO, subnets_are_local, CTLFLAG_RW,
-	&subnetsarelocal, 0, "Treat all subnets as directly connected");
-static int sameprefixcarponly = 0;
-SYSCTL_INT(_net_inet_ip, OID_AUTO, same_prefix_carp_only, CTLFLAG_RW,
-	&sameprefixcarponly, 0,
-	"Refuse to create same prefixes on different interfaces");
-
 #ifndef VIMAGE
+static int subnetsarelocal;
+static int sameprefixcarponly;
 extern struct inpcbinfo ripcbinfo;
 extern struct inpcbinfo udbinfo;
 #endif
 
+SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_ip, OID_AUTO, subnets_are_local,
+	CTLFLAG_RW, subnetsarelocal, 0,
+	"Treat all subnets as directly connected");
+SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_ip, OID_AUTO, same_prefix_carp_only,
+	CTLFLAG_RW, sameprefixcarponly, 0,
+	"Refuse to create same prefixes on different interfaces");
+
 /*
  * Return 1 if an internet address is for a ``local'' host
  * (one to which we have a connection).  If subnetsarelocal
@@ -93,7 +94,7 @@
 	register u_long i = ntohl(in.s_addr);
 	register struct in_ifaddr *ia;
 
-	if (subnetsarelocal) {
+	if (V_subnetsarelocal) {
 		TAILQ_FOREACH(ia, &V_in_ifaddrhead, ia_link)
 			if ((i & ia->ia_netmask) == ia->ia_net)
 				return (1);
@@ -843,7 +844,7 @@
 		 * interface address, we are done here.
 		 */
 		if (ia->ia_flags & IFA_ROUTE) {
-			if (sameprefixcarponly &&
+			if (V_sameprefixcarponly &&
 			    target->ia_ifp->if_type != IFT_CARP &&
 			    ia->ia_ifp->if_type != IFT_CARP)
 				return (EEXIST);

==== //depot/projects/vimage/src/sys/netinet/in_mcast.c#2 (text+ko) ====

@@ -89,7 +89,9 @@
  * ip_output() to send IGMP packets while holding the lock; this probably is
  * not quite desirable.
  */
+#ifndef VIMAGE
 struct in_multihead in_multihead;	/* XXX BSS initialization */
+#endif
 struct mtx in_multi_mtx;
 MTX_SYSINIT(in_multi_mtx, &in_multi_mtx, "in_multi_mtx", MTX_DEF | MTX_RECURSE);
 
@@ -314,6 +316,7 @@
 struct in_multi *
 in_addmulti(struct in_addr *ap, struct ifnet *ifp)
 {
+	INIT_VNET_INET(ifp->if_vnet);
 	struct in_multi *inm;
 
 	inm = NULL;
@@ -375,7 +378,7 @@
 		ninm->inm_ifma = ifma;
 		ninm->inm_refcount = 1;
 		ifma->ifma_protospec = ninm;
-		LIST_INSERT_HEAD(&in_multihead, ninm, inm_link);
+		LIST_INSERT_HEAD(&V_in_multihead, ninm, inm_link);
 
 		igmp_joingroup(ninm);
 

==== //depot/projects/vimage/src/sys/netinet/tcp_hostcache.c#12 (text+ko) ====

@@ -103,7 +103,9 @@
 #define TCP_HOSTCACHE_EXPIRE		60*60	/* one hour */
 #define TCP_HOSTCACHE_PRUNE		5*60	/* every 5 minutes */
 
+#ifndef VIMAGE
 static struct tcp_hostcache tcp_hostcache;
+#endif
 
 static struct callout tcp_hc_callout;
 
@@ -135,8 +137,8 @@
     CTLFLAG_RW, tcp_hostcache.expire, 0,
     "Expire time of TCP hostcache entries");
 
-SYSCTL_INT(_net_inet_tcp_hostcache, OID_AUTO, prune, CTLFLAG_RW,
-     &tcp_hostcache.prune, 0, "Time between purge runs");
+SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_tcp_hostcache, OID_AUTO, prune,
+     CTLFLAG_RW, tcp_hostcache.prune, 0, "Time between purge runs");
 
 SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_tcp_hostcache, OID_AUTO, purge,
     CTLFLAG_RW, tcp_hostcache.purgeall, 0,
@@ -179,7 +181,7 @@
 	V_tcp_hostcache.cache_limit =
 		V_tcp_hostcache.hashsize * V_tcp_hostcache.bucket_limit;
 	V_tcp_hostcache.expire = TCP_HOSTCACHE_EXPIRE;
-	tcp_hostcache.prune = TCP_HOSTCACHE_PRUNE;
+	V_tcp_hostcache.prune = TCP_HOSTCACHE_PRUNE;
 
 	TUNABLE_INT_FETCH("net.inet.tcp.hostcache.hashsize",
 		&V_tcp_hostcache.hashsize);
@@ -227,7 +229,7 @@
 	if (curvnet == &vnet_0) {
 #endif
 	callout_init(&tcp_hc_callout, CALLOUT_MPSAFE);
-	callout_reset(&tcp_hc_callout, tcp_hostcache.prune * hz, tcp_hc_purge, 0);
+	callout_reset(&tcp_hc_callout, V_tcp_hostcache.prune * hz, tcp_hc_purge, 0);
 #ifdef VIMAGE
 	}
 #endif
@@ -660,10 +662,15 @@
 				V_tcp_hostcache.hashbase[i].hch_length--;
 				V_tcp_hostcache.cache_count--;
 			} else
-				hc_entry->rmx_expire -= tcp_hostcache.prune;
+				hc_entry->rmx_expire -= V_tcp_hostcache.prune;
 		}
 		THC_UNLOCK(&V_tcp_hostcache.hashbase[i].hch_mtx);
 	}
 	VNET_ITERLOOP_END();
-	callout_reset(&tcp_hc_callout, tcp_hostcache.prune * hz, tcp_hc_purge, 0);
+
+	/* XXX Marko - FIXME! */
+	CURVNET_SET(&vnet_0);
+	INIT_VNET_INET(&vnet_0);
+	callout_reset(&tcp_hc_callout, V_tcp_hostcache.prune * hz, tcp_hc_purge, 0);
+	CURVNET_RESTORE();
 }

==== //depot/projects/vimage/src/sys/netinet/tcp_subr.c#18 (text+ko) ====

@@ -875,10 +875,9 @@
 void
 tcp_drain(void)
 {
-	VNET_ITERLOOP_BEGIN();
-	INIT_VNET_INET(vnet_iter);
-
 	if (do_tcpdrain) {
+		VNET_ITERLOOP_BEGIN();
+		INIT_VNET_INET(vnet_iter);
 		struct inpcb *inpb;
 		struct tcpcb *tcpb;
 		struct tseg_qent *te;
@@ -910,9 +909,8 @@
 			INP_UNLOCK(inpb);
 		}
 		INP_INFO_RUNLOCK(&V_tcbinfo);
+		VNET_ITERLOOP_END();
 	}
-
-	VNET_ITERLOOP_END();
 }
 
 /*
@@ -1453,10 +1451,12 @@
 #define ISN_STATIC_INCREMENT 4096
 #define ISN_RANDOM_INCREMENT (4096 - 1)
 
+#ifndef VIMAGE
 static u_char isn_secret[32];
 static int isn_last_reseed;
 static u_int32_t isn_offset, isn_offset_old;
 static MD5_CTX isn_ctx;
+#endif
 
 tcp_seq
 tcp_new_isn(struct tcpcb *tp)
@@ -1469,37 +1469,37 @@
 
 	ISN_LOCK();
 	/* Seed if this is the first use, reseed if requested. */
-	if ((isn_last_reseed == 0) || ((V_tcp_isn_reseed_interval > 0) &&
-	     (((u_int)isn_last_reseed + (u_int)V_tcp_isn_reseed_interval*hz)
+	if ((V_isn_last_reseed == 0) || ((V_tcp_isn_reseed_interval > 0) &&
+	     (((u_int)V_isn_last_reseed + (u_int)V_tcp_isn_reseed_interval*hz)
 		< (u_int)ticks))) {
-		read_random(&isn_secret, sizeof(isn_secret));
-		isn_last_reseed = ticks;
+		read_random(&V_isn_secret, sizeof(V_isn_secret));
+		V_isn_last_reseed = ticks;
 	}
 
 	/* Compute the md5 hash and return the ISN. */
-	MD5Init(&isn_ctx);
-	MD5Update(&isn_ctx, (u_char *) &tp->t_inpcb->inp_fport, sizeof(u_short));
-	MD5Update(&isn_ctx, (u_char *) &tp->t_inpcb->inp_lport, sizeof(u_short));
+	MD5Init(&V_isn_ctx);
+	MD5Update(&V_isn_ctx, (u_char *) &tp->t_inpcb->inp_fport, sizeof(u_short));
+	MD5Update(&V_isn_ctx, (u_char *) &tp->t_inpcb->inp_lport, sizeof(u_short));
 #ifdef INET6
 	if ((tp->t_inpcb->inp_vflag & INP_IPV6) != 0) {
-		MD5Update(&isn_ctx, (u_char *) &tp->t_inpcb->in6p_faddr,
+		MD5Update(&V_isn_ctx, (u_char *) &tp->t_inpcb->in6p_faddr,
 			  sizeof(struct in6_addr));
-		MD5Update(&isn_ctx, (u_char *) &tp->t_inpcb->in6p_laddr,
+		MD5Update(&V_isn_ctx, (u_char *) &tp->t_inpcb->in6p_laddr,
 			  sizeof(struct in6_addr));
 	} else
 #endif
 	{
-		MD5Update(&isn_ctx, (u_char *) &tp->t_inpcb->inp_faddr,
+		MD5Update(&V_isn_ctx, (u_char *) &tp->t_inpcb->inp_faddr,
 			  sizeof(struct in_addr));
-		MD5Update(&isn_ctx, (u_char *) &tp->t_inpcb->inp_laddr,
+		MD5Update(&V_isn_ctx, (u_char *) &tp->t_inpcb->inp_laddr,
 			  sizeof(struct in_addr));
 	}
-	MD5Update(&isn_ctx, (u_char *) &isn_secret, sizeof(isn_secret));
-	MD5Final((u_char *) &md5_buffer, &isn_ctx);
+	MD5Update(&V_isn_ctx, (u_char *) &V_isn_secret, sizeof(V_isn_secret));
+	MD5Final((u_char *) &md5_buffer, &V_isn_ctx);
 	new_isn = (tcp_seq) md5_buffer[0];
-	isn_offset += ISN_STATIC_INCREMENT +
+	V_isn_offset += ISN_STATIC_INCREMENT +
 		(arc4random() & ISN_RANDOM_INCREMENT);
-	new_isn += isn_offset;
+	new_isn += V_isn_offset;
 	ISN_UNLOCK();
 	return (new_isn);
 }
@@ -1515,12 +1515,15 @@
 	u_int32_t projected_offset;
 
 	ISN_LOCK();
-	projected_offset = isn_offset_old + ISN_BYTES_PER_SECOND / 100;
+	VNET_ITERLOOP_BEGIN();
+	INIT_VNET_INET(curvnet);
+	projected_offset = V_isn_offset_old + ISN_BYTES_PER_SECOND / 100;
 
-	if (projected_offset > isn_offset)
-		isn_offset = projected_offset;
+	if (projected_offset > V_isn_offset)
+		V_isn_offset = projected_offset;
 
-	isn_offset_old = isn_offset;
+	V_isn_offset_old = V_isn_offset;
+	VNET_ITERLOOP_END();
 	callout_reset(&isn_callout, hz/100, tcp_isn_tick, NULL);
 	ISN_UNLOCK();
 }

==== //depot/projects/vimage/src/sys/netinet/vinet.h#16 (text+ko) ====

@@ -36,6 +36,7 @@
 #ifdef VIMAGE
 #include <sys/socketvar.h>
 #include <sys/sysctl.h>
+#include <sys/md5.h>
 
 #include <netinet/in.h>
 #include <netinet/in_systm.h>
@@ -65,6 +66,8 @@
 	int	_arp_maxtries;
 	int	_useloopback;
 	int	_arp_proxyall;
+	int	_subnetsarelocal;
+	int	_sameprefixcarponly;
 
 	int	_ipforwarding;
 	int	_ipfastforward_active;
@@ -128,6 +131,12 @@
 	int	_tcp_reass_maxqlen;
 	int	_tcp_reass_overflows;
 
+	u_char	_isn_secret[32];
+	int	_isn_last_reseed;
+	u_int32_t _isn_offset;
+	u_int32_t _isn_offset_old;
+	MD5_CTX	_isn_ctx;
+
 	struct	inpcbhead _udb;
 	struct	inpcbinfo _udbinfo;
 	struct	udpstat	_udpstat;
@@ -191,6 +200,8 @@
 #define V_arp_maxtries		VNET_INET(arp_maxtries)
 #define V_useloopback		VNET_INET(useloopback)
 #define V_arp_proxyall		VNET_INET(arp_proxyall)
+#define V_subnetsarelocal	VNET_INET(subnetsarelocal)
+#define V_sameprefixcarponly	VNET_INET(sameprefixcarponly)
 
 #define V_ipforwarding		VNET_INET(ipforwarding)
 #define V_ipfastforward_active	VNET_INET(ipfastforward_active)
@@ -254,6 +265,12 @@
 #define V_tcp_reass_maxqlen	VNET_INET(tcp_reass_maxqlen)
 #define V_tcp_reass_overflows	VNET_INET(tcp_reass_overflows)
 
+#define V_isn_secret		VNET_INET(isn_secret)
+#define V_isn_last_reseed	VNET_INET(isn_last_reseed)
+#define V_isn_offset		VNET_INET(isn_offset)
+#define V_isn_offset_old	VNET_INET(isn_offset_old)
+#define V_isn_ctx		VNET_INET(isn_ctx)
+
 #define V_udb			VNET_INET(udb)
 #define V_udbinfo		VNET_INET(udbinfo)
 #define V_udpstat		VNET_INET(udpstat)



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