PERFORCE change 127598 for review

Marko Zec zec at FreeBSD.org
Tue Oct 16 04:48:52 PDT 2007


http://perforce.freebsd.org/chv.cgi?CH=127598

Change 127598 by zec at zec_tpx32 on 2007/10/16 11:48:38

	Introduce hooks for cleaning up TCP/UDP state.  The hooks
	are largely disfunctional and have yet to be populated with
	useful code.

Affected files ...

.. //depot/projects/vimage/src/sys/netinet/in_proto.c#9 edit
.. //depot/projects/vimage/src/sys/netinet/tcp_subr.c#34 edit
.. //depot/projects/vimage/src/sys/netinet/tcp_syncache.c#20 edit
.. //depot/projects/vimage/src/sys/netinet/tcp_syncache.h#7 edit
.. //depot/projects/vimage/src/sys/netinet/tcp_timewait.c#10 edit
.. //depot/projects/vimage/src/sys/netinet/tcp_var.h#18 edit
.. //depot/projects/vimage/src/sys/netinet/udp_usrreq.c#19 edit
.. //depot/projects/vimage/src/sys/netinet/udp_var.h#6 edit

Differences ...

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

@@ -119,6 +119,9 @@
 	.pr_ctlinput =		udp_ctlinput,
 	.pr_ctloutput =		ip_ctloutput,
 	.pr_init =		udp_init,
+#ifdef VIMAGE
+	.pr_destroy =		udp_destroy,
+#endif
 	.pr_usrreqs =		&udp_usrreqs
 },
 {
@@ -130,7 +133,9 @@
 	.pr_ctlinput =		tcp_ctlinput,
 	.pr_ctloutput =		tcp_ctloutput,
 	.pr_init =		tcp_init,
+#ifdef VIMAGE
 	.pr_destroy =		tcp_destroy,
+#endif
 	.pr_slowtimo =		tcp_slowtimo,
 	.pr_drain =		tcp_drain,
 	.pr_usrreqs =		&tcp_usrreqs

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

@@ -290,6 +290,7 @@
 #ifdef VIMAGE
 	}
 #endif
+
 	tcp_tw_init();
 
 	int hashsize = TCBHASHSIZE;
@@ -385,11 +386,24 @@
 		EVENTHANDLER_PRI_ANY);
 }
 
+#ifdef VIMAGE
 void
 tcp_destroy(void)
 {
+	INIT_VNET_INET(curvnet);
+
+	tcp_tw_destroy();
 	tcp_hc_destroy();
+	syncache_destroy();
+
+	/* XXX check that hashes are empty! */
+	hashdestroy(V_tcbinfo.ipi_hashbase, M_PCB,
+	    V_tcbinfo.ipi_hashmask);
+	hashdestroy(V_tcbinfo.ipi_porthashbase, M_PCB,
+	    V_tcbinfo.ipi_porthashmask);
+	INP_INFO_LOCK_DESTROY(&V_tcbinfo);
 }
+#endif
 
 void
 tcp_fini(void *xtp)

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

@@ -265,6 +265,19 @@
 	uma_zone_set_max(V_tcp_syncache.zone, V_tcp_syncache.cache_limit);
 }
 
+#ifdef VIMAGE
+void
+syncache_destroy(void)
+{
+	INIT_VNET_INET(curvnet);
+
+	/* XXX walk the cache, free remaining objects, stop timers */
+
+	uma_zdestroy(V_tcp_syncache.zone);
+	FREE(V_tcp_syncache.hashbase, M_SYNCACHE);
+}
+#endif
+
 /*
  * Inserts a syncache entry into the specified bucket row.
  * Locks and unlocks the syncache_head autonomously.

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

@@ -37,6 +37,9 @@
 #ifdef _KERNEL
 
 void	syncache_init(void);
+#ifdef VIMAGE
+void	syncache_destroy(void);
+#endif
 void	syncache_unreach(struct in_conninfo *, struct tcphdr *);
 int	syncache_expand(struct in_conninfo *, struct tcpopt *,
 	    struct tcphdr *, struct socket **, struct mbuf *);

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

@@ -183,6 +183,20 @@
 		uma_zone_set_max(tcptw_zone, maxtcptw);
 }
 
+#ifdef VIMAGE
+void
+tcp_tw_destroy(void)
+{
+	INIT_VNET_INET(curvnet);
+	struct tcptw *tw;
+
+	INP_INFO_WLOCK(&V_tcbinfo);
+	while((tw = TAILQ_FIRST(&V_twq_2msl)) != NULL)
+		tcp_twclose(tw, 0);
+	INP_INFO_WUNLOCK(&V_tcbinfo);
+}
+#endif
+
 /*
  * Move a TCP connection into TIME_WAIT state.
  *    tcbinfo is locked.

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

@@ -564,6 +564,9 @@
 void	 tcp_respond(struct tcpcb *, void *,
 	    struct tcphdr *, struct mbuf *, tcp_seq, tcp_seq, int);
 void	 tcp_tw_init(void);
+#ifdef VIMAGE
+void	 tcp_tw_destroy(void);
+#endif
 void	 tcp_tw_zone_change(void);
 int	 tcp_twcheck(struct inpcb *, struct tcpopt *, struct tcphdr *,
 	    struct mbuf *, int);

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

@@ -196,6 +196,20 @@
 	V_udbinfo.vnet = curvnet;
 }
 
+#ifdef VIMAGE
+void
+udp_destroy(void)
+{
+	INIT_VNET_INET(curvnet);
+
+	hashdestroy(V_udbinfo.ipi_hashbase, M_PCB,
+	    V_udbinfo.ipi_hashmask);
+	hashdestroy(V_udbinfo.ipi_porthashbase, M_PCB,
+	    V_udbinfo.ipi_porthashmask);
+	INP_INFO_LOCK_DESTROY(&V_udbinfo);
+}
+#endif
+
 /*
  * Subroutine of udp_input(), which appends the provided mbuf chain to the
  * passed pcb/socket.  The caller must provide a sockaddr_in via udp_in that

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

@@ -107,6 +107,9 @@
 
 void		 udp_ctlinput(int, struct sockaddr *, void *);
 void		 udp_init(void);
+#ifdef VIMAGE
+void		 udp_destroy(void);
+#endif
 void		 udp_input(struct mbuf *, int);
 struct inpcb	*udp_notify(struct inpcb *inp, int errno);
 int		 udp_shutdown(struct socket *so);


More information about the p4-projects mailing list