mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 06:50:17 +00:00
Merge pull request #8344 from pjdruddy/coverity_mpls_l3vpn
lib, bgpd: add a specific oid_copy function for IPv6 addrs
This commit is contained in:
commit
1267dd416e
@ -1478,10 +1478,16 @@ static struct bgp_path_info *bgpL3vpnRte_lookup(struct variable *v, oid name[],
|
||||
oid_copy_str(&name[namelen], (*l3vpn_bgp)->name,
|
||||
vrf_name_len);
|
||||
oid_index = namelen + vrf_name_len;
|
||||
name[oid_index++] =
|
||||
v4 ? INETADDRESSTYPEIPV4 : INETADDRESSTYPEIPV6;
|
||||
oid_copy_addr(&name[oid_index], &p->u.prefix4,
|
||||
addr_len);
|
||||
if (v4) {
|
||||
name[oid_index++] = INETADDRESSTYPEIPV4;
|
||||
oid_copy_in_addr(&name[oid_index],
|
||||
&p->u.prefix4);
|
||||
} else {
|
||||
name[oid_index++] = INETADDRESSTYPEIPV6;
|
||||
oid_copy_in6_addr(&name[oid_index],
|
||||
&p->u.prefix6);
|
||||
}
|
||||
|
||||
oid_index += addr_len;
|
||||
name[oid_index++] = p->prefixlen;
|
||||
name[oid_index++] = *policy >> 8;
|
||||
@ -1493,9 +1499,8 @@ static struct bgp_path_info *bgpL3vpnRte_lookup(struct variable *v, oid name[],
|
||||
INETADDRESSTYPEUNKNOWN;
|
||||
else {
|
||||
name[oid_index++] = INETADDRESSTYPEIPV4;
|
||||
oid_copy_addr(&name[oid_index],
|
||||
&attr->nexthop,
|
||||
sizeof(struct in_addr));
|
||||
oid_copy_in_addr(&name[oid_index],
|
||||
&attr->nexthop);
|
||||
oid_index += sizeof(struct in_addr);
|
||||
}
|
||||
} else {
|
||||
@ -1505,11 +1510,9 @@ static struct bgp_path_info *bgpL3vpnRte_lookup(struct variable *v, oid name[],
|
||||
INETADDRESSTYPEUNKNOWN;
|
||||
else {
|
||||
name[oid_index++] = INETADDRESSTYPEIPV6;
|
||||
oid_copy_addr(
|
||||
oid_copy_in6_addr(
|
||||
&name[oid_index],
|
||||
(struct in_addr *)&attr
|
||||
->mp_nexthop_global,
|
||||
sizeof(struct in6_addr));
|
||||
&attr->mp_nexthop_global);
|
||||
oid_index += sizeof(struct in6_addr);
|
||||
}
|
||||
}
|
||||
|
@ -435,7 +435,7 @@ static struct peer *bgpPeerTable_lookup(struct variable *v, oid name[],
|
||||
if (peer == NULL)
|
||||
return NULL;
|
||||
|
||||
oid_copy_addr(name + namelen, addr, sizeof(struct in_addr));
|
||||
oid_copy_in_addr(name + namelen, addr);
|
||||
*length = sizeof(struct in_addr) + namelen;
|
||||
|
||||
return peer;
|
||||
@ -767,14 +767,12 @@ static struct bgp_path_info *bgp4PathAttrLookup(struct variable *v, oid name[],
|
||||
v->namelen + BGP_PATHATTR_ENTRY_OFFSET;
|
||||
|
||||
offset = name + v->namelen;
|
||||
oid_copy_addr(offset, &rn_p->u.prefix4,
|
||||
IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(offset, &rn_p->u.prefix4);
|
||||
offset += IN_ADDR_SIZE;
|
||||
*offset = rn_p->prefixlen;
|
||||
offset++;
|
||||
oid_copy_addr(offset,
|
||||
&min->peer->su.sin.sin_addr,
|
||||
IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(offset,
|
||||
&min->peer->su.sin.sin_addr);
|
||||
addr->prefix = rn_p->u.prefix4;
|
||||
addr->prefixlen = rn_p->prefixlen;
|
||||
|
||||
@ -868,7 +866,7 @@ static int bgpTrapEstablished(struct peer *peer)
|
||||
if (ret == 0)
|
||||
return 0;
|
||||
|
||||
oid_copy_addr(index, &addr, IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(index, &addr);
|
||||
|
||||
smux_trap(bgp_variables, array_size(bgp_variables), bgp_trap_oid,
|
||||
array_size(bgp_trap_oid), bgp_oid,
|
||||
@ -887,7 +885,7 @@ static int bgpTrapBackwardTransition(struct peer *peer)
|
||||
if (ret == 0)
|
||||
return 0;
|
||||
|
||||
oid_copy_addr(index, &addr, IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(index, &addr);
|
||||
|
||||
smux_trap(bgp_variables, array_size(bgp_variables), bgp_trap_oid,
|
||||
array_size(bgp_trap_oid), bgp_oid,
|
||||
|
@ -588,8 +588,7 @@ static struct eigrp_neighbor *eigrpNbrLookup(struct variable *v, oid *name,
|
||||
|
||||
if (nbr) {
|
||||
*length = v->namelen + IN_ADDR_SIZE + 1;
|
||||
oid_copy_addr(name + v->namelen, nbr_addr,
|
||||
IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(name + v->namelen, nbr_addr);
|
||||
name[v->namelen + IN_ADDR_SIZE] = *ifindex;
|
||||
return nbr;
|
||||
}
|
||||
|
@ -301,8 +301,7 @@ static uint8_t *ldpEntityTable(struct variable *v, oid name[], size_t *length,
|
||||
|
||||
/* Append index */
|
||||
*length = LDP_ENTITY_TOTAL_LEN;
|
||||
oid_copy_addr(name + v->namelen, &entityLdpId,
|
||||
IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(name + v->namelen, &entityLdpId);
|
||||
name[v->namelen + 4] = 0;
|
||||
name[v->namelen + 5] = 0;
|
||||
name[v->namelen + 6] = LDP_DEFAULT_ENTITY_INDEX;
|
||||
@ -402,8 +401,7 @@ static uint8_t *ldpEntityStatsTable(struct variable *v, oid name[],
|
||||
|
||||
/* Append index */
|
||||
*length = LDP_ENTITY_TOTAL_LEN;
|
||||
oid_copy_addr(name + v->namelen, &entityLdpId,
|
||||
IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(name + v->namelen, &entityLdpId);
|
||||
name[v->namelen + 4] = 0;
|
||||
name[v->namelen + 5] = 0;
|
||||
name[v->namelen + 6] = LDP_DEFAULT_ENTITY_INDEX;
|
||||
@ -640,13 +638,11 @@ static uint8_t *ldpHelloAdjacencyTable(struct variable *v, oid name[], size_t *l
|
||||
|
||||
struct in_addr peerLdpId = ctl_adj->id;
|
||||
|
||||
oid_copy_addr(name + v->namelen, &entityLdpId,
|
||||
sizeof(struct in_addr));
|
||||
oid_copy_in_addr(name + v->namelen, &entityLdpId);
|
||||
name[v->namelen + 4] = 0;
|
||||
name[v->namelen + 5] = 0;
|
||||
name[v->namelen + 6] = LDP_DEFAULT_ENTITY_INDEX;
|
||||
oid_copy_addr(name + v->namelen + 7, &peerLdpId,
|
||||
sizeof(struct in_addr));
|
||||
oid_copy_in_addr(name + v->namelen + 7, &peerLdpId);
|
||||
name[v->namelen + 11] = 0;
|
||||
name[v->namelen + 12] = 0;
|
||||
name[v->namelen + 13] = adjacencyIndex;
|
||||
@ -804,14 +800,12 @@ static uint8_t *ldpPeerTable(struct variable *v, oid name[], size_t *length,
|
||||
memcpy(name, v->name, v->namelen * sizeof(oid));
|
||||
|
||||
/* Append index */
|
||||
oid_copy_addr(name + v->namelen, &entityLdpId,
|
||||
sizeof(struct in_addr));
|
||||
oid_copy_in_addr(name + v->namelen, &entityLdpId);
|
||||
|
||||
name[v->namelen + 4] = 0;
|
||||
name[v->namelen + 5] = 0;
|
||||
name[v->namelen + 6] = entityIndex;
|
||||
oid_copy_addr(name + v->namelen + 7, &peerLdpId,
|
||||
sizeof(struct in_addr));
|
||||
oid_copy_in_addr(name + v->namelen + 7, &peerLdpId);
|
||||
name[v->namelen + 11] = 0;
|
||||
name[v->namelen + 12] = 0;
|
||||
|
||||
@ -875,14 +869,12 @@ static uint8_t *ldpSessionTable(struct variable *v, oid name[], size_t *length,
|
||||
memcpy(name, v->name, v->namelen * sizeof(oid));
|
||||
|
||||
/* Append index */
|
||||
oid_copy_addr(name + v->namelen, &entityLdpId,
|
||||
sizeof(struct in_addr));
|
||||
oid_copy_in_addr(name + v->namelen, &entityLdpId);
|
||||
|
||||
name[v->namelen + 4] = 0;
|
||||
name[v->namelen + 5] = 0;
|
||||
name[v->namelen + 6] = entityIndex;
|
||||
oid_copy_addr(name + v->namelen + 7, &peerLdpId,
|
||||
sizeof(struct in_addr));
|
||||
oid_copy_in_addr(name + v->namelen + 7, &peerLdpId);
|
||||
name[v->namelen + 11] = 0;
|
||||
name[v->namelen + 12] = 0;
|
||||
|
||||
@ -961,13 +953,11 @@ static uint8_t *ldpSessionStatsTable(struct variable *v, oid name[],
|
||||
memcpy(name, v->name, v->namelen * sizeof(oid));
|
||||
|
||||
/* Append index */
|
||||
oid_copy_addr(name + v->namelen, &entityLdpId,
|
||||
sizeof(struct in_addr));
|
||||
oid_copy_in_addr(name + v->namelen, &entityLdpId);
|
||||
name[v->namelen + 4] = 0;
|
||||
name[v->namelen + 5] = 0;
|
||||
name[v->namelen + 6] = entityIndex;
|
||||
oid_copy_addr(name + v->namelen + 7, &peerLdpId,
|
||||
sizeof(struct in_addr));
|
||||
oid_copy_in_addr(name + v->namelen + 7, &peerLdpId);
|
||||
name[v->namelen + 11] = 0;
|
||||
name[v->namelen + 12] = 0;
|
||||
|
||||
@ -1147,15 +1137,15 @@ ldpTrapSession(struct nbr * nbr, unsigned int sptrap)
|
||||
entityIndex = LDP_DEFAULT_ENTITY_INDEX;
|
||||
peerLdpId = ctl_nbr->id;
|
||||
|
||||
oid_copy_addr(index, &entityLdpId, sizeof(struct in_addr));
|
||||
index[4] = 0;
|
||||
index[5] = 0;
|
||||
index[6] = entityIndex;
|
||||
oid_copy_addr(&index[7], &peerLdpId, sizeof(struct in_addr));
|
||||
index[11] = 0;
|
||||
index[12] = 0;
|
||||
oid_copy_in_addr(index, &entityLdpId);
|
||||
index[4] = 0;
|
||||
index[5] = 0;
|
||||
index[6] = entityIndex;
|
||||
oid_copy_in_addr(&index[7], &peerLdpId);
|
||||
index[11] = 0;
|
||||
index[12] = 0;
|
||||
|
||||
index[LDP_PEER_ENTRY_MAX_IDX_LEN] = 0;
|
||||
index[LDP_PEER_ENTRY_MAX_IDX_LEN] = 0;
|
||||
|
||||
smux_trap(ldpe_variables, array_size(ldpe_variables), ldp_trap_oid,
|
||||
array_size(ldp_trap_oid), ldp_oid,
|
||||
|
@ -152,7 +152,8 @@ extern void oid2in_addr(oid[], int, struct in_addr *);
|
||||
extern void oid2in6_addr(oid oid[], struct in6_addr *addr);
|
||||
extern void oid2int(oid oid[], int *dest);
|
||||
extern void *oid_copy(void *, const void *, size_t);
|
||||
extern void oid_copy_addr(oid[], const struct in_addr *, int);
|
||||
extern void oid_copy_in_addr(oid[], const struct in_addr *);
|
||||
extern void oid_copy_in6_addr(oid[], const struct in6_addr *);
|
||||
extern void oid_copy_int(oid oid[], int *val);
|
||||
extern void oid2string(oid oid[], int len, char *string);
|
||||
extern void oid_copy_str(oid oid[], const char *string, int len);
|
||||
|
17
lib/snmp.c
17
lib/snmp.c
@ -88,13 +88,24 @@ void oid2int(oid oid[], int *dest)
|
||||
*dest = ntohl(network_dest);
|
||||
}
|
||||
|
||||
void oid_copy_addr(oid oid[], const struct in_addr *addr, int len)
|
||||
void oid_copy_in_addr(oid oid[], const struct in_addr *addr)
|
||||
{
|
||||
int i;
|
||||
const uint8_t *pnt;
|
||||
int len = sizeof(struct in_addr);
|
||||
|
||||
if (len == 0)
|
||||
return;
|
||||
pnt = (uint8_t *)addr;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
oid[i] = *pnt++;
|
||||
}
|
||||
|
||||
|
||||
void oid_copy_in6_addr(oid oid[], const struct in6_addr *addr)
|
||||
{
|
||||
int i;
|
||||
const uint8_t *pnt;
|
||||
int len = sizeof(struct in6_addr);
|
||||
|
||||
pnt = (uint8_t *)addr;
|
||||
|
||||
|
@ -674,7 +674,7 @@ static struct ospf_area *ospfAreaLookup(struct variable *v, oid name[],
|
||||
if (area == NULL)
|
||||
return NULL;
|
||||
|
||||
oid_copy_addr(name + v->namelen, addr, sizeof(struct in_addr));
|
||||
oid_copy_in_addr(name + v->namelen, addr);
|
||||
*length = sizeof(struct in_addr) + v->namelen;
|
||||
|
||||
return area;
|
||||
@ -800,7 +800,7 @@ static struct ospf_area *ospfStubAreaLookup(struct variable *v, oid name[],
|
||||
if (area == NULL)
|
||||
return NULL;
|
||||
|
||||
oid_copy_addr(name + v->namelen, addr, sizeof(struct in_addr));
|
||||
oid_copy_in_addr(name + v->namelen, addr);
|
||||
/* Set TOS 0. */
|
||||
name[v->namelen + sizeof(struct in_addr)] = 0;
|
||||
*length = v->namelen + sizeof(struct in_addr) + 1;
|
||||
@ -1008,15 +1008,14 @@ static struct ospf_lsa *ospfLsdbLookup(struct variable *v, oid *name,
|
||||
|
||||
/* Fill in value. */
|
||||
offset = name + v->namelen;
|
||||
oid_copy_addr(offset, area_id, IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(offset, area_id);
|
||||
offset += IN_ADDR_SIZE;
|
||||
*offset = lsa->data->type;
|
||||
offset++;
|
||||
oid_copy_addr(offset, &lsa->data->id,
|
||||
IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(offset, &lsa->data->id);
|
||||
offset += IN_ADDR_SIZE;
|
||||
oid_copy_addr(offset, &lsa->data->adv_router,
|
||||
IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(offset,
|
||||
&lsa->data->adv_router);
|
||||
|
||||
return lsa;
|
||||
}
|
||||
@ -1170,9 +1169,9 @@ static struct ospf_area_range *ospfAreaRangeLookup(struct variable *v,
|
||||
|
||||
/* Fill in value. */
|
||||
offset = name + v->namelen;
|
||||
oid_copy_addr(offset, area_id, IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(offset, area_id);
|
||||
offset += IN_ADDR_SIZE;
|
||||
oid_copy_addr(offset, range_net, IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(offset, range_net);
|
||||
|
||||
return range;
|
||||
}
|
||||
@ -1573,7 +1572,7 @@ static struct ospf_interface *ospfIfLookup(struct variable *v, oid *name,
|
||||
if (oi) {
|
||||
*length = v->namelen + IN_ADDR_SIZE + 1;
|
||||
offset = name + v->namelen;
|
||||
oid_copy_addr(offset, ifaddr, IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(offset, ifaddr);
|
||||
offset += IN_ADDR_SIZE;
|
||||
*offset = *ifindex;
|
||||
return oi;
|
||||
@ -1717,7 +1716,7 @@ static struct ospf_interface *ospfIfMetricLookup(struct variable *v, oid *name,
|
||||
if (oi) {
|
||||
*length = v->namelen + IN_ADDR_SIZE + 1 + 1;
|
||||
offset = name + v->namelen;
|
||||
oid_copy_addr(offset, ifaddr, IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(offset, ifaddr);
|
||||
offset += IN_ADDR_SIZE;
|
||||
*offset = *ifindex;
|
||||
offset++;
|
||||
@ -1906,9 +1905,9 @@ ospfVirtIfLookup(struct variable *v, oid *name, size_t *length,
|
||||
|
||||
if (vl_data) {
|
||||
*length = v->namelen + IN_ADDR_SIZE + IN_ADDR_SIZE;
|
||||
oid_copy_addr(name + v->namelen, area_id, IN_ADDR_SIZE);
|
||||
oid_copy_addr(name + v->namelen + IN_ADDR_SIZE,
|
||||
neighbor, IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(name + v->namelen, area_id);
|
||||
oid_copy_in_addr(name + v->namelen + IN_ADDR_SIZE,
|
||||
neighbor);
|
||||
return vl_data;
|
||||
}
|
||||
}
|
||||
@ -2083,8 +2082,7 @@ static struct ospf_neighbor *ospfNbrLookup(struct variable *v, oid *name,
|
||||
|
||||
if (nbr) {
|
||||
*length = v->namelen + IN_ADDR_SIZE + 1;
|
||||
oid_copy_addr(name + v->namelen, nbr_addr,
|
||||
IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(name + v->namelen, nbr_addr);
|
||||
name[v->namelen + IN_ADDR_SIZE] = *ifindex;
|
||||
return nbr;
|
||||
}
|
||||
@ -2307,10 +2305,9 @@ static struct ospf_lsa *ospfExtLsdbLookup(struct variable *v, oid *name,
|
||||
|
||||
*offset = OSPF_AS_EXTERNAL_LSA;
|
||||
offset++;
|
||||
oid_copy_addr(offset, &lsa->data->id, IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(offset, &lsa->data->id);
|
||||
offset += IN_ADDR_SIZE;
|
||||
oid_copy_addr(offset, &lsa->data->adv_router,
|
||||
IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(offset, &lsa->data->adv_router);
|
||||
|
||||
return lsa;
|
||||
}
|
||||
@ -2440,7 +2437,7 @@ static void ospfTrapNbrStateChange(struct ospf_neighbor *on)
|
||||
zlog_info("%s: trap sent: %pI4 now %s", __func__,
|
||||
&on->address.u.prefix4, msgbuf);
|
||||
|
||||
oid_copy_addr(index, &(on->address.u.prefix4), IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(index, &(on->address.u.prefix4));
|
||||
index[IN_ADDR_SIZE] = 0;
|
||||
|
||||
smux_trap(ospf_variables, array_size(ospf_variables), ospf_trap_oid,
|
||||
@ -2455,7 +2452,7 @@ static void ospfTrapVirtNbrStateChange(struct ospf_neighbor *on)
|
||||
|
||||
zlog_info("ospfTrapVirtNbrStateChange trap sent");
|
||||
|
||||
oid_copy_addr(index, &(on->address.u.prefix4), IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(index, &(on->address.u.prefix4));
|
||||
index[IN_ADDR_SIZE] = 0;
|
||||
|
||||
smux_trap(ospf_variables, array_size(ospf_variables), ospf_trap_oid,
|
||||
@ -2499,7 +2496,7 @@ static void ospfTrapIfStateChange(struct ospf_interface *oi)
|
||||
&oi->address->u.prefix4,
|
||||
lookup_msg(ospf_ism_state_msg, oi->state, NULL));
|
||||
|
||||
oid_copy_addr(index, &(oi->address->u.prefix4), IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(index, &(oi->address->u.prefix4));
|
||||
index[IN_ADDR_SIZE] = 0;
|
||||
|
||||
smux_trap(ospf_variables, array_size(ospf_variables), ospf_trap_oid,
|
||||
@ -2514,7 +2511,7 @@ static void ospfTrapVirtIfStateChange(struct ospf_interface *oi)
|
||||
|
||||
zlog_info("ospfTrapVirtIfStateChange trap sent");
|
||||
|
||||
oid_copy_addr(index, &(oi->address->u.prefix4), IN_ADDR_SIZE);
|
||||
oid_copy_in_addr(index, &(oi->address->u.prefix4));
|
||||
index[IN_ADDR_SIZE] = 0;
|
||||
|
||||
smux_trap(ospf_variables, array_size(ospf_variables), ospf_trap_oid,
|
||||
|
@ -271,7 +271,7 @@ static struct interface *rip2IfLookup(struct variable *v, oid name[],
|
||||
if (ifp == NULL)
|
||||
return NULL;
|
||||
|
||||
oid_copy_addr(name + v->namelen, addr, sizeof(struct in_addr));
|
||||
oid_copy_in_addr(name + v->namelen, addr);
|
||||
|
||||
*length = v->namelen + sizeof(struct in_addr);
|
||||
|
||||
@ -320,8 +320,8 @@ static struct rip_peer *rip2PeerLookup(struct variable *v, oid name[],
|
||||
|| (peer->domain
|
||||
> (int)name[v->namelen
|
||||
+ sizeof(struct in_addr)])) {
|
||||
oid_copy_addr(name + v->namelen, &peer->addr,
|
||||
sizeof(struct in_addr));
|
||||
oid_copy_in_addr(name + v->namelen,
|
||||
&peer->addr);
|
||||
name[v->namelen + sizeof(struct in_addr)] =
|
||||
peer->domain;
|
||||
*length =
|
||||
@ -334,8 +334,7 @@ static struct rip_peer *rip2PeerLookup(struct variable *v, oid name[],
|
||||
if (!peer)
|
||||
return NULL;
|
||||
|
||||
oid_copy_addr(name + v->namelen, &peer->addr,
|
||||
sizeof(struct in_addr));
|
||||
oid_copy_in_addr(name + v->namelen, &peer->addr);
|
||||
name[v->namelen + sizeof(struct in_addr)] = peer->domain;
|
||||
*length = sizeof(struct in_addr) + v->namelen + 1;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user