root/net/packet/internal.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. pkt_sk

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef __PACKET_INTERNAL_H__
   3 #define __PACKET_INTERNAL_H__
   4 
   5 #include <linux/refcount.h>
   6 
   7 struct packet_mclist {
   8         struct packet_mclist    *next;
   9         int                     ifindex;
  10         int                     count;
  11         unsigned short          type;
  12         unsigned short          alen;
  13         unsigned char           addr[MAX_ADDR_LEN];
  14 };
  15 
  16 /* kbdq - kernel block descriptor queue */
  17 struct tpacket_kbdq_core {
  18         struct pgv      *pkbdq;
  19         unsigned int    feature_req_word;
  20         unsigned int    hdrlen;
  21         unsigned char   reset_pending_on_curr_blk;
  22         unsigned char   delete_blk_timer;
  23         unsigned short  kactive_blk_num;
  24         unsigned short  blk_sizeof_priv;
  25 
  26         /* last_kactive_blk_num:
  27          * trick to see if user-space has caught up
  28          * in order to avoid refreshing timer when every single pkt arrives.
  29          */
  30         unsigned short  last_kactive_blk_num;
  31 
  32         char            *pkblk_start;
  33         char            *pkblk_end;
  34         int             kblk_size;
  35         unsigned int    max_frame_len;
  36         unsigned int    knum_blocks;
  37         uint64_t        knxt_seq_num;
  38         char            *prev;
  39         char            *nxt_offset;
  40         struct sk_buff  *skb;
  41 
  42         atomic_t        blk_fill_in_prog;
  43 
  44         /* Default is set to 8ms */
  45 #define DEFAULT_PRB_RETIRE_TOV  (8)
  46 
  47         unsigned short  retire_blk_tov;
  48         unsigned short  version;
  49         unsigned long   tov_in_jiffies;
  50 
  51         /* timer to retire an outstanding block */
  52         struct timer_list retire_blk_timer;
  53 };
  54 
  55 struct pgv {
  56         char *buffer;
  57 };
  58 
  59 struct packet_ring_buffer {
  60         struct pgv              *pg_vec;
  61 
  62         unsigned int            head;
  63         unsigned int            frames_per_block;
  64         unsigned int            frame_size;
  65         unsigned int            frame_max;
  66 
  67         unsigned int            pg_vec_order;
  68         unsigned int            pg_vec_pages;
  69         unsigned int            pg_vec_len;
  70 
  71         unsigned int __percpu   *pending_refcnt;
  72 
  73         union {
  74                 unsigned long                   *rx_owner_map;
  75                 struct tpacket_kbdq_core        prb_bdqc;
  76         };
  77 };
  78 
  79 extern struct mutex fanout_mutex;
  80 #define PACKET_FANOUT_MAX       256
  81 
  82 struct packet_fanout {
  83         possible_net_t          net;
  84         unsigned int            num_members;
  85         u16                     id;
  86         u8                      type;
  87         u8                      flags;
  88         union {
  89                 atomic_t                rr_cur;
  90                 struct bpf_prog __rcu   *bpf_prog;
  91         };
  92         struct list_head        list;
  93         struct sock             *arr[PACKET_FANOUT_MAX];
  94         spinlock_t              lock;
  95         refcount_t              sk_ref;
  96         struct packet_type      prot_hook ____cacheline_aligned_in_smp;
  97 };
  98 
  99 struct packet_rollover {
 100         int                     sock;
 101         atomic_long_t           num;
 102         atomic_long_t           num_huge;
 103         atomic_long_t           num_failed;
 104 #define ROLLOVER_HLEN   (L1_CACHE_BYTES / sizeof(u32))
 105         u32                     history[ROLLOVER_HLEN] ____cacheline_aligned;
 106 } ____cacheline_aligned_in_smp;
 107 
 108 struct packet_sock {
 109         /* struct sock has to be the first member of packet_sock */
 110         struct sock             sk;
 111         struct packet_fanout    *fanout;
 112         union  tpacket_stats_u  stats;
 113         struct packet_ring_buffer       rx_ring;
 114         struct packet_ring_buffer       tx_ring;
 115         int                     copy_thresh;
 116         spinlock_t              bind_lock;
 117         struct mutex            pg_vec_lock;
 118         unsigned int            running;        /* bind_lock must be held */
 119         unsigned int            auxdata:1,      /* writer must hold sock lock */
 120                                 origdev:1,
 121                                 has_vnet_hdr:1,
 122                                 tp_loss:1,
 123                                 tp_tx_has_off:1;
 124         int                     pressure;
 125         int                     ifindex;        /* bound device         */
 126         __be16                  num;
 127         struct packet_rollover  *rollover;
 128         struct packet_mclist    *mclist;
 129         atomic_t                mapped;
 130         enum tpacket_versions   tp_version;
 131         unsigned int            tp_hdrlen;
 132         unsigned int            tp_reserve;
 133         unsigned int            tp_tstamp;
 134         struct completion       skb_completion;
 135         struct net_device __rcu *cached_dev;
 136         int                     (*xmit)(struct sk_buff *skb);
 137         struct packet_type      prot_hook ____cacheline_aligned_in_smp;
 138         atomic_t                tp_drops ____cacheline_aligned_in_smp;
 139 };
 140 
 141 static struct packet_sock *pkt_sk(struct sock *sk)
 142 {
 143         return (struct packet_sock *)sk;
 144 }
 145 
 146 #endif

/* [<][>][^][v][top][bottom][index][help] */