]> git.puffer.fish Git - matthieu/frr.git/commitdiff
isisd: Add unpack func for SID Struct Sub-Sub-TLV
authorCarmine Scarpitta <carmine.scarpitta@uniroma2.it>
Tue, 14 Feb 2023 15:24:56 +0000 (16:24 +0100)
committerCarmine Scarpitta <carmine.scarpitta@uniroma2.it>
Mon, 11 Sep 2023 20:11:35 +0000 (22:11 +0200)
Add a function to unpack an SRv6 SID Structure Sub-Sub-TLV
(RFC 9352 section #9).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
isisd/isis_tlvs.c

index f575a67eca304c77f9127c92e8002fda2c24a4fb..a1535632faf2ac5cbec0617fb91082e4455461cd 100644 (file)
@@ -2035,6 +2035,33 @@ static int pack_subsubtlv_srv6_sid_structure(
        return 0;
 }
 
+static int unpack_subsubtlv_srv6_sid_structure(
+       enum isis_tlv_context context, uint8_t tlv_type, uint8_t tlv_len,
+       struct stream *s, struct sbuf *log, void *dest, int indent)
+{
+       struct isis_subsubtlvs *subsubtlvs = dest;
+       struct isis_srv6_sid_structure_subsubtlv sid_struct = {};
+
+       sbuf_push(log, indent, "Unpacking SRv6 SID Structure...\n");
+       if (tlv_len != 4) {
+               sbuf_push(
+                       log, indent,
+                       "Invalid SRv6 SID Structure Sub-Sub-TLV size. (Expected 4 bytes, got %hhu)\n",
+                       tlv_len);
+               return 1;
+       }
+
+       sid_struct.loc_block_len = stream_getc(s);
+       sid_struct.loc_node_len = stream_getc(s);
+       sid_struct.func_len = stream_getc(s);
+       sid_struct.arg_len = stream_getc(s);
+
+       subsubtlvs->srv6_sid_structure =
+               copy_subsubtlv_srv6_sid_structure(&sid_struct);
+
+       return 0;
+}
+
 static struct isis_item *copy_item(enum isis_tlv_context context,
                                   enum isis_tlv_type type,
                                   struct isis_item *item);