15typedef __u32 PortId_t;
16typedef __u64 Timestamp_t;
17typedef __u8 ClassOfService_t;
18typedef __u16 CloneSessionId_t;
19typedef __u32 MulticastGroup_t;
20typedef __u16 EgressInstance_t;
21typedef __u8 MirrorSlotId_t;
22typedef __u16 MirrorSessionId_t;
25typedef __u8 ParserError_t;
26static const ParserError_t NoError = 0;
27static const ParserError_t PacketTooShort = 1;
28static const ParserError_t NoMatch = 2;
29static const ParserError_t StackOutOfBounds = 3;
30static const ParserError_t HeaderTooShort = 4;
31static const ParserError_t ParserTimeout = 5;
32static const ParserError_t ParserInvalidArgument = 6;
35enum PNA_Source_t { FROM_HOST, FROM_NET };
37enum PNA_MeterColor_t { RED, GREEN, YELLOW };
39enum MirrorType { NO_MIRROR, PRE_MODIFY, POST_MODIFY };
44} __attribute__((aligned(4)));
50 Timestamp_t timestamp;
51 ParserError_t parser_error;
52 ClassOfService_t class_of_service;
54} __attribute__((aligned(4)));;
59 ClassOfService_t class_of_service;
60} __attribute__((aligned(4)));
71 enum MirrorType mirror_type;
72 MirrorSlotId_t mirror_slot_id;
73 ParserError_t parser_error;
74 MirrorSessionId_t mirror_session_id;
77} __attribute__((aligned(4)));
82 __u8 class_of_service;
84 __u16 packet_length_bytes;
85} __attribute__((aligned(4)));
87#define send_to_port(x) (compiler_meta__->egress_port = x)
88#define drop_packet() (compiler_meta__->drop = true)
97struct __attribute__((__packed__)) p4tc_table_entry_act_bpf {
100 is_default_miss_act:1,
101 is_default_hit_act:1;
106 struct p4tc_table_entry_act_bpf act_bpf;
116extern struct p4tc_table_entry_act_bpf *
117bpf_p4tc_tbl_read(
struct __sk_buff *skb_ctx,
119 const u32 params__sz,
120 void *key,
const __u32 key__sz) __ksym;
122extern struct p4tc_table_entry_act_bpf *
123xdp_p4tc_tbl_read(
struct xdp_md *skb_ctx,
125 const u32 params__sz,
126 void *key,
const __u32 key__sz) __ksym;
130bpf_p4tc_entry_create(
struct __sk_buff *skb_ctx,
132 const u32 params__sz,
133 void *key,
const u32 key__sz) __ksym;
136xdp_p4tc_entry_create(
struct xdp_md *xdp_ctx,
138 const u32 params__sz,
139 void *bpf_key_mask, u32 bpf_key_mask__sz) __ksym;
143bpf_p4tc_entry_create_on_miss(
struct __sk_buff *skb_ctx,
145 const u32 params__sz,
146 void *key,
const u32 key__sz) __ksym;
149xdp_p4tc_entry_create_on_miss(
struct xdp_md *xdp_ctx,
151 const u32 params__sz,
152 void *key,
const u32 key__sz) __ksym;
156bpf_p4tc_entry_update(
struct __sk_buff *skb_ctx,
158 const u32 params__sz,
159 void *key,
const u32 key__sz) __ksym;
162xdp_p4tc_entry_update(
struct xdp_md *xdp_ctx,
164 const u32 params__sz,
165 void *key,
const u32 key__sz) __ksym;
169bpf_p4tc_entry_delete(
struct __sk_buff *skb_ctx,
171 const u32 params__sz,
172 void *key,
const u32 key__sz) __ksym;
175xdp_p4tc_entry_delete(
struct xdp_md *xdp_ctx,
177 const u32 params__sz,
178 void *key,
const u32 key__sz) __ksym;
182#define P4TC_EXT_CNT_DIRECT 0x1
183#define P4TC_EXT_CNT_INDIRECT 0x2
184#define P4TC_EXT_METER_DIRECT (1 << 2)
185#define P4TC_EXT_METER_INDIRECT (1 << 3)
206bpf_p4tc_extern_count_pktsnbytes(
struct __sk_buff *skb_ctx,
208 const u32 params__sz,
void *key,
const u32 key__sz) __ksym;
211bpf_p4tc_extern_count_pkts(
struct __sk_buff *skb_ctx,
213 const u32 params__sz,
void *key,
const u32 key__sz) __ksym;
216bpf_p4tc_extern_count_bytes(
struct __sk_buff *skb_ctx,
218 const u32 params__sz,
void *key,
const u32 key__sz) __ksym;
221xdp_p4tc_extern_count_pktsnbytes(
struct xdp_md *xdp_ctx,
223 const u32 params__sz) __ksym;
226xdp_p4tc_extern_count_pkts(
struct xdp_md *xdp_ctx,
228 const u32 params__sz) __ksym;
231xdp_p4tc_extern_count_bytes(
struct xdp_md *xdp_ctx,
233 const u32 params__sz) __ksym;
235extern int bpf_p4tc_extern_meter_bytes_color(
struct __sk_buff *skb_ctx,
237 const u32 params__sz,
void *key,
238 const u32 key__sz) __ksym;
240bpf_p4tc_extern_meter_bytes(
struct __sk_buff *skb,
242 const u32 params__sz,
void *key,
243 const u32 key__sz) __ksym;
245extern int bpf_p4tc_extern_meter_pkts_color(
struct __sk_buff *skb_ctx,
247 const u32 params__sz,
void *key,
248 const u32 key__sz) __ksym;
250bpf_p4tc_extern_meter_pkts(
struct __sk_buff *skb,
252 const u32 params__sz,
void *key,
253 const u32 key__sz) __ksym;
255extern int xdp_p4tc_extern_meter_bytes_color(
struct xdp_md *xdp_ctx,
257 const u32 params__sz,
void *key,
258 const u32 key__sz) __ksym;
260extern int xdp_p4tc_extern_meter_bytes(
struct xdp_md *xdp_ctx,
262 const u32 params__sz,
void *key,
263 const u32 key__sz) __ksym;
265extern int xdp_p4tc_extern_meter_pkts_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_pkts(
struct xdp_md *xdp_ctx,
272 const u32 params__sz,
void *key,
273 const u32 key__sz) __ksym;
284 const u32 params__sz,
const void *data,
285 const u32 data__sz) __ksym;
289 const u32 params__sz) __ksym;
293 const u32 params__sz) __ksym;
299 const u32 params__sz,
300 const void *data,
const u32 data__sz) __ksym;
304 const u32 params__sz) __ksym;
308 const u32 params__sz) __ksym;
312 const u32 params__sz) __ksym;
317 const u32 params__sz,
318 const void *data,
int len) __ksym;
322 const u32 params__sz,
323 const void *data,
const u32 data__sz) __ksym;
327 const u32 params__sz) __ksym;
331 const u32 params__sz,
336bpf_p4tc_ext_hash_crc16(
const void *data,
int len, u16 seed) __ksym;
340bpf_p4tc_ext_hash_base_crc16(
const void *data,
const u32 data__sz,
341 u32 base, u32 max, u16 seed) {
342 u16 hash = bpf_p4tc_ext_hash_crc16(data, data__sz, seed);
344 return (base + (hash % max));
349bpf_p4tc_ext_hash_crc32(
const void *data,
const u32 data__sz, u32 seed) __ksym;
353bpf_p4tc_ext_hash_base_crc32(
const void *data,
const u32 data__sz,
354 u32 base, u32 max, u32 seed) {
355 u32 hash = bpf_p4tc_ext_hash_crc32(data, data__sz, seed);
357 return (base + (hash % max));
362bpf_p4tc_ext_hash_16bit_complement(
const void *data,
const u32 data__sz,
367bpf_p4tc_ext_hash_base_16bit_complement(
const void *data,
const u32 data__sz,
368 u32 base, u32 max, u16 seed) {
369 u16 hash = bpf_p4tc_ext_hash_16bit_complement(data, data__sz, seed);
371 return (base + (hash % max));
377bpf_p4tc_is_net_port(
struct __sk_buff *skb_ctx,
const u32 ifindex) __ksym;
382bpf_p4tc_is_host_port(
struct __sk_buff *skb_ctx,
const u32 ifindex) __ksym;
387xdp_p4tc_is_net_port(
struct xdp_md *xdp_ctx,
const u32 ifindex) __ksym;
392xdp_p4tc_is_host_port(
struct xdp_md *xdp_ctx,
const u32 ifindex) __ksym;
406#define EXTERN_IS_NET_PORT 1234
407#define EXTERN_IS_HOST_PORT 4567
411bpf_p4tc_extern_md_read(
struct __sk_buff *skb_ctx,
413 const u32 params__sz) __ksym;
416extern int bpf_p4tc_extern_md_write(
struct __sk_buff *skb_ctx,
418 const u32 params__sz,
420 const u32 val__sz) __ksym;
424xdp_p4tc_extern_md_read(
struct xdp_md *xdp_ctx,
426 const u32 params__sz) __ksym;
429extern int xdp_p4tc_extern_md_write(
struct xdp_md *xdp_ctx,
431 const u32 params__sz,
433 const u32 val__sz) __ksym;
435int bpf_p4tc_extern_digest_pack(
struct __sk_buff *skb,
437 const u32 params__sz) __ksym;
439int xdp_p4tc_extern_digest_pack(
struct xdp_md *xdp_ctx,
441 const u32 params__sz) __ksym;
444static inline u64 bpf_p4tc_extern_timestamp() {
445 return bpf_ktime_get_ns();
448#define BIT(x) (1 << x)
450#define P4TC_SKB_META_SET_TSTAMP BIT(0)
451#define P4TC_SKB_META_SET_MARK BIT(1)
452#define P4TC_SKB_META_SET_CLASSID BIT(2)
453#define P4TC_SKB_META_SET_TC_INDEX BIT(3)
454#define P4TC_SKB_META_SET_QMAP BIT(4)
455#define P4TC_SKB_META_SET_PROTO BIT(5)
468bpf_p4tc_skb_set_tstamp(
struct __sk_buff *skb,
471 meta_set->tstamp = tstamp;
472 meta_set->bitmask |= P4TC_SKB_META_SET_TSTAMP;
476bpf_p4tc_skb_set_mark(
struct __sk_buff *skb,
479 meta_set->mark = mark;
480 meta_set->bitmask |= P4TC_SKB_META_SET_MARK;
484bpf_p4tc_skb_set_tc_classid(
struct __sk_buff *skb,
487 meta_set->tc_classid = tc_classid;
488 meta_set->bitmask |= P4TC_SKB_META_SET_CLASSID;
492bpf_p4tc_skb_set_tc_index(
struct __sk_buff *skb,
495 meta_set->tc_index = tc_index;
496 meta_set->bitmask |= P4TC_SKB_META_SET_TC_INDEX;
500bpf_p4tc_skb_set_queue_mapping(
struct __sk_buff *skb,
504 meta_set->queue_mapping = queue_mapping;
505 meta_set->bitmask |= P4TC_SKB_META_SET_QMAP;
509bpf_p4tc_skb_set_protocol(
struct __sk_buff *skb,
512 meta_set->protocol = protocol;
513 meta_set->bitmask |= P4TC_SKB_META_SET_PROTO;
516int bpf_p4tc_skb_meta_set(
struct __sk_buff *skb,
518 u32 skb_meta_set__sz) __ksym;
520#define P4TC_SKB_META_GET_AT_INGRESS_BIT BIT(0)
521#define P4TC_SKB_META_GET_FROM_INGRESS_BIT BIT(1)
530bpf_p4tc_skb_get_tstamp(
struct __sk_buff *skb,
537bpf_p4tc_skb_get_tc_classid(
struct __sk_buff *skb,
540 return skb->tc_classid;
544bpf_p4tc_skb_get_tc_index(
struct __sk_buff *skb,
547 return skb->tc_index;
551bpf_p4tc_skb_get_queue_mapping(
struct __sk_buff *skb,
554 return skb->queue_mapping;
558bpf_p4tc_skb_get_protocol(
struct __sk_buff *skb,
561 return skb->protocol;
565bpf_p4tc_skb_get_tc_at_ingress(
struct __sk_buff *skb,
568 if (meta_get->bitmask & P4TC_SKB_META_GET_AT_INGRESS_BIT)
569 return meta_get->tc_at_ingress;
575bpf_p4tc_skb_get_from_ingress(
struct __sk_buff *skb,
578 if (meta_get->bitmask & P4TC_SKB_META_GET_FROM_INGRESS_BIT)
579 return meta_get->from_ingress;
585bpf_p4tc_skb_get_mark(
struct __sk_buff *skb,
591int bpf_p4tc_skb_meta_get(
struct __sk_buff *skb,
593 u32 skb_meta_get__sz) __ksym;
Definition ebpf/runtime/psa.h:114