1*8d67ca89SAndroid Build Coastguard Worker /* 2*8d67ca89SAndroid Build Coastguard Worker * This file is auto-generated. Modifications will be lost. 3*8d67ca89SAndroid Build Coastguard Worker * 4*8d67ca89SAndroid Build Coastguard Worker * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/ 5*8d67ca89SAndroid Build Coastguard Worker * for more information. 6*8d67ca89SAndroid Build Coastguard Worker */ 7*8d67ca89SAndroid Build Coastguard Worker #ifndef __LINUX_IF_PACKET_H 8*8d67ca89SAndroid Build Coastguard Worker #define __LINUX_IF_PACKET_H 9*8d67ca89SAndroid Build Coastguard Worker #include <asm/byteorder.h> 10*8d67ca89SAndroid Build Coastguard Worker #include <linux/types.h> 11*8d67ca89SAndroid Build Coastguard Worker struct sockaddr_pkt { 12*8d67ca89SAndroid Build Coastguard Worker unsigned short spkt_family; 13*8d67ca89SAndroid Build Coastguard Worker unsigned char spkt_device[14]; 14*8d67ca89SAndroid Build Coastguard Worker __be16 spkt_protocol; 15*8d67ca89SAndroid Build Coastguard Worker }; 16*8d67ca89SAndroid Build Coastguard Worker struct sockaddr_ll { 17*8d67ca89SAndroid Build Coastguard Worker unsigned short sll_family; 18*8d67ca89SAndroid Build Coastguard Worker __be16 sll_protocol; 19*8d67ca89SAndroid Build Coastguard Worker int sll_ifindex; 20*8d67ca89SAndroid Build Coastguard Worker unsigned short sll_hatype; 21*8d67ca89SAndroid Build Coastguard Worker unsigned char sll_pkttype; 22*8d67ca89SAndroid Build Coastguard Worker unsigned char sll_halen; 23*8d67ca89SAndroid Build Coastguard Worker unsigned char sll_addr[8]; 24*8d67ca89SAndroid Build Coastguard Worker }; 25*8d67ca89SAndroid Build Coastguard Worker #define PACKET_HOST 0 26*8d67ca89SAndroid Build Coastguard Worker #define PACKET_BROADCAST 1 27*8d67ca89SAndroid Build Coastguard Worker #define PACKET_MULTICAST 2 28*8d67ca89SAndroid Build Coastguard Worker #define PACKET_OTHERHOST 3 29*8d67ca89SAndroid Build Coastguard Worker #define PACKET_OUTGOING 4 30*8d67ca89SAndroid Build Coastguard Worker #define PACKET_LOOPBACK 5 31*8d67ca89SAndroid Build Coastguard Worker #define PACKET_USER 6 32*8d67ca89SAndroid Build Coastguard Worker #define PACKET_KERNEL 7 33*8d67ca89SAndroid Build Coastguard Worker #define PACKET_FASTROUTE 6 34*8d67ca89SAndroid Build Coastguard Worker #define PACKET_ADD_MEMBERSHIP 1 35*8d67ca89SAndroid Build Coastguard Worker #define PACKET_DROP_MEMBERSHIP 2 36*8d67ca89SAndroid Build Coastguard Worker #define PACKET_RECV_OUTPUT 3 37*8d67ca89SAndroid Build Coastguard Worker #define PACKET_RX_RING 5 38*8d67ca89SAndroid Build Coastguard Worker #define PACKET_STATISTICS 6 39*8d67ca89SAndroid Build Coastguard Worker #define PACKET_COPY_THRESH 7 40*8d67ca89SAndroid Build Coastguard Worker #define PACKET_AUXDATA 8 41*8d67ca89SAndroid Build Coastguard Worker #define PACKET_ORIGDEV 9 42*8d67ca89SAndroid Build Coastguard Worker #define PACKET_VERSION 10 43*8d67ca89SAndroid Build Coastguard Worker #define PACKET_HDRLEN 11 44*8d67ca89SAndroid Build Coastguard Worker #define PACKET_RESERVE 12 45*8d67ca89SAndroid Build Coastguard Worker #define PACKET_TX_RING 13 46*8d67ca89SAndroid Build Coastguard Worker #define PACKET_LOSS 14 47*8d67ca89SAndroid Build Coastguard Worker #define PACKET_VNET_HDR 15 48*8d67ca89SAndroid Build Coastguard Worker #define PACKET_TX_TIMESTAMP 16 49*8d67ca89SAndroid Build Coastguard Worker #define PACKET_TIMESTAMP 17 50*8d67ca89SAndroid Build Coastguard Worker #define PACKET_FANOUT 18 51*8d67ca89SAndroid Build Coastguard Worker #define PACKET_TX_HAS_OFF 19 52*8d67ca89SAndroid Build Coastguard Worker #define PACKET_QDISC_BYPASS 20 53*8d67ca89SAndroid Build Coastguard Worker #define PACKET_ROLLOVER_STATS 21 54*8d67ca89SAndroid Build Coastguard Worker #define PACKET_FANOUT_DATA 22 55*8d67ca89SAndroid Build Coastguard Worker #define PACKET_IGNORE_OUTGOING 23 56*8d67ca89SAndroid Build Coastguard Worker #define PACKET_VNET_HDR_SZ 24 57*8d67ca89SAndroid Build Coastguard Worker #define PACKET_FANOUT_HASH 0 58*8d67ca89SAndroid Build Coastguard Worker #define PACKET_FANOUT_LB 1 59*8d67ca89SAndroid Build Coastguard Worker #define PACKET_FANOUT_CPU 2 60*8d67ca89SAndroid Build Coastguard Worker #define PACKET_FANOUT_ROLLOVER 3 61*8d67ca89SAndroid Build Coastguard Worker #define PACKET_FANOUT_RND 4 62*8d67ca89SAndroid Build Coastguard Worker #define PACKET_FANOUT_QM 5 63*8d67ca89SAndroid Build Coastguard Worker #define PACKET_FANOUT_CBPF 6 64*8d67ca89SAndroid Build Coastguard Worker #define PACKET_FANOUT_EBPF 7 65*8d67ca89SAndroid Build Coastguard Worker #define PACKET_FANOUT_FLAG_ROLLOVER 0x1000 66*8d67ca89SAndroid Build Coastguard Worker #define PACKET_FANOUT_FLAG_UNIQUEID 0x2000 67*8d67ca89SAndroid Build Coastguard Worker #define PACKET_FANOUT_FLAG_IGNORE_OUTGOING 0x4000 68*8d67ca89SAndroid Build Coastguard Worker #define PACKET_FANOUT_FLAG_DEFRAG 0x8000 69*8d67ca89SAndroid Build Coastguard Worker struct tpacket_stats { 70*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_packets; 71*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_drops; 72*8d67ca89SAndroid Build Coastguard Worker }; 73*8d67ca89SAndroid Build Coastguard Worker struct tpacket_stats_v3 { 74*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_packets; 75*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_drops; 76*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_freeze_q_cnt; 77*8d67ca89SAndroid Build Coastguard Worker }; 78*8d67ca89SAndroid Build Coastguard Worker struct tpacket_rollover_stats { 79*8d67ca89SAndroid Build Coastguard Worker __aligned_u64 tp_all; 80*8d67ca89SAndroid Build Coastguard Worker __aligned_u64 tp_huge; 81*8d67ca89SAndroid Build Coastguard Worker __aligned_u64 tp_failed; 82*8d67ca89SAndroid Build Coastguard Worker }; 83*8d67ca89SAndroid Build Coastguard Worker union tpacket_stats_u { 84*8d67ca89SAndroid Build Coastguard Worker struct tpacket_stats stats1; 85*8d67ca89SAndroid Build Coastguard Worker struct tpacket_stats_v3 stats3; 86*8d67ca89SAndroid Build Coastguard Worker }; 87*8d67ca89SAndroid Build Coastguard Worker struct tpacket_auxdata { 88*8d67ca89SAndroid Build Coastguard Worker __u32 tp_status; 89*8d67ca89SAndroid Build Coastguard Worker __u32 tp_len; 90*8d67ca89SAndroid Build Coastguard Worker __u32 tp_snaplen; 91*8d67ca89SAndroid Build Coastguard Worker __u16 tp_mac; 92*8d67ca89SAndroid Build Coastguard Worker __u16 tp_net; 93*8d67ca89SAndroid Build Coastguard Worker __u16 tp_vlan_tci; 94*8d67ca89SAndroid Build Coastguard Worker __u16 tp_vlan_tpid; 95*8d67ca89SAndroid Build Coastguard Worker }; 96*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_KERNEL 0 97*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_USER (1 << 0) 98*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_COPY (1 << 1) 99*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_LOSING (1 << 2) 100*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_CSUMNOTREADY (1 << 3) 101*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_VLAN_VALID (1 << 4) 102*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_BLK_TMO (1 << 5) 103*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_VLAN_TPID_VALID (1 << 6) 104*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_CSUM_VALID (1 << 7) 105*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_GSO_TCP (1 << 8) 106*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_AVAILABLE 0 107*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_SEND_REQUEST (1 << 0) 108*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_SENDING (1 << 1) 109*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_WRONG_FORMAT (1 << 2) 110*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_TS_SOFTWARE (1 << 29) 111*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_TS_SYS_HARDWARE (1 << 30) 112*8d67ca89SAndroid Build Coastguard Worker #define TP_STATUS_TS_RAW_HARDWARE (1U << 31) 113*8d67ca89SAndroid Build Coastguard Worker #define TP_FT_REQ_FILL_RXHASH 0x1 114*8d67ca89SAndroid Build Coastguard Worker struct tpacket_hdr { 115*8d67ca89SAndroid Build Coastguard Worker unsigned long tp_status; 116*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_len; 117*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_snaplen; 118*8d67ca89SAndroid Build Coastguard Worker unsigned short tp_mac; 119*8d67ca89SAndroid Build Coastguard Worker unsigned short tp_net; 120*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_sec; 121*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_usec; 122*8d67ca89SAndroid Build Coastguard Worker }; 123*8d67ca89SAndroid Build Coastguard Worker #define TPACKET_ALIGNMENT 16 124*8d67ca89SAndroid Build Coastguard Worker #define TPACKET_ALIGN(x) (((x) + TPACKET_ALIGNMENT - 1) & ~(TPACKET_ALIGNMENT - 1)) 125*8d67ca89SAndroid Build Coastguard Worker #define TPACKET_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll)) 126*8d67ca89SAndroid Build Coastguard Worker struct tpacket2_hdr { 127*8d67ca89SAndroid Build Coastguard Worker __u32 tp_status; 128*8d67ca89SAndroid Build Coastguard Worker __u32 tp_len; 129*8d67ca89SAndroid Build Coastguard Worker __u32 tp_snaplen; 130*8d67ca89SAndroid Build Coastguard Worker __u16 tp_mac; 131*8d67ca89SAndroid Build Coastguard Worker __u16 tp_net; 132*8d67ca89SAndroid Build Coastguard Worker __u32 tp_sec; 133*8d67ca89SAndroid Build Coastguard Worker __u32 tp_nsec; 134*8d67ca89SAndroid Build Coastguard Worker __u16 tp_vlan_tci; 135*8d67ca89SAndroid Build Coastguard Worker __u16 tp_vlan_tpid; 136*8d67ca89SAndroid Build Coastguard Worker __u8 tp_padding[4]; 137*8d67ca89SAndroid Build Coastguard Worker }; 138*8d67ca89SAndroid Build Coastguard Worker struct tpacket_hdr_variant1 { 139*8d67ca89SAndroid Build Coastguard Worker __u32 tp_rxhash; 140*8d67ca89SAndroid Build Coastguard Worker __u32 tp_vlan_tci; 141*8d67ca89SAndroid Build Coastguard Worker __u16 tp_vlan_tpid; 142*8d67ca89SAndroid Build Coastguard Worker __u16 tp_padding; 143*8d67ca89SAndroid Build Coastguard Worker }; 144*8d67ca89SAndroid Build Coastguard Worker struct tpacket3_hdr { 145*8d67ca89SAndroid Build Coastguard Worker __u32 tp_next_offset; 146*8d67ca89SAndroid Build Coastguard Worker __u32 tp_sec; 147*8d67ca89SAndroid Build Coastguard Worker __u32 tp_nsec; 148*8d67ca89SAndroid Build Coastguard Worker __u32 tp_snaplen; 149*8d67ca89SAndroid Build Coastguard Worker __u32 tp_len; 150*8d67ca89SAndroid Build Coastguard Worker __u32 tp_status; 151*8d67ca89SAndroid Build Coastguard Worker __u16 tp_mac; 152*8d67ca89SAndroid Build Coastguard Worker __u16 tp_net; 153*8d67ca89SAndroid Build Coastguard Worker union { 154*8d67ca89SAndroid Build Coastguard Worker struct tpacket_hdr_variant1 hv1; 155*8d67ca89SAndroid Build Coastguard Worker }; 156*8d67ca89SAndroid Build Coastguard Worker __u8 tp_padding[8]; 157*8d67ca89SAndroid Build Coastguard Worker }; 158*8d67ca89SAndroid Build Coastguard Worker struct tpacket_bd_ts { 159*8d67ca89SAndroid Build Coastguard Worker unsigned int ts_sec; 160*8d67ca89SAndroid Build Coastguard Worker union { 161*8d67ca89SAndroid Build Coastguard Worker unsigned int ts_usec; 162*8d67ca89SAndroid Build Coastguard Worker unsigned int ts_nsec; 163*8d67ca89SAndroid Build Coastguard Worker }; 164*8d67ca89SAndroid Build Coastguard Worker }; 165*8d67ca89SAndroid Build Coastguard Worker struct tpacket_hdr_v1 { 166*8d67ca89SAndroid Build Coastguard Worker __u32 block_status; 167*8d67ca89SAndroid Build Coastguard Worker __u32 num_pkts; 168*8d67ca89SAndroid Build Coastguard Worker __u32 offset_to_first_pkt; 169*8d67ca89SAndroid Build Coastguard Worker __u32 blk_len; 170*8d67ca89SAndroid Build Coastguard Worker __aligned_u64 seq_num; 171*8d67ca89SAndroid Build Coastguard Worker struct tpacket_bd_ts ts_first_pkt, ts_last_pkt; 172*8d67ca89SAndroid Build Coastguard Worker }; 173*8d67ca89SAndroid Build Coastguard Worker union tpacket_bd_header_u { 174*8d67ca89SAndroid Build Coastguard Worker struct tpacket_hdr_v1 bh1; 175*8d67ca89SAndroid Build Coastguard Worker }; 176*8d67ca89SAndroid Build Coastguard Worker struct tpacket_block_desc { 177*8d67ca89SAndroid Build Coastguard Worker __u32 version; 178*8d67ca89SAndroid Build Coastguard Worker __u32 offset_to_priv; 179*8d67ca89SAndroid Build Coastguard Worker union tpacket_bd_header_u hdr; 180*8d67ca89SAndroid Build Coastguard Worker }; 181*8d67ca89SAndroid Build Coastguard Worker #define TPACKET2_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll)) 182*8d67ca89SAndroid Build Coastguard Worker #define TPACKET3_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket3_hdr)) + sizeof(struct sockaddr_ll)) 183*8d67ca89SAndroid Build Coastguard Worker enum tpacket_versions { 184*8d67ca89SAndroid Build Coastguard Worker TPACKET_V1, 185*8d67ca89SAndroid Build Coastguard Worker TPACKET_V2, 186*8d67ca89SAndroid Build Coastguard Worker TPACKET_V3 187*8d67ca89SAndroid Build Coastguard Worker }; 188*8d67ca89SAndroid Build Coastguard Worker struct tpacket_req { 189*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_block_size; 190*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_block_nr; 191*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_frame_size; 192*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_frame_nr; 193*8d67ca89SAndroid Build Coastguard Worker }; 194*8d67ca89SAndroid Build Coastguard Worker struct tpacket_req3 { 195*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_block_size; 196*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_block_nr; 197*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_frame_size; 198*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_frame_nr; 199*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_retire_blk_tov; 200*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_sizeof_priv; 201*8d67ca89SAndroid Build Coastguard Worker unsigned int tp_feature_req_word; 202*8d67ca89SAndroid Build Coastguard Worker }; 203*8d67ca89SAndroid Build Coastguard Worker union tpacket_req_u { 204*8d67ca89SAndroid Build Coastguard Worker struct tpacket_req req; 205*8d67ca89SAndroid Build Coastguard Worker struct tpacket_req3 req3; 206*8d67ca89SAndroid Build Coastguard Worker }; 207*8d67ca89SAndroid Build Coastguard Worker struct packet_mreq { 208*8d67ca89SAndroid Build Coastguard Worker int mr_ifindex; 209*8d67ca89SAndroid Build Coastguard Worker unsigned short mr_type; 210*8d67ca89SAndroid Build Coastguard Worker unsigned short mr_alen; 211*8d67ca89SAndroid Build Coastguard Worker unsigned char mr_address[8]; 212*8d67ca89SAndroid Build Coastguard Worker }; 213*8d67ca89SAndroid Build Coastguard Worker struct fanout_args { 214*8d67ca89SAndroid Build Coastguard Worker #ifdef __LITTLE_ENDIAN_BITFIELD 215*8d67ca89SAndroid Build Coastguard Worker __u16 id; 216*8d67ca89SAndroid Build Coastguard Worker __u16 type_flags; 217*8d67ca89SAndroid Build Coastguard Worker #else 218*8d67ca89SAndroid Build Coastguard Worker __u16 type_flags; 219*8d67ca89SAndroid Build Coastguard Worker __u16 id; 220*8d67ca89SAndroid Build Coastguard Worker #endif 221*8d67ca89SAndroid Build Coastguard Worker __u32 max_num_members; 222*8d67ca89SAndroid Build Coastguard Worker }; 223*8d67ca89SAndroid Build Coastguard Worker #define PACKET_MR_MULTICAST 0 224*8d67ca89SAndroid Build Coastguard Worker #define PACKET_MR_PROMISC 1 225*8d67ca89SAndroid Build Coastguard Worker #define PACKET_MR_ALLMULTI 2 226*8d67ca89SAndroid Build Coastguard Worker #define PACKET_MR_UNICAST 3 227*8d67ca89SAndroid Build Coastguard Worker #endif 228