xref: /aosp_15_r20/external/bcc/src/cc/export/proto.h (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard Worker R"********(
2*387f9dfdSAndroid Build Coastguard Worker /*
3*387f9dfdSAndroid Build Coastguard Worker  * Copyright (c) 2015 PLUMgrid, Inc.
4*387f9dfdSAndroid Build Coastguard Worker  *
5*387f9dfdSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*387f9dfdSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*387f9dfdSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
8*387f9dfdSAndroid Build Coastguard Worker  *
9*387f9dfdSAndroid Build Coastguard Worker  * http://www.apache.org/licenses/LICENSE-2.0
10*387f9dfdSAndroid Build Coastguard Worker  *
11*387f9dfdSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*387f9dfdSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*387f9dfdSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*387f9dfdSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*387f9dfdSAndroid Build Coastguard Worker  * limitations under the License.
16*387f9dfdSAndroid Build Coastguard Worker  */
17*387f9dfdSAndroid Build Coastguard Worker 
18*387f9dfdSAndroid Build Coastguard Worker #ifndef __BCC_PROTO_H
19*387f9dfdSAndroid Build Coastguard Worker #define __BCC_PROTO_H
20*387f9dfdSAndroid Build Coastguard Worker 
21*387f9dfdSAndroid Build Coastguard Worker #include <uapi/linux/if_ether.h>
22*387f9dfdSAndroid Build Coastguard Worker 
23*387f9dfdSAndroid Build Coastguard Worker #define BPF_PACKET_HEADER __attribute__((packed)) __attribute__((deprecated("packet")))
24*387f9dfdSAndroid Build Coastguard Worker 
25*387f9dfdSAndroid Build Coastguard Worker struct ethernet_t {
26*387f9dfdSAndroid Build Coastguard Worker   unsigned long long  dst:48;
27*387f9dfdSAndroid Build Coastguard Worker   unsigned long long  src:48;
28*387f9dfdSAndroid Build Coastguard Worker   unsigned int        type:16;
29*387f9dfdSAndroid Build Coastguard Worker } BPF_PACKET_HEADER;
30*387f9dfdSAndroid Build Coastguard Worker 
31*387f9dfdSAndroid Build Coastguard Worker struct dot1q_t {
32*387f9dfdSAndroid Build Coastguard Worker   unsigned short pri:3;
33*387f9dfdSAndroid Build Coastguard Worker   unsigned short cfi:1;
34*387f9dfdSAndroid Build Coastguard Worker   unsigned short vlanid:12;
35*387f9dfdSAndroid Build Coastguard Worker   unsigned short type;
36*387f9dfdSAndroid Build Coastguard Worker } BPF_PACKET_HEADER;
37*387f9dfdSAndroid Build Coastguard Worker 
38*387f9dfdSAndroid Build Coastguard Worker struct arp_t {
39*387f9dfdSAndroid Build Coastguard Worker   unsigned short      htype;
40*387f9dfdSAndroid Build Coastguard Worker   unsigned short      ptype;
41*387f9dfdSAndroid Build Coastguard Worker   unsigned char       hlen;
42*387f9dfdSAndroid Build Coastguard Worker   unsigned char       plen;
43*387f9dfdSAndroid Build Coastguard Worker   unsigned short      oper;
44*387f9dfdSAndroid Build Coastguard Worker   unsigned long long  sha:48;
45*387f9dfdSAndroid Build Coastguard Worker   unsigned long long  spa:32;
46*387f9dfdSAndroid Build Coastguard Worker   unsigned long long  tha:48;
47*387f9dfdSAndroid Build Coastguard Worker   unsigned int        tpa;
48*387f9dfdSAndroid Build Coastguard Worker } BPF_PACKET_HEADER;
49*387f9dfdSAndroid Build Coastguard Worker 
50*387f9dfdSAndroid Build Coastguard Worker struct ip_t {
51*387f9dfdSAndroid Build Coastguard Worker   unsigned char   ver:4;           // byte 0
52*387f9dfdSAndroid Build Coastguard Worker   unsigned char   hlen:4;
53*387f9dfdSAndroid Build Coastguard Worker   unsigned char   tos;
54*387f9dfdSAndroid Build Coastguard Worker   unsigned short  tlen;
55*387f9dfdSAndroid Build Coastguard Worker   unsigned short  identification; // byte 4
56*387f9dfdSAndroid Build Coastguard Worker   unsigned short  ffo_unused:1;
57*387f9dfdSAndroid Build Coastguard Worker   unsigned short  df:1;
58*387f9dfdSAndroid Build Coastguard Worker   unsigned short  mf:1;
59*387f9dfdSAndroid Build Coastguard Worker   unsigned short  foffset:13;
60*387f9dfdSAndroid Build Coastguard Worker   unsigned char   ttl;             // byte 8
61*387f9dfdSAndroid Build Coastguard Worker   unsigned char   nextp;
62*387f9dfdSAndroid Build Coastguard Worker   unsigned short  hchecksum;
63*387f9dfdSAndroid Build Coastguard Worker   unsigned int    src;            // byte 12
64*387f9dfdSAndroid Build Coastguard Worker   unsigned int    dst;            // byte 16
65*387f9dfdSAndroid Build Coastguard Worker } BPF_PACKET_HEADER;
66*387f9dfdSAndroid Build Coastguard Worker 
67*387f9dfdSAndroid Build Coastguard Worker struct icmp_t {
68*387f9dfdSAndroid Build Coastguard Worker   unsigned char   type;
69*387f9dfdSAndroid Build Coastguard Worker   unsigned char   code;
70*387f9dfdSAndroid Build Coastguard Worker   unsigned short  checksum;
71*387f9dfdSAndroid Build Coastguard Worker } BPF_PACKET_HEADER;
72*387f9dfdSAndroid Build Coastguard Worker 
73*387f9dfdSAndroid Build Coastguard Worker struct ip6_t {
74*387f9dfdSAndroid Build Coastguard Worker   unsigned int        ver:4;
75*387f9dfdSAndroid Build Coastguard Worker   unsigned int        priority:8;
76*387f9dfdSAndroid Build Coastguard Worker   unsigned int        flow_label:20;
77*387f9dfdSAndroid Build Coastguard Worker   unsigned short      payload_len;
78*387f9dfdSAndroid Build Coastguard Worker   unsigned char       next_header;
79*387f9dfdSAndroid Build Coastguard Worker   unsigned char       hop_limit;
80*387f9dfdSAndroid Build Coastguard Worker   unsigned long long  src_hi;
81*387f9dfdSAndroid Build Coastguard Worker   unsigned long long  src_lo;
82*387f9dfdSAndroid Build Coastguard Worker   unsigned long long  dst_hi;
83*387f9dfdSAndroid Build Coastguard Worker   unsigned long long  dst_lo;
84*387f9dfdSAndroid Build Coastguard Worker } BPF_PACKET_HEADER;
85*387f9dfdSAndroid Build Coastguard Worker 
86*387f9dfdSAndroid Build Coastguard Worker struct ip6_opt_t {
87*387f9dfdSAndroid Build Coastguard Worker   unsigned char  next_header;
88*387f9dfdSAndroid Build Coastguard Worker   unsigned char  ext_len;
89*387f9dfdSAndroid Build Coastguard Worker   unsigned char  pad[6];
90*387f9dfdSAndroid Build Coastguard Worker } BPF_PACKET_HEADER;
91*387f9dfdSAndroid Build Coastguard Worker 
92*387f9dfdSAndroid Build Coastguard Worker struct icmp6_t {
93*387f9dfdSAndroid Build Coastguard Worker   unsigned char   type;
94*387f9dfdSAndroid Build Coastguard Worker   unsigned char   code;
95*387f9dfdSAndroid Build Coastguard Worker   unsigned short  checksum;
96*387f9dfdSAndroid Build Coastguard Worker } BPF_PACKET_HEADER;
97*387f9dfdSAndroid Build Coastguard Worker 
98*387f9dfdSAndroid Build Coastguard Worker struct udp_t {
99*387f9dfdSAndroid Build Coastguard Worker   unsigned short sport;
100*387f9dfdSAndroid Build Coastguard Worker   unsigned short dport;
101*387f9dfdSAndroid Build Coastguard Worker   unsigned short length;
102*387f9dfdSAndroid Build Coastguard Worker   unsigned short crc;
103*387f9dfdSAndroid Build Coastguard Worker } BPF_PACKET_HEADER;
104*387f9dfdSAndroid Build Coastguard Worker 
105*387f9dfdSAndroid Build Coastguard Worker struct tcp_t {
106*387f9dfdSAndroid Build Coastguard Worker   unsigned short  src_port;   // byte 0
107*387f9dfdSAndroid Build Coastguard Worker   unsigned short  dst_port;
108*387f9dfdSAndroid Build Coastguard Worker   unsigned int    seq_num;    // byte 4
109*387f9dfdSAndroid Build Coastguard Worker   unsigned int    ack_num;    // byte 8
110*387f9dfdSAndroid Build Coastguard Worker   unsigned char   offset:4;    // byte 12
111*387f9dfdSAndroid Build Coastguard Worker   unsigned char   reserved:4;
112*387f9dfdSAndroid Build Coastguard Worker   unsigned char   flag_cwr:1;
113*387f9dfdSAndroid Build Coastguard Worker   unsigned char   flag_ece:1;
114*387f9dfdSAndroid Build Coastguard Worker   unsigned char   flag_urg:1;
115*387f9dfdSAndroid Build Coastguard Worker   unsigned char   flag_ack:1;
116*387f9dfdSAndroid Build Coastguard Worker   unsigned char   flag_psh:1;
117*387f9dfdSAndroid Build Coastguard Worker   unsigned char   flag_rst:1;
118*387f9dfdSAndroid Build Coastguard Worker   unsigned char   flag_syn:1;
119*387f9dfdSAndroid Build Coastguard Worker   unsigned char   flag_fin:1;
120*387f9dfdSAndroid Build Coastguard Worker   unsigned short  rcv_wnd;
121*387f9dfdSAndroid Build Coastguard Worker   unsigned short  cksum;      // byte 16
122*387f9dfdSAndroid Build Coastguard Worker   unsigned short  urg_ptr;
123*387f9dfdSAndroid Build Coastguard Worker } BPF_PACKET_HEADER;
124*387f9dfdSAndroid Build Coastguard Worker 
125*387f9dfdSAndroid Build Coastguard Worker struct vxlan_t {
126*387f9dfdSAndroid Build Coastguard Worker   unsigned int rsv1:4;
127*387f9dfdSAndroid Build Coastguard Worker   unsigned int iflag:1;
128*387f9dfdSAndroid Build Coastguard Worker   unsigned int rsv2:3;
129*387f9dfdSAndroid Build Coastguard Worker   unsigned int rsv3:24;
130*387f9dfdSAndroid Build Coastguard Worker   unsigned int key:24;
131*387f9dfdSAndroid Build Coastguard Worker   unsigned int rsv4:8;
132*387f9dfdSAndroid Build Coastguard Worker } BPF_PACKET_HEADER;
133*387f9dfdSAndroid Build Coastguard Worker 
134*387f9dfdSAndroid Build Coastguard Worker struct vxlan_gbp_t {
135*387f9dfdSAndroid Build Coastguard Worker   unsigned int gflag:1;
136*387f9dfdSAndroid Build Coastguard Worker   unsigned int rsv1:3;
137*387f9dfdSAndroid Build Coastguard Worker   unsigned int iflag:1;
138*387f9dfdSAndroid Build Coastguard Worker   unsigned int rsv2:3;
139*387f9dfdSAndroid Build Coastguard Worker   unsigned int rsv3:1;
140*387f9dfdSAndroid Build Coastguard Worker   unsigned int dflag:1;
141*387f9dfdSAndroid Build Coastguard Worker   unsigned int rsv4:1;
142*387f9dfdSAndroid Build Coastguard Worker   unsigned int aflag:1;
143*387f9dfdSAndroid Build Coastguard Worker   unsigned int rsv5:3;
144*387f9dfdSAndroid Build Coastguard Worker   unsigned int tag:16;
145*387f9dfdSAndroid Build Coastguard Worker   unsigned int key:24;
146*387f9dfdSAndroid Build Coastguard Worker   unsigned int rsv6:8;
147*387f9dfdSAndroid Build Coastguard Worker } BPF_PACKET_HEADER;
148*387f9dfdSAndroid Build Coastguard Worker 
149*387f9dfdSAndroid Build Coastguard Worker #endif
150*387f9dfdSAndroid Build Coastguard Worker )********"
151