*: Replace 4/16 integers to IPV4_MAX_BYTELEN/IPV6_MAX_BYTELEN

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
This commit is contained in:
Donatas Abraitis 2021-07-01 23:29:26 +03:00
parent 12256b84a5
commit 8643c2e5f7
9 changed files with 82 additions and 63 deletions

View File

@ -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];
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 (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';
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,

View File

@ -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

View File

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

View File

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

View File

@ -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;

View File

@ -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))
/*

View File

@ -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;

View File

@ -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)

View File

@ -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(