OSDN Git Service

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