From owner-svn-src-user@FreeBSD.ORG Thu Dec 11 06:55:02 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B042A1065676; Thu, 11 Dec 2008 06:55:02 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 320928FC17; Thu, 11 Dec 2008 06:55:02 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mBB6t2Ap057028; Thu, 11 Dec 2008 06:55:02 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mBB6t1Bl057026; Thu, 11 Dec 2008 06:55:01 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812110655.mBB6t1Bl057026@svn.freebsd.org> From: Kip Macy Date: Thu, 11 Dec 2008 06:55:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185913 - in user/kmacy/HEAD_fast_multi_xmit/usr.sbin: arp ndp X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Dec 2008 06:55:02 -0000 Author: kmacy Date: Thu Dec 11 06:55:01 2008 New Revision: 185913 URL: http://svn.freebsd.org/changeset/base/185913 Log: merge arpv2 changes to ndp and arp Modified: user/kmacy/HEAD_fast_multi_xmit/usr.sbin/arp/arp.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/ndp/ndp.c Modified: user/kmacy/HEAD_fast_multi_xmit/usr.sbin/arp/arp.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/usr.sbin/arp/arp.c Thu Dec 11 06:54:36 2008 (r185912) +++ user/kmacy/HEAD_fast_multi_xmit/usr.sbin/arp/arp.c Thu Dec 11 06:55:01 2008 (r185913) @@ -445,6 +445,18 @@ delete(char *host, int do_proxy) !(rtm->rtm_flags & RTF_GATEWAY) && valid_type(sdl->sdl_type) ) break; /* found it */ + + /* Qing + * why not just remove the RTF_LLINFO in the above + * code instead of another "if", works + */ + if (sdl->sdl_family == AF_LINK && + !(rtm->rtm_flags & RTF_GATEWAY) && + valid_type(sdl->sdl_type) ) { + addr->sin_addr.s_addr = dst->sin_addr.s_addr; + break; + } + if (dst->sin_other & SIN_PROXY) { fprintf(stderr, "delete: cannot locate %s\n",host); return (1); @@ -563,15 +575,9 @@ print_entry(struct sockaddr_dl *sdl, printf(" permanent"); if (addr->sin_other & SIN_PROXY) printf(" published (proxy only)"); - if (rtm->rtm_addrs & RTA_NETMASK) { - addr = (struct sockaddr_inarp *) - (SA_SIZE(sdl) + (char *)sdl); - if (addr->sin_addr.s_addr == 0xffffffff) - printf(" published"); - if (addr->sin_len != 8) - printf("(weird)"); - } - switch(sdl->sdl_type) { + if (rtm->rtm_flags & RTF_ANNOUNCE) + printf(" published"); + switch(sdl->sdl_type) { case IFT_ETHER: printf(" [ethernet]"); break; Modified: user/kmacy/HEAD_fast_multi_xmit/usr.sbin/ndp/ndp.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/usr.sbin/ndp/ndp.c Thu Dec 11 06:54:36 2008 (r185912) +++ user/kmacy/HEAD_fast_multi_xmit/usr.sbin/ndp/ndp.c Thu Dec 11 06:55:01 2008 (r185913) @@ -114,6 +114,11 @@ ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long)) #define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len)) +#define NEXTADDR(w, s) \ + if (rtm->rtm_addrs & (w)) { \ + bcopy((char *)&s, cp, sizeof(s)); cp += sizeof(s);} + + static pid_t pid; static int nflag; static int tflag; @@ -428,7 +433,6 @@ set(argc, argv) sdl = (struct sockaddr_dl *)(ROUNDUP(sin->sin6_len) + (char *)sin); if (IN6_ARE_ADDR_EQUAL(&sin->sin6_addr, &sin_m.sin6_addr)) { if (sdl->sdl_family == AF_LINK && - (rtm->rtm_flags & RTF_LLINFO) && !(rtm->rtm_flags & RTF_GATEWAY)) { switch (sdl->sdl_type) { case IFT_ETHER: case IFT_FDDI: case IFT_ISO88023: @@ -499,6 +503,7 @@ delete(host) { struct sockaddr_in6 *sin = &sin_m; register struct rt_msghdr *rtm = &m_rtmsg.m_rtm; + register char *cp = m_rtmsg.m_space; struct sockaddr_dl *sdl; struct addrinfo hints, *res; int gai_error; @@ -529,7 +534,6 @@ delete(host) sdl = (struct sockaddr_dl *)(ROUNDUP(sin->sin6_len) + (char *)sin); if (IN6_ARE_ADDR_EQUAL(&sin->sin6_addr, &sin_m.sin6_addr)) { if (sdl->sdl_family == AF_LINK && - (rtm->rtm_flags & RTF_LLINFO) && !(rtm->rtm_flags & RTF_GATEWAY)) { goto delete; } @@ -545,6 +549,11 @@ delete: printf("cannot locate %s\n", host); return (1); } + /* + * need to reinit the field because it has rt_key + * but we want the actual address + */ + NEXTADDR(RTA_DST, sin_m); if (rtmsg(RTM_DELETE) == 0) { struct sockaddr_in6 s6 = *sin; /* XXX: for safety */ @@ -893,9 +902,6 @@ rtmsg(cmd) case RTM_GET: rtm->rtm_addrs |= RTA_DST; } -#define NEXTADDR(w, s) \ - if (rtm->rtm_addrs & (w)) { \ - bcopy((char *)&s, cp, sizeof(s)); cp += SA_SIZE(&s);} NEXTADDR(RTA_DST, sin_m); NEXTADDR(RTA_GATEWAY, sdl_m); @@ -1616,3 +1622,5 @@ ts_print(tvp) (void)printf("%02d:%02d:%02d.%06u ", s / 3600, (s % 3600) / 60, s % 60, (u_int32_t)tvp->tv_usec); } + +#undef NEXTADDR