diff options
Diffstat (limited to 'zebra/rtread_sysctl.c')
| -rw-r--r-- | zebra/rtread_sysctl.c | 99 | 
1 files changed, 43 insertions, 56 deletions
diff --git a/zebra/rtread_sysctl.c b/zebra/rtread_sysctl.c index 30e593d87e..d3e2eb6fac 100644 --- a/zebra/rtread_sysctl.c +++ b/zebra/rtread_sysctl.c @@ -31,75 +31,62 @@  #include "zebra/kernel_socket.h"  /* Kernel routing table read up by sysctl function. */ -void -route_read (struct zebra_ns *zns) +void route_read(struct zebra_ns *zns)  { -  caddr_t buf, end, ref; -  size_t bufsiz; -  struct rt_msghdr *rtm; -   +	caddr_t buf, end, ref; +	size_t bufsiz; +	struct rt_msghdr *rtm; +  #define MIBSIZ 6 -  int mib[MIBSIZ] =  -  { -    CTL_NET, -    PF_ROUTE, -    0, -    0, -    NET_RT_DUMP, -    0 -  }; - -  if (zns->ns_id != NS_DEFAULT) -    return; - -  /* Get buffer size. */ -  if (sysctl (mib, MIBSIZ, NULL, &bufsiz, NULL, 0) < 0)  -    { -      zlog_warn ("sysctl fail: %s", safe_strerror (errno)); -      return; -    } - -  /* Allocate buffer. */ -  ref = buf = XMALLOC (MTYPE_TMP, bufsiz); -   -  /* Read routing table information by calling sysctl(). */ -  if (sysctl (mib, MIBSIZ, buf, &bufsiz, NULL, 0) < 0)  -    { -      zlog_warn ("sysctl() fail by %s", safe_strerror (errno)); -      XFREE(MTYPE_TMP, ref); -      return; -    } - -  for (end = buf + bufsiz; buf < end; buf += rtm->rtm_msglen)  -    { -      rtm = (struct rt_msghdr *) buf; -      /* We must set RTF_DONE here, so rtm_read() doesn't ignore the message. */ -      SET_FLAG (rtm->rtm_flags, RTF_DONE); -      rtm_read (rtm); -    } - -  /* Free buffer. */ -  XFREE (MTYPE_TMP, ref); - -  return; +	int mib[MIBSIZ] = {CTL_NET, PF_ROUTE, 0, 0, NET_RT_DUMP, 0}; + +	if (zns->ns_id != NS_DEFAULT) +		return; + +	/* Get buffer size. */ +	if (sysctl(mib, MIBSIZ, NULL, &bufsiz, NULL, 0) < 0) { +		zlog_warn("sysctl fail: %s", safe_strerror(errno)); +		return; +	} + +	/* Allocate buffer. */ +	ref = buf = XMALLOC(MTYPE_TMP, bufsiz); + +	/* Read routing table information by calling sysctl(). */ +	if (sysctl(mib, MIBSIZ, buf, &bufsiz, NULL, 0) < 0) { +		zlog_warn("sysctl() fail by %s", safe_strerror(errno)); +		XFREE(MTYPE_TMP, ref); +		return; +	} + +	for (end = buf + bufsiz; buf < end; buf += rtm->rtm_msglen) { +		rtm = (struct rt_msghdr *)buf; +		/* We must set RTF_DONE here, so rtm_read() doesn't ignore the +		 * message. */ +		SET_FLAG(rtm->rtm_flags, RTF_DONE); +		rtm_read(rtm); +	} + +	/* Free buffer. */ +	XFREE(MTYPE_TMP, ref); + +	return;  }  /* Only implemented for the netlink method. */ -void -macfdb_read (struct zebra_ns *zns) +void macfdb_read(struct zebra_ns *zns)  {  } -void macfdb_read_for_bridge (struct zebra_ns *zns, struct interface *ifp, -                             struct interface *br_if) +void macfdb_read_for_bridge(struct zebra_ns *zns, struct interface *ifp, +			    struct interface *br_if)  {  } -void -neigh_read (struct zebra_ns *zns) +void neigh_read(struct zebra_ns *zns)  {  } -void neigh_read_for_vlan (struct zebra_ns *zns, struct interface *vlan_if) +void neigh_read_for_vlan(struct zebra_ns *zns, struct interface *vlan_if)  {  }  | 
