PERFORCE change 176401 for review

Ana Kukec anchie at FreeBSD.org
Thu Apr 1 11:34:10 UTC 2010


http://p4web.freebsd.org/chv.cgi?CH=176401

Change 176401 by anchie at anchie_malimis on 2010/04/01 11:33:21

	Got rid of the bug in netinet6/nd6.c: nd_option() -- NDP option len was 
	not set properly. Now, both basic scenarion and router scenario work
	well.
	
	The code with the native SEND socket is still partially mixed with the 
	the code with the routing socket.	
	
	There might be also some mem leakages (netinet6/send.c when copying and
	moving new mbuf header to the old mbuf chain, etc..).

Affected files ...

.. //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.c#39 edit

Differences ...

==== //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.c#39 (text+ko) ====

@@ -162,7 +162,7 @@
 		return (EEXIST);
 
 	/* XXX: Revisit this, hardocoded! */
-	//so->so_snd.sb_hiwat = 8192;
+	/* so->so_snd.sb_hiwat = 8192; */
 
 	V_send_so = so;
  
@@ -176,10 +176,12 @@
 	struct ifnet *ifp;
 	struct snd_hdr *snd_hdr;
 
-	printf("sosend_rcv, mbuf len: %d \n", m->m_len);
+printf("sosend_rcv, mbuf len: %d \n", m->m_len);
 
 	snd_hdr = mtod(m, struct snd_hdr *);
-	printf("direction: %d, ifidx: %d \n", snd_hdr->direction, snd_hdr->ifidx);
+
+	int mlen = m->m_len;
+	int mpkthdrlen = m->m_pkthdr.len;
 
 	struct mbuf *m0;
 	m0 = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR);
@@ -189,8 +191,12 @@
 	}
 	m_move_pkthdr(m, m0);
 
+	m->m_len = mlen;
+	m->m_pkthdr.len = mpkthdrlen;
+
 	ifp = ifnet_byindex_ref(snd_hdr->ifidx);
 	m_adj(m, SEND_HDR_LEN);
+	m_fixhdr(m);
 	if (ifp) {
 		int error = send_output(m, ifp, snd_hdr->direction);
 		printf("error: %d\n", error);
@@ -224,7 +230,7 @@
         len = m_length(m, NULL);
         if (len != msglen)
                 printf("XXX-BZ %s: (m)len=%u (ip6)msglen=%d", __func__, len, msglen);
-                        
+
 	m = m_prepend(m, SEND_HDR_LEN, M_PKTHDR|M_DONTWAIT);
 	if (m == NULL) {
 		printf("m_prepend() failed!\n");
@@ -255,17 +261,17 @@
 send_close(struct socket *so)
 {
 	if (V_send_so)
-	V_send_so = NULL;
+		V_send_so = NULL;
 }
 
 struct pr_usrreqs send_usrreqs = {
 	.pru_attach =		send_uattach,
-	.pru_send =			sosend_rcv,
+	.pru_send =		sosend_rcv,
 	.pru_detach =		send_close
 };
 
 struct protosw send_protosw = {
-	.pr_type =			SOCK_RAW,
+	.pr_type =		SOCK_RAW,
 	.pr_protocol =		IPPROTO_SEND,
 	.pr_usrreqs =		&send_usrreqs
 };
@@ -282,20 +288,12 @@
 		error = pf_proto_register(PF_INET, &send_protosw);
 		if (error != 0)
 			break;
-
-		send_output_hook = send_output;
-		send_input_hook = send_input;
-
 		send_sendso_input_hook = send_sendso_input;
 		break;
-
 	case MOD_UNLOAD:
 		if (V_send_so != NULL)
 			return (EINVAL);
 		error = pf_proto_unregister(PF_INET, IPPROTO_SEND, SOCK_RAW);
-		send_input_hook = NULL;
-		send_output_hook = NULL;
-
 		send_sendso_input_hook = NULL;
 		break;
 


More information about the p4-projects mailing list