Date: Wed, 15 Jul 2009 16:38:37 GMT From: Ana Kukec <anchie@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 166137 for review Message-ID: <200907151638.n6FGcba7002056@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=166137 Change 166137 by anchie@anchie_malimis on 2009/07/15 16:38:14 Pass mbuf containing SEND message to if_output(). Affected files ... .. //depot/projects/soc2009/anchie_send/src/sys/net/rtsock.c#8 edit .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/nd6.c#15 edit .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.c#16 edit .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.h#15 edit Differences ... ==== //depot/projects/soc2009/anchie_send/src/sys/net/rtsock.c#8 (text+ko) ==== @@ -506,7 +506,6 @@ info.rti_info[RTAX_DST]->sa_family >= AF_MAX || (info.rti_info[RTAX_GATEWAY] != NULL && info.rti_info[RTAX_GATEWAY]->sa_family >= AF_MAX)) { - printf("EINVAL 3"); senderr(EINVAL); } } @@ -525,7 +524,12 @@ case RTM_SND: printf("RTM_SND!"); - + m_adj(m, sizeof (struct rt_msghdr)); + printf("rtm->rtm_index = %d\n", rtm->rtm_index); + ifp = ifnet_byindex(rtm->rtm_index); + if (ifp) + send_output_hook(m, ifp, SND_OUT); + break; case RTM_ADD: if (info.rti_info[RTAX_GATEWAY] == NULL) senderr(EINVAL); ==== //depot/projects/soc2009/anchie_send/src/sys/netinet6/nd6.c#15 (text+ko) ==== @@ -113,8 +113,8 @@ static struct sockaddr_in6 all1_sa; -int (*send_input_hook)(struct mbuf*, struct ifnet *, int, int); -int (*send_output_hook)(void); +int (*send_input_hook)(struct mbuf *, struct ifnet *, int, int); +int (*send_output_hook)(struct mbuf *, struct ifnet *, int); static int nd6_is_new_addr_neighbor __P((struct sockaddr_in6 *, struct ifnet *)); @@ -1958,12 +1958,11 @@ */ if ((ifp->if_flags & IFF_LOOPBACK) != 0) { - printf("%s %d: if_output()...\n", __FUNCTION__, __LINE__); return ((*ifp->if_output)(origifp, m, (struct sockaddr *)dst, NULL)); } + error = (*ifp->if_output)(ifp, m, (struct sockaddr *)dst, NULL); printf("%s %d: nakon if_output()\n", __FUNCTION__, __LINE__); - error = (*ifp->if_output)(ifp, m, (struct sockaddr *)dst, NULL); } return (error); ==== //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.c#16 (text+ko) ==== @@ -4,24 +4,40 @@ #include <sys/module.h> #include <sys/kernel.h> #include <sys/systm.h> +#include <sys/types.h> #include <sys/socket.h> #include <sys/mbuf.h> +#include <netinet/in.h> +#include <netinet/ip6.h> + #include <net/route.h> +#include <net/if.h> #include <netinet6/send.h> +#include <netinet6/ip6_var.h> static int -send_output-ok(void) +send_output(struct mbuf *m, struct ifnet *ifp, int in) { + struct ip6_hdr *ip6; + + printf("send_output\n"); /* - * Receive incoming (SEND-protected) or outgoing traffic (SEND-validated) - * from the SEND user space application. + * Receive incoming (SEND-protected) or outgoing traffic + * (SEND-validated) from the SEND user space application. * Outgoing packets are sent out using if_output(). - */ + */ + + ip6 = mtod(m, struct ip6_hdr *); + struct in6_addr dst = ip6->ip6_dst; - return (0); + /* + * From nd6.c: nd6_output_lle(). + * ToFix: kernel panic: Duplicate free of item (mbuf). + */ + return (*ifp->if_output)(ifp, m, (struct sockaddr *)&dst, NULL); } static int ==== //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.h#15 (text+ko) ==== @@ -1,6 +1,6 @@ /* send.c */ extern int (*send_input_hook)(struct mbuf *, struct ifnet *, int, int); -extern int (*send_output_hook)(void); +extern int (*send_output_hook)(struct mbuf *, struct ifnet *, int); /* Message formats for messages from ND to applications (i.e. sendd) via the * routing socket. These messages are appended to an if_announcemsghdr
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907151638.n6FGcba7002056>