X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=zebra%2Frtread_getmsg.c;h=1bba003a0a084820637d5b813cbc73706d0362a7;hb=ddfeb48652f8318acc8b18c2c377515de2bf1b31;hp=4d491f3200d582fff8a96d5f2cb5e9b27059e518;hpb=b3cfe637a66a5de00c72125f5fa051155ccb4a29;p=mirror_frr.git diff --git a/zebra/rtread_getmsg.c b/zebra/rtread_getmsg.c index 4d491f320..1bba003a0 100644 --- a/zebra/rtread_getmsg.c +++ b/zebra/rtread_getmsg.c @@ -14,14 +14,15 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GNU Zebra; see the file COPYING. If not, write to the Free - * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. + * You should have received a copy of the GNU General Public License along + * with this program; see the file COPYING; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include +#ifdef SUNOS_5 + #include "prefix.h" #include "log.h" #include "if.h" @@ -51,8 +52,7 @@ #define IRE_HOST_REDIRECT 0x0200 /* Host route entry from redirects */ #endif /* IRE_HOST_REDIRECT */ #ifndef IRE_CACHETABLE -#define IRE_CACHETABLE (IRE_CACHE | IRE_BROADCAST | IRE_LOCAL | \ - IRE_LOOPBACK) +#define IRE_CACHETABLE (IRE_CACHE | IRE_BROADCAST | IRE_LOCAL | IRE_LOOPBACK) #endif /* IRE_CACHETABLE */ #undef IPOPT_EOL #undef IPOPT_NOP @@ -72,123 +72,124 @@ #define RT_BUFSIZ 8192 -static void -handle_route_entry (mib2_ipRouteEntry_t *routeEntry) +static void handle_route_entry(mib2_ipRouteEntry_t *routeEntry) { - struct prefix prefix; - struct in_addr tmpaddr, gateway; - union g_addr *ggateway; - u_char zebra_flags = 0; + struct prefix prefix; + struct in_addr tmpaddr, gateway; + union g_addr *ggateway; + u_char zebra_flags = 0; - if (routeEntry->ipRouteInfo.re_ire_type & IRE_CACHETABLE) - return; + if (routeEntry->ipRouteInfo.re_ire_type & IRE_CACHETABLE) + return; - if (routeEntry->ipRouteInfo.re_ire_type & IRE_HOST_REDIRECT) - zebra_flags |= ZEBRA_FLAG_SELFROUTE; + if (routeEntry->ipRouteInfo.re_ire_type & IRE_HOST_REDIRECT) + zebra_flags |= ZEBRA_FLAG_SELFROUTE; - prefix.family = AF_INET; + prefix.family = AF_INET; - tmpaddr.s_addr = routeEntry->ipRouteDest; - prefix.u.prefix4 = tmpaddr; + tmpaddr.s_addr = routeEntry->ipRouteDest; + prefix.u.prefix4 = tmpaddr; - tmpaddr.s_addr = routeEntry->ipRouteMask; - prefix.prefixlen = ip_masklen (tmpaddr); + tmpaddr.s_addr = routeEntry->ipRouteMask; + prefix.prefixlen = ip_masklen(tmpaddr); - gateway.s_addr = routeEntry->ipRouteNextHop; - ggateway = (union g_addr *)&gateway; + gateway.s_addr = routeEntry->ipRouteNextHop; + ggateway = (union g_addr *)&gateway; - rib_add (AFI_IP, SAFI_UNICAST, VRF_DEFAULT, ZEBRA_ROUTE_KERNEL, 0, - zebra_flags, &prefix, NULL, ggateway, NULL, 0, 0, 0, 0, 0); + rib_add(AFI_IP, SAFI_UNICAST, VRF_DEFAULT, ZEBRA_ROUTE_KERNEL, 0, + zebra_flags, &prefix, NULL, ggateway, NULL, 0, 0, 0, 0, 0); } -void -route_read (struct zebra_ns *zns) +void route_read(struct zebra_ns *zns) { - char storage[RT_BUFSIZ]; + char storage[RT_BUFSIZ]; - struct T_optmgmt_req *TLIreq = (struct T_optmgmt_req *) storage; - struct T_optmgmt_ack *TLIack = (struct T_optmgmt_ack *) storage; - struct T_error_ack *TLIerr = (struct T_error_ack *) storage; + struct T_optmgmt_req *TLIreq = (struct T_optmgmt_req *)storage; + struct T_optmgmt_ack *TLIack = (struct T_optmgmt_ack *)storage; + struct T_error_ack *TLIerr = (struct T_error_ack *)storage; - struct opthdr *MIB2hdr; + struct opthdr *MIB2hdr; - mib2_ipRouteEntry_t *routeEntry, *lastRouteEntry; + mib2_ipRouteEntry_t *routeEntry, *lastRouteEntry; - struct strbuf msgdata; - int flags, dev, retval, process; + struct strbuf msgdata; + int flags, dev, retval, process; - if ((dev = open (_PATH_GETMSG_ROUTE, O_RDWR)) == -1) { - zlog_warn ("can't open %s: %s", _PATH_GETMSG_ROUTE, - safe_strerror (errno)); + if ((dev = open(_PATH_GETMSG_ROUTE, O_RDWR)) == -1) { + zlog_warn("can't open %s: %s", _PATH_GETMSG_ROUTE, + safe_strerror(errno)); return; } TLIreq->PRIM_type = T_OPTMGMT_REQ; - TLIreq->OPT_offset = sizeof (struct T_optmgmt_req); - TLIreq->OPT_length = sizeof (struct opthdr); + TLIreq->OPT_offset = sizeof(struct T_optmgmt_req); + TLIreq->OPT_length = sizeof(struct opthdr); TLIreq->MGMT_flags = T_CURRENT; - MIB2hdr = (struct opthdr *) &TLIreq[1]; + MIB2hdr = (struct opthdr *)&TLIreq[1]; MIB2hdr->level = MIB2_IP; MIB2hdr->name = 0; MIB2hdr->len = 0; - + msgdata.buf = storage; - msgdata.len = sizeof (struct T_optmgmt_req) + sizeof (struct opthdr); + msgdata.len = sizeof(struct T_optmgmt_req) + sizeof(struct opthdr); flags = 0; - if (putmsg (dev, &msgdata, NULL, flags) == -1) { - zlog_warn ("putmsg failed: %s", safe_strerror (errno)); + if (putmsg(dev, &msgdata, NULL, flags) == -1) { + zlog_warn("putmsg failed: %s", safe_strerror(errno)); goto exit; } - MIB2hdr = (struct opthdr *) &TLIack[1]; - msgdata.maxlen = sizeof (storage); + MIB2hdr = (struct opthdr *)&TLIack[1]; + msgdata.maxlen = sizeof(storage); while (1) { flags = 0; - retval = getmsg (dev, &msgdata, NULL, &flags); + retval = getmsg(dev, &msgdata, NULL, &flags); if (retval == -1) { - zlog_warn ("getmsg(ctl) failed: %s", safe_strerror (errno)); + zlog_warn("getmsg(ctl) failed: %s", + safe_strerror(errno)); goto exit; } /* This is normal loop termination */ - if (retval == 0 && - (size_t)msgdata.len >= sizeof (struct T_optmgmt_ack) && - TLIack->PRIM_type == T_OPTMGMT_ACK && - TLIack->MGMT_flags == T_SUCCESS && - MIB2hdr->len == 0) + if (retval == 0 + && (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 ((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) - ? TLIerr->UNIX_error : EPROTO)); + 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) + ? TLIerr->UNIX_error + : EPROTO)); break; } /* should dump more debugging info to the log statement, like what GateD does in this instance, but not critical yet. */ - if (retval != MOREDATA || - (size_t)msgdata.len < sizeof (struct T_optmgmt_ack) || - TLIack->PRIM_type != T_OPTMGMT_ACK || - TLIack->MGMT_flags != T_SUCCESS) { + if (retval != MOREDATA + || (size_t)msgdata.len < sizeof(struct T_optmgmt_ack) + || TLIack->PRIM_type != T_OPTMGMT_ACK + || TLIack->MGMT_flags != T_SUCCESS) { errno = ENOMSG; - zlog_warn ("getmsg(ctl) returned bizarreness"); + zlog_warn("getmsg(ctl) returned bizarreness"); break; } /* MIB2_IP_21 is the the pseudo-MIB2 ipRouteTable entry, see . "This isn't the MIB data you're looking for." */ - process = (MIB2hdr->level == MIB2_IP && - MIB2hdr->name == MIB2_IP_21) ? 1 : 0; + process = (MIB2hdr->level == MIB2_IP + && MIB2hdr->name == MIB2_IP_21) + ? 1 + : 0; /* getmsg writes the data buffer out completely, not to the closest smaller multiple. Unless reassembling @@ -196,45 +197,68 @@ route_read (struct zebra_ns *zns) of a good time, set maxlen to the closest smaller multiple of the size of the datastructure you're retrieving. */ - msgdata.maxlen = sizeof (storage) - (sizeof (storage) - % sizeof (mib2_ipRouteEntry_t)); + msgdata.maxlen = + sizeof(storage) + - (sizeof(storage) % sizeof(mib2_ipRouteEntry_t)); msgdata.len = 0; flags = 0; do { - retval = getmsg (dev, NULL, &msgdata, &flags); + retval = getmsg(dev, NULL, &msgdata, &flags); if (retval == -1) { - zlog_warn ("getmsg(data) failed: %s", - safe_strerror (errno)); + zlog_warn("getmsg(data) failed: %s", + safe_strerror(errno)); goto exit; } if (!(retval == 0 || retval == MOREDATA)) { - zlog_warn ("getmsg(data) returned %d", retval); + zlog_warn("getmsg(data) returned %d", retval); goto exit; } if (process) { - if (msgdata.len % - sizeof (mib2_ipRouteEntry_t) != 0) { - zlog_warn ("getmsg(data) returned " -"msgdata.len = %d (%% sizeof (mib2_ipRouteEntry_t) != 0)", msgdata.len); + if (msgdata.len % sizeof(mib2_ipRouteEntry_t) + != 0) { + zlog_warn( + "getmsg(data) returned " + "msgdata.len = %d (%% sizeof (mib2_ipRouteEntry_t) != 0)", + msgdata.len); goto exit; } - routeEntry = (mib2_ipRouteEntry_t *) - msgdata.buf; - lastRouteEntry = (mib2_ipRouteEntry_t *) - (msgdata.buf + msgdata.len); + routeEntry = (mib2_ipRouteEntry_t *)msgdata.buf; + lastRouteEntry = + (mib2_ipRouteEntry_t *)(msgdata.buf + + msgdata.len); do { - handle_route_entry (routeEntry); + handle_route_entry(routeEntry); } while (++routeEntry < lastRouteEntry); } } while (retval == MOREDATA); } exit: - close (dev); + close(dev); +} + +/* Only implemented for netlink method */ +void macfdb_read(struct zebra_ns *zns) +{ +} + +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_for_vlan(struct zebra_ns *zns, struct interface *vlan_if) +{ +} + +#endif /* SUNOS_5 */