mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 03:27:25 +00:00
bgpd: insert SID structure Sub-Sub-TLV
This patch enables frr to advertise SRv6 SID information with SID structure Sub-Sub-TLV. Signed-off-by: Ryoga Saito <contact@proelbtn.com>
This commit is contained in:
parent
cc8f05dfdc
commit
a1a5100851
@ -4267,26 +4267,38 @@ bgp_size_t bgp_packet_attribute(struct bgp *bgp, struct peer *peer,
|
||||
if ((afi == AFI_IP || afi == AFI_IP6) && safi == SAFI_MPLS_VPN) {
|
||||
if (attr->srv6_l3vpn) {
|
||||
uint8_t subtlv_len =
|
||||
BGP_PREFIX_SID_SRV6_L3_SERVICE_SID_INFO_LENGTH
|
||||
+ BGP_ATTR_MIN_LEN + 1; // reserved
|
||||
uint8_t tlv_len = subtlv_len + BGP_ATTR_MIN_LEN;
|
||||
BGP_PREFIX_SID_SRV6_L3_SERVICE_SID_STRUCTURE_LENGTH
|
||||
+ BGP_ATTR_MIN_LEN
|
||||
+ BGP_PREFIX_SID_SRV6_L3_SERVICE_SID_INFO_LENGTH;
|
||||
uint8_t tlv_len = subtlv_len + BGP_ATTR_MIN_LEN + 1;
|
||||
uint8_t attr_len = tlv_len + BGP_ATTR_MIN_LEN;
|
||||
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS);
|
||||
stream_putc(s, BGP_ATTR_PREFIX_SID);
|
||||
stream_putc(s, tlv_len);
|
||||
stream_putc(s, attr_len);
|
||||
stream_putc(s, BGP_PREFIX_SID_SRV6_L3_SERVICE);
|
||||
stream_putw(s, subtlv_len);
|
||||
stream_putw(s, tlv_len);
|
||||
stream_putc(s, 0); /* reserved */
|
||||
stream_putc(s, BGP_PREFIX_SID_SRV6_L3_SERVICE_SID_INFO);
|
||||
stream_putw(
|
||||
s,
|
||||
BGP_PREFIX_SID_SRV6_L3_SERVICE_SID_INFO_LENGTH);
|
||||
stream_putw(s, subtlv_len);
|
||||
stream_putc(s, 0); /* reserved */
|
||||
stream_put(s, &attr->srv6_l3vpn->sid,
|
||||
sizeof(attr->srv6_l3vpn->sid)); /* sid */
|
||||
stream_putc(s, 0); /* sid_flags */
|
||||
stream_putw(s, 0xffff); /* endpoint */
|
||||
stream_putc(s, 0); /* reserved */
|
||||
stream_putc(
|
||||
s,
|
||||
BGP_PREFIX_SID_SRV6_L3_SERVICE_SID_STRUCTURE);
|
||||
stream_putw(
|
||||
s,
|
||||
BGP_PREFIX_SID_SRV6_L3_SERVICE_SID_STRUCTURE_LENGTH);
|
||||
stream_putc(s, attr->srv6_l3vpn->loc_block_len);
|
||||
stream_putc(s, attr->srv6_l3vpn->loc_node_len);
|
||||
stream_putc(s, attr->srv6_l3vpn->func_len);
|
||||
stream_putc(s, attr->srv6_l3vpn->arg_len);
|
||||
stream_putc(s, attr->srv6_l3vpn->transposition_len);
|
||||
stream_putc(s, attr->srv6_l3vpn->transposition_offset);
|
||||
} else if (attr->srv6_vpn) {
|
||||
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS);
|
||||
|
@ -78,6 +78,7 @@
|
||||
|
||||
/* SRv6 Service Data Sub-Sub-TLV types */
|
||||
#define BGP_PREFIX_SID_SRV6_L3_SERVICE_SID_STRUCTURE 1
|
||||
#define BGP_PREFIX_SID_SRV6_L3_SERVICE_SID_STRUCTURE_LENGTH 6
|
||||
|
||||
/* SRv6 SID Structure default values */
|
||||
#define BGP_PREFIX_SID_SRV6_LOCATOR_BLOCK_LENGTH 40
|
||||
|
Loading…
Reference in New Issue
Block a user