From owner-p4-projects@FreeBSD.ORG Wed Jul 1 16:43:17 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 216171065678; Wed, 1 Jul 2009 16:43:17 +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 D4631106566C for ; Wed, 1 Jul 2009 16:43:16 +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 C13D08FC28 for ; Wed, 1 Jul 2009 16:43:16 +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 n61GhGfq026329 for ; Wed, 1 Jul 2009 16:43:16 GMT (envelope-from anchie@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n61GhGCh026326 for perforce@freebsd.org; Wed, 1 Jul 2009 16:43:16 GMT (envelope-from anchie@FreeBSD.org) Date: Wed, 1 Jul 2009 16:43:16 GMT Message-Id: <200907011643.n61GhGCh026326@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 165506 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: Wed, 01 Jul 2009 16:43:18 -0000 http://perforce.freebsd.org/chv.cgi?CH=165506 Change 165506 by anchie@anchie_malimis on 2009/07/01 16:43:01 Editorial changes. New function (net/rtsock.c: rt_msg3()) in order to avoide the duplication of the code in rt_ieee80211msg() and rt_securendmsg(). Affected files ... .. //depot/projects/soc2009/anchie_send/src/sys/net/route.h#5 edit .. //depot/projects/soc2009/anchie_send/src/sys/net/rtsock.c#5 edit .. //depot/projects/soc2009/anchie_send/src/sys/netinet/icmp6.h#8 edit .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/icmp6.c#13 edit .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/nd6.c#11 edit .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/nd6_rtr.c#5 edit .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.c#11 edit .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.h#11 edit .. //depot/projects/soc2009/anchie_send/src/sys/sys/mbuf.h#5 edit Differences ... ==== //depot/projects/soc2009/anchie_send/src/sys/net/route.h#5 (text+ko) ==== @@ -234,7 +234,6 @@ u_long rtm_inits; /* which metrics we are initializing */ struct rt_metrics rtm_rmx; /* metrics themselves */ }; - #define RTM_VERSION 5 /* Up the ante and ignore older versions */ /* @@ -380,7 +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_securendmsg(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#5 (text+ko) ==== @@ -1,4 +1,4 @@ -/*- +/* * Copyright (c) 1988, 1991, 1993 * The Regents of the University of California. All rights reserved. * @@ -60,12 +60,11 @@ #include #include -#include - #include #ifdef INET6 #include #endif +#include #if defined(INET) || defined(INET6) #ifdef SCTP @@ -106,6 +105,7 @@ static struct mbuf *rt_msg1(int type, struct rt_addrinfo *rtinfo); static int rt_msg2(int type, struct rt_addrinfo *rtinfo, caddr_t cp, struct walkarg *w); +static void rt_msg3(struct mbuf *, void *, size_t); static int rt_xaddrs(caddr_t cp, caddr_t cplim, struct rt_addrinfo *rtinfo); static int sysctl_dumpentry(struct radix_node *rn, void *vw); @@ -1179,23 +1179,37 @@ * Generation of the routing socket message indicating SeND event. */ void -rt_sndmsg(struct ifnet *ifp, int in, void *data, size_t data_len) +rt_securendmsg(struct ifnet *ifp, int direction, void *data, size_t data_len) { struct mbuf *m; struct rt_addrinfo info; - if (in) { - /* Incoming traffic sent to userspace for SeND validation */ + switch (direction) { + case SEND_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 */ + break; + case SEND_OUT: + /* Outgoing traffic sent to userspace for SeND protection. */ m = rt_makeifannouncemsg(ifp, RTM_SND, RTM_SND_OUT, &info); + break; } + + rt_msg3(m, data, data_len); +} + +void +rt_msg3(struct mbuf *m, void *data, size_t data_len) +{ if (m != NULL) { /* - * Append ND/SeND message to ifannounce hdr. - * Taken from rt_ieee80211msg(). + * Append the ieee80211 or ND/SEND data. Try to stick it in the + * mbuf containing the ifannounce msg; otherwise allocate + * a new mbuf and append. + * + * NB: we assume m is a single mbuf. */ + if (data_len > M_TRAILINGSPACE(m)) { struct mbuf *n = m_get(M_NOWAIT, MT_DATA); if (n == NULL) { @@ -1228,6 +1242,10 @@ struct rt_addrinfo info; m = rt_makeifannouncemsg(ifp, RTM_IEEE80211, what, &info); + + rt_msg3(m, data, data_len); + +#if 0 if (m != NULL) { /* * Append the ieee80211 data. Try to stick it in the @@ -1254,6 +1272,7 @@ mtod(m, struct if_announcemsghdr *)->ifan_msglen += data_len; rt_dispatch(m, NULL); } +#endif } /* ==== //depot/projects/soc2009/anchie_send/src/sys/netinet/icmp6.h#8 (text+ko) ==== ==== //depot/projects/soc2009/anchie_send/src/sys/netinet6/icmp6.c#13 (text+ko) ==== @@ -412,8 +412,6 @@ int in; int ip6len; - in = 1; - ifp = m->m_pkthdr.rcvif; #ifndef PULLDOWN_TEST @@ -767,17 +765,18 @@ if ((n = m_copym(m, 0, M_COPYALL, M_DONTWAIT)) == NULL) { /* give up local */ - /* send incoming SeND-protected/ND packet to sendd */ - if (send_output_hook != NULL) { - send_output_hook(in, ifp, m, ip6len); - } else { + /* Send incoming SeND-protected/ND packet to user space. */ + if (send_output_hook != NULL) + send_output_hook(m, ifp, SND_IN, ip6len); + else { + /* give up local */ nd6_rs_input(m, off, icmp6len); } m = NULL; goto freeit; } if (send_output_hook != NULL) - send_output_hook(in, ifp, n, ip6len); + send_output_hook(n, ifp, SND_IN, ip6len); else nd6_rs_input(n, off, icmp6len); /* m stays. */ @@ -791,18 +790,16 @@ goto badlen; if ((n = m_copym(m, 0, M_COPYALL, M_DONTWAIT)) == NULL) { - /* send incoming SeND-protected/ND packet to sendd */ - if (send_output_hook != NULL) { - send_output_hook(in, ifp, m, ip6len); - } else { - /* give up local */ + /* Send incoming SeND-protected/ND packet to user space. */ + if (send_output_hook != NULL) + send_output_hook(m, ifp, SND_IN, ip6len); + else nd6_ra_input(m, off, icmp6len); - } m = NULL; goto freeit; } if (send_output_hook != NULL) - send_output_hook(in, ifp, n, ip6len); + send_output_hoo(n, ifp, SND_IN, ip6len); else nd6_ra_input(n, off, icmp6len); /* m stays. */ @@ -816,23 +813,20 @@ goto badlen; if ((n = m_copym(m, 0, M_COPYALL, M_DONTWAIT)) == NULL) { - /* send incoming SeND-protected/ND packet to sendd */ - if (send_output_hook != NULL) { - send_output_hook(in, ifp, m, ip6len); - /* nd6_ns_input() will be called in X_send_input_hook() */ - } else { + /* Send incoming SeND-protected/ND packet to user space. */ + if (send_output_hook != NULL) + send_output_hook(m, ifp, SND_IN, ip6len); + else { /* give up local */ nd6_ns_input(m, off, icmp6len); } m = NULL; goto freeit; } - if (send_output_hook != NULL) { - send_output_hook(in, ifp, n, ip6len); - /* nd6_ns_input() will be called in X_send_input_hook() */ - } else { + if (send_output_hook != NULL) + send_output_hook(n, ifp, SND_IN, ip6len); + else nd6_ns_input(n, off, icmp6len); - } /* m stays. */ break; @@ -844,10 +838,10 @@ goto badlen; if ((n = m_copym(m, 0, M_COPYALL, M_DONTWAIT)) == NULL) { - /* send incoming SeND-protected/ND packet to sendd */ - if (send_output_hook != NULL) { - send_output_hook(in, ifp, m, ip6len); - } else { + /* Send incoming SeND-protected/ND packet to user space. */ + if (send_output_hook != NULL) + send_output_hook(m, ifp, SND_IN, ip6len); + else { /* give up local */ nd6_na_input(m, off, icmp6len); } @@ -855,7 +849,7 @@ goto freeit; } if (send_output_hook != NULL) - send_output_hook(in, ifp, n, ip6len); + send_output_hook(n, ifp, SND_IN, ip6len); else nd6_na_input(n, off, icmp6len); /* m stays. */ @@ -869,10 +863,10 @@ goto badlen; if ((n = m_copym(m, 0, M_COPYALL, M_DONTWAIT)) == NULL) { - /* send incoming SeND-protected/ND packet to sendd */ - if (send_output_hook != NULL) { - send_output_hook(in, ifp, m, ip6len); - } else { + /* Send incoming SeND-protected/ND packet to user space. */ + if (send_output_hook != NULL) + send_output_hook(m, ifp, SND_IN, ip6len); + else { /* give up local */ icmp6_redirect_input(m, off); } @@ -880,24 +874,12 @@ goto freeit; } if (send_output_hook != NULL) - send_output_hook(in, ifp, n, ip6len); + send_output_hook(n, ifp, SND_IN, ip6len); else icmp6_redirect_input(n, off); /* m stays. */ break; -#if 0 - case SEND_CERT_PATH_SOLICIT: - /* send CPS packet to sendd */ - send6_cps_input(); - break; - - case SEND_CERT_PATH_ADVERT: - /* send CPA packet to sendd */ - send6_cpa_input(); - break; -#endif - case ICMP6_ROUTER_RENUMBERING: if (code != ICMP6_ROUTER_RENUMBERING_COMMAND && code != ICMP6_ROUTER_RENUMBERING_RESULT) ==== //depot/projects/soc2009/anchie_send/src/sys/netinet6/nd6.c#11 (text+ko) ==== @@ -113,8 +113,8 @@ static struct sockaddr_in6 all1_sa; -int (*send_output_hook)(int, struct ifnet *, struct mbuf *, int) = NULL; -int (*send_input_hook)(void) = NULL; +int (*send_output_hook)(struct mbuf*, struct ifnet *, int, int); +int (*send_input_hook)(void); static int nd6_is_new_addr_neighbor __P((struct sockaddr_in6 *, struct ifnet *)); @@ -1733,7 +1733,7 @@ printf("%s %d\n", __FUNCTION__, __LINE__); ip6 = mtod(m, struct ip6_hdr *); - ip6len = ntohs(ip6->ip6_plen) + sizeof(struct ip6_hdr); + ip6len = sizeof(struct ip6_hdr) + ntohs(ip6->ip6_plen); #ifdef INVARIANTS if (lle != NULL) { @@ -1910,16 +1910,16 @@ mac_netinet6_nd6_send(ifp, m); #endif - /* send outgoing NS/NA/RS/RA/REDIRECT packet to sendd. */ + /* send outgoing NS/NA/REDIRECT packet to sendd. */ if (send_output_hook != NULL) { mtag = m_tag_find(m, PACKET_TAG_ND_OUTGOING, NULL); if (mtag != NULL) { printf("%s %d: ND_OUTGOING tag found.\n", __FUNCTION__, __LINE__); nd_type = (unsigned short *)(mtag + 1); } else - return(error); + return(ENOMSG); - send_output_hook(0, ifp, m, ip6len); + send_output_hook(m, ifp, 0, ip6len); } else { /* @@ -1930,7 +1930,7 @@ * after the lock is dropped */ - /* This will be done in the input hook.. */ + /* This will be done in the input hook. */ if (lle != NULL) { if (*chain == NULL) *chain = m; @@ -1952,7 +1952,8 @@ * or nd6_na_output(). RS, RA, and Redirect do not have such output * routines. They are handled instead by rtadvd and rtsol daemons. * - * if_output() routines together with previous chaining will be called from input hook. + * if_output() routines together with previous chaining will be called + * from input hook. */ if ((ifp->if_flags & IFF_LOOPBACK) != 0) { ==== //depot/projects/soc2009/anchie_send/src/sys/netinet6/nd6_rtr.c#5 (text+ko) ==== @@ -425,27 +425,6 @@ m_freem(m); } -#if 0 -/* - * Receive Certification Path Solicitation [rfc3971]. - */ -void -send6_cps_input(struct mbuf *m, int off, int icmp6len) -{ -} - -/* - * Receive Certification Path Advertisement [rfc3971]. - */ -void -send6_cpa_input(struct mbuf *m, int off, int icmp6len) -{ -} - -/* send6_cps/cpa_output() should be places here as well.. */ -#endif - - /* * default router list proccessing sub routines */ ==== //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.c#11 (text+ko) ==== @@ -4,53 +4,48 @@ #include #include #include +#include -#include #include #include -#if 0 -static int X_send_input_hook(void); -static int X_send_output_hook(int, struct ifnet *, struct mbuf *, int); -#endif -#if 0 -int (*send_output_hook)(int, struct ifnet *, struct mbuf *, int); -int (*send_input_hook)(void); -#endif - static int -X_send_input_hook(void) +send_input(void) { /* - * send module is loaded, process incoming packets passed from - * sendd to kernel. Outgoing packets are sent out using if_output(). + * Receive incoming (SEND-protected) or outgoing traffic (SEND-validated) + * from the SEND user space application. + * Outgoing packets are sent out using if_output(). */ - return 0; + return (0); } static int -X_send_output_hook(int in, struct ifnet *ifp, struct mbuf *m, int msglen) +send_output(int in, struct ifnet *ifp, struct mbuf *m, int msglen) { - /* send module is loaded, send incoming or outgoing traffic to sendd */ + + /* + * Send incoming or outgoing traffic to the user space either to be + * protected (outgoing) or validated (incoming) according to rfc3971. */ rt_sndmsg(ifp, in, m, msglen); - return 0; + return (0); } static int send_modevent(module_t mod, int type, void *unused) { - int err = 0; + int error = 0; /* Add locking? icmp6.c and nd6.c are maybe using hooks.. */ switch (type) { case MOD_LOAD: - send_output_hook = X_send_output_hook; - send_input_hook = X_send_input_hook; + send_output_hook = send_output; + send_input_hook = send_input; break; case MOD_UNLOAD: @@ -61,7 +56,7 @@ default: break; } - return err; + return (0); } static moduledata_t sendmod = { ==== //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.h#11 (text+ko) ==== @@ -1,11 +1,14 @@ /* send.c */ -extern int (*send_output_hook)(int, struct ifnet *, struct mbuf *, int); +extern int (*send_output_hook)(struct mbuf *, struct ifnet *, int, int); extern int (*send_input_hook)(void); -/* Message formats for messages from ND to applications (sendd) via the +/* Message formats for messages from ND to applications (i.e. sendd) via the * routing socket. These messages are appended to an if_announcemsghdr * structure. */ -#define RTM_SND_OUT 0 /* outgoing traffic sent to sendd */ -#define RTM_SND_IN 1 /* incoming traffic sent to sendd */ +#define SEND_OUT 0 /* outgoing traffic sent to sendd */ +#define SEND_IN 1 + +#define RTM_SND_OUT 0 /* outgoing traffic with RTM header sent to sendd */ +#define RTM_SND_IN 1 /* incoming traffic with RTM header sent to sendd */ ==== //depot/projects/soc2009/anchie_send/src/sys/sys/mbuf.h#5 (text+ko) ==== @@ -899,7 +899,7 @@ #define PACKET_TAG_IPOPTIONS 27 /* Saved IP options */ #define PACKET_TAG_CARP 28 /* CARP info */ #define PACKET_TAG_IPSEC_NAT_T_PORTS 29 /* two uint16_t */ -#define PACKET_TAG_ND_OUTGOING 30 /* ND outgoing */ +#define PACKET_TAG_ND_OUTGOING 30 /* ND outgoing */ /* Specific cookies and tags. */