mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 07:23:41 +00:00
isisd: Unpack SRv6 Capabilities Sub-TLV
Extend Router Capabilities TLV unpack function to unpack SRv6 Capabilities Sub-TLV (RFC 9352 section #2). Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
This commit is contained in:
parent
451ef283cc
commit
94b08a4910
@ -4647,6 +4647,47 @@ static int unpack_tlv_router_cap(enum isis_tlv_context context,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif /* ifndef FABRICD */
|
#endif /* ifndef FABRICD */
|
||||||
|
case ISIS_SUBTLV_SRV6_CAPABILITIES:
|
||||||
|
sbuf_push(log, indent,
|
||||||
|
"Unpacking SRv6 Capabilities sub-TLV...\n");
|
||||||
|
/* Check that SRv6 capabilities sub-TLV is correctly
|
||||||
|
* formated */
|
||||||
|
if (length < ISIS_SUBTLV_SRV6_CAPABILITIES_SIZE) {
|
||||||
|
sbuf_push(
|
||||||
|
log, indent,
|
||||||
|
"WARNING: Unexpected SRv6 Capabilities sub-TLV size (expected %d or more bytes, got %hhu)\n",
|
||||||
|
ISIS_SUBTLV_SRV6_CAPABILITIES_SIZE,
|
||||||
|
length);
|
||||||
|
stream_forward_getp(s, length);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* Only one SRv6 capabilities is supported. Skip
|
||||||
|
* subsequent one */
|
||||||
|
if (rcap->srv6_cap.is_srv6_capable) {
|
||||||
|
sbuf_push(
|
||||||
|
log, indent,
|
||||||
|
"WARNING: SRv6 Capabilities sub-TLV present multiple times, ignoring.\n");
|
||||||
|
stream_forward_getp(s, length);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
rcap->srv6_cap.is_srv6_capable = true;
|
||||||
|
rcap->srv6_cap.flags = stream_getw(s);
|
||||||
|
|
||||||
|
/* The SRv6 Capabilities Sub-TLV may contain optional
|
||||||
|
* Sub-Sub-TLVs, as per RFC 9352 section #2.
|
||||||
|
* Skip any Sub-Sub-TLV contained in the SRv6
|
||||||
|
* Capabilities Sub-TLV that is not currently supported
|
||||||
|
* by IS-IS.
|
||||||
|
*/
|
||||||
|
if (length > ISIS_SUBTLV_SRV6_CAPABILITIES_SIZE)
|
||||||
|
sbuf_push(
|
||||||
|
log, indent,
|
||||||
|
"Skipping unknown sub-TLV (%hhu bytes)\n",
|
||||||
|
length);
|
||||||
|
stream_forward_getp(
|
||||||
|
s, length - ISIS_SUBTLV_SRV6_CAPABILITIES_SIZE);
|
||||||
|
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
stream_forward_getp(s, length);
|
stream_forward_getp(s, length);
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user