summaryrefslogtreecommitdiff
path: root/bgpd/bgp_updgrp_packet.c
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/bgp_updgrp_packet.c')
-rw-r--r--bgpd/bgp_updgrp_packet.c55
1 files changed, 27 insertions, 28 deletions
diff --git a/bgpd/bgp_updgrp_packet.c b/bgpd/bgp_updgrp_packet.c
index f87e372540..f706b834fe 100644
--- a/bgpd/bgp_updgrp_packet.c
+++ b/bgpd/bgp_updgrp_packet.c
@@ -488,8 +488,7 @@ struct stream *bpacket_reformat_for_peer(struct bpacket *pkt,
stream_put_in_addr_at(s, offset_nh, mod_v4nh);
if (bgp_debug_update(peer, NULL, NULL, 0))
- zlog_debug("u%" PRIu64 ":s%" PRIu64
- " %s send UPDATE w/ nexthop %s%s",
+ zlog_debug("u%" PRIu64 ":s%" PRIu64" %s send UPDATE w/ nexthop %s%s",
PAF_SUBGRP(paf)->update_group->id,
PAF_SUBGRP(paf)->id, peer->host,
inet_ntoa(*mod_v4nh),
@@ -575,6 +574,18 @@ struct stream *bpacket_reformat_for_peer(struct bpacket *pkt,
gnh_modified = 1;
}
+ if (IN6_IS_ADDR_UNSPECIFIED(mod_v6nhg)) {
+ if (peer->nexthop.v4.s_addr) {
+ ipv4_to_ipv4_mapped_ipv6(mod_v6nhg,
+ peer->nexthop.v4);
+ }
+ }
+
+ if (IS_MAPPED_IPV6(&peer->nexthop.v6_global)) {
+ mod_v6nhg = &peer->nexthop.v6_global;
+ gnh_modified = 1;
+ }
+
if (nhlen == BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL
|| nhlen == BGP_ATTR_NHLEN_VPNV6_GLOBAL_AND_LL) {
stream_get_from(&v6nhlocal, s, offset_nhlocal,
@@ -594,8 +605,7 @@ struct stream *bpacket_reformat_for_peer(struct bpacket *pkt,
if (nhlen == BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL
|| nhlen == BGP_ATTR_NHLEN_VPNV6_GLOBAL_AND_LL)
zlog_debug(
- "u%" PRIu64 ":s%" PRIu64
- " %s send UPDATE w/ mp_nexthops %s, %s%s",
+ "u%" PRIu64 ":s%" PRIu64" %s send UPDATE w/ mp_nexthops %s, %s%s",
PAF_SUBGRP(paf)->update_group->id,
PAF_SUBGRP(paf)->id, peer->host,
inet_ntop(AF_INET6, mod_v6nhg, buf,
@@ -606,8 +616,7 @@ struct stream *bpacket_reformat_for_peer(struct bpacket *pkt,
? " and RD"
: ""));
else
- zlog_debug("u%" PRIu64 ":s%" PRIu64
- " %s send UPDATE w/ mp_nexthop %s%s",
+ zlog_debug("u%" PRIu64 ":s%" PRIu64" %s send UPDATE w/ mp_nexthop %s%s",
PAF_SUBGRP(paf)->update_group->id,
PAF_SUBGRP(paf)->id, peer->host,
inet_ntop(AF_INET6, mod_v6nhg, buf,
@@ -633,8 +642,7 @@ struct stream *bpacket_reformat_for_peer(struct bpacket *pkt,
stream_put_in_addr_at(s, vec->offset + 1, mod_v4nh);
if (bgp_debug_update(peer, NULL, NULL, 0))
- zlog_debug("u%" PRIu64 ":s%" PRIu64
- " %s send UPDATE w/ nexthop %s",
+ zlog_debug("u%" PRIu64 ":s%" PRIu64" %s send UPDATE w/ nexthop %s",
PAF_SUBGRP(paf)->update_group->id,
PAF_SUBGRP(paf)->id, peer->host,
inet_ntoa(*mod_v4nh));
@@ -750,8 +758,7 @@ struct bpacket *subgroup_update_packet(struct update_subgroup *subgrp)
if (BGP_DEBUG(update, UPDATE_OUT)
|| BGP_DEBUG(update, UPDATE_PREFIX)) {
zlog_debug(
- "%s reached maximum prefix to be send (%" PRIu32
- ")",
+ "%s reached maximum prefix to be send (%u)",
peer->host, peer->pmax_out[afi][safi]);
}
goto next;
@@ -815,8 +822,7 @@ struct bpacket *subgroup_update_packet(struct update_subgroup *subgrp)
if (space_remaining < space_needed) {
flog_err(
EC_BGP_UPDGRP_ATTR_LEN,
- "u%" PRIu64 ":s%" PRIu64
- " attributes too long, cannot send UPDATE",
+ "u%" PRIu64 ":s%" PRIu64" attributes too long, cannot send UPDATE",
subgrp->update_group->id, subgrp->id);
/* Flush the FIFO update queue */
@@ -831,7 +837,7 @@ struct bpacket *subgroup_update_packet(struct update_subgroup *subgrp)
memset(send_attr_str, 0, BUFSIZ);
send_attr_printed = 0;
bgp_dump_attr(adv->baa->attr, send_attr_str,
- BUFSIZ);
+ sizeof(send_attr_str));
}
}
@@ -872,8 +878,7 @@ struct bpacket *subgroup_update_packet(struct update_subgroup *subgrp)
char pfx_buf[BGP_PRD_PATH_STRLEN];
if (!send_attr_printed) {
- zlog_debug("u%" PRIu64 ":s%" PRIu64
- " send UPDATE w/ attr: %s",
+ zlog_debug("u%" PRIu64 ":s%" PRIu64" send UPDATE w/ attr: %s",
subgrp->update_group->id, subgrp->id,
send_attr_str);
if (!stream_empty(snlri)) {
@@ -883,8 +888,7 @@ struct bpacket *subgroup_update_packet(struct update_subgroup *subgrp)
pkt_afi = afi_int2iana(afi);
pkt_safi = safi_int2iana(safi);
zlog_debug(
- "u%" PRIu64 ":s%" PRIu64
- " send MP_REACH for afi/safi %d/%d",
+ "u%" PRIu64 ":s%" PRIu64" send MP_REACH for afi/safi %d/%d",
subgrp->update_group->id,
subgrp->id, pkt_afi, pkt_safi);
}
@@ -928,8 +932,7 @@ next:
packet = stream_dup(s);
bgp_packet_set_size(packet);
if (bgp_debug_update(NULL, NULL, subgrp->update_group, 0))
- zlog_debug("u%" PRIu64 ":s%" PRIu64
- " send UPDATE len %zd numpfx %d",
+ zlog_debug("u%" PRIu64 ":s%" PRIu64" send UPDATE len %zd numpfx %d",
subgrp->update_group->id, subgrp->id,
(stream_get_endp(packet)
- stream_get_getp(packet)),
@@ -1043,8 +1046,7 @@ struct bpacket *subgroup_withdraw_packet(struct update_subgroup *subgrp)
if (bgp_debug_update(NULL, NULL,
subgrp->update_group, 0))
zlog_debug(
- "u%" PRIu64 ":s%" PRIu64
- " send MP_UNREACH for afi/safi %d/%d",
+ "u%" PRIu64 ":s%" PRIu64" send MP_UNREACH for afi/safi %d/%d",
subgrp->update_group->id,
subgrp->id, pkt_afi, pkt_safi);
}
@@ -1062,8 +1064,7 @@ struct bpacket *subgroup_withdraw_packet(struct update_subgroup *subgrp)
bgp_debug_rdpfxpath2str(afi, safi, prd, dest_p, NULL, 0,
addpath_encode, addpath_tx_id,
pfx_buf, sizeof(pfx_buf));
- zlog_debug("u%" PRIu64 ":s%" PRIu64
- " send UPDATE %s -- unreachable",
+ zlog_debug("u%" PRIu64 ":s%" PRIu64" send UPDATE %s -- unreachable",
subgrp->update_group->id, subgrp->id,
pfx_buf);
}
@@ -1091,8 +1092,7 @@ struct bpacket *subgroup_withdraw_packet(struct update_subgroup *subgrp)
}
bgp_packet_set_size(s);
if (bgp_debug_update(NULL, NULL, subgrp->update_group, 0))
- zlog_debug("u%" PRIu64 ":s%" PRIu64
- " send UPDATE (withdraw) len %zd numpfx %d",
+ zlog_debug("u%" PRIu64 ":s%" PRIu64" send UPDATE (withdraw) len %zd numpfx %d",
subgrp->update_group->id, subgrp->id,
(stream_get_endp(s) - stream_get_getp(s)),
num_pfx);
@@ -1147,7 +1147,7 @@ void subgroup_default_update_packet(struct update_subgroup *subgrp,
attrstr[0] = '\0';
- bgp_dump_attr(attr, attrstr, BUFSIZ);
+ bgp_dump_attr(attr, attrstr, sizeof(attrstr));
if (addpath_encode)
snprintf(tx_id_buf, sizeof(tx_id_buf),
@@ -1235,8 +1235,7 @@ void subgroup_default_withdraw_packet(struct update_subgroup *subgrp)
" with addpath ID %u",
BGP_ADDPATH_TX_ID_FOR_DEFAULT_ORIGINATE);
- zlog_debug("u%" PRIu64 ":s%" PRIu64
- " send UPDATE %s%s -- unreachable",
+ zlog_debug("u%" PRIu64 ":s%" PRIu64" send UPDATE %s%s -- unreachable",
(SUBGRP_UPDGRP(subgrp))->id, subgrp->id,
prefix2str(&p, buf, sizeof(buf)), tx_id_buf);
}