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