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