Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 May 2012 14:24:08 +0200
From:      Maryse LEVAVASSEUR <maryse.levavasseur@netasq.com>
To:        freebsd-current@freebsd.org, freebsd-net@freebsd.org
Subject:   [PATCH] IPv6 rtadvd: little optimization
Message-ID:  <4FBE2868.8010602@netasq.com>

next in thread | raw e-mail | index | archive | help
Hi,

Since upgrading to FreeBSD 8.3, I noticed that after rtadvd starts, it 
does not respond to router solicitations during a quite long time.

I have made a patch which speeds up rtadvd's start by making fewer calls 
to if_indextoname. Moreover, it will react properly in case 
if_indextoname fails.

Would anyone object to this patch ?

===
Index: if.c
===================================================================
--- if.c        (revision 235474)
+++ if.c        (working copy)
@@ -472,11 +472,18 @@ update_ifinfo(struct ifilist_head_t *ifi_head, int
                             ifindex != ifm->ifm_index)
                                 continue;

+                       /* ifname */
+                       if (if_indextoname(ifm->ifm_index, ifname) == 
NULL) {
+                               syslog(LOG_WARNING,
+                                   "<%s> ifname not found (idx=%d)",
+                                   __func__, ifm->ifm_index);
+                               continue;
+                       }
+
                         /* lookup an entry with the same ifindex */
                         TAILQ_FOREACH(ifi, ifi_head, ifi_next) {
                                 if (ifm->ifm_index == ifi->ifi_ifindex)
                                         break;
-                               if_indextoname(ifm->ifm_index, ifname);
                                 if (strncmp(ifname, ifi->ifi_ifname,
                                         sizeof(ifname)) == 0)
                                         break;
@@ -495,15 +502,7 @@ update_ifinfo(struct ifilist_head_t *ifi_head, int
                         ifi->ifi_ifindex = ifm->ifm_index;

                         /* ifname */
-                       if_indextoname(ifm->ifm_index, ifi->ifi_ifname);
-                       if (ifi->ifi_ifname == NULL) {
-                               syslog(LOG_WARNING,
-                                   "<%s> ifname not found (idx=%d)",
-                                   __func__, ifm->ifm_index);
-                               if (ifi_new)
-                                       free(ifi);
-                               continue;
-                       }
+                       strncpy(ifi->ifi_ifname, ifname, IFNAMSIZ);

                         if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
                                 syslog(LOG_ERR,
===



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4FBE2868.8010602>