From owner-p4-projects@FreeBSD.ORG Sat Jun 13 12:58:35 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 69DE91065670; Sat, 13 Jun 2009 12:58:35 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 29C2C106564A for ; Sat, 13 Jun 2009 12:58:35 +0000 (UTC) (envelope-from anchie@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 1742B8FC1B for ; Sat, 13 Jun 2009 12:58:35 +0000 (UTC) (envelope-from anchie@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5DCwY2D042980 for ; Sat, 13 Jun 2009 12:58:34 GMT (envelope-from anchie@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5DCwYfl042976 for perforce@freebsd.org; Sat, 13 Jun 2009 12:58:34 GMT (envelope-from anchie@FreeBSD.org) Date: Sat, 13 Jun 2009 12:58:34 GMT Message-Id: <200906131258.n5DCwYfl042976@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to anchie@FreeBSD.org using -f From: Ana Kukec To: Perforce Change Reviews Cc: Subject: PERFORCE change 164264 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2009 12:58:36 -0000 http://perforce.freebsd.org/chv.cgi?CH=164264 Change 164264 by anchie@anchie_malimis on 2009/06/13 12:57:33 Introduction of the initial code for sending RTM_SND message to SeND userspace application. Affected files ... .. //depot/projects/soc2009/anchie_send/src/sys/net/route.h#2 edit .. //depot/projects/soc2009/anchie_send/src/sys/net/rtsock.c#2 edit .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/icmp6.c#5 edit .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.c#7 edit .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.h#7 edit Differences ... ==== //depot/projects/soc2009/anchie_send/src/sys/net/route.h#2 (text+ko) ==== @@ -258,6 +258,7 @@ #define RTM_DELMADDR 0x10 /* mcast group membership being deleted */ #define RTM_IFANNOUNCE 0x11 /* iface arrival/departure */ #define RTM_IEEE80211 0x12 /* IEEE80211 wireless event */ +#define RTM_SND 0x13 /* SeND event. */ /* * Bitmask values for rtm_inits and rmx_locks. @@ -378,6 +379,7 @@ struct ifmultiaddr; void rt_ieee80211msg(struct ifnet *, int, void *, size_t); +void rt_sndmsg(struct ifnet *, int, void *, size_t data_len); void rt_ifannouncemsg(struct ifnet *, int); void rt_ifmsg(struct ifnet *); void rt_missmsg(int, struct rt_addrinfo *, int, int); ==== //depot/projects/soc2009/anchie_send/src/sys/net/rtsock.c#2 (text+ko) ==== @@ -1153,6 +1153,47 @@ } /* + * Generation of the routing socket message indicating SeND event. + */ +void +rt_sndmsg(struct ifnet *ifp, int in, void *data, size_t data_len) +{ + struct mbuf *m; + struct rt_addrinfo info; + + if (in) { + /* Incoming traffic sent to userspace for SeND validation */ + m = rt_makeifannouncemsg(ifp, RTM_SND, RTM_SND_IN, &info); + } else { + /* Outgoing traffic sent to userspace for SeND protection */ + m = rt_makeifannouncemsg(ifp, RTM_SND, RTM_SND_OUT, &info); + } + if (m != NULL) { + /* + * Append ND/SeND message to ifannounce hdr. + * Taken from rt_ieee80211msg(). + */ + if (data_len > M_TRAILINGSPACE(m)) { + struct mbuf *n = m_get(M_NOWAIT, MT_DATA); + if (n == NULL) { + m_freem(m); + return; + } + bcopy(data, mtod(n, void *), data_len); + n->m_len = data_len; + m->m_next = n; + } else if (data_len > 0) { + bcopy(data, mtod(m, u_int8_t *) + m->m_len, data_len); + m->m_len += data_len; + } + if (m->m_flags & M_PKTHDR) + m->m_pkthdr.len += data_len; + mtod(m, struct if_announcemsghdr *)->ifan_msglen += data_len; + rt_dispatch(m, NULL); + } +} + +/* * This is called to generate routing socket messages indicating * IEEE80211 wireless events. * XXX we piggyback on the RTM_IFANNOUNCE msg format in a clumsy way. ==== //depot/projects/soc2009/anchie_send/src/sys/netinet6/icmp6.c#5 (text+ko) ==== @@ -410,6 +410,9 @@ int icmp6len = m->m_pkthdr.len - *offp; int code, sum, noff; char ip6bufs[INET6_ADDRSTRLEN], ip6bufd[INET6_ADDRSTRLEN]; + int in; + + in = 1; ifp = m->m_pkthdr.rcvif; @@ -803,13 +806,16 @@ /* send incoming SeND-protected/ND packet to sendd */ if (send_input_hook != NULL) - send_input_hook(); - + send_output_hook(in, ifp, m, icmp6len); /* give up local */ - nd6_ns_input(m, off, icmp6len); + /* nd6_ns_input() will be called in X_send_input_hook() */ + nd6_ns_input(in, m, off, icmp6len); m = NULL; goto freeit; } + if (send_output_hook != NULL) + send_output_hook(in, ifp, n, icmp6len); + /* nd6_ns_input() will be called in X_send_input_hook() */ nd6_ns_input(n, off, icmp6len); /* m stays. */ break; ==== //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.c#7 (text+ko) ==== @@ -9,13 +9,29 @@ #include -static int X_send_input_hook(void); +static int X_send_input_hook(void); +static int X_send_output_hook(int, struct ifnet *, struct mbuf *, int); + + static int X_send_input_hook(void) { - /* send module is loaded, send incoming packet to sendd */ + /* + * send module is loaded, process incoming packets passed from + * sendd to kernel. Outgoing packets are sent directly to + * corresponding node's sendd.(?) + */ + + return 0; +} + +static int +X_send_output_hook(int in, struct ifnet *ifp, struct mbuf *m, int icmp6len) +{ + /* send module is loaded, send incoming or outgoing traffic to sendd */ + rt_sndmsg(ifp, in, m, icmp6len); return 0; } @@ -27,7 +43,7 @@ switch (type) { case MOD_LOAD: - send_input_hook = X_send_input_hook; + send_output_hook = X_send_output_hook; break; case MOD_UNLOAD: ==== //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.h#7 (text+ko) ==== @@ -1,2 +1,12 @@ /* send.c */ -int (*send_input_hook)(struct mbuf *, int, int); +int (*send_output_hook)(int, struct ifnet *, struct mbuf *, int, int); + +/* Message formats for messages from ND to applications (sendd) via the + * routing socket. These messages are appended to an if_announcemsghdr + * structure. + */ +struct snd_message_event { +} + +#define RTM_SND_OUT 0 /* outgoing traffic sent to sendd */ +#define RTM_SND_IN 1 /* incoming traffic sent to sendd */