diff --git a/CREDITS b/CREDITS index 4731ee1ce..7f2c86b5b 100644 --- a/CREDITS +++ b/CREDITS @@ -253,6 +253,7 @@ Additional people who have contributed patches (in alphabetical order): Nicolas Ferrero Niels Provos Nikhil AP + Nikhil Goyal niks3089 Noritoshi Demizu diff --git a/ospf.h b/ospf.h index 9b274fafc..49c0b1c26 100644 --- a/ospf.h +++ b/ospf.h @@ -118,6 +118,16 @@ #define LS_OPAQUE_RI_TLV_SR_LOCAL_BLOCK 14 /* rfc8865 */ #define LS_OPAQUE_RI_TLV_SRMS_PREFERENCE 15 /* rfc8865 */ +#define LS_OPAQUE_EXTENDED_LINK_TLV 1 /* rfc7684 */ + +#define LS_OPAQUE_EXTENDED_LINK_SUBTLV_ADJ_SID 2 /* rfc8665 */ + +#define LS_OPAQUE_EXTENDED_LINK_SUBTLV_ADJ_SID_FLAG_B 0x80 +#define LS_OPAQUE_EXTENDED_LINK_SUBTLV_ADJ_SID_FLAG_V 0x40 +#define LS_OPAQUE_EXTENDED_LINK_SUBTLV_ADJ_SID_FLAG_L 0x20 +#define LS_OPAQUE_EXTENDED_LINK_SUBTLV_ADJ_SID_FLAG_G 0x10 +#define LS_OPAQUE_EXTENDED_LINK_SUBTLV_ADJ_SID_FLAG_P 0x8 + /* rla_link.link_type */ #define RLA_TYPE_ROUTER 1 /* point-to-point to another router */ #define RLA_TYPE_TRANSIT 2 /* connection to transit network */ @@ -266,6 +276,13 @@ struct lsa { nd_byte data[1]; /* may repeat */ } un_ep_tlv[1]; /* may repeat */ + /* Extended Link LSA */ + struct { + nd_uint16_t type; + nd_uint16_t length; + nd_byte data[1]; /* may repeat */ + } un_el_tlv[1]; /* may repeat */ + /* Unknown LSA */ struct unknown { nd_byte data[1]; /* may repeat */ diff --git a/print-ospf.c b/print-ospf.c index 38f44745d..3d7e0a7fd 100644 --- a/print-ospf.c +++ b/print-ospf.c @@ -217,6 +217,33 @@ static const struct tok lsa_opaque_ri_tlv_sr_algos[] = { { 0, NULL } }; +static const struct tok lsa_opaque_el_tlv_values[] = { + { LS_OPAQUE_EXTENDED_LINK_TLV, "Extended Link" }, + { 0, NULL } +}; + +static const struct tok lsa_opaque_extended_link_link_type_values[] = { + { RLA_TYPE_ROUTER, "Point-to-Point Link" }, + { RLA_TYPE_TRANSIT, "Link to Transit Network" }, + { RLA_TYPE_STUB, "Link to Stub Network" }, + { RLA_TYPE_VIRTUAL, "Virtual Link" }, + { 0, NULL } +}; + +static const struct tok lsa_opaque_extended_link_subtlv_adj_sid_flag_values[] = { + { LS_OPAQUE_EXTENDED_LINK_SUBTLV_ADJ_SID_FLAG_B, "Backup" }, + { LS_OPAQUE_EXTENDED_LINK_SUBTLV_ADJ_SID_FLAG_V, "Value/Index" }, + { LS_OPAQUE_EXTENDED_LINK_SUBTLV_ADJ_SID_FLAG_L, "Local/Global" }, + { LS_OPAQUE_EXTENDED_LINK_SUBTLV_ADJ_SID_FLAG_G, "Group" }, + { LS_OPAQUE_EXTENDED_LINK_SUBTLV_ADJ_SID_FLAG_P, "Persistent" }, + { 0, NULL } +}; + +static const struct tok lsa_opaque_extended_link_subtlv_values[] = { + { LS_OPAQUE_EXTENDED_LINK_SUBTLV_ADJ_SID, "Adj-SID Sub-TLV" }, + { 0, NULL } +}; + static const struct tok ospf_lls_tlv_values[] = { { OSPF_LLS_EO, "Extended Options" }, { OSPF_LLS_MD5, "MD5 Authentication" }, @@ -930,6 +957,113 @@ ospf_ep_lsa_print(netdissect_options *ndo, const uint8_t *tptr, u_int lsa_length return 0; } +static int +ospf_el_lsa_print(netdissect_options *ndo, const uint8_t *tptr, u_int lsa_length) +{ + u_int tlv_type, tlv_length, link_type, sub_tlv_flags; + u_int sub_tlv_type, sub_tlv_length, sub_tlv_remaining; + const uint8_t *sub_tlv_tptr; + u_int vflag, lflag; + + while (lsa_length >= 4) { + tlv_type = GET_BE_U_2(tptr); + tlv_length = GET_BE_U_2(tptr+2); + tptr+=4; + lsa_length-=4; + + /* Infinite loop protection. */ + if (tlv_type == 0 || tlv_length == 0) { + return -1; + } + + ND_PRINT("\n\t %s TLV (%u), length: %u, value: ", + tok2str(lsa_opaque_el_tlv_values,"unknown",tlv_type), + tlv_type, + tlv_length); + + switch (tlv_type) { + case LS_OPAQUE_EXTENDED_LINK_TLV: + link_type = GET_U_1(tptr); + + ND_PRINT("\n\t Link Type: %s (%u)", + tok2str(lsa_opaque_extended_link_link_type_values,"unknown",link_type), + link_type); + ND_PRINT("\n\t Reserved: %u", GET_BE_U_3(tptr+1)); + ND_PRINT("\n\t Link ID: %s", GET_IPADDR_STRING(tptr+4)); + ND_PRINT("\n\t Link Data: %s", GET_IPADDR_STRING(tptr+8)); + + sub_tlv_tptr = tptr + 12; + sub_tlv_remaining = tlv_length - 12; + + while(sub_tlv_remaining > 0) { + sub_tlv_type = GET_BE_U_2(sub_tlv_tptr); + sub_tlv_length = GET_BE_U_2(sub_tlv_tptr + 2); + sub_tlv_remaining-=4; + sub_tlv_tptr+=4; + + ND_PRINT("\n\t %s (%u), length: %u, value: ", + tok2str(lsa_opaque_extended_link_subtlv_values,"unknown",sub_tlv_type), + sub_tlv_type, + sub_tlv_length); + + switch(sub_tlv_type){ + + case LS_OPAQUE_EXTENDED_LINK_SUBTLV_ADJ_SID: + sub_tlv_flags = GET_U_1(sub_tlv_tptr); + + ND_PRINT("\n\t Flags: [%s]", + bittok2str(lsa_opaque_extended_link_subtlv_adj_sid_flag_values, "none", sub_tlv_flags)); + ND_PRINT("\n\t Reserved: %u", GET_U_1(sub_tlv_tptr+1)); + ND_PRINT("\n\t MT-ID: %u", GET_U_1(sub_tlv_tptr+2)); + ND_PRINT("\n\t Weight: %u", GET_U_1(sub_tlv_tptr+3)); + + vflag = sub_tlv_flags & LS_OPAQUE_EXTENDED_LINK_SUBTLV_ADJ_SID_FLAG_V; + lflag = sub_tlv_flags & LS_OPAQUE_EXTENDED_LINK_SUBTLV_ADJ_SID_FLAG_L; + if (vflag && lflag) { + ND_PRINT("\n\t SID/Label: %u",GET_BE_U_3(sub_tlv_tptr + 4)); + } + else if ( !vflag && !lflag ) { + ND_PRINT("\n\t SID/Label: %u",GET_BE_U_4(sub_tlv_tptr + 4)); + } + else { + ND_PRINT("\n\t Invalid V-Flag and L-flag combination"); + if (!print_unknown_data(ndo, sub_tlv_tptr, "\n\t ", sub_tlv_length)) + return(-1); + } + break; + + default: + if (ndo->ndo_vflag <= 1) { + if (!print_unknown_data(ndo, sub_tlv_tptr, "\n\t ", sub_tlv_length)) + return(-1); + } + break; + } + + if (sub_tlv_length % 4) { + sub_tlv_length += (4 - (sub_tlv_length % 4)); + } + sub_tlv_tptr+=sub_tlv_length; + sub_tlv_remaining-=sub_tlv_length; + } + break; + default: + if (ndo->ndo_vflag <= 1) { + if (!print_unknown_data(ndo, tptr, "\n\t ", tlv_length)) + return -1; + } + } + + /* in OSPF everything has to be 32-bit aligned, including TLVs */ + if (tlv_length % 4) { + tlv_length += (4 - (tlv_length % 4)); + } + tptr+=tlv_length; + lsa_length-=tlv_length; + } + return 0; +} + /* * Print a single link state advertisement. If truncated or if LSA length * field is less than the length of the LSA header, return NULl, else @@ -1231,6 +1365,13 @@ ospf_print_lsa(netdissect_options *ndo, } break; + case LS_OPAQUE_TYPE_EL: + if (ospf_el_lsa_print(ndo, (const u_char *)(lsap->lsa_un.un_el_tlv), + ls_length) == -1) { + return(ls_end); + } + break; + default: if (ndo->ndo_vflag <= 1) { if (!print_unknown_data(ndo, (const uint8_t *)lsap->lsa_un.un_unknown, diff --git a/tests/TESTLIST b/tests/TESTLIST index a036e6d7a..221f577b9 100644 --- a/tests/TESTLIST +++ b/tests/TESTLIST @@ -146,6 +146,7 @@ ospf-ack ospf-ack.pcap ospf-ack.out -v ospf-sr ospf-sr.pcapng ospf-sr-v.out -v ospf-sr2 ospf-sr2.pcapng ospf-sr2-v.out -v ospf-sr-ri-sid ospf-sr-ri-sid.pcap ospf-sr-ri-sid-v.out -v +ospf-sr-link ospf-sr-link.pcap ospf-sr-link-v.out -v ospf3_ah-vv OSPFv3_with_AH.pcap ospf3_ah-vv.out -v -v ospf3_auth-vv ospf3_auth.pcapng ospf3_auth-vv.out -v -v ospf3_bc-vv OSPFv3_broadcast_adjacency.pcap ospf3_bc-vv.out -v -v diff --git a/tests/ospf-sr-link-v.out b/tests/ospf-sr-link-v.out new file mode 100644 index 000000000..8c57251de --- /dev/null +++ b/tests/ospf-sr-link-v.out @@ -0,0 +1,287 @@ + 1 2023-09-07 09:03:51.420596 IP (tos 0xc0, ttl 1, id 44783, offset 0, flags [DF], proto OSPF (89), length 96) + 1.0.0.2 > 224.0.0.5: OSPFv2, LS-Update, length 76 + Router-ID 2.2.2.2, Area 0.0.0.6, Authentication Type: none (0), 1 LSA + LSA #1 + Advertising Router 2.2.2.2, seq 0x80000001, age 1s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 0 + Options: [Demand Circuit, Opaque] + Extended Link TLV (1), length: 24, value: + Link Type: Point-to-Point Link (1) + Reserved: 0 + Link ID: 1.1.1.1 + Link Data: 1.0.0.2 + Adj-SID Sub-TLV (2), length: 7, value: + Flags: [Value/Index, Local/Global] + Reserved: 0 + MT-ID: 0 + Weight: 0 + SID/Label: 116384 + 2 2023-09-07 09:03:51.420611 IP (tos 0xc0, ttl 1, id 41498, offset 0, flags [DF], proto OSPF (89), length 96) + 1.0.0.1 > 224.0.0.5: OSPFv2, LS-Update, length 76 + Router-ID 1.1.1.1, Area 0.0.0.6, Authentication Type: none (0), 1 LSA + LSA #1 + Advertising Router 1.1.1.1, seq 0x80000001, age 1s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 0 + Options: [Demand Circuit, Opaque] + Extended Link TLV (1), length: 24, value: + Link Type: Point-to-Point Link (1) + Reserved: 0 + Link ID: 2.2.2.2 + Link Data: 1.0.0.1 + Adj-SID Sub-TLV (2), length: 7, value: + Flags: [Value/Index, Local/Global] + Reserved: 0 + MT-ID: 0 + Weight: 0 + SID/Label: 116384 + 3 2023-09-07 09:03:51.420713 IP (tos 0xc0, ttl 1, id 44784, offset 0, flags [DF], proto OSPF (89), length 64) + 1.0.0.2 > 224.0.0.5: OSPFv2, LS-Ack, length 44 + Router-ID 2.2.2.2, Area 0.0.0.6, Authentication Type: none (0) + Advertising Router 1.1.1.1, seq 0x80000001, age 1s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 0 + Options: [Demand Circuit, Opaque] + 4 2023-09-07 09:03:51.421011 IP (tos 0xc0, ttl 1, id 41499, offset 0, flags [DF], proto OSPF (89), length 64) + 1.0.0.1 > 224.0.0.5: OSPFv2, LS-Ack, length 44 + Router-ID 1.1.1.1, Area 0.0.0.6, Authentication Type: none (0) + Advertising Router 2.2.2.2, seq 0x80000001, age 1s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 0 + Options: [Demand Circuit, Opaque] + 5 2023-09-07 09:03:51.472637 IP (tos 0xc0, ttl 1, id 44796, offset 0, flags [DF], proto OSPF (89), length 140) + 1.0.0.2 > 224.0.0.5: OSPFv2, LS-Update, length 120 + Router-ID 2.2.2.2, Area 0.0.0.6, Authentication Type: none (0), 2 LSAs + LSA #1 + Advertising Router 3.3.3.3, seq 0x80000001, age 2s, length 24 + Area Local Opaque LSA (10), Opaque-Type Router Information LSA (4), Opaque-ID 0 + Options: [Demand Circuit, Opaque] + SR-Algorithm TLV (8), length: 1, value: + Shortest Path First (0) + SID/Label Range TLV (9), length: 12, value: + Range size: 65536 + SID/Label subTLV (1), length: 3, value: + Label: 900000 + LSA #2 + Advertising Router 2.2.2.2, seq 0x80000001, age 1s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 1 + Options: [Demand Circuit, Opaque] + Extended Link TLV (1), length: 24, value: + Link Type: Point-to-Point Link (1) + Reserved: 0 + Link ID: 3.3.3.3 + Link Data: 1.0.1.1 + Adj-SID Sub-TLV (2), length: 7, value: + Flags: [Value/Index, Local/Global] + Reserved: 0 + MT-ID: 0 + Weight: 0 + SID/Label: 116385 + 6 2023-09-07 09:03:51.472791 IP (tos 0xc0, ttl 1, id 41502, offset 0, flags [DF], proto OSPF (89), length 84) + 1.0.0.1 > 224.0.0.5: OSPFv2, LS-Ack, length 64 + Router-ID 1.1.1.1, Area 0.0.0.6, Authentication Type: none (0) + Advertising Router 2.2.2.2, seq 0x80000001, age 1s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 1 + Options: [Demand Circuit, Opaque] + Advertising Router 3.3.3.3, seq 0x80000001, age 2s, length 24 + Area Local Opaque LSA (10), Opaque-Type Router Information LSA (4), Opaque-ID 0 + Options: [Demand Circuit, Opaque] + 7 2023-09-07 09:03:51.473157 IP (tos 0xc0, ttl 1, id 44797, offset 0, flags [DF], proto OSPF (89), length 96) + 1.0.0.2 > 224.0.0.5: OSPFv2, LS-Update, length 76 + Router-ID 2.2.2.2, Area 0.0.0.6, Authentication Type: none (0), 1 LSA + LSA #1 + Advertising Router 3.3.3.3, seq 0x80000001, age 2s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 0 + Options: [Demand Circuit, Opaque] + Extended Link TLV (1), length: 24, value: + Link Type: Point-to-Point Link (1) + Reserved: 0 + Link ID: 2.2.2.2 + Link Data: 1.0.1.2 + Adj-SID Sub-TLV (2), length: 7, value: + Flags: [Value/Index, Local/Global] + Reserved: 0 + MT-ID: 0 + Weight: 0 + SID/Label: 116384 + 8 2023-09-07 09:03:51.473279 IP (tos 0xc0, ttl 1, id 41503, offset 0, flags [DF], proto OSPF (89), length 64) + 1.0.0.1 > 224.0.0.5: OSPFv2, LS-Ack, length 44 + Router-ID 1.1.1.1, Area 0.0.0.6, Authentication Type: none (0) + Advertising Router 3.3.3.3, seq 0x80000001, age 2s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 0 + Options: [Demand Circuit, Opaque] + 9 2023-09-07 09:03:51.841651 IP (tos 0xc0, ttl 1, id 44875, offset 0, flags [DF], proto OSPF (89), length 96) + 1.0.0.2 > 224.0.0.5: OSPFv2, LS-Update, length 76 + Router-ID 2.2.2.2, Area 0.0.0.6, Authentication Type: none (0), 1 LSA + LSA #1 + Advertising Router 2.2.2.2, seq 0x80000001, age 1s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 2 + Options: [Demand Circuit, Opaque] + Extended Link TLV (1), length: 24, value: + Link Type: Point-to-Point Link (1) + Reserved: 0 + Link ID: 1.1.1.1 + Link Data: 1.0.0.2 + Adj-SID Sub-TLV (2), length: 7, value: + Flags: [Value/Index, Local/Global] + Reserved: 0 + MT-ID: 0 + Weight: 0 + SID/Label: 132768 + 10 2023-09-07 09:03:51.841738 IP (tos 0xc0, ttl 1, id 44876, offset 0, flags [DF], proto OSPF (89), length 96) + 1.0.0.2 > 224.0.0.5: OSPFv2, LS-Update, length 76 + Router-ID 2.2.2.2, Area 0.0.0.6, Authentication Type: none (0), 1 LSA + LSA #1 + Advertising Router 2.2.2.2, seq 0x80000001, age 1s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 3 + Options: [Demand Circuit, Opaque] + Extended Link TLV (1), length: 24, value: + Link Type: Point-to-Point Link (1) + Reserved: 0 + Link ID: 3.3.3.3 + Link Data: 1.0.1.1 + Adj-SID Sub-TLV (2), length: 7, value: + Flags: [Value/Index, Local/Global] + Reserved: 0 + MT-ID: 0 + Weight: 0 + SID/Label: 132769 + 11 2023-09-07 09:03:51.841850 IP (tos 0xc0, ttl 1, id 41527, offset 0, flags [DF], proto OSPF (89), length 64) + 1.0.0.1 > 224.0.0.5: OSPFv2, LS-Ack, length 44 + Router-ID 1.1.1.1, Area 0.0.0.6, Authentication Type: none (0) + Advertising Router 2.2.2.2, seq 0x80000001, age 1s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 2 + Options: [Demand Circuit, Opaque] + 12 2023-09-07 09:03:51.841894 IP (tos 0xc0, ttl 1, id 41528, offset 0, flags [DF], proto OSPF (89), length 64) + 1.0.0.1 > 224.0.0.5: OSPFv2, LS-Ack, length 44 + Router-ID 1.1.1.1, Area 0.0.0.6, Authentication Type: none (0) + Advertising Router 2.2.2.2, seq 0x80000001, age 1s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 3 + Options: [Demand Circuit, Opaque] + 13 2023-09-07 09:04:56.510076 IP (tos 0xc0, ttl 1, id 54495, offset 0, flags [DF], proto OSPF (89), length 128) + 1.0.0.2 > 224.0.0.5: OSPFv2, LS-Request, length 108 + Router-ID 2.2.2.2, Area 0.0.0.6, Authentication Type: none (0) + Advertising Router: 1.1.1.1, Router LSA (1), LSA-ID: 1.1.1.1 + Advertising Router: 2.2.2.2, Area Local Opaque LSA (10), Opaque-Type: Router Information LSA (4), Opaque-ID: 0 + Advertising Router: 2.2.2.2, Area Local Opaque LSA (10), Opaque-Type: Extended Link LSA (8), Opaque-ID: 0 + Advertising Router: 2.2.2.2, Area Local Opaque LSA (10), Opaque-Type: Extended Link LSA (8), Opaque-ID: 2 + Advertising Router: 2.2.2.2, Area Local Opaque LSA (10), Opaque-Type: Extended Link LSA (8), Opaque-ID: 3 + Advertising Router: 2.2.2.2, Area Local Opaque LSA (10), Opaque-Type: Extended Link LSA (8), Opaque-ID: 1 + Advertising Router: 1.1.1.1, Area Local Opaque LSA (10), Opaque-Type: Extended Link LSA (8), Opaque-ID: 1 + 14 2023-09-07 09:04:56.510143 IP (tos 0xc0, ttl 1, id 54496, offset 0, flags [DF], proto OSPF (89), length 192) + 1.0.0.2 > 224.0.0.5: OSPFv2, Database Description, length 172 + Router-ID 2.2.2.2, Area 0.0.0.6, Authentication Type: none (0) + Options [External, Opaque], DD Flags [Master], MTU: 1500, Sequence: 0x00000052 + Advertising Router 3.3.3.3, seq 0x80000001, age 67s, length 24 + Area Local Opaque LSA (10), Opaque-Type Router Information LSA (4), Opaque-ID 0 + Options: [Demand Circuit, Opaque] + Advertising Router 1.1.1.1, seq 0x80000001, age 67s, length 24 + Area Local Opaque LSA (10), Opaque-Type Router Information LSA (4), Opaque-ID 0 + Options: [Demand Circuit, Opaque] + Advertising Router 3.3.3.3, seq 0x80000001, age 67s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 0 + Options: [Demand Circuit, Opaque] + Advertising Router 1.1.1.1, seq 0x80000001, age 67s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 0 + Options: [Demand Circuit, Opaque] + Advertising Router 3.3.3.3, seq 0x80000003, age 75s, length 28 + Router LSA (1), LSA-ID: 3.3.3.3 + Options: [External, Demand Circuit] + Advertising Router 2.2.2.2, seq 0x80000007, age 65s, length 40 + Router LSA (1), LSA-ID: 2.2.2.2 + Options: [External, Demand Circuit] + Advertising Router 1.1.1.1, seq 0x80000004, age 77s, length 28 + Router LSA (1), LSA-ID: 1.1.1.1 + Options: [External, Demand Circuit] + 15 2023-09-07 09:04:56.510243 IP (tos 0xc0, ttl 1, id 52179, offset 0, flags [DF], proto OSPF (89), length 368) + 1.0.0.1 > 224.0.0.5: OSPFv2, LS-Update, length 348 + Router-ID 1.1.1.1, Area 0.0.0.6, Authentication Type: none (0), 7 LSAs + LSA #1 + Advertising Router 1.1.1.1, seq 0x80000007, age 14s, length 16 + Router LSA (1), LSA-ID: 1.1.1.1 + Options: [External, Demand Circuit] + Router LSA Options: [none] + Stub Network: 1.0.0.0, Mask: 255.255.255.0 + topology default (0), metric 10 + LSA #2 + Advertising Router 2.2.2.2, seq 0x80000001, age 67s, length 24 + Area Local Opaque LSA (10), Opaque-Type Router Information LSA (4), Opaque-ID 0 + Options: [Demand Circuit, Opaque] + SR-Algorithm TLV (8), length: 1, value: + Shortest Path First (0) + SID/Label Range TLV (9), length: 12, value: + Range size: 65536 + SID/Label subTLV (1), length: 3, value: + Label: 900000 + LSA #3 + Advertising Router 2.2.2.2, seq 0x80000001, age 67s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 0 + Options: [Demand Circuit, Opaque] + Extended Link TLV (1), length: 24, value: + Link Type: Point-to-Point Link (1) + Reserved: 0 + Link ID: 1.1.1.1 + Link Data: 1.0.0.2 + Adj-SID Sub-TLV (2), length: 7, value: + Flags: [Value/Index, Local/Global] + Reserved: 0 + MT-ID: 0 + Weight: 0 + SID/Label: 116384 + LSA #4 + Advertising Router 2.2.2.2, seq 0x80000001, age 66s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 2 + Options: [Demand Circuit, Opaque] + Extended Link TLV (1), length: 24, value: + Link Type: Point-to-Point Link (1) + Reserved: 0 + Link ID: 1.1.1.1 + Link Data: 1.0.0.2 + Adj-SID Sub-TLV (2), length: 7, value: + Flags: [Value/Index, Local/Global] + Reserved: 0 + MT-ID: 0 + Weight: 0 + SID/Label: 132768 + LSA #5 + Advertising Router 2.2.2.2, seq 0x80000001, age 66s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 3 + Options: [Demand Circuit, Opaque] + Extended Link TLV (1), length: 24, value: + Link Type: Point-to-Point Link (1) + Reserved: 0 + Link ID: 3.3.3.3 + Link Data: 1.0.1.1 + Adj-SID Sub-TLV (2), length: 7, value: + Flags: [Value/Index, Local/Global] + Reserved: 0 + MT-ID: 0 + Weight: 0 + SID/Label: 132769 + LSA #6 + Advertising Router 2.2.2.2, seq 0x80000001, age 67s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 1 + Options: [Demand Circuit, Opaque] + Extended Link TLV (1), length: 24, value: + Link Type: Point-to-Point Link (1) + Reserved: 0 + Link ID: 3.3.3.3 + Link Data: 1.0.1.1 + Adj-SID Sub-TLV (2), length: 7, value: + Flags: [Value/Index, Local/Global] + Reserved: 0 + MT-ID: 0 + Weight: 0 + SID/Label: 116385 + LSA #7 + Advertising Router 1.1.1.1, seq 0x80000001, age 6s, length 28 + Area Local Opaque LSA (10), Opaque-Type Extended Link LSA (8), Opaque-ID 1 + Options: [Demand Circuit, Opaque] + Extended Link TLV (1), length: 24, value: + Link Type: Point-to-Point Link (1) + Reserved: 0 + Link ID: 2.2.2.2 + Link Data: 1.0.0.1 + Adj-SID Sub-TLV (2), length: 7, value: + Flags: [Value/Index, Local/Global] + Reserved: 0 + MT-ID: 0 + Weight: 0 + SID/Label: 116384 diff --git a/tests/ospf-sr-link.pcap b/tests/ospf-sr-link.pcap new file mode 100644 index 000000000..d66baf21e Binary files /dev/null and b/tests/ospf-sr-link.pcap differ