]> git.puffer.fish Git - mirror/frr.git/commitdiff
isisd: Add pack function for SRv6 End SID Sub-TLV
authorCarmine Scarpitta <carmine.scarpitta@uniroma2.it>
Tue, 14 Feb 2023 12:43:42 +0000 (13:43 +0100)
committerCarmine Scarpitta <carmine.scarpitta@uniroma2.it>
Mon, 11 Sep 2023 15:35:19 +0000 (17:35 +0200)
Add a function to pack an SRv6 End SID Sub-TLV
(RFC 9352 section #7.2).

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

index 206971d79afc20c8093a63f9764b0da418c673cd..59a0e2e51e85535a519c57dfcb539880387afa31 100644 (file)
@@ -2098,6 +2098,28 @@ static void free_item_srv6_end_sid(struct isis_item *i)
        XFREE(MTYPE_ISIS_SUBTLV, i);
 }
 
+static int pack_item_srv6_end_sid(struct isis_item *i, struct stream *s,
+                                 size_t *min_len)
+{
+       struct isis_srv6_end_sid_subtlv *sid =
+               (struct isis_srv6_end_sid_subtlv *)i;
+
+       if (STREAM_WRITEABLE(s) < 19) {
+               *min_len = 19;
+               return 1;
+       }
+
+       stream_putc(s, sid->flags);
+       stream_putw(s, sid->behavior);
+       stream_put(s, &sid->sid, IPV6_MAX_BYTELEN);
+
+       /* Put 0 as Sub-Sub-TLV length, because we don't support any Sub-Sub-TLV
+        * at this time */
+       stream_putc(s, 0);
+
+       return 0;
+}
+
 /* Functions related to TLVs 1 Area Addresses */
 
 static struct isis_item *copy_item_area_address(struct isis_item *i)