--- embedaddon/quagga/zebra/rtread_getmsg.c 2012/10/09 09:22:29 1.1.1.2 +++ embedaddon/quagga/zebra/rtread_getmsg.c 2016/11/02 10:09:10 1.1.1.3 @@ -25,6 +25,7 @@ #include "prefix.h" #include "log.h" #include "if.h" +#include "vrf.h" #include "zebra/rib.h" #include "zebra/zserv.h" @@ -90,11 +91,12 @@ handle_route_entry (mib2_ipRouteEntry_t *routeEntry) gateway.s_addr = routeEntry->ipRouteNextHop; rib_add_ipv4 (ZEBRA_ROUTE_KERNEL, zebra_flags, &prefix, - &gateway, NULL, 0, 0, 0, 0, SAFI_UNICAST); + &gateway, NULL, 0, VRF_DEFAULT, RT_TABLE_MAIN, + 0, 0, 0, SAFI_UNICAST); } void -route_read (void) +route_read (struct zebra_vrf *zvrf) { char storage[RT_BUFSIZ]; @@ -109,6 +111,10 @@ route_read (void) struct strbuf msgdata; int flags, dev, retval, process; + if (zvrf->vrf_id != VRF_DEFAULT) { + return; + } + if ((dev = open (_PATH_GETMSG_ROUTE, O_RDWR)) == -1) { zlog_warn ("can't open %s: %s", _PATH_GETMSG_ROUTE, safe_strerror (errno)); @@ -150,13 +156,13 @@ route_read (void) /* This is normal loop termination */ if (retval == 0 && - msgdata.len >= sizeof (struct T_optmgmt_ack) && + (size_t)msgdata.len >= sizeof (struct T_optmgmt_ack) && TLIack->PRIM_type == T_OPTMGMT_ACK && TLIack->MGMT_flags == T_SUCCESS && MIB2hdr->len == 0) break; - if (msgdata.len >= sizeof (struct T_error_ack) && + if ((size_t)msgdata.len >= sizeof (struct T_error_ack) && TLIerr->PRIM_type == T_ERROR_ACK) { zlog_warn ("getmsg(ctl) returned T_ERROR_ACK: %s", safe_strerror ((TLIerr->TLI_error == TSYSERR) @@ -168,7 +174,7 @@ route_read (void) like what GateD does in this instance, but not critical yet. */ if (retval != MOREDATA || - msgdata.len < sizeof (struct T_optmgmt_ack) || + (size_t)msgdata.len < sizeof (struct T_optmgmt_ack) || TLIack->PRIM_type != T_OPTMGMT_ACK || TLIack->MGMT_flags != T_SUCCESS) { errno = ENOMSG;