LCOV - code coverage report
Current view: top level - include/linux - if_packet.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 1 100.0 %
Date: 2017-01-25 Functions: 0 0 -

          Line data    Source code
       1             : #ifndef __LINUX_IF_PACKET_H
       2             : #define __LINUX_IF_PACKET_H
       3             : 
       4             : #include <linux/types.h>
       5             : 
       6             : struct sockaddr_pkt {
       7             :         unsigned short spkt_family;
       8             :         unsigned char spkt_device[14];
       9             :         __be16 spkt_protocol;
      10             : };
      11             : 
      12             : struct sockaddr_ll {
      13             :         unsigned short  sll_family;
      14             :         __be16          sll_protocol;
      15             :         int             sll_ifindex;
      16             :         unsigned short  sll_hatype;
      17             :         unsigned char   sll_pkttype;
      18             :         unsigned char   sll_halen;
      19             :         unsigned char   sll_addr[8];
      20             : };
      21             : 
      22             : /* Packet types */
      23             : 
      24             : #define PACKET_HOST             0               /* To us                */
      25             : #define PACKET_BROADCAST        1               /* To all               */
      26             : #define PACKET_MULTICAST        2               /* To group             */
      27             : #define PACKET_OTHERHOST        3               /* To someone else      */
      28             : #define PACKET_OUTGOING         4               /* Outgoing of any type */
      29             : /* These ones are invisible by user level */
      30             : #define PACKET_LOOPBACK         5               /* MC/BRD frame looped back */
      31             : #define PACKET_FASTROUTE        6               /* Fastrouted frame     */
      32             : 
      33             : /* Packet socket options */
      34             : 
      35             : #define PACKET_ADD_MEMBERSHIP           1
      36             : #define PACKET_DROP_MEMBERSHIP          2
      37             : #define PACKET_RECV_OUTPUT              3
      38             : /* Value 4 is still used by obsolete turbo-packet. */
      39             : #define PACKET_RX_RING                  5
      40             : #define PACKET_STATISTICS               6
      41             : #define PACKET_COPY_THRESH              7
      42             : #define PACKET_AUXDATA                  8
      43             : #define PACKET_ORIGDEV                  9
      44             : #define PACKET_VERSION                  10
      45             : #define PACKET_HDRLEN                   11
      46             : #define PACKET_RESERVE                  12
      47             : #define PACKET_TX_RING                  13
      48             : #define PACKET_LOSS                     14
      49             : 
      50             : struct tpacket_stats {
      51             :         unsigned int    tp_packets;
      52             :         unsigned int    tp_drops;
      53             : };
      54             : 
      55             : struct tpacket_auxdata {
      56             :         __u32           tp_status;
      57             :         __u32           tp_len;
      58             :         __u32           tp_snaplen;
      59             :         __u16           tp_mac;
      60             :         __u16           tp_net;
      61             :         __u16           tp_vlan_tci;
      62             :         __u16           tp_padding;
      63             : };
      64             : 
      65             : /* Rx ring - header status */
      66             : #define TP_STATUS_KERNEL        0x0
      67             : #define TP_STATUS_USER          0x1
      68             : #define TP_STATUS_COPY          0x2
      69             : #define TP_STATUS_LOSING        0x4
      70             : #define TP_STATUS_CSUMNOTREADY  0x8
      71             : 
      72             : /* Tx ring - header status */
      73             : #define TP_STATUS_AVAILABLE     0x0
      74             : #define TP_STATUS_SEND_REQUEST  0x1
      75             : #define TP_STATUS_SENDING       0x2
      76             : #define TP_STATUS_WRONG_FORMAT  0x4
      77             : 
      78             : struct tpacket_hdr {
      79             :         unsigned long   tp_status;
      80             :         unsigned int    tp_len;
      81             :         unsigned int    tp_snaplen;
      82             :         unsigned short  tp_mac;
      83             :         unsigned short  tp_net;
      84             :         unsigned int    tp_sec;
      85             :         unsigned int    tp_usec;
      86             : };
      87             : 
      88             : #define TPACKET_ALIGNMENT       16
      89             : #define TPACKET_ALIGN(x)        (((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1))
      90             : #define TPACKET_HDRLEN          (TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll))
      91             : 
      92             : struct tpacket2_hdr {
      93             :         __u32           tp_status;
      94             :         __u32           tp_len;
      95             :         __u32           tp_snaplen;
      96             :         __u16           tp_mac;
      97             :         __u16           tp_net;
      98             :         __u32           tp_sec;
      99             :         __u32           tp_nsec;
     100             :         __u16           tp_vlan_tci;
     101             :         __u16           tp_padding;
     102             : };
     103             : 
     104             : #define TPACKET2_HDRLEN         (TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll))
     105             : 
     106             : enum tpacket_versions {
     107             :         TPACKET_V1,
     108             :         TPACKET_V2,
     109             : };
     110             : 
     111             : /*
     112             :    Frame structure:
     113             : 
     114             :    - Start. Frame must be aligned to TPACKET_ALIGNMENT=16
     115             :    - struct tpacket_hdr
     116             :    - pad to TPACKET_ALIGNMENT=16
     117             :    - struct sockaddr_ll
     118             :    - Gap, chosen so that packet data (Start+tp_net) alignes to TPACKET_ALIGNMENT=16
     119             :    - Start+tp_mac: [ Optional MAC header ]
     120             :    - Start+tp_net: Packet data, aligned to TPACKET_ALIGNMENT=16.
     121             :    - Pad to align to TPACKET_ALIGNMENT=16
     122             :  */
     123             : 
     124             : struct tpacket_req {
     125             :         unsigned int    tp_block_size;  /* Minimal size of contiguous block */
     126             :         unsigned int    tp_block_nr;    /* Number of blocks */
     127             :         unsigned int    tp_frame_size;  /* Size of frame */
     128             :         unsigned int    tp_frame_nr;    /* Total number of frames */
     129             : };
     130             : 
     131             : struct packet_mreq {
     132             :         int             mr_ifindex;
     133             :         unsigned short  mr_type;
     134             :         unsigned short  mr_alen;
     135             :         unsigned char   mr_address[8];
     136             : };
     137           1 : 
     138             : #define PACKET_MR_MULTICAST     0
     139             : #define PACKET_MR_PROMISC       1
     140             : #define PACKET_MR_ALLMULTI      2
     141             : #define PACKET_MR_UNICAST       3
     142             : 
     143             : #endif

Generated by: LCOV version 1.10