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++)
438 dst4.
as_u8[index] = dst0.as_u8[offset + index] << shift;
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;
1346 qfi = dst0.as_u8[offset + 4];
1357 for (index = 0; index < 2; index++)
1359 sp[index] = dst0.as_u8[offset + index] << shift;
1361 dst0.as_u8[offset + index + 1] >> (8 - shift);
1366 for (index = 0; index < 4; index++)
1368 *teid8p = dst0.as_u8[offset + index] << shift;
1370 dst0.as_u8[offset + index + 1] >> (8 - shift);
1375 qfi |= dst0.as_u8[offset + 4] << shift;
1376 qfi |= dst0.as_u8[offset + 5] >> (8 - shift);
1409 sizeof (ip6_address_t) *
1418 ie_size = sub_tlv->
length;
1447 hdr0->
gtpu.
length = clib_host_to_net_u16 (len0);
1505 ie_ptr = (
u8 *) ((
u8 *) hdr0 + (hdrlen - ie_size));
1511 hdr0->
udp.
length = clib_host_to_net_u16 (len0 +
1517 sizeof (ip6_address_t));
1519 sizeof (ip6_address_t));
1541 sizeof (ip6_address_t));
1543 sizeof (ip6_address_t));
1555 n_left_to_next, bi0, next0);
1562 SRV6_END_ERROR_M_GTP6_E_BAD_PACKETS, bad_n);
1565 SRV6_END_ERROR_M_GTP6_E_PACKETS, good_n);
1567 return frame->n_vectors;
1577 u32 n_left_from, next_index, *from, *to_next;
1580 u32 good_n = 0, bad_n = 0;
1583 n_left_from =
frame->n_vectors;
1584 next_index =
node->cached_next_index;
1586 while (n_left_from > 0)
1592 while (n_left_from > 0 && n_left_to_next > 0)
1602 ip6_address_t seg0, src0;
1626 n_left_to_next -= 1;
1658 teidp = (
u8 *) & teid;
1660 seqp = (
u8 *) & seq;
1677 qfip = (
u8 *) & qfi;
1716 seg0.as_u8[offset + 4] = qfi;
1727 for (idx = 0; idx < 2; idx++)
1729 seg0.as_u8[offset + idx] |= seqp[idx] >> shift;
1730 seg0.as_u8[offset + idx + 1] |=
1731 seqp[idx] << (8 - shift);
1736 for (idx = 0; idx < 4; idx++)
1738 seg0.as_u8[offset + idx] |= teidp[idx] >> shift;
1739 seg0.as_u8[offset + idx + 1] |=
1740 teidp[idx] << (8 - shift);
1755 seg0.as_u8[offset + 4] |= qfi >> shift;
1756 seg0.as_u8[offset + 5] |= qfi << (8 - shift);
1764 payload_len = clib_net_to_host_u16 (hdr0->
gtpu.
length);
1765 if (payload_len != 0)
1773 ies = (
u8 *) ((
u8 *) hdr0 + hdrlen);
1820 hdr_len +=
sizeof (ip6_address_t);
1828 hdr_len +=
sizeof (ip6_address_t);
1838 tlv_siz = (tlv_siz & ~0x07) + (tlv_siz & 0x07 ? 0x08 : 0x0);
1862 ip6srv->
sr.
length +=
sizeof (ip6_address_t) / 8;
1870 sizeof (ip6_address_t));
1875 ip6srv->
ip.
protocol = IP_PROTOCOL_IPV6_ROUTE;
1882 sizeof (ip6_address_t)) / 8) - 1;
1894 ip6srv->
sr.
length +=
sizeof (ip6_address_t) / 8;
1902 if ((clib_net_to_host_u32
1912 if ((clib_net_to_host_u32
1925 if ((clib_net_to_host_u32
1955 ip6srv->
ip.
protocol = IP_PROTOCOL_IPV6_ROUTE;
1965 ip6srv->
sr.
length =
sizeof (ip6_address_t) / 8;
1972 if ((clib_net_to_host_u32
1980 if ((clib_net_to_host_u32
1993 if ((clib_net_to_host_u32
2030 clib_host_to_net_u16 (len0 + hdr_len -
sizeof (
ip6_header_t));
2040 sizeof (ip6_address_t));
2042 sizeof (ip6_address_t));
2045 sizeof (ip6_address_t));
2058 n_left_to_next, bi0, next0);
2065 SRV6_END_ERROR_M_GTP6_D_BAD_PACKETS, bad_n);
2068 SRV6_END_ERROR_M_GTP6_D_PACKETS, good_n);
2070 return frame->n_vectors;
2080 u32 n_left_from, next_index, *from, *to_next;
2084 u32 good_n = 0, bad_n = 0;
2087 n_left_from =
frame->n_vectors;
2088 next_index =
node->cached_next_index;
2090 while (n_left_from > 0)
2096 while (n_left_from > 0 && n_left_to_next > 0)
2131 n_left_to_next -= 1;
2164 teidp = (
u8 *) & teid;
2166 seqp = (
u8 *) & seq;
2220 seg0.as_u8[offset + 4] = qfi;
2231 for (idx = 0; idx < 2; idx++)
2233 seg0.as_u8[offset + idx] |= seqp[idx] >> shift;
2234 seg0.as_u8[offset + idx + 1] |=
2235 seqp[idx] << (8 - shift);
2240 for (idx = 0; idx < 4; idx++)
2242 seg0.as_u8[offset + idx] |= teidp[idx] >> shift;
2243 seg0.as_u8[offset + idx + 1] |=
2244 teidp[idx] << (8 - shift);
2259 seg0.as_u8[offset + 4] |= qfi >> shift;
2260 seg0.as_u8[offset + 5] |= qfi << (8 - shift);
2268 payload_len = clib_net_to_host_u16 (hdr0->
gtpu.
length);
2269 if (payload_len != 0)
2277 ies = (
u8 *) ((
u8 *) hdr0 + hdrlen);
2325 hdr_len +=
sizeof (ip6_address_t) * 2;
2333 tlv_siz = (tlv_siz & ~0x07) + (tlv_siz & 0x07 ? 0x08 : 0x0);
2357 ip6srv->
sr.
length += ((
sizeof (ip6_address_t) * 2) / 8);
2367 sizeof (ip6_address_t));
2372 ip6srv->
ip.
protocol = IP_PROTOCOL_IPV6_ROUTE;
2379 2 *
sizeof (ip6_address_t)) / 8) - 1;
2392 ip6srv->
sr.
length +=
sizeof (ip6_address_t) / 8;
2409 sizeof (ip6_address_t)) / 8) - 1;
2437 clib_host_to_net_u16 (len0 + hdr_len -
sizeof (
ip6_header_t));
2438 ip6srv->
ip.
protocol = IP_PROTOCOL_IPV6_ROUTE;
2444 if ((clib_net_to_host_u32
2454 if ((clib_net_to_host_u32
2467 if ((clib_net_to_host_u32
2495 sizeof (ip6_address_t));
2497 sizeof (ip6_address_t));
2500 sizeof (ip6_address_t));
2514 n_left_to_next, bi0, next0);
2521 SRV6_END_ERROR_M_GTP6_D_DI_BAD_PACKETS, bad_n);
2524 SRV6_END_ERROR_M_GTP6_D_DI_PACKETS, good_n);
2526 return frame->n_vectors;
2536 u32 n_left_from, next_index, *from, *to_next;
2539 u32 good_n = 0, bad_n = 0;
2542 n_left_from =
frame->n_vectors;
2543 next_index =
node->cached_next_index;
2545 while (n_left_from > 0)
2551 while (n_left_from > 0 && n_left_to_next > 0)
2573 n_left_to_next -= 1;
2600 sizeof (ip6_address_t));
2602 sizeof (ip6_address_t));
2644 if ((clib_net_to_host_u32
2670 if ((clib_net_to_host_u32
2689 if ((clib_net_to_host_u32
2720 sizeof (ip6_address_t));
2722 sizeof (ip6_address_t));
2735 n_left_to_next, bi0, next0);
2742 SRV6_END_ERROR_M_GTP6_DT_BAD_PACKETS, bad_n);
2745 SRV6_END_ERROR_M_GTP6_DT_PACKETS, good_n);
2747 return frame->n_vectors;
2757 u32 n_left_from, next_index, *from, *to_next;
2759 u32 good_n = 0, bad_n = 0;
2762 n_left_from =
frame->n_vectors;
2763 next_index =
node->cached_next_index;
2765 while (n_left_from > 0)
2771 while (n_left_from > 0 && n_left_to_next > 0)
2793 n_left_to_next -= 1;
2864 if ((clib_net_to_host_u32
2891 if ((clib_net_to_host_u32
2911 if ((clib_net_to_host_u32
2942 sizeof (ip6_address_t));
2944 sizeof (ip6_address_t));
2951 n_left_to_next, bi0, next0);
2958 SRV6_T_ERROR_M_GTP4_DT_BAD_PACKETS, bad_n);
2961 SRV6_T_ERROR_M_GTP4_DT_PACKETS, good_n);
2963 return frame->n_vectors;
2968 .name =
"srv6-end-m-gtp6-e",.vector_size =
sizeof (
u32),.format_trace =
2980 .name =
"srv6-end-m-gtp6-d",.vector_size =
sizeof (
u32),.format_trace =
2992 .name =
"srv6-end-m-gtp6-d-di",.vector_size =
sizeof (
u32),.format_trace =
3004 .name =
"srv6-end-m-gtp6-dt",.vector_size =
sizeof (
u32),.format_trace =
3018 .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)
union gtpu_pdu_session_t::@128 u
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
SR Segment List (SID list)
#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.
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.
uword hash_memory(void *p, word n_bytes, uword state)
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
static void * vlib_add_trace(vlib_main_t *vm, vlib_node_runtime_t *r, vlib_buffer_t *b, u32 n_data_bytes)
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
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.
vlib_main_t vlib_node_runtime_t vlib_frame_t * frame
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)