Date: Sun, 16 Aug 2009 19:46:43 GMT From: "Bjoern A. Zeeb" <bz@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 167414 for review Message-ID: <200908161946.n7GJkhZJ012831@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=167414 Change 167414 by bz@bz_zoo on 2009/08/16 19:46:39 - sort includes - make sre functions are defined before use to make the quieten compiler warnings. - save rtm_version, rtm_type and rtm_seq (direction) from the ifan to be able to send it back with the rtm. - remove a bit of dead code and polish debugging messages. Affected files ... .. //depot/projects/soc2009/anchie_send/send_0.2/sendd/net.c#24 edit Differences ... ==== //depot/projects/soc2009/anchie_send/send_0.2/sendd/net.c#24 (text+ko) ==== @@ -30,28 +30,35 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." */ -#include <stdio.h> -#include <string.h> -#include <errno.h> +#include <sys/param.h> #include <sys/types.h> +#include <sys/mbuf.h> #include <sys/socket.h> -#include <sys/param.h> -#include <sys/mbuf.h> + #include <arpa/inet.h> -#include <netinet/in.h> + +#include <net/if.h> #include <net/route.h> -#include <net/if.h> + #include <netinet/in.h> + #include <netinet6/send.h> + +#include <errno.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> + #include "config.h" -#include <applog.h> -#include <sbuff.h> #include "sendd_local.h" #include "os_specific.h" #include "snd_proto.h" #include "dbg.h" +#include <applog.h> +#include <sbuff.h> + static int icmp6sock = -1; static int sndsock = -1; @@ -63,6 +70,25 @@ static char abuf[INET6_ADDRSTRLEN]; #endif +/* Per-interface info */ +struct snd_ifinfo { + struct list_head list; + char name[32]; + int ifidx; + int snds; +}; +static DEFINE_LIST_HEAD(ifaces); + +/* Data packet meta data */ +struct snd_packet_info { + struct snd_ifinfo *ifinfo; + u_char rtm_version; + u_char rtm_type; + int rtm_seq; +}; + +void snd_sock_read(struct snd_ifinfo *p); + /* TODO: dynamically size according to MTU */ struct sbuff * snd_get_buf(void) @@ -77,21 +103,6 @@ return (b); } -/* Per-interface info */ -struct snd_ifinfo { - struct list_head list; - char name[32]; - int ifidx; - int snds; -}; -static DEFINE_LIST_HEAD(ifaces); - -/* Data packet meta data */ -struct snd_packet_info { - struct snd_ifinfo *ifinfo; - int in; -}; - void snd_dispatch_fds(fd_set *fds) { @@ -131,14 +142,13 @@ { struct snd_packet_info *pi; struct rt_msghdr *rtm; - struct ip6_hdr *ip6; if (drop) { snd_put_buf(b); return; } pi = (struct snd_packet_info *)(b->head); - DBG(&dbg_snd, "Direction, in = %d", pi->in); + DBG(&dbg_snd, "Direction, %s", (pi->rtm_seq == RTM_SND_OUT) ? "SND_OUT" : "SND_IN"); DBG(&dbg_snd, "rt_msghdr = %d, if_announcemsghdr = %d\n", sizeof (struct rt_msghdr), sizeof (struct if_announcemsghdr)); @@ -156,8 +166,12 @@ /* reusing RTM header received from kernel */ rtm->rtm_msglen = b->len; + rtm->rtm_version = pi->rtm_version; + rtm->rtm_type = pi->rtm_type; + rtm->rtm_index = pi->ifinfo->ifidx; + rtm->rtm_seq = pi->rtm_seq; + rtm->rtm_pid = getpid(); rtm->rtm_addrs = 0; - rtm->rtm_index = pi->ifinfo->ifidx; if (rtm->rtm_flags & M_MCAST) DBG(&dbg_snd, "M_MCAST!"); @@ -279,39 +293,33 @@ DBG(&dbg_snd, "RTM_IFANNOUNCE"); break; case RTM_SND: -#if 0 - ifan = sbuff_data(b); + ifan = (struct if_announcemsghdr *)rtm; + pi->rtm_version = ifan->ifan_version; + pi->rtm_type = ifan->ifan_type; + pi->rtm_seq = ifan->ifan_what; + switch (ifan->ifan_what) { -#endif - switch (rtm->rtm_seq) { case RTM_SND_IN: applog(LOG_ERR, "RTM_SND_IN"); /* n = RTM hdr + SEND message */ - if (sbuff_pull(b, sizeof (struct rt_msghdr)) == NULL) { -#if 0 if (sbuff_pull(b, sizeof (struct if_announcemsghdr)) == NULL) { -#endif - DBG(&dbg_snd, "invalid pkt (not enough for rtm hedaer"); goto done; + DBG(&dbg_snd, "invalid pkt (not enough for rtm hedaer"); + goto done; } pi->ifinfo = p; - pi->in = SND_IN; snd_recv_pkt(b, p->ifidx, SND_IN); break; case RTM_SND_OUT: applog(LOG_ERR, "RTM_SND_OUT"); /* n = RTM hdr + ip6_hdr + icmp6len */ - if (sbuff_pull(b, sizeof (struct rt_msghdr)) == NULL) { -#if 0 if (sbuff_pull(b, sizeof (struct if_announcemsghdr)) == NULL) { -#endif DBG(&dbg_snd, "invalid pkt (not enough for rtm header"); goto done; } pi->ifinfo = p; - pi->in = SND_OUT; snd_recv_pkt(b, p->ifidx, SND_OUT); break;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200908161946.n7GJkhZJ012831>