39 0x0, 0x0, 0x0, 0x0, 0x0,
41 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
43 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
49 0x0, 0x0, 0x0, 0x0, 0x0,
51 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
52 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
53 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
54 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
55 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
56 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
57 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
58 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
59 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
60 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
61 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
62 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
63 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
64 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
65 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
66 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
67 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
68 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
69 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
70 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
71 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
72 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
73 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
74 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
75 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
76 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
77 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
79 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
93 return format (s,
"SRv6-END-rewrite: src %U dst %U\n\tTEID: 0x%x",
95 clib_net_to_host_u32 (t->
teid));
106 "SRv6-END-rewrite: src %U dst %U\n\tTEID: 0x%x\n\tsr_prefix: %U/%d",
112 #define foreach_srv6_end_v4_error \ 113 _(M_GTP4_E_PACKETS, "srv6 End.M.GTP4.E packets") \ 114 _(M_GTP4_E_BAD_PACKETS, "srv6 End.M.GTP4.E bad packets") 116 #define foreach_srv6_t_v4_d_error \ 117 _(M_GTP4_D_PACKETS, "srv6 T.M.GTP4.D packets") \ 118 _(M_GTP4_D_BAD_PACKETS, "srv6 T.M.GTP4.D bad packets") 120 #define foreach_srv6_end_v6_e_error \ 121 _(M_GTP6_E_PACKETS, "srv6 End.M.GTP6.E packets") \ 122 _(M_GTP6_E_BAD_PACKETS, "srv6 End.M.GTP6.E bad packets") 124 #define foreach_srv6_end_v6_d_error \ 125 _(M_GTP6_D_PACKETS, "srv6 End.M.GTP6.D packets") \ 126 _(M_GTP6_D_BAD_PACKETS, "srv6 End.M.GTP6.D bad packets") 128 #define foreach_srv6_end_v6_d_di_error \ 129 _(M_GTP6_D_DI_PACKETS, "srv6 End.M.GTP6.D.DI packets") \ 130 _(M_GTP6_D_DI_BAD_PACKETS, "srv6 End.M.GTP6.D.DI bad packets") 132 #define foreach_srv6_end_v6_dt_error \ 133 _(M_GTP6_DT_PACKETS, "srv6 End.M.GTP6.DT packets") \ 134 _(M_GTP6_DT_BAD_PACKETS, "srv6 End.M.GTP6.DT bad packets") 136 #define foreach_srv6_t_v4_dt_error \ 137 _(M_GTP4_DT_PACKETS, "srv6 T.M.GTP4.DT packets") \ 138 _(M_GTP4_DT_BAD_PACKETS, "srv6 T.M.GTP4.DT bad packets") 142 #define _(sym,str) SRV6_END_ERROR_##sym, 150 #define _(sym,str) SRV6_T_ERROR_##sym, 158 #define _(sym,str) SRV6_END_ERROR_##sym, 166 #define _(sym,str) SRV6_END_ERROR_##sym, 174 #define _(sym,str) SRV6_END_ERROR_##sym, 182 #define _(sym,str) SRV6_END_ERROR_##sym, 190 #define _(sym,str) SRV6_T_ERROR_##sym, 197 #define _(sym,string) string, 203 #define _(sym,string) string, 209 #define _(sym,string) string, 215 #define _(sym,string) string, 221 #define _(sym,string) string, 227 #define _(sym,string) string, 233 #define _(sym,string) string, 295 return val[0] ^ val[1] ^ val[2] ^ val[3];
297 return val[0] ^ val[1];
306 val = clib_net_to_host_u16 (tag);
326 u32 n_left_from, next_index, *from, *to_next;
329 u32 good_n = 0, bad_n = 0;
332 n_left_from =
frame->n_vectors;
333 next_index =
node->cached_next_index;
335 while (n_left_from > 0)
341 while (n_left_from > 0 && n_left_to_next > 0)
349 ip6_address_t src0, dst0;
391 u8 *teid8p = (
u8 *) & teid;
407 tag = ip6srv0->
sr.
tag;
419 qfi = dst0.as_u8[offset + 4];
436 for (index = 0; index < 4; index++)
440 dst0.as_u8[offset + index + 1] >> (8 - shift);
443 qfi |= dst0.as_u8[offset + 4] << shift;
444 qfi |= dst0.as_u8[offset + 5] >> (8 - shift);
451 for (index = 0; index < 2; index++)
453 sp[
index] = dst0.as_u8[offset + 5 +
index] << shift;
455 dst0.as_u8[offset + 6 +
index] >> (8 - shift);
460 for (index = 0; index < 4; index++)
462 *teid8p = dst0.as_u8[offset + 5 +
index] << shift;
464 dst0.as_u8[offset + 6 +
index] >> (8 - shift);
500 sizeof (ip6_address_t) *
509 ie_size = sub_tlv->
length;
548 hdr0->
gtpu.
length = clib_host_to_net_u16 (len0);
607 ie_ptr = (
u8 *) ((
u8 *) hdr0 + (hdrlen - ie_size));
618 for (index = 0; index < 4; index++)
621 src0.as_u8[offset +
index];
626 for (index = 0; index < 4; index++)
629 src0.as_u8[offset +
index] << shift;
631 src0.as_u8[offset + index + 1] >> (8 - shift);
639 hdr0->
udp.
length = clib_host_to_net_u16 (len0 +
644 hdr0->
ip4.
length = clib_host_to_net_u16 (len0 +
658 sizeof (tr->
src.as_u8));
660 sizeof (tr->
dst.as_u8));
672 n_left_to_next, bi0, next0);
679 SRV6_END_ERROR_M_GTP4_E_BAD_PACKETS, bad_n);
682 SRV6_END_ERROR_M_GTP4_E_PACKETS, good_n);
684 return frame->n_vectors;
694 u32 n_left_from, next_index, *from, *to_next;
696 u32 good_n = 0, bad_n = 0;
699 n_left_from =
frame->n_vectors;
700 next_index =
node->cached_next_index;
702 while (n_left_from > 0)
708 while (n_left_from > 0 && n_left_to_next > 0)
740 if (ip4->
protocol != IP_PROTOCOL_UDP
781 teidp = (
u8 *) & teid;
837 seg.as_u8[offset + 4] = qfi;
853 for (index = 0; index < 4; index++)
855 seg.as_u8[offset +
index] |= dstp[
index] >> shift;
856 seg.as_u8[offset + index + 1] |=
857 dstp[
index] << (8 - shift);
871 seg.as_u8[offset + 4] |= qfi >> shift;
872 seg.as_u8[offset + 5] |= qfi << (8 - shift);
879 for (index = 0; index < 2; index++)
881 seg.as_u8[offset + 5 +
index] |=
882 seqp[
index] >> shift;
883 seg.as_u8[offset + 6 +
index] |=
884 seqp[
index] << (8 - shift);
889 for (index = 0; index < 4; index++)
891 seg.as_u8[offset + index + 5] |=
892 teidp[
index] >> shift;
893 seg.as_u8[offset + index + 6] |=
894 teidp[
index] << (8 - shift);
903 payload_len = clib_net_to_host_u16 (hdr->
gtpu.
length);
904 if (payload_len != 0)
912 ies = (
u8 *) ((
u8 *) hdr + hdr_len);
930 for (index = 0; index < 4; index++)
932 src6.as_u8[offset +
index] |= srcp[
offset] >> shift;
933 src6.as_u8[offset + index + 1] |=
934 srcp[
offset] << (8 - shift);
970 hdr_len +=
sizeof (ip6_address_t);
979 hdr_len +=
sizeof (ip6_address_t);
989 tlv_siz = (tlv_siz & ~0x07) + (tlv_siz & 0x07 ? 0x08 : 0x0);
1009 ip6srv->
sr.
length +=
sizeof (ip6_address_t) / 8;
1017 sizeof (ip6_address_t));
1021 ip6srv->
ip.
protocol = IP_PROTOCOL_IPV6_ROUTE;
1030 sizeof (ip6_address_t)) / 8) - 1;
1040 ip6srv->
sr.
length +=
sizeof (ip6_address_t) / 8;
1049 if ((clib_net_to_host_u32
1059 if ((clib_net_to_host_u32
1072 if ((clib_net_to_host_u32
1101 ip6srv->
ip.
protocol = IP_PROTOCOL_IPV6_ROUTE;
1111 ip6srv->
sr.
length =
sizeof (ip6_address_t) / 8;
1118 if ((clib_net_to_host_u32
1128 if ((clib_net_to_host_u32
1141 if ((clib_net_to_host_u32
1180 clib_host_to_net_u16 (len0 + hdr_len -
sizeof (
ip6_header_t));
1190 sizeof (tr->
src.as_u8));
1192 sizeof (tr->
dst.as_u8));
1198 n_left_to_next, bi0, next0);
1205 SRV6_T_ERROR_M_GTP4_D_BAD_PACKETS, bad_n);
1208 SRV6_T_ERROR_M_GTP4_D_PACKETS, good_n);
1210 return frame->n_vectors;
1215 .name =
"srv6-end-m-gtp4-e",.vector_size =
sizeof (
u32),.format_trace =
1227 .name =
"srv6-t-m-gtp4-d",.vector_size =
sizeof (
u32),.format_trace =
1244 u32 n_left_from, next_index, *from, *to_next;
1247 u32 good_n = 0, bad_n = 0;
1250 n_left_from =
frame->n_vectors;
1251 next_index =
node->cached_next_index;
1253 while (n_left_from > 0)
1259 while (n_left_from > 0 && n_left_to_next > 0)
1266 ip6_address_t dst0, src0, seg0;
1284 n_left_to_next -= 1;
1296 tag = ip6srv0->
sr.
tag;
1316 u8 *teid8p = (
u8 *) & teid;
1334 qfi = dst0.as_u8[
offset];
1351 qfi |= dst0.as_u8[
offset] << shift;
1352 qfi |= dst0.as_u8[offset + 1] >> (8 - shift);
1359 for (index = 0; index < 2; index++)
1361 sp[
index] = dst0.as_u8[offset + index + 1] << shift;
1363 dst0.as_u8[offset + index + 2] >> (8 - shift);
1368 for (index = 0; index < 4; index++)
1370 *teid8p = dst0.as_u8[offset + index + 1] << shift;
1372 dst0.as_u8[offset + index + 2] >> (8 - shift);
1408 sizeof (ip6_address_t) *
1417 ie_size = sub_tlv->
length;
1446 hdr0->
gtpu.
length = clib_host_to_net_u16 (len0);
1504 ie_ptr = (
u8 *) ((
u8 *) hdr0 + (hdrlen - ie_size));
1510 hdr0->
udp.
length = clib_host_to_net_u16 (len0 +
1516 sizeof (ip6_address_t));
1518 sizeof (ip6_address_t));
1540 sizeof (ip6_address_t));
1542 sizeof (ip6_address_t));
1554 n_left_to_next, bi0, next0);
1561 SRV6_END_ERROR_M_GTP6_E_BAD_PACKETS, bad_n);
1564 SRV6_END_ERROR_M_GTP6_E_PACKETS, good_n);
1566 return frame->n_vectors;
1576 u32 n_left_from, next_index, *from, *to_next;
1579 u32 good_n = 0, bad_n = 0;
1582 n_left_from =
frame->n_vectors;
1583 next_index =
node->cached_next_index;
1585 while (n_left_from > 0)
1591 while (n_left_from > 0 && n_left_to_next > 0)
1601 ip6_address_t seg0, src0;
1625 n_left_to_next -= 1;
1657 teidp = (
u8 *) & teid;
1659 seqp = (
u8 *) & seq;
1676 qfip = (
u8 *) & qfi;
1714 seg0.as_u8[
offset] = qfi;
1725 for (idx = 0; idx < 2; idx++)
1727 seg0.as_u8[offset + idx + 1] |= seqp[idx] >> shift;
1728 seg0.as_u8[offset + idx + 2] |=
1729 seqp[idx] << (8 - shift);
1734 for (idx = 0; idx < 4; idx++)
1736 seg0.as_u8[offset + idx + 1] |= teidp[idx] >> shift;
1737 seg0.as_u8[offset + idx + 2] |=
1738 teidp[idx] << (8 - shift);
1753 seg0.as_u8[
offset] |= qfi >> shift;
1754 seg0.as_u8[offset + 1] |= qfi << (8 - shift);
1762 payload_len = clib_net_to_host_u16 (hdr0->
gtpu.
length);
1763 if (payload_len != 0)
1771 ies = (
u8 *) ((
u8 *) hdr0 + hdrlen);
1818 hdr_len +=
sizeof (ip6_address_t);
1826 hdr_len +=
sizeof (ip6_address_t);
1836 tlv_siz = (tlv_siz & ~0x07) + (tlv_siz & 0x07 ? 0x08 : 0x0);
1860 ip6srv->
sr.
length +=
sizeof (ip6_address_t) / 8;
1868 sizeof (ip6_address_t));
1873 ip6srv->
ip.
protocol = IP_PROTOCOL_IPV6_ROUTE;
1880 sizeof (ip6_address_t)) / 8) - 1;
1892 ip6srv->
sr.
length +=
sizeof (ip6_address_t) / 8;
1900 if ((clib_net_to_host_u32
1910 if ((clib_net_to_host_u32
1923 if ((clib_net_to_host_u32
1953 ip6srv->
ip.
protocol = IP_PROTOCOL_IPV6_ROUTE;
1963 ip6srv->
sr.
length =
sizeof (ip6_address_t) / 8;
1970 if ((clib_net_to_host_u32
1978 if ((clib_net_to_host_u32
1991 if ((clib_net_to_host_u32
2028 clib_host_to_net_u16 (len0 + hdr_len -
sizeof (
ip6_header_t));
2038 sizeof (ip6_address_t));
2040 sizeof (ip6_address_t));
2043 sizeof (ip6_address_t));
2056 n_left_to_next, bi0, next0);
2063 SRV6_END_ERROR_M_GTP6_D_BAD_PACKETS, bad_n);
2066 SRV6_END_ERROR_M_GTP6_D_PACKETS, good_n);
2068 return frame->n_vectors;
2078 u32 n_left_from, next_index, *from, *to_next;
2082 u32 good_n = 0, bad_n = 0;
2085 n_left_from =
frame->n_vectors;
2086 next_index =
node->cached_next_index;
2088 while (n_left_from > 0)
2094 while (n_left_from > 0 && n_left_to_next > 0)
2129 n_left_to_next -= 1;
2162 teidp = (
u8 *) & teid;
2164 seqp = (
u8 *) & seq;
2217 seg0.as_u8[
offset] = qfi;
2228 for (idx = 0; idx < 2; idx++)
2230 seg0.as_u8[offset + idx + 1] |= seqp[idx] >> shift;
2231 seg0.as_u8[offset + idx + 2] |=
2232 seqp[idx] << (8 - shift);
2237 for (idx = 0; idx < 4; idx++)
2239 seg0.as_u8[offset + idx + 1] |= teidp[idx] >> shift;
2240 seg0.as_u8[offset + idx + 2] |=
2241 teidp[idx] << (8 - shift);
2256 seg0.as_u8[
offset] |= qfi >> shift;
2257 seg0.as_u8[offset + 1] |= qfi << (8 - shift);
2265 payload_len = clib_net_to_host_u16 (hdr0->
gtpu.
length);
2266 if (payload_len != 0)
2274 ies = (
u8 *) ((
u8 *) hdr0 + hdrlen);
2322 hdr_len +=
sizeof (ip6_address_t) * 2;
2330 tlv_siz = (tlv_siz & ~0x07) + (tlv_siz & 0x07 ? 0x08 : 0x0);
2354 ip6srv->
sr.
length += ((
sizeof (ip6_address_t) * 2) / 8);
2364 sizeof (ip6_address_t));
2369 ip6srv->
ip.
protocol = IP_PROTOCOL_IPV6_ROUTE;
2376 2 *
sizeof (ip6_address_t)) / 8) - 1;
2389 ip6srv->
sr.
length +=
sizeof (ip6_address_t) / 8;
2406 sizeof (ip6_address_t)) / 8) - 1;
2434 clib_host_to_net_u16 (len0 + hdr_len -
sizeof (
ip6_header_t));
2435 ip6srv->
ip.
protocol = IP_PROTOCOL_IPV6_ROUTE;
2441 if ((clib_net_to_host_u32
2451 if ((clib_net_to_host_u32
2464 if ((clib_net_to_host_u32
2492 sizeof (ip6_address_t));
2494 sizeof (ip6_address_t));
2497 sizeof (ip6_address_t));
2511 n_left_to_next, bi0, next0);
2518 SRV6_END_ERROR_M_GTP6_D_DI_BAD_PACKETS, bad_n);
2521 SRV6_END_ERROR_M_GTP6_D_DI_PACKETS, good_n);
2523 return frame->n_vectors;
2533 u32 n_left_from, next_index, *from, *to_next;
2536 u32 good_n = 0, bad_n = 0;
2539 n_left_from =
frame->n_vectors;
2540 next_index =
node->cached_next_index;
2542 while (n_left_from > 0)
2548 while (n_left_from > 0 && n_left_to_next > 0)
2570 n_left_to_next -= 1;
2597 sizeof (ip6_address_t));
2599 sizeof (ip6_address_t));
2641 if ((clib_net_to_host_u32
2667 if ((clib_net_to_host_u32
2686 if ((clib_net_to_host_u32
2717 sizeof (ip6_address_t));
2719 sizeof (ip6_address_t));
2732 n_left_to_next, bi0, next0);
2739 SRV6_END_ERROR_M_GTP6_DT_BAD_PACKETS, bad_n);
2742 SRV6_END_ERROR_M_GTP6_DT_PACKETS, good_n);
2744 return frame->n_vectors;
2754 u32 n_left_from, next_index, *from, *to_next;
2756 u32 good_n = 0, bad_n = 0;
2759 n_left_from =
frame->n_vectors;
2760 next_index =
node->cached_next_index;
2762 while (n_left_from > 0)
2768 while (n_left_from > 0 && n_left_to_next > 0)
2790 n_left_to_next -= 1;
2861 if ((clib_net_to_host_u32
2888 if ((clib_net_to_host_u32
2908 if ((clib_net_to_host_u32
2939 sizeof (ip6_address_t));
2941 sizeof (ip6_address_t));
2948 n_left_to_next, bi0, next0);
2955 SRV6_T_ERROR_M_GTP4_DT_BAD_PACKETS, bad_n);
2958 SRV6_T_ERROR_M_GTP4_DT_PACKETS, good_n);
2960 return frame->n_vectors;
2965 .name =
"srv6-end-m-gtp6-e",.vector_size =
sizeof (
u32),.format_trace =
2977 .name =
"srv6-end-m-gtp6-d",.vector_size =
sizeof (
u32),.format_trace =
2989 .name =
"srv6-end-m-gtp6-d-di",.vector_size =
sizeof (
u32),.format_trace =
3001 .name =
"srv6-end-m-gtp6-dt",.vector_size =
sizeof (
u32),.format_trace =
3015 .name =
"srv6-t-m-gtp4-dt",.vector_size =
sizeof (
u32),.format_trace =
#define GTPU_PDU_SESSION_P_BIT_MASK
u32 flags
buffer flags: VLIB_BUFFER_FREE_LIST_INDEX_MASK: bits used to store free list index, VLIB_BUFFER_IS_TRACED: trace this buffer.
srv6_end_main_v6_dt_t srv6_end_main_v6_dt
#define GTPU_EXTHDR_PDU_SESSION
#define SRH_TAG_ERROR_INDICATION
#define foreach_srv6_t_v4_d_error
#define SRH_TAG_ECHO_REQUEST
#define IP_PROTOCOL_IP6_ETHERNET
static void vlib_increment_combined_counter(vlib_combined_counter_main_t *cm, u32 thread_index, u32 index, u64 n_packets, u64 n_bytes)
Increment a combined counter.
#define SRV6_GTP_UDP_DST_PORT
#define foreach_srv6_end_v6_e_error
#define clib_memcpy_fast(a, b, c)
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
vlib_node_registration_t srv6_end_m_gtp6_d_di
(constructor) VLIB_REGISTER_NODE (srv6_end_m_gtp6_d_di)
srv6_t_main_v4_dt_t srv6_t_main_v4_dt
#define foreach_srv6_end_v6_d_di_error
ip6_address_t * segments
SIDs (key)
#define USER_PLANE_SUB_TLV_IE
#define foreach_srv6_t_v4_dt_error
#define GTPU_RECOVERY_IE_TYPE
srv6_end_main_v6_decap_t srv6_end_main_v6_decap
#define ROUTING_HEADER_TYPE_SR
#define VLIB_NODE_FN(node)
static uword vlib_buffer_length_in_chain(vlib_main_t *vm, vlib_buffer_t *b)
Get length in bytes of the buffer chain.
vlib_combined_counter_main_t sr_ls_invalid_counters
vlib_combined_counter_main_t sr_ls_valid_counters
srv6_end_main_v6_t srv6_end_main_v6
#define clib_memcpy(d, s, n)
static u16 srh_tagfield[256]
vlib_node_registration_t srv6_t_m_gtp4_dt
(constructor) VLIB_REGISTER_NODE (srv6_t_m_gtp4_dt)
#define GTPU_TYPE_END_MARKER
ip6_address_t sr_pr_encaps_src
u32 end_m_gtp6_d_node_index
#define SRH_TAG_END_MARKER
union gtpu_pdu_session_t::@152 u
SR Segment List (SID list)
description fragment has unexpected format
#define SRV6_NHTYPE_NON_IP
#define IPPROTO_IPV6_ROUTE
static u8 * format_srv6_end_rewrite_trace(u8 *s, va_list *args)
u32 end_m_gtp6_d_di_node_index
static char * srv6_end_error_v6_e_strings[]
vl_api_fib_path_type_t type
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
#define SRV6_PDU_SESSION_U_BIT_MASK
#define GTPU_PDU_SESSION_QFI_MASK
static char * srv6_t_error_v4_d_strings[]
vlib_node_registration_t srv6_end_m_gtp6_d
(constructor) VLIB_REGISTER_NODE (srv6_end_m_gtp6_d)
static void * vlib_buffer_get_current(vlib_buffer_t *b)
Get pointer to current data to process.
#define GTPU_TYPE_ECHO_REPLY
#define vlib_validate_buffer_enqueue_x1(vm, node, next_index, to_next, n_left_to_next, bi0, next0)
Finish enqueueing one buffer forward in the graph.
#define vlib_get_next_frame(vm, node, next_index, vectors, n_vectors_left)
Get pointer to next frame vector data by (vlib_node_runtime_t, next_index).
#define SRV6_PDU_SESSION_R_BIT_MASK
static char * srv6_end_error_v6_dt_strings[]
static void vlib_node_increment_counter(vlib_main_t *vm, u32 node_index, u32 counter_index, u64 increment)
ip6_sr_localsid_t * localsids
vlib_node_registration_t srv6_end_m_gtp4_e
(constructor) VLIB_REGISTER_NODE (srv6_end_m_gtp4_e)
#define SRH_TAG_ECHO_REPLY
#define VLIB_REGISTER_NODE(x,...)
u32 end_m_gtp4_e_node_index
ip6_address_t v6src_prefix
#define GTPU_TYPE_ECHO_REQUEST
vlib_node_registration_t srv6_t_m_gtp4_d
(constructor) VLIB_REGISTER_NODE (srv6_t_m_gtp4_d)
srv6_end_main_v6_decap_di_t srv6_end_main_v6_decap_di
u32 * segments_lists
SID lists indexes (vector)
u32 t_m_gtp4_dt_node_index
vlib_node_registration_t srv6_end_m_gtp6_e
(constructor) VLIB_REGISTER_NODE (srv6_end_m_gtp6_e)
srv6_end_m_gtp6_d_di_next_t
u32 t_m_gtp4_d_node_index
void vlib_put_next_frame(vlib_main_t *vm, vlib_node_runtime_t *r, u32 next_index, u32 n_vectors_left)
Release pointer to next frame vector data.
__clib_export uword hash_memory(void *p, word n_bytes, uword state)
srv6_t_main_v4_decap_t srv6_t_main_v4_decap
vlib_main_t vlib_node_runtime_t * node
static char * srv6_t_error_v4_dt_strings[]
#define GTPU_PDU_SESSION_R_BIT_MASK
ip4_gtpu_header_t cache_hdr
ip6_gtpu_header_t cache_hdr
srv6_end_main_v4_t srv6_end_main_v4
u32 end_m_gtp6_e_node_index
static uword * mhash_get(mhash_t *h, const void *key)
void * plugin_mem
Memory to be used by the plugin callback functions.
static u8 * format_srv6_end_rewrite_trace6(u8 *s, va_list *args)
static void vlib_buffer_advance(vlib_buffer_t *b, word l)
Advance current data pointer by the supplied (signed!) amount.
static u8 gtpu_type_get(u16 tag)
mhash_t sr_policies_index_hash
srv6_end_m_gtp6_dt_next_t
vlib_node_registration_t srv6_end_m_gtp6_dt
(constructor) VLIB_REGISTER_NODE (srv6_end_m_gtp6_dt)
#define SRV6_PDU_SESSION_QFI_MASK
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
ip6_sr_policy_t * sr_policies
vlib_main_t vlib_node_runtime_t vlib_frame_t * frame
u8 * rewrite
Precomputed rewrite header.
static char * srv6_end_error_v6_d_strings[]
VLIB buffer representation.
static void * vlib_frame_vector_args(vlib_frame_t *f)
Get pointer to frame vector data.
static char * srv6_end_error_v4_strings[]
#define foreach_srv6_end_v4_error
struct clib_bihash_value offset
template key/value backing page structure
u32 end_m_gtp6_dt_node_index
Segment Routing main datastructure.
#define vec_foreach(var, vec)
Vector iterator.
void * vlib_add_trace(vlib_main_t *vm, vlib_node_runtime_t *r, vlib_buffer_t *b, u32 n_data_bytes)
static char * srv6_end_error_v6_d_di_strings[]
#define foreach_srv6_end_v6_dt_error
#define foreach_srv6_end_v6_d_error
#define VLIB_NODE_FLAG_TRACE
static u16 hash_uword_to_u16(uword *key)
#define SRH_TLV_USER_PLANE_CONTAINER
#define GTPU_TYPE_ERROR_INDICATION
ip6srv_combo_header_t cache_hdr
static vlib_buffer_t * vlib_get_buffer(vlib_main_t *vm, u32 buffer_index)
Translate buffer index into buffer pointer.
static u16 ip4_header_checksum(ip4_header_t *i)