From 8643c2e5f7b5541f136a3dfff5abe5b537159442 Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Thu, 1 Jul 2021 23:29:26 +0300 Subject: [PATCH] *: Replace 4/16 integers to IPV4_MAX_BYTELEN/IPV6_MAX_BYTELEN Signed-off-by: Donatas Abraitis --- babeld/babel_interface.c | 83 ++++++++++++++++++++++------------------ babeld/util.c | 17 ++++---- bgpd/bgp_encap_tlv.c | 14 ++++--- bgpd/bgp_evpn.c | 9 +++-- lib/filter.c | 10 +++-- pbrd/pbr_zebra.c | 8 ++-- sharpd/sharp_vty.c | 2 +- staticd/static_nht.c | 3 +- zebra/zebra_nhg.c | 3 +- 9 files changed, 84 insertions(+), 65 deletions(-) diff --git a/babeld/babel_interface.c b/babeld/babel_interface.c index 41391c51ac..43ed97cf17 100644 --- a/babeld/babel_interface.c +++ b/babeld/babel_interface.c @@ -177,10 +177,11 @@ babel_interface_address_delete (ZAPI_CALLBACK_ARGS) if (prefix->family == AF_INET) { flush_interface_routes(ifc->ifp, 0); babel_ifp = babel_get_if_nfo(ifc->ifp); - if (babel_ifp->ipv4 != NULL - && memcmp(babel_ifp->ipv4, &prefix->u.prefix4, 4) == 0) { - free(babel_ifp->ipv4); - babel_ifp->ipv4 = NULL; + if (babel_ifp->ipv4 != NULL + && memcmp(babel_ifp->ipv4, &prefix->u.prefix4, IPV4_MAX_BYTELEN) + == 0) { + free(babel_ifp->ipv4); + babel_ifp->ipv4 = NULL; } } @@ -825,9 +826,11 @@ is_interface_ll_address(struct interface *ifp, const unsigned char *address) return 0; FOR_ALL_INTERFACES_ADDRESSES(ifp, connected, node) { - if(connected->address->family == AF_INET6 && - memcmp(&connected->address->u.prefix6, address, 16) == 0) - return 1; + if (connected->address->family == AF_INET6 + && memcmp(&connected->address->u.prefix6, address, + IPV6_MAX_BYTELEN) + == 0) + return 1; } return 0; @@ -941,13 +944,13 @@ static int babel_prefix_eq(struct prefix *prefix, unsigned char *p, int plen) { if(prefix->family == AF_INET6) { - if(prefix->prefixlen != plen || - memcmp(&prefix->u.prefix6, p, 16) != 0) - return 0; + if (prefix->prefixlen != plen + || memcmp(&prefix->u.prefix6, p, IPV6_MAX_BYTELEN) != 0) + return 0; } else if(prefix->family == AF_INET) { - if(plen < 96 || !v4mapped(p) || prefix->prefixlen != plen - 96 || - memcmp(&prefix->u.prefix4, p + 12, 4) != 0) - return 0; + if (plen < 96 || !v4mapped(p) || prefix->prefixlen != plen - 96 + || memcmp(&prefix->u.prefix4, p + 12, IPV4_MAX_BYTELEN) != 0) + return 0; } else { return 0; } @@ -959,31 +962,35 @@ static void show_babel_routes_sub(struct babel_route *route, struct vty *vty, struct prefix *prefix) { - const unsigned char *nexthop = - memcmp(route->nexthop, route->neigh->address, 16) == 0 ? - NULL : route->nexthop; - char channels[100]; - - if(prefix && !babel_prefix_eq(prefix, route->src->prefix, route->src->plen)) - return; - - if(route->channels[0] == 0) - channels[0] = '\0'; - else { - int k, j = 0; - snprintf(channels, sizeof(channels), " chan ("); - j = strlen(channels); - for(k = 0; k < DIVERSITY_HOPS; k++) { - if(route->channels[k] == 0) - break; - if(k > 0) - channels[j++] = ','; - snprintf(channels + j, 100 - j, "%u", route->channels[k]); - j = strlen(channels); - } - snprintf(channels + j, 100 - j, ")"); - if(k == 0) - channels[0] = '\0'; + const unsigned char *nexthop = + memcmp(route->nexthop, route->neigh->address, IPV6_MAX_BYTELEN) + == 0 + ? NULL + : route->nexthop; + char channels[100]; + + if (prefix + && !babel_prefix_eq(prefix, route->src->prefix, route->src->plen)) + return; + + if (route->channels[0] == 0) + channels[0] = '\0'; + else { + int k, j = 0; + snprintf(channels, sizeof(channels), " chan ("); + j = strlen(channels); + for (k = 0; k < DIVERSITY_HOPS; k++) { + if (route->channels[k] == 0) + break; + if (k > 0) + channels[j++] = ','; + snprintf(channels + j, 100 - j, "%u", + route->channels[k]); + j = strlen(channels); + } + snprintf(channels + j, 100 - j, ")"); + if (k == 0) + channels[0] = '\0'; } vty_out (vty, diff --git a/babeld/util.c b/babeld/util.c index be838fa438..e2db75996e 100644 --- a/babeld/util.c +++ b/babeld/util.c @@ -220,9 +220,9 @@ unsigned char * mask_prefix(unsigned char *restrict ret, const unsigned char *restrict prefix, unsigned char plen) { - if(plen >= 128) { - memcpy(ret, prefix, 16); - return ret; + if (plen >= IPV6_MAX_BITLEN) { + memcpy(ret, prefix, IPV6_MAX_BYTELEN); + return ret; } memset(ret, 0, 16); @@ -309,9 +309,10 @@ parse_address(const char *address, unsigned char *addr_r, int *af_r) rc = inet_pton(AF_INET6, address, &ina6); if(rc > 0) { - memcpy(addr_r, &ina6, 16); - if(af_r) *af_r = AF_INET6; - return 0; + memcpy(addr_r, &ina6, IPV6_MAX_BYTELEN); + if (af_r) + *af_r = AF_INET6; + return 0; } return -1; @@ -413,13 +414,13 @@ uchar_to_inaddr(struct in_addr *dest, const unsigned char *src) void in6addr_to_uchar(unsigned char *dest, const struct in6_addr *src) { - memcpy(dest, src, 16); + memcpy(dest, src, IPV6_MAX_BYTELEN); } void uchar_to_in6addr(struct in6_addr *dest, const unsigned char *src) { - memcpy(dest, src, 16); + memcpy(dest, src, IPV6_MAX_BYTELEN); } int diff --git a/bgpd/bgp_encap_tlv.c b/bgpd/bgp_encap_tlv.c index 964adec9b6..fd429120e6 100644 --- a/bgpd/bgp_encap_tlv.c +++ b/bgpd/bgp_encap_tlv.c @@ -212,12 +212,12 @@ subtlv_encode_remote_endpoint(struct bgp_tea_subtlv_remote_endpoint *st) new->length = total; p = new->value; if (st->family == AF_INET) { - memcpy(p, &(st->ip_address.v4.s_addr), 4); - p += 4; + memcpy(p, &(st->ip_address.v4.s_addr), IPV4_MAX_BYTELEN); + p += IPV4_MAX_BYTELEN; } else { assert(st->family == AF_INET6); - memcpy(p, &(st->ip_address.v6.s6_addr), 16); - p += 16; + memcpy(p, &(st->ip_address.v6.s6_addr), IPV6_MAX_BYTELEN); + p += IPV6_MAX_BYTELEN; } memcpy(p, &(st->as4), 4); return new; @@ -577,10 +577,12 @@ subtlv_decode_remote_endpoint(struct bgp_attr_encap_subtlv *subtlv, } if (subtlv->length == 8) { st->family = AF_INET; - memcpy(&st->ip_address.v4.s_addr, subtlv->value, 4); + memcpy(&st->ip_address.v4.s_addr, subtlv->value, + IPV4_MAX_BYTELEN); } else { st->family = AF_INET6; - memcpy(&(st->ip_address.v6.s6_addr), subtlv->value, 16); + memcpy(&(st->ip_address.v6.s6_addr), subtlv->value, + IPV6_MAX_BYTELEN); } i = subtlv->length - 4; ptr_get_be32(subtlv->value + i, &st->as4); diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c index 5ef593b9c0..c99f539c7b 100644 --- a/bgpd/bgp_evpn.c +++ b/bgpd/bgp_evpn.c @@ -4114,10 +4114,11 @@ static int process_type5_route(struct peer *peer, afi_t afi, safi_t safi, gw_afi = AF_INET; } else { SET_IPADDR_V6(&p.prefix.prefix_addr.ip); - memcpy(&p.prefix.prefix_addr.ip.ipaddr_v6, pfx, 16); - pfx += 16; - memcpy(&evpn.gw_ip.ipv6, pfx, 16); - pfx += 16; + memcpy(&p.prefix.prefix_addr.ip.ipaddr_v6, pfx, + IPV6_MAX_BYTELEN); + pfx += IPV6_MAX_BYTELEN; + memcpy(&evpn.gw_ip.ipv6, pfx, IPV6_MAX_BYTELEN); + pfx += IPV6_MAX_BYTELEN; gw_afi = AF_INET6; } diff --git a/lib/filter.c b/lib/filter.c index b7a935d076..72a66d85ad 100644 --- a/lib/filter.c +++ b/lib/filter.c @@ -108,10 +108,14 @@ static int filter_match_cisco(struct filter *mfilter, const struct prefix *p) masklen2ip(p->prefixlen, &mask); check_mask = mask.s_addr & ~filter->mask_mask.s_addr; - if (memcmp(&check_addr, &filter->addr.s_addr, 4) == 0 - && memcmp(&check_mask, &filter->mask.s_addr, 4) == 0) + if (memcmp(&check_addr, &filter->addr.s_addr, IPV4_MAX_BYTELEN) + == 0 + && memcmp(&check_mask, &filter->mask.s_addr, + IPV4_MAX_BYTELEN) + == 0) return 1; - } else if (memcmp(&check_addr, &filter->addr.s_addr, 4) == 0) + } else if (memcmp(&check_addr, &filter->addr.s_addr, IPV4_MAX_BYTELEN) + == 0) return 1; return 0; diff --git a/pbrd/pbr_zebra.c b/pbrd/pbr_zebra.c index a2eecbbf50..fc5303c9d8 100644 --- a/pbrd/pbr_zebra.c +++ b/pbrd/pbr_zebra.c @@ -286,11 +286,13 @@ static void route_add_helper(struct zapi_route *api, struct nexthop_group nhg, api_nh->ifindex = nhop->ifindex; break; case NEXTHOP_TYPE_IPV6: - memcpy(&api_nh->gate.ipv6, &nhop->gate.ipv6, 16); + memcpy(&api_nh->gate.ipv6, &nhop->gate.ipv6, + IPV6_MAX_BYTELEN); break; case NEXTHOP_TYPE_IPV6_IFINDEX: api_nh->ifindex = nhop->ifindex; - memcpy(&api_nh->gate.ipv6, &nhop->gate.ipv6, 16); + memcpy(&api_nh->gate.ipv6, &nhop->gate.ipv6, + IPV6_MAX_BYTELEN); break; case NEXTHOP_TYPE_BLACKHOLE: api_nh->bh_type = nhop->bh_type; @@ -465,7 +467,7 @@ void pbr_send_rnh(struct nexthop *nhop, bool reg) case NEXTHOP_TYPE_IPV6: case NEXTHOP_TYPE_IPV6_IFINDEX: p.family = AF_INET6; - memcpy(&p.u.prefix6, &nhop->gate.ipv6, 16); + memcpy(&p.u.prefix6, &nhop->gate.ipv6, IPV6_MAX_BYTELEN); p.prefixlen = IPV6_MAX_BITLEN; if (IN6_IS_ADDR_LINKLOCAL(&nhop->gate.ipv6)) /* diff --git a/sharpd/sharp_vty.c b/sharpd/sharp_vty.c index f8c46894ba..b6581cd9e6 100644 --- a/sharpd/sharp_vty.c +++ b/sharpd/sharp_vty.c @@ -98,7 +98,7 @@ DEFPY(watch_nexthop_v6, watch_nexthop_v6_cmd, if (n) { type_import = false; p.prefixlen = IPV6_MAX_BITLEN; - memcpy(&p.u.prefix6, &nhop, 16); + memcpy(&p.u.prefix6, &nhop, IPV6_MAX_BYTELEN); p.family = AF_INET6; } else { type_import = true; diff --git a/staticd/static_nht.c b/staticd/static_nht.c index feb6e0f993..d42c5c2777 100644 --- a/staticd/static_nht.c +++ b/staticd/static_nht.c @@ -52,7 +52,8 @@ static void static_nht_update_path(struct route_node *rn, nh->nh_valid = !!nh_num; if (nhp->family == AF_INET6 - && memcmp(&nhp->u.prefix6, &nh->addr.ipv6, 16) == 0) + && memcmp(&nhp->u.prefix6, &nh->addr.ipv6, IPV6_MAX_BYTELEN) + == 0) nh->nh_valid = !!nh_num; if (nh->state == STATIC_START) diff --git a/zebra/zebra_nhg.c b/zebra/zebra_nhg.c index cfd4ccf817..af86263a16 100644 --- a/zebra/zebra_nhg.c +++ b/zebra/zebra_nhg.c @@ -2052,7 +2052,8 @@ static int nexthop_active(struct nexthop *nexthop, struct nhg_hash_entry *nhe, && ((top->family == AF_INET && top->prefixlen == IPV4_MAX_BITLEN && nexthop->gate.ipv4.s_addr == top->u.prefix4.s_addr) || (top->family == AF_INET6 && top->prefixlen == IPV6_MAX_BITLEN - && memcmp(&nexthop->gate.ipv6, &top->u.prefix6, 16) + && memcmp(&nexthop->gate.ipv6, &top->u.prefix6, + IPV6_MAX_BYTELEN) == 0))) { if (IS_ZEBRA_DEBUG_RIB_DETAILED) zlog_debug( -- 2.39.5