From owner-p4-projects@FreeBSD.ORG Mon Jul 6 20:41:43 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id DB3741065672; Mon, 6 Jul 2009 20:41:42 +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 9A53B106566C for ; Mon, 6 Jul 2009 20:41:42 +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 8831C8FC0C for ; Mon, 6 Jul 2009 20:41:42 +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 n66KfgJ1009755 for ; Mon, 6 Jul 2009 20:41:42 GMT (envelope-from anchie@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n66Kfg8n009753 for perforce@freebsd.org; Mon, 6 Jul 2009 20:41:42 GMT (envelope-from anchie@FreeBSD.org) Date: Mon, 6 Jul 2009 20:41:42 GMT Message-Id: <200907062041.n66Kfg8n009753@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 165719 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: Mon, 06 Jul 2009 20:41:43 -0000 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);