mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-25 19:49:55 +00:00
bgpd: send bgp link-state prefixes
Add the ability to send link-state prefixes that are in the BGP table. Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com> Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
This commit is contained in:
parent
39a8d354c1
commit
0c94fb9cc8
@ -40,6 +40,7 @@
|
||||
#endif
|
||||
#include "bgp_evpn.h"
|
||||
#include "bgp_flowspec_private.h"
|
||||
#include "bgp_linkstate_tlv.h"
|
||||
#include "bgp_mac.h"
|
||||
|
||||
/* Attribute strings for logging. */
|
||||
@ -4005,8 +4006,6 @@ size_t bgp_packet_mpattr_start(struct stream *s, struct peer *peer, afi_t afi,
|
||||
switch (safi) {
|
||||
case SAFI_LINKSTATE:
|
||||
case SAFI_LINKSTATE_VPN:
|
||||
/* TODO */
|
||||
break;
|
||||
case SAFI_UNICAST:
|
||||
case SAFI_MULTICAST:
|
||||
case SAFI_LABELED_UNICAST:
|
||||
@ -4042,8 +4041,6 @@ size_t bgp_packet_mpattr_start(struct stream *s, struct peer *peer, afi_t afi,
|
||||
switch (safi) {
|
||||
case SAFI_LINKSTATE:
|
||||
case SAFI_LINKSTATE_VPN:
|
||||
/* TODO */
|
||||
break;
|
||||
case SAFI_UNICAST:
|
||||
case SAFI_MULTICAST:
|
||||
case SAFI_LABELED_UNICAST:
|
||||
@ -4095,10 +4092,8 @@ size_t bgp_packet_mpattr_start(struct stream *s, struct peer *peer, afi_t afi,
|
||||
}
|
||||
break;
|
||||
case AFI_LINKSTATE:
|
||||
/* TODO */
|
||||
break;
|
||||
case AFI_L2VPN:
|
||||
if (safi != SAFI_FLOWSPEC)
|
||||
if (nh_afi == AFI_L2VPN && safi != SAFI_FLOWSPEC)
|
||||
flog_err(
|
||||
EC_BGP_ATTR_NH_SEND_LEN,
|
||||
"Bad nexthop when sending to %s, AFI %u SAFI %u nhlen %d",
|
||||
@ -4150,8 +4145,10 @@ void bgp_packet_mpattr_prefix(struct stream *s, afi_t afi, safi_t safi,
|
||||
addpath_tx_id);
|
||||
break;
|
||||
case SAFI_LINKSTATE:
|
||||
bgp_nlri_encode_linkstate(s, p);
|
||||
break;
|
||||
case SAFI_LINKSTATE_VPN:
|
||||
/* TODO */
|
||||
/* not yet supported */
|
||||
break;
|
||||
case SAFI_FLOWSPEC:
|
||||
stream_putc(s, p->u.prefix_flowspec.prefixlen);
|
||||
@ -4181,8 +4178,6 @@ size_t bgp_packet_mpattr_prefix_size(afi_t afi, safi_t safi,
|
||||
break;
|
||||
case SAFI_LINKSTATE:
|
||||
case SAFI_LINKSTATE_VPN:
|
||||
/* TODO */
|
||||
break;
|
||||
case SAFI_UNICAST:
|
||||
case SAFI_MULTICAST:
|
||||
break;
|
||||
|
@ -71,3 +71,17 @@ int bgp_nlri_parse_linkstate(struct peer *peer, struct attr *attr,
|
||||
}
|
||||
return BGP_NLRI_PARSE_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Encode Link-State prefix in Update (MP_REACH)
|
||||
*/
|
||||
void bgp_nlri_encode_linkstate(struct stream *s, const struct prefix *p)
|
||||
{
|
||||
/* NLRI type */
|
||||
stream_putw(s, p->u.prefix_linkstate.nlri_type);
|
||||
|
||||
/* Size */
|
||||
stream_putw(s, p->prefixlen);
|
||||
|
||||
stream_put(s, (const void *)p->u.prefix_linkstate.ptr, p->prefixlen);
|
||||
}
|
||||
|
@ -8,5 +8,6 @@
|
||||
|
||||
extern int bgp_nlri_parse_linkstate(struct peer *peer, struct attr *attr,
|
||||
struct bgp_nlri *packet, int withdraw);
|
||||
extern void bgp_nlri_encode_linkstate(struct stream *s, const struct prefix *p);
|
||||
|
||||
#endif /* BGP_LINKSTATE_TLV_H */
|
||||
|
@ -4729,8 +4729,8 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id,
|
||||
(safi == SAFI_UNICAST || safi == SAFI_LABELED_UNICAST ||
|
||||
(safi == SAFI_MPLS_VPN &&
|
||||
pi->sub_type != BGP_ROUTE_IMPORTED))) ||
|
||||
(safi == SAFI_EVPN &&
|
||||
bgp_evpn_is_prefix_nht_supported(p))) {
|
||||
(safi == SAFI_EVPN && bgp_evpn_is_prefix_nht_supported(p)) ||
|
||||
afi == AFI_LINKSTATE) {
|
||||
if (safi != SAFI_EVPN && peer->sort == BGP_PEER_EBGP
|
||||
&& peer->ttl == BGP_DEFAULT_TTL
|
||||
&& !CHECK_FLAG(peer->flags,
|
||||
@ -4877,9 +4877,9 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id,
|
||||
/* Nexthop reachability check. */
|
||||
if (((afi == AFI_IP || afi == AFI_IP6) &&
|
||||
(safi == SAFI_UNICAST || safi == SAFI_LABELED_UNICAST ||
|
||||
(safi == SAFI_MPLS_VPN &&
|
||||
new->sub_type != BGP_ROUTE_IMPORTED))) ||
|
||||
(safi == SAFI_EVPN && bgp_evpn_is_prefix_nht_supported(p))) {
|
||||
(safi == SAFI_MPLS_VPN && new->sub_type != BGP_ROUTE_IMPORTED))) ||
|
||||
(safi == SAFI_EVPN && bgp_evpn_is_prefix_nht_supported(p)) ||
|
||||
afi == AFI_LINKSTATE) {
|
||||
if (safi != SAFI_EVPN && peer->sort == BGP_PEER_EBGP
|
||||
&& peer->ttl == BGP_DEFAULT_TTL
|
||||
&& !CHECK_FLAG(peer->flags,
|
||||
|
Loading…
Reference in New Issue
Block a user