diff options
Diffstat (limited to 'zebra/if_sysctl.c')
| -rw-r--r-- | zebra/if_sysctl.c | 189 |
1 files changed, 83 insertions, 106 deletions
diff --git a/zebra/if_sysctl.c b/zebra/if_sysctl.c index dbf5abd12b..99b0f9d942 100644 --- a/zebra/if_sysctl.c +++ b/zebra/if_sysctl.c @@ -36,124 +36,101 @@ #include "zebra/kernel_socket.h" #include "zebra/rib.h" -void -ifstat_update_sysctl (void) +void ifstat_update_sysctl(void) { - caddr_t ref, buf, end; - size_t bufsiz; - struct if_msghdr *ifm; - struct interface *ifp; + caddr_t ref, buf, end; + size_t bufsiz; + struct if_msghdr *ifm; + struct interface *ifp; #define MIBSIZ 6 - int mib[MIBSIZ] = - { - CTL_NET, - PF_ROUTE, - 0, - 0, /* AF_INET & AF_INET6 */ - NET_RT_IFLIST, - 0 - }; - - /* Query buffer size. */ - if (sysctl (mib, MIBSIZ, NULL, &bufsiz, NULL, 0) < 0) - { - zlog_warn ("sysctl() error by %s", safe_strerror (errno)); - return; - } - - /* We free this memory at the end of this function. */ - ref = buf = XMALLOC (MTYPE_TMP, bufsiz); - - /* Fetch interface informations into allocated buffer. */ - if (sysctl (mib, MIBSIZ, buf, &bufsiz, NULL, 0) < 0) - { - zlog_warn("sysctl error by %s", safe_strerror(errno)); - XFREE(MTYPE_TMP, ref); - return; - } - - /* Parse both interfaces and addresses. */ - for (end = buf + bufsiz; buf < end; buf += ifm->ifm_msglen) - { - ifm = (struct if_msghdr *) buf; - if (ifm->ifm_type == RTM_IFINFO) - { - ifp = if_lookup_by_index (ifm->ifm_index, VRF_DEFAULT); - if (ifp) - ifp->stats = ifm->ifm_data; + int mib[MIBSIZ] = { + CTL_NET, PF_ROUTE, 0, 0, /* AF_INET & AF_INET6 */ + NET_RT_IFLIST, 0}; + + /* Query buffer size. */ + if (sysctl(mib, MIBSIZ, NULL, &bufsiz, NULL, 0) < 0) { + zlog_warn("sysctl() error by %s", safe_strerror(errno)); + return; } - } - /* Free sysctl buffer. */ - XFREE (MTYPE_TMP, ref); + /* We free this memory at the end of this function. */ + ref = buf = XMALLOC(MTYPE_TMP, bufsiz); - return; + /* Fetch interface informations into allocated buffer. */ + if (sysctl(mib, MIBSIZ, buf, &bufsiz, NULL, 0) < 0) { + zlog_warn("sysctl error by %s", safe_strerror(errno)); + XFREE(MTYPE_TMP, ref); + return; + } + + /* Parse both interfaces and addresses. */ + for (end = buf + bufsiz; buf < end; buf += ifm->ifm_msglen) { + ifm = (struct if_msghdr *)buf; + if (ifm->ifm_type == RTM_IFINFO) { + ifp = if_lookup_by_index(ifm->ifm_index, VRF_DEFAULT); + if (ifp) + ifp->stats = ifm->ifm_data; + } + } + + /* Free sysctl buffer. */ + XFREE(MTYPE_TMP, ref); + + return; } /* Interface listing up function using sysctl(). */ -void -interface_list (struct zebra_ns *zns) +void interface_list(struct zebra_ns *zns) { - caddr_t ref, buf, end; - size_t bufsiz; - struct if_msghdr *ifm; + caddr_t ref, buf, end; + size_t bufsiz; + struct if_msghdr *ifm; #define MIBSIZ 6 - int mib[MIBSIZ] = - { - CTL_NET, - PF_ROUTE, - 0, - 0, /* AF_INET & AF_INET6 */ - NET_RT_IFLIST, - 0 - }; - - if (zns->ns_id != NS_DEFAULT) - { - zlog_warn ("interface_list: ignore NS %u", zns->ns_id); - return; - } - - /* Query buffer size. */ - if (sysctl (mib, MIBSIZ, NULL, &bufsiz, NULL, 0) < 0) - { - zlog_warn("sysctl() error by %s", safe_strerror(errno)); - return; - } - - /* We free this memory at the end of this function. */ - ref = buf = XMALLOC (MTYPE_TMP, bufsiz); - - /* Fetch interface informations into allocated buffer. */ - if (sysctl (mib, MIBSIZ, buf, &bufsiz, NULL, 0) < 0) - { - zlog_warn("sysctl error by %s", safe_strerror(errno)); - return; - } - - /* Parse both interfaces and addresses. */ - for (end = buf + bufsiz; buf < end; buf += ifm->ifm_msglen) - { - ifm = (struct if_msghdr *) buf; - - switch (ifm->ifm_type) - { - case RTM_IFINFO: - ifm_read (ifm); - break; - case RTM_NEWADDR: - ifam_read ((struct ifa_msghdr *) ifm); - break; - default: - zlog_info ("interfaces_list(): unexpected message type"); - XFREE (MTYPE_TMP, ref); - return; - break; + int mib[MIBSIZ] = { + CTL_NET, PF_ROUTE, 0, 0, /* AF_INET & AF_INET6 */ + NET_RT_IFLIST, 0}; + + if (zns->ns_id != NS_DEFAULT) { + zlog_warn("interface_list: ignore NS %u", zns->ns_id); + return; + } + + /* Query buffer size. */ + if (sysctl(mib, MIBSIZ, NULL, &bufsiz, NULL, 0) < 0) { + zlog_warn("sysctl() error by %s", safe_strerror(errno)); + return; + } + + /* We free this memory at the end of this function. */ + ref = buf = XMALLOC(MTYPE_TMP, bufsiz); + + /* Fetch interface informations into allocated buffer. */ + if (sysctl(mib, MIBSIZ, buf, &bufsiz, NULL, 0) < 0) { + zlog_warn("sysctl error by %s", safe_strerror(errno)); + return; + } + + /* Parse both interfaces and addresses. */ + for (end = buf + bufsiz; buf < end; buf += ifm->ifm_msglen) { + ifm = (struct if_msghdr *)buf; + + switch (ifm->ifm_type) { + case RTM_IFINFO: + ifm_read(ifm); + break; + case RTM_NEWADDR: + ifam_read((struct ifa_msghdr *)ifm); + break; + default: + zlog_info("interfaces_list(): unexpected message type"); + XFREE(MTYPE_TMP, ref); + return; + break; + } } - } - /* Free sysctl buffer. */ - XFREE (MTYPE_TMP, ref); + /* Free sysctl buffer. */ + XFREE(MTYPE_TMP, ref); } |
