svn commit: r185913 - in user/kmacy/HEAD_fast_multi_xmit/usr.sbin: arp ndp

Kip Macy kmacy at FreeBSD.org
Wed Dec 10 22:55:02 PST 2008


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


More information about the svn-src-user mailing list