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);  }  | 
