Date: Mon, 6 Jul 2009 20:41:42 GMT From: Ana Kukec <anchie@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 165719 for review Message-ID: <200907062041.n66Kfg8n009753@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=165719 Change 165719 by anchie@anchie_malimis on 2009/07/06 20:41:17 Processing of received routing message containing NS/NA/Redirect. Affected files ... .. //depot/projects/soc2009/anchie_send/send_0.2/sendd/net.c#14 edit .. //depot/projects/soc2009/anchie_send/send_0.2/sendd/proto.c#6 edit Differences ... ==== //depot/projects/soc2009/anchie_send/send_0.2/sendd/net.c#14 (text+ko) ==== @@ -84,7 +84,7 @@ static DEFINE_LIST_HEAD(ifaces); /* Data packet meta data */ -struct input_hook_packet_info { +struct snd_packet_info { struct snd_ifinfo *ifinfo; int direction; }; @@ -135,22 +135,7 @@ return (0); } -#if 0 void -snd_dispatch_fds(fd_set *fds) -{ - struct snd_ifinfo *p; - - list_for_each_entry(p, &ifaces, list) { - if (FD_ISSET(p->icmps, fds)) { - /* Reuse the code from - snd_recv_pkt() and snd_icmp_sock_read() - */ - } -} -#endif - -void snd_put_buf(struct sbuff *b) { sbuff_free(b); @@ -196,29 +181,30 @@ { struct rt_msghdr *rtm; struct if_announcemsghdr *ifan; - struct sbuff *b; + struct sbuff *b, *b1; + struct snd_packet_info *pi; int n, ifidx = -1; - + if ((b = snd_get_buf()) == NULL) { return; } - applog(LOG_ERR, "sndsock prije read = %d", sndsock); - n = read(sndsock, b, sizeof(b)); + pi = sbuff_data(b); + + n = recv(sndsock, b->data, b->rem, 0); if (n < 0) { applog(LOG_ERR, "%s: read: %s", __FUNCTION__, strerror(errno)); goto done; } else { - applog(LOG_ERR, "%s: %d bytes read on routing socket.", n, __FUNCTION__); + applog(LOG_ERR, "%s: %d bytes read on routing socket.", __FUNCTION__, n); } + b->len = n; - rtm = (struct rt_msghdr *) b; + rtm = sbuff_data(b); if (rtm->rtm_version != RTM_VERSION) { applog(LOG_ERR, "%s: Unsupported routing message version.", __FUNCTION__); goto done; - } else { - applog(LOG_ERR, "%s RTM_VERSION", __FUNCTION__); } switch (rtm->rtm_type) { @@ -226,17 +212,23 @@ /* XXX: Do we need this? */ break; case RTM_SND: - ifan = (struct if_announcemsghdr *) rtm; + ifan = sbuff_data(b); switch (ifan->ifan_what) { case RTM_SND_IN: + applog(LOG_ERR, "RTM_SND_IN"); /* n = RTM hdr + m as passed to nd6_ns_input() */ b = (struct rt_msghdr *) &ifan[1]; /* ToDo: Extract ifidx. */ snd_recv_pkt(b, ifidx, SND_IN); break; case RTM_SND_OUT: - /* n = RTM hdr + ip6_hdr + icmp6len == ND message (as sent to if_output()) */ - b = (struct rt_msghdr *) &ifan[1]; + applog(LOG_ERR, "RTM_SND_OUT"); + /* n = RTM hdr + ip6_hdr + icmp6len */ + if (sbuff_pull(b, sizeof (struct rt_msghdr)) == NULL) { + DBG(&dbg_snd, "invalid pkt (not enough for rtm hedaer"); + goto done; + } + /* ToDo: Extract ifidx. */ snd_recv_pkt(b, ifidx, SND_OUT); break; ==== //depot/projects/soc2009/anchie_send/send_0.2/sendd/proto.c#6 (text+ko) ==== @@ -654,7 +654,9 @@ } void -/* snd_recv_pkt(struct sbuff *b, int ifidx, int in, void *pkt) */ +#if 0 +snd_recv_pkt(struct sbuff *b, int ifidx, int in, void *pkt) +#endif snd_recv_pkt(struct sbuff *b, int ifidx, int in) { int tlen, drop = 0; @@ -664,19 +666,21 @@ enum snd_pkt_decision r; void *start; struct ip6_hdr *iph; -/* + +#if 0 if (!snd_iface_ok_(ifidx)) { return; } -*/ -/* +#endif +#if 0 if (!in) if (sbuff_pull(b, sizeof (struct ether_header)) == NULL) { DBG(&dbg_snd, "invalid pkt (not enough for ether header"); goto drop; } } -*/ +#endif + start = sbuff_data(b); DBG(&dbg, "%s", in ? "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" : @@ -699,6 +703,7 @@ DBG(&dbg_snd, "pkt too small (ip6 hdr)"); goto drop; } + pi->icmp = sbuff_data(b); if (b->len < sizeof (*(pi->icmp))) { DBG(&dbg_snd, "pkt too small (icmp6 hdr)"); @@ -796,6 +801,8 @@ return (-1); } #endif + applog(LOG_ERR, "snd_proto_init"); + if (snd_proto_nonce_init() < 0 || snd_proto_timestamp_init() < 0) { return (-1);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907062041.n66Kfg8n009753>