mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 08:47:39 +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 ((afi == AFI_IP || afi == AFI_IP6) && safi == SAFI_MPLS_VPN) {
|
||||||
if (attr->srv6_l3vpn) {
|
if (attr->srv6_l3vpn) {
|
||||||
uint8_t subtlv_len =
|
uint8_t subtlv_len =
|
||||||
BGP_PREFIX_SID_SRV6_L3_SERVICE_SID_INFO_LENGTH
|
BGP_PREFIX_SID_SRV6_L3_SERVICE_SID_STRUCTURE_LENGTH
|
||||||
+ BGP_ATTR_MIN_LEN + 1; // reserved
|
+ BGP_ATTR_MIN_LEN
|
||||||
uint8_t tlv_len = subtlv_len + 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
|
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
||||||
| BGP_ATTR_FLAG_TRANS);
|
| BGP_ATTR_FLAG_TRANS);
|
||||||
stream_putc(s, BGP_ATTR_PREFIX_SID);
|
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_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, 0); /* reserved */
|
||||||
stream_putc(s, BGP_PREFIX_SID_SRV6_L3_SERVICE_SID_INFO);
|
stream_putc(s, BGP_PREFIX_SID_SRV6_L3_SERVICE_SID_INFO);
|
||||||
stream_putw(
|
stream_putw(s, subtlv_len);
|
||||||
s,
|
|
||||||
BGP_PREFIX_SID_SRV6_L3_SERVICE_SID_INFO_LENGTH);
|
|
||||||
stream_putc(s, 0); /* reserved */
|
stream_putc(s, 0); /* reserved */
|
||||||
stream_put(s, &attr->srv6_l3vpn->sid,
|
stream_put(s, &attr->srv6_l3vpn->sid,
|
||||||
sizeof(attr->srv6_l3vpn->sid)); /* sid */
|
sizeof(attr->srv6_l3vpn->sid)); /* sid */
|
||||||
stream_putc(s, 0); /* sid_flags */
|
stream_putc(s, 0); /* sid_flags */
|
||||||
stream_putw(s, 0xffff); /* endpoint */
|
stream_putw(s, 0xffff); /* endpoint */
|
||||||
stream_putc(s, 0); /* reserved */
|
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) {
|
} else if (attr->srv6_vpn) {
|
||||||
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
||||||
| BGP_ATTR_FLAG_TRANS);
|
| BGP_ATTR_FLAG_TRANS);
|
||||||
|
@ -78,6 +78,7 @@
|
|||||||
|
|
||||||
/* SRv6 Service Data Sub-Sub-TLV types */
|
/* 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 1
|
||||||
|
#define BGP_PREFIX_SID_SRV6_L3_SERVICE_SID_STRUCTURE_LENGTH 6
|
||||||
|
|
||||||
/* SRv6 SID Structure default values */
|
/* SRv6 SID Structure default values */
|
||||||
#define BGP_PREFIX_SID_SRV6_LOCATOR_BLOCK_LENGTH 40
|
#define BGP_PREFIX_SID_SRV6_LOCATOR_BLOCK_LENGTH 40
|
||||||
|
Loading…
Reference in New Issue
Block a user