Linux Audio

Check our new training course

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