PERFORCE change 176257 for review
Ana Kukec
anchie at FreeBSD.org
Mon Mar 29 20:03:03 UTC 2010
http://p4web.freebsd.org/chv.cgi?CH=176257
Change 176257 by anchie at anchie_malimis on 2010/03/29 20:02:52
Partial cleanup. Tring to get read of panic in soreceive_generic() after
sbappendrecord_locked() on SEND socket.
Affected files ...
.. //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.c#35 edit
Differences ...
==== //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.c#35 (text+ko) ====
@@ -210,19 +210,19 @@
sosend_rcv(struct socket *so, int flags, struct mbuf *m, struct sockaddr *nam,
struct mbuf *control, struct thread *td)
{
- struct ifnet *ifp;
+ //struct ifnet *ifp = NULL;
struct snd_hdr *snd_hdr;
- int if_index;
printf("sosend_rcv \n");
snd_hdr = mtod(m, struct snd_hdr *);
- if_index = snd_hdr->ifidx;
printf("direction: %d, ifidx: %d \n", snd_hdr->direction, snd_hdr->ifidx);
+ //send_ifnet_setbyindex(snd_hdr->ifidx, ifp);
#if 0
ifnet_setbyindex(snd_hdr->ifidx, ifp);
m_adj(n, sizeof(struct snd_hdr));
- send_output_hook(m, ifp, snd_hdr->direction);
+ if (ifp)
+ send_output_hook(m, ifp, snd_hdr->direction);
#endif
return 0;
@@ -235,9 +235,10 @@
send_sendso_input(struct socket *s, struct mbuf *m, int direction, int msglen)
{
u_int len;
- void *data;
struct ip6_hdr *ip6;
struct snd_hdr *snd_hdr;
+
+printf("send_sendso_input \n");
/*
* Make sure to clear any possible internally embedded scope before
@@ -252,26 +253,19 @@
if (len != msglen)
printf("XXX-BZ %s: (m)len=%u (ip6)msglen=%d", __func__, len, msglen);
- /*
- * XXX-BZ we can save the alloc/free here if not relying on rtsock.c:rt_msg3()
- * but using a version operating on mbuf-to-mbuf copy.
- */
- data = malloc(msglen, M_SEND, M_NOWAIT);
- if (data == NULL) {
- m_freem(m);
- return (ENOBUFS);
- }
+ M_PREPEND(m, SEND_HDR_LEN, M_DONTWAIT);
+ if (m == NULL) {
+ m_freem(m);
+ return (ENOBUFS);
+ }
- m_copydata(m, 0, msglen, data);
+ m->m_flags &= M_PKTHDR;
+printf("MLEN: %d, MHLEN: %d, SEND_HDR_LEN: %d \n", MLEN, MHLEN, SEND_HDR_LEN);
- M_PREPEND(m, SEND_HDR_LEN, M_DONTWAIT);
- if ((m == NULL && (m = m_pullup(m, len + SEND_HDR_LEN)) == NULL)) {
- m_freem(m);
- return (ENOBUFS);
- }
- snd_hdr = mtod(m, struct snd_hdr *);
- snd_hdr->direction = direction;
- snd_hdr->ifidx = -1;
+ snd_hdr = mtod(m, struct snd_hdr *);
+ snd_hdr->direction = direction;
+ snd_hdr->ifidx = -1;
+printf("direction: %d \n", snd_hdr->direction);
/*
* Send incoming or outgoing traffic to the user space either to be
@@ -281,11 +275,9 @@
SOCKBUF_LOCK(&s->so_rcv);
sbappendrecord_locked(&s->so_rcv, m);
sorwakeup_locked(s);
+printf("Nakon sorwakeup \n");
return 0;
- }
-
- m_freem(m);
- free(data, M_SEND);
+ }
return -1;
}
@@ -301,9 +293,8 @@
}
struct pr_usrreqs send_usrreqs = {
- // Read sys/kern/uipc_socket.c
.pru_attach = send_uattach,
- .pru_send = sosend_rcv,
+ .pru_send = sosend_rcv,
.pru_detach = send_close
};
@@ -325,7 +316,6 @@
error = pf_proto_register(PF_INET, &send_protosw);
if (error != 0)
break;
-printf("pf_proto_register() OK\n");
send_output_hook = send_output;
send_input_hook = send_input;
More information about the p4-projects
mailing list