24typedef __u32 PortId_t;
25typedef __u64 Timestamp_t;
26typedef __u8 ClassOfService_t;
27typedef __u16 CloneSessionId_t;
28typedef __u32 MulticastGroup_t;
29typedef __u16 EgressInstance_t;
30typedef __u8 MirrorSlotId_t;
31typedef __u16 MirrorSessionId_t;
34typedef __u8 ParserError_t;
35static const ParserError_t NoError = 0;
36static const ParserError_t PacketTooShort = 1;
37static const ParserError_t NoMatch = 2;
38static const ParserError_t StackOutOfBounds = 3;
39static const ParserError_t HeaderTooShort = 4;
40static const ParserError_t ParserTimeout = 5;
41static const ParserError_t ParserInvalidArgument = 6;
44enum PNA_Source_t { FROM_HOST, FROM_NET };
46enum PNA_MeterColor_t { RED, GREEN, YELLOW };
48enum MirrorType { NO_MIRROR, PRE_MODIFY, POST_MODIFY };
53} __attribute__((aligned(4)));
59 Timestamp_t timestamp;
60 ParserError_t parser_error;
61 ClassOfService_t class_of_service;
63} __attribute__((aligned(4)));;
68 ClassOfService_t class_of_service;
69} __attribute__((aligned(4)));
80 enum MirrorType mirror_type;
81 MirrorSlotId_t mirror_slot_id;
82 ParserError_t parser_error;
83 MirrorSessionId_t mirror_session_id;
86} __attribute__((aligned(4)));
91 __u8 class_of_service;
93 __u16 packet_length_bytes;
94} __attribute__((aligned(4)));
96#define send_to_port(x) (compiler_meta__->egress_port = x)
97#define drop_packet() (compiler_meta__->drop = true)
106struct __attribute__((__packed__)) p4tc_table_entry_act_bpf {
109 is_default_miss_act:1,
110 is_default_hit_act:1;
115 struct p4tc_table_entry_act_bpf act_bpf;
125extern struct p4tc_table_entry_act_bpf *
126bpf_p4tc_tbl_read(
struct __sk_buff *skb_ctx,
128 const u32 params__sz,
129 void *key,
const __u32 key__sz) __ksym;
131extern struct p4tc_table_entry_act_bpf *
132xdp_p4tc_tbl_read(
struct xdp_md *skb_ctx,
134 const u32 params__sz,
135 void *key,
const __u32 key__sz) __ksym;
139bpf_p4tc_entry_create(
struct __sk_buff *skb_ctx,
141 const u32 params__sz,
142 void *key,
const u32 key__sz) __ksym;
145xdp_p4tc_entry_create(
struct xdp_md *xdp_ctx,
147 const u32 params__sz,
148 void *bpf_key_mask, u32 bpf_key_mask__sz) __ksym;
152bpf_p4tc_entry_create_on_miss(
struct __sk_buff *skb_ctx,
154 const u32 params__sz,
155 void *key,
const u32 key__sz) __ksym;
158xdp_p4tc_entry_create_on_miss(
struct xdp_md *xdp_ctx,
160 const u32 params__sz,
161 void *key,
const u32 key__sz) __ksym;
165bpf_p4tc_entry_update(
struct __sk_buff *skb_ctx,
167 const u32 params__sz,
168 void *key,
const u32 key__sz) __ksym;
171xdp_p4tc_entry_update(
struct xdp_md *xdp_ctx,
173 const u32 params__sz,
174 void *key,
const u32 key__sz) __ksym;
178bpf_p4tc_entry_delete(
struct __sk_buff *skb_ctx,
180 const u32 params__sz,
181 void *key,
const u32 key__sz) __ksym;
184xdp_p4tc_entry_delete(
struct xdp_md *xdp_ctx,
186 const u32 params__sz,
187 void *key,
const u32 key__sz) __ksym;
191#define P4TC_EXT_CNT_DIRECT 0x1
192#define P4TC_EXT_CNT_INDIRECT 0x2
193#define P4TC_EXT_METER_DIRECT (1 << 2)
194#define P4TC_EXT_METER_INDIRECT (1 << 3)
215bpf_p4tc_extern_count_pktsnbytes(
struct __sk_buff *skb_ctx,
217 const u32 params__sz,
void *key,
const u32 key__sz) __ksym;
220bpf_p4tc_extern_count_pkts(
struct __sk_buff *skb_ctx,
222 const u32 params__sz,
void *key,
const u32 key__sz) __ksym;
225bpf_p4tc_extern_count_bytes(
struct __sk_buff *skb_ctx,
227 const u32 params__sz,
void *key,
const u32 key__sz) __ksym;
230xdp_p4tc_extern_count_pktsnbytes(
struct xdp_md *xdp_ctx,
232 const u32 params__sz) __ksym;
235xdp_p4tc_extern_count_pkts(
struct xdp_md *xdp_ctx,
237 const u32 params__sz) __ksym;
240xdp_p4tc_extern_count_bytes(
struct xdp_md *xdp_ctx,
242 const u32 params__sz) __ksym;
244extern int bpf_p4tc_extern_meter_bytes_color(
struct __sk_buff *skb_ctx,
246 const u32 params__sz,
void *key,
247 const u32 key__sz) __ksym;
249bpf_p4tc_extern_meter_bytes(
struct __sk_buff *skb,
251 const u32 params__sz,
void *key,
252 const u32 key__sz) __ksym;
254extern int bpf_p4tc_extern_meter_pkts_color(
struct __sk_buff *skb_ctx,
256 const u32 params__sz,
void *key,
257 const u32 key__sz) __ksym;
259bpf_p4tc_extern_meter_pkts(
struct __sk_buff *skb,
261 const u32 params__sz,
void *key,
262 const u32 key__sz) __ksym;
264extern int xdp_p4tc_extern_meter_bytes_color(
struct xdp_md *xdp_ctx,
266 const u32 params__sz,
void *key,
267 const u32 key__sz) __ksym;
269extern int xdp_p4tc_extern_meter_bytes(
struct xdp_md *xdp_ctx,
271 const u32 params__sz,
void *key,
272 const u32 key__sz) __ksym;
274extern int xdp_p4tc_extern_meter_pkts_color(
struct xdp_md *xdp_ctx,
276 const u32 params__sz,
void *key,
277 const u32 key__sz) __ksym;
279extern int xdp_p4tc_extern_meter_pkts(
struct xdp_md *xdp_ctx,
281 const u32 params__sz,
void *key,
282 const u32 key__sz) __ksym;
293 const u32 params__sz,
const void *data,
294 const u32 data__sz) __ksym;
298 const u32 params__sz) __ksym;
302 const u32 params__sz) __ksym;
308 const u32 params__sz,
309 const void *data,
const u32 data__sz) __ksym;
313 const u32 params__sz) __ksym;
317 const u32 params__sz) __ksym;
321 const u32 params__sz) __ksym;
326 const u32 params__sz,
327 const void *data,
int len) __ksym;
331 const u32 params__sz,
332 const void *data,
const u32 data__sz) __ksym;
336 const u32 params__sz) __ksym;
340 const u32 params__sz,
345bpf_p4tc_ext_hash_crc16(
const void *data,
int len, u16 seed) __ksym;
349bpf_p4tc_ext_hash_base_crc16(
const void *data,
const u32 data__sz,
350 u32 base, u32 max, u16 seed) {
351 u16 hash = bpf_p4tc_ext_hash_crc16(data, data__sz, seed);
353 return (base + (hash % max));
358bpf_p4tc_ext_hash_crc32(
const void *data,
const u32 data__sz, u32 seed) __ksym;
362bpf_p4tc_ext_hash_base_crc32(
const void *data,
const u32 data__sz,
363 u32 base, u32 max, u32 seed) {
364 u32 hash = bpf_p4tc_ext_hash_crc32(data, data__sz, seed);
366 return (base + (hash % max));
371bpf_p4tc_ext_hash_16bit_complement(
const void *data,
const u32 data__sz,
376bpf_p4tc_ext_hash_base_16bit_complement(
const void *data,
const u32 data__sz,
377 u32 base, u32 max, u16 seed) {
378 u16 hash = bpf_p4tc_ext_hash_16bit_complement(data, data__sz, seed);
380 return (base + (hash % max));
386bpf_p4tc_is_net_port(
struct __sk_buff *skb_ctx,
const u32 ifindex) __ksym;
391bpf_p4tc_is_host_port(
struct __sk_buff *skb_ctx,
const u32 ifindex) __ksym;
396xdp_p4tc_is_net_port(
struct xdp_md *xdp_ctx,
const u32 ifindex) __ksym;
401xdp_p4tc_is_host_port(
struct xdp_md *xdp_ctx,
const u32 ifindex) __ksym;
415#define EXTERN_IS_NET_PORT 1234
416#define EXTERN_IS_HOST_PORT 4567
420bpf_p4tc_extern_md_read(
struct __sk_buff *skb_ctx,
422 const u32 params__sz) __ksym;
425extern int bpf_p4tc_extern_md_write(
struct __sk_buff *skb_ctx,
427 const u32 params__sz,
429 const u32 val__sz) __ksym;
433xdp_p4tc_extern_md_read(
struct xdp_md *xdp_ctx,
435 const u32 params__sz) __ksym;
438extern int xdp_p4tc_extern_md_write(
struct xdp_md *xdp_ctx,
440 const u32 params__sz,
442 const u32 val__sz) __ksym;
444int bpf_p4tc_extern_digest_pack(
struct __sk_buff *skb,
446 const u32 params__sz) __ksym;
448int xdp_p4tc_extern_digest_pack(
struct xdp_md *xdp_ctx,
450 const u32 params__sz) __ksym;
453static inline u64 bpf_p4tc_extern_timestamp() {
454 return bpf_ktime_get_ns();
457#define BIT(x) (1 << x)
459#define P4TC_SKB_META_SET_TSTAMP BIT(0)
460#define P4TC_SKB_META_SET_MARK BIT(1)
461#define P4TC_SKB_META_SET_CLASSID BIT(2)
462#define P4TC_SKB_META_SET_TC_INDEX BIT(3)
463#define P4TC_SKB_META_SET_QMAP BIT(4)
464#define P4TC_SKB_META_SET_PROTO BIT(5)
477bpf_p4tc_skb_set_tstamp(
struct __sk_buff *skb,
480 meta_set->tstamp = tstamp;
481 meta_set->bitmask |= P4TC_SKB_META_SET_TSTAMP;
485bpf_p4tc_skb_set_mark(
struct __sk_buff *skb,
488 meta_set->mark = mark;
489 meta_set->bitmask |= P4TC_SKB_META_SET_MARK;
493bpf_p4tc_skb_set_tc_classid(
struct __sk_buff *skb,
496 meta_set->tc_classid = tc_classid;
497 meta_set->bitmask |= P4TC_SKB_META_SET_CLASSID;
501bpf_p4tc_skb_set_tc_index(
struct __sk_buff *skb,
504 meta_set->tc_index = tc_index;
505 meta_set->bitmask |= P4TC_SKB_META_SET_TC_INDEX;
509bpf_p4tc_skb_set_queue_mapping(
struct __sk_buff *skb,
513 meta_set->queue_mapping = queue_mapping;
514 meta_set->bitmask |= P4TC_SKB_META_SET_QMAP;
518bpf_p4tc_skb_set_protocol(
struct __sk_buff *skb,
521 meta_set->protocol = protocol;
522 meta_set->bitmask |= P4TC_SKB_META_SET_PROTO;
525int bpf_p4tc_skb_meta_set(
struct __sk_buff *skb,
527 u32 skb_meta_set__sz) __ksym;
529#define P4TC_SKB_META_GET_AT_INGRESS_BIT BIT(0)
530#define P4TC_SKB_META_GET_FROM_INGRESS_BIT BIT(1)
539bpf_p4tc_skb_get_tstamp(
struct __sk_buff *skb,
546bpf_p4tc_skb_get_tc_classid(
struct __sk_buff *skb,
549 return skb->tc_classid;
553bpf_p4tc_skb_get_tc_index(
struct __sk_buff *skb,
556 return skb->tc_index;
560bpf_p4tc_skb_get_queue_mapping(
struct __sk_buff *skb,
563 return skb->queue_mapping;
567bpf_p4tc_skb_get_protocol(
struct __sk_buff *skb,
570 return skb->protocol;
574bpf_p4tc_skb_get_tc_at_ingress(
struct __sk_buff *skb,
577 if (meta_get->bitmask & P4TC_SKB_META_GET_AT_INGRESS_BIT)
578 return meta_get->tc_at_ingress;
584bpf_p4tc_skb_get_from_ingress(
struct __sk_buff *skb,
587 if (meta_get->bitmask & P4TC_SKB_META_GET_FROM_INGRESS_BIT)
588 return meta_get->from_ingress;
594bpf_p4tc_skb_get_mark(
struct __sk_buff *skb,
600int bpf_p4tc_skb_meta_get(
struct __sk_buff *skb,
602 u32 skb_meta_get__sz) __ksym;
Definition ebpf/runtime/psa.h:124