25typedef __u32 PortId_t;
26typedef __u64 Timestamp_t;
27typedef __u8 ClassOfService_t;
28typedef __u16 CloneSessionId_t;
29typedef __u32 MulticastGroup_t;
30typedef __u16 EgressInstance_t;
31typedef __u8 MirrorSlotId_t;
32typedef __u16 MirrorSessionId_t;
35typedef __u8 ParserError_t;
36static const ParserError_t NoError = 0;
37static const ParserError_t PacketTooShort = 1;
38static const ParserError_t NoMatch = 2;
39static const ParserError_t StackOutOfBounds = 3;
40static const ParserError_t HeaderTooShort = 4;
41static const ParserError_t ParserTimeout = 5;
42static const ParserError_t ParserInvalidArgument = 6;
45enum PNA_Source_t { FROM_HOST, FROM_NET };
47enum PNA_MeterColor_t { RED, GREEN, YELLOW };
49enum MirrorType { NO_MIRROR, PRE_MODIFY, POST_MODIFY };
54} __attribute__((aligned(4)));
60 Timestamp_t timestamp;
61 ParserError_t parser_error;
62 ClassOfService_t class_of_service;
64} __attribute__((aligned(4)));;
69 ClassOfService_t class_of_service;
70} __attribute__((aligned(4)));
81 enum MirrorType mirror_type;
82 MirrorSlotId_t mirror_slot_id;
83 ParserError_t parser_error;
84 MirrorSessionId_t mirror_session_id;
87} __attribute__((aligned(4)));
92 __u8 class_of_service;
94 __u16 packet_length_bytes;
95} __attribute__((aligned(4)));
97#define send_to_port(x) (compiler_meta__->egress_port = x)
98#define drop_packet() (compiler_meta__->drop = true)
107struct __attribute__((__packed__)) p4tc_table_entry_act_bpf {
110 is_default_miss_act:1,
111 is_default_hit_act:1;
116 struct p4tc_table_entry_act_bpf act_bpf;
126extern struct p4tc_table_entry_act_bpf *
127bpf_p4tc_tbl_read(
struct __sk_buff *skb_ctx,
129 const u32 params__sz,
130 void *key,
const __u32 key__sz) __ksym;
132extern struct p4tc_table_entry_act_bpf *
133xdp_p4tc_tbl_read(
struct xdp_md *skb_ctx,
135 const u32 params__sz,
136 void *key,
const __u32 key__sz) __ksym;
140bpf_p4tc_entry_create(
struct __sk_buff *skb_ctx,
142 const u32 params__sz,
143 void *key,
const u32 key__sz) __ksym;
146xdp_p4tc_entry_create(
struct xdp_md *xdp_ctx,
148 const u32 params__sz,
149 void *bpf_key_mask, u32 bpf_key_mask__sz) __ksym;
153bpf_p4tc_entry_create_on_miss(
struct __sk_buff *skb_ctx,
155 const u32 params__sz,
156 void *key,
const u32 key__sz) __ksym;
159xdp_p4tc_entry_create_on_miss(
struct xdp_md *xdp_ctx,
161 const u32 params__sz,
162 void *key,
const u32 key__sz) __ksym;
166bpf_p4tc_entry_update(
struct __sk_buff *skb_ctx,
168 const u32 params__sz,
169 void *key,
const u32 key__sz) __ksym;
172xdp_p4tc_entry_update(
struct xdp_md *xdp_ctx,
174 const u32 params__sz,
175 void *key,
const u32 key__sz) __ksym;
179bpf_p4tc_entry_delete(
struct __sk_buff *skb_ctx,
181 const u32 params__sz,
182 void *key,
const u32 key__sz) __ksym;
185xdp_p4tc_entry_delete(
struct xdp_md *xdp_ctx,
187 const u32 params__sz,
188 void *key,
const u32 key__sz) __ksym;
192#define P4TC_EXT_CNT_DIRECT 0x1
193#define P4TC_EXT_CNT_INDIRECT 0x2
194#define P4TC_EXT_METER_DIRECT (1 << 2)
195#define P4TC_EXT_METER_INDIRECT (1 << 3)
216bpf_p4tc_extern_count_pktsnbytes(
struct __sk_buff *skb_ctx,
218 const u32 params__sz,
void *key,
const u32 key__sz) __ksym;
221bpf_p4tc_extern_count_pkts(
struct __sk_buff *skb_ctx,
223 const u32 params__sz,
void *key,
const u32 key__sz) __ksym;
226bpf_p4tc_extern_count_bytes(
struct __sk_buff *skb_ctx,
228 const u32 params__sz,
void *key,
const u32 key__sz) __ksym;
231xdp_p4tc_extern_count_pktsnbytes(
struct xdp_md *xdp_ctx,
233 const u32 params__sz) __ksym;
236xdp_p4tc_extern_count_pkts(
struct xdp_md *xdp_ctx,
238 const u32 params__sz) __ksym;
241xdp_p4tc_extern_count_bytes(
struct xdp_md *xdp_ctx,
243 const u32 params__sz) __ksym;
245extern int bpf_p4tc_extern_meter_bytes_color(
struct __sk_buff *skb_ctx,
247 const u32 params__sz,
void *key,
248 const u32 key__sz) __ksym;
250bpf_p4tc_extern_meter_bytes(
struct __sk_buff *skb,
252 const u32 params__sz,
void *key,
253 const u32 key__sz) __ksym;
255extern int bpf_p4tc_extern_meter_pkts_color(
struct __sk_buff *skb_ctx,
257 const u32 params__sz,
void *key,
258 const u32 key__sz) __ksym;
260bpf_p4tc_extern_meter_pkts(
struct __sk_buff *skb,
262 const u32 params__sz,
void *key,
263 const u32 key__sz) __ksym;
265extern int xdp_p4tc_extern_meter_bytes_color(
struct xdp_md *xdp_ctx,
267 const u32 params__sz,
void *key,
268 const u32 key__sz) __ksym;
270extern int xdp_p4tc_extern_meter_bytes(
struct xdp_md *xdp_ctx,
272 const u32 params__sz,
void *key,
273 const u32 key__sz) __ksym;
275extern int xdp_p4tc_extern_meter_pkts_color(
struct xdp_md *xdp_ctx,
277 const u32 params__sz,
void *key,
278 const u32 key__sz) __ksym;
280extern int xdp_p4tc_extern_meter_pkts(
struct xdp_md *xdp_ctx,
282 const u32 params__sz,
void *key,
283 const u32 key__sz) __ksym;
294 const void *data,
const u32 data__sz) __ksym;
306 const u32 params__sz,
307 const void *data,
const u32 data__sz) __ksym;
311 const u32 params__sz) __ksym;
315 const u32 params__sz) __ksym;
319 const u32 params__sz) __ksym;
324 const u32 params__sz,
325 const void *data,
int len) __ksym;
329 const u32 params__sz,
330 const void *data,
const u32 data__sz) __ksym;
334 const u32 params__sz) __ksym;
338 const u32 params__sz,
343bpf_p4tc_ext_hash_crc16(
const void *data,
int len, u16 seed) __ksym;
347bpf_p4tc_ext_hash_base_crc16(
const void *data,
const u32 data__sz,
348 u32 base, u32 max, u16 seed) {
349 u16 hash = bpf_p4tc_ext_hash_crc16(data, data__sz, seed);
351 return (base + (hash % max));
356bpf_p4tc_ext_hash_crc32(
const void *data,
const u32 data__sz, u32 seed) __ksym;
360bpf_p4tc_ext_hash_base_crc32(
const void *data,
const u32 data__sz,
361 u32 base, u32 max, u32 seed) {
362 u32 hash = bpf_p4tc_ext_hash_crc32(data, data__sz, seed);
364 return (base + (hash % max));
369bpf_p4tc_ext_hash_16bit_complement(
const void *data,
const u32 data__sz,
374bpf_p4tc_ext_hash_base_16bit_complement(
const void *data,
const u32 data__sz,
375 u32 base, u32 max, u16 seed) {
376 u16 hash = bpf_p4tc_ext_hash_16bit_complement(data, data__sz, seed);
378 return (base + (hash % max));
384bpf_p4tc_is_net_port(
struct __sk_buff *skb_ctx,
const u32 ifindex) __ksym;
389bpf_p4tc_is_host_port(
struct __sk_buff *skb_ctx,
const u32 ifindex) __ksym;
394xdp_p4tc_is_net_port(
struct xdp_md *xdp_ctx,
const u32 ifindex) __ksym;
399xdp_p4tc_is_host_port(
struct xdp_md *xdp_ctx,
const u32 ifindex) __ksym;
413#define EXTERN_IS_NET_PORT 1234
414#define EXTERN_IS_HOST_PORT 4567
418bpf_p4tc_extern_md_read(
struct __sk_buff *skb_ctx,
420 const u32 params__sz) __ksym;
423extern int bpf_p4tc_extern_md_write(
struct __sk_buff *skb_ctx,
425 const u32 params__sz,
427 const u32 val__sz) __ksym;
431xdp_p4tc_extern_md_read(
struct xdp_md *xdp_ctx,
433 const u32 params__sz) __ksym;
436extern int xdp_p4tc_extern_md_write(
struct xdp_md *xdp_ctx,
438 const u32 params__sz,
440 const u32 val__sz) __ksym;
442int bpf_p4tc_extern_digest_pack(
struct __sk_buff *skb,
444 const u32 params__sz) __ksym;
446int xdp_p4tc_extern_digest_pack(
struct xdp_md *xdp_ctx,
448 const u32 params__sz) __ksym;
451static inline u64 bpf_p4tc_extern_timestamp() {
452 return bpf_ktime_get_ns();
455#define U32_MAX ((u32)~0U)
458static inline u32 bpf_p4tc_extern_random(u32 min, u32 max) {
460 return (min + bpf_get_prandom_u32());
462 return (min + bpf_get_prandom_u32()) % (max + 1);
465#define BIT(x) (1 << x)
467#define P4TC_SKB_META_SET_TSTAMP BIT(0)
468#define P4TC_SKB_META_SET_MARK BIT(1)
469#define P4TC_SKB_META_SET_CLASSID BIT(2)
470#define P4TC_SKB_META_SET_TC_INDEX BIT(3)
471#define P4TC_SKB_META_SET_QMAP BIT(4)
472#define P4TC_SKB_META_SET_PROTO BIT(5)
485bpf_p4tc_skb_set_tstamp(
struct __sk_buff *skb,
488 meta_set->tstamp = tstamp;
489 meta_set->bitmask |= P4TC_SKB_META_SET_TSTAMP;
493bpf_p4tc_skb_set_mark(
struct __sk_buff *skb,
496 meta_set->mark = mark;
497 meta_set->bitmask |= P4TC_SKB_META_SET_MARK;
501bpf_p4tc_skb_set_tc_classid(
struct __sk_buff *skb,
504 meta_set->tc_classid = tc_classid;
505 meta_set->bitmask |= P4TC_SKB_META_SET_CLASSID;
509bpf_p4tc_skb_set_tc_index(
struct __sk_buff *skb,
512 meta_set->tc_index = tc_index;
513 meta_set->bitmask |= P4TC_SKB_META_SET_TC_INDEX;
517bpf_p4tc_skb_set_queue_mapping(
struct __sk_buff *skb,
521 meta_set->queue_mapping = queue_mapping;
522 meta_set->bitmask |= P4TC_SKB_META_SET_QMAP;
526bpf_p4tc_skb_set_protocol(
struct __sk_buff *skb,
529 meta_set->protocol = protocol;
530 meta_set->bitmask |= P4TC_SKB_META_SET_PROTO;
533int bpf_p4tc_skb_meta_set(
struct __sk_buff *skb,
535 u32 skb_meta_set__sz) __ksym;
537#define P4TC_SKB_META_GET_AT_INGRESS_BIT BIT(0)
538#define P4TC_SKB_META_GET_FROM_INGRESS_BIT BIT(1)
547bpf_p4tc_skb_get_tstamp(
struct __sk_buff *skb,
554bpf_p4tc_skb_get_tc_classid(
struct __sk_buff *skb,
557 return skb->tc_classid;
561bpf_p4tc_skb_get_tc_index(
struct __sk_buff *skb,
564 return skb->tc_index;
568bpf_p4tc_skb_get_queue_mapping(
struct __sk_buff *skb,
571 return skb->queue_mapping;
575bpf_p4tc_skb_get_protocol(
struct __sk_buff *skb,
578 return skb->protocol;
582bpf_p4tc_skb_get_tc_at_ingress(
struct __sk_buff *skb,
585 if (meta_get->bitmask & P4TC_SKB_META_GET_AT_INGRESS_BIT)
586 return meta_get->tc_at_ingress;
592bpf_p4tc_skb_get_from_ingress(
struct __sk_buff *skb,
595 if (meta_get->bitmask & P4TC_SKB_META_GET_FROM_INGRESS_BIT)
596 return meta_get->from_ingress;
602bpf_p4tc_skb_get_mark(
struct __sk_buff *skb,
608int bpf_p4tc_skb_meta_get(
struct __sk_buff *skb,
610 u32 skb_meta_get__sz) __ksym;
Definition ebpf/runtime/psa.h:124