svn commit: r186029 - projects/arpv2_merge_1/contrib/bsnmp/snmp_mibII

Kip Macy kmacy at FreeBSD.org
Fri Dec 12 23:03:17 PST 2008


Author: kmacy
Date: Sat Dec 13 07:03:16 2008
New Revision: 186029
URL: http://svn.freebsd.org/changeset/base/186029

Log:
  Traversing the routing table is no longer necessary for "discovering" new ARP
  entries. We can now obtain all arp entries by way of the sysctl. Simplify
  the RTM_{GET,ADD} code to reflect this.

Modified:
  projects/arpv2_merge_1/contrib/bsnmp/snmp_mibII/mibII.c

Modified: projects/arpv2_merge_1/contrib/bsnmp/snmp_mibII/mibII.c
==============================================================================
--- projects/arpv2_merge_1/contrib/bsnmp/snmp_mibII/mibII.c	Sat Dec 13 06:50:52 2008	(r186028)
+++ projects/arpv2_merge_1/contrib/bsnmp/snmp_mibII/mibII.c	Sat Dec 13 07:03:16 2008	(r186029)
@@ -48,15 +48,8 @@ static void *route_fd;
 /* if-index allocator */
 static uint32_t next_if_index = 1;
 
-#if 0
-/*
- * XXX - Qing
- *
- */
-/* re-fetch arp table */
-static int update_arp;
+/* currently fetching the arp table */
 static int in_update_arp;
-#endif
 
 /* OR registrations */
 static u_int ifmib_reg;
@@ -916,39 +909,6 @@ mib_find_ifa(struct in_addr addr)
 	return (NULL);
 }
 
-#if 0
-/*
- * Qing -- fix
- * Process a new ARP entry
- */
-
-static void
-process_arp(const struct rt_msghdr *rtm, const struct sockaddr_dl *sdl,
-    const struct sockaddr_in *sa)
-{
-	struct mibif *ifp;
-	struct mibarp *at;
-
-	/* IP arp table entry */
-	if (sdl->sdl_alen == 0) {
-		update_arp = 1;
-		return;
-	}
-	if ((ifp = mib_find_if_sys(sdl->sdl_index)) == NULL)
-		return;
-	/* have a valid entry */
-	if ((at = mib_find_arp(ifp, sa->sin_addr)) == NULL &&
-	    (at = mib_arp_create(ifp, sa->sin_addr,
-	    sdl->sdl_data + sdl->sdl_nlen, sdl->sdl_alen)) == NULL)
-		return;
-
-	if (rtm->rtm_rmx.rmx_expire == 0)
-		at->flags |= MIBARP_PERM;
-	else
-		at->flags &= ~MIBARP_PERM;
-	at->flags |= MIBARP_FOUND;
-}
-#endif
 /*
  * Handle a routing socket message.
  */
@@ -1089,62 +1049,12 @@ handle_rtmsg(struct rt_msghdr *rtm)
 		}
 		break;
 #endif
-
 	  case RTM_GET:
-		mib_extract_addrs(rtm->rtm_addrs, (u_char *)(rtm + 1), addrs);
-#if 0
-		/*
-		 * XXX - Qing fix
-		 *
-		 */
-		if (rtm->rtm_flags & RTF_LLINFO) {
-			if (addrs[RTAX_DST] == NULL ||
-			    addrs[RTAX_GATEWAY] == NULL ||
-			    addrs[RTAX_DST]->sa_family != AF_INET ||
-			    addrs[RTAX_GATEWAY]->sa_family != AF_LINK)
-				break;
-			process_arp(rtm,
-			    (struct sockaddr_dl *)(void *)addrs[RTAX_GATEWAY],
-			    (struct sockaddr_in *)(void *)addrs[RTAX_DST]);
-		} else {
-#endif			
-			if (rtm->rtm_errno == 0 && (rtm->rtm_flags & RTF_UP))
-				mib_sroute_process(rtm, addrs[RTAX_GATEWAY],
-				    addrs[RTAX_DST], addrs[RTAX_NETMASK]);
-#if 0
-		}
-#endif		
-		break;
-
 	  case RTM_ADD:
-		mib_extract_addrs(rtm->rtm_addrs, (u_char *)(rtm + 1), addrs);
-#if 0
-		/*
-		 * XXX - Qing fix
-		 *
-		 */
-		if (rtm->rtm_flags & RTF_LLINFO) {
-			if (addrs[RTAX_DST] == NULL ||
-			    addrs[RTAX_GATEWAY] == NULL ||
-			    addrs[RTAX_DST]->sa_family != AF_INET ||
-			    addrs[RTAX_GATEWAY]->sa_family != AF_LINK)
-				break;
-			process_arp(rtm,
-			    (struct sockaddr_dl *)(void *)addrs[RTAX_GATEWAY],
-			    (struct sockaddr_in *)(void *)addrs[RTAX_DST]);
-		} else {
-#endif			
-			if (rtm->rtm_errno == 0 && (rtm->rtm_flags & RTF_UP))
-				mib_sroute_process(rtm, addrs[RTAX_GATEWAY],
-				    addrs[RTAX_DST], addrs[RTAX_NETMASK]);
-#if 0
-		}
-#endif		
-		break;
-
 	  case RTM_DELETE:
 		mib_extract_addrs(rtm->rtm_addrs, (u_char *)(rtm + 1), addrs);
-		if (rtm->rtm_errno == 0)
+
+		if (rtm->rtm_errno == 0 && (rtm->rtm_flags & RTF_UP))
 			mib_sroute_process(rtm, addrs[RTAX_GATEWAY],
 			    addrs[RTAX_DST], addrs[RTAX_NETMASK]);
 		break;
@@ -1315,9 +1225,7 @@ update_ifa_info(void)
 /*
  * Update arp table
  *
- * XXX - Qing
 */
-#if 0
 void
 mib_arp_update(void)
 {
@@ -1333,11 +1241,7 @@ mib_arp_update(void)
 	TAILQ_FOREACH(at, &mibarp_list, link)
 		at->flags &= ~MIBARP_FOUND;
 
-	/*
-	 * XXX - Qing fix
-	 *
-	 */
-	if ((buf = mib_fetch_rtab(AF_INET, NET_RT_FLAGS, RTF_LLINFO, &needed)) == NULL) {
+	if ((buf = mib_fetch_rtab(AF_INET, NET_RT_FLAGS, 0, &needed)) == NULL) {
 		in_update_arp = 0;
 		return;
 	}
@@ -1358,10 +1262,8 @@ mib_arp_update(void)
 		at = at1;
 	}
 	mibarpticks = get_ticks();
-	update_arp = 0;
 	in_update_arp = 0;
 }
-#endif
 
 
 /*
@@ -1664,22 +1566,11 @@ mibII_idle(void)
 
 		mib_refresh_iflist();
 		update_ifa_info();
-#if 0
-		/*
-		 * XXX Qing
-		 *
-		 */
 		mib_arp_update();
-#endif		
 		mib_iflist_bad = 0;
 	}
-#if 0
-	/*
-	 * XXX Qing
-	 */
-	if (update_arp)
-		mib_arp_update();
-#endif
+
+	mib_arp_update();
 }
 
 


More information about the svn-src-projects mailing list