55 #include <linux/types.h>
57 #include <linux/capability.h>
58 #include <linux/fcntl.h>
59 #include <linux/socket.h>
62 #include <linux/netdevice.h>
64 #include <linux/wireless.h>
65 #include <linux/kernel.h>
67 #include <linux/slab.h>
74 #include <linux/errno.h>
76 #include <asm/uaccess.h>
77 #include <asm/ioctls.h>
79 #include <asm/cacheflush.h>
83 #include <linux/poll.h>
84 #include <linux/module.h>
87 #include <linux/if_vlan.h>
89 #include <linux/errqueue.h>
165 #define V3_ALIGNMENT (8)
167 #define BLK_HDR_LEN (ALIGN(sizeof(struct tpacket_block_desc), V3_ALIGNMENT))
169 #define BLK_PLUS_PRIV(sz_of_priv) \
170 (BLK_HDR_LEN + ALIGN((sz_of_priv), V3_ALIGNMENT))
172 #define PGV_FROM_VMALLOC 1
174 #define BLOCK_STATUS(x) ((x)->hdr.bh1.block_status)
175 #define BLOCK_NUM_PKTS(x) ((x)->hdr.bh1.num_pkts)
176 #define BLOCK_O2FP(x) ((x)->hdr.bh1.offset_to_first_pkt)
177 #define BLOCK_LEN(x) ((x)->hdr.bh1.blk_len)
178 #define BLOCK_SNUM(x) ((x)->hdr.bh1.seq_num)
179 #define BLOCK_O2PRIV(x) ((x)->offset_to_priv)
180 #define BLOCK_PRIV(x) ((void *)((char *)(x) + BLOCK_O2PRIV(x)))
185 static void *packet_previous_frame(
struct packet_sock *po,
198 static void prb_retire_rx_blk_timer_expired(
unsigned long);
200 static void prb_init_blk_timer(
struct packet_sock *,
202 void (*
func) (
unsigned long));
208 static void packet_flush_mclist(
struct sock *
sk);
218 #define PACKET_SKB_CB(__skb) ((struct packet_skb_cb *)((__skb)->cb))
220 #define GET_PBDQC_FROM_RB(x) ((struct tpacket_kbdq_core *)(&(x)->prb_bdqc))
221 #define GET_PBLOCK_DESC(x, bid) \
222 ((struct tpacket_block_desc *)((x)->pkbdq[(bid)].buffer))
223 #define GET_CURR_PBLOCK_DESC_FROM_CORE(x) \
224 ((struct tpacket_block_desc *)((x)->pkbdq[(x)->kactive_blk_num].buffer))
225 #define GET_NEXT_PRB_BLK_NUM(x) \
226 (((x)->kactive_blk_num < ((x)->knum_blocks-1)) ? \
227 ((x)->kactive_blk_num+1) : 0)
236 static void register_prot_hook(
struct sock *
sk)
241 __fanout_link(sk, po);
256 static void __unregister_prot_hook(
struct sock *sk,
bool sync)
262 __fanout_unlink(sk, po);
274 static void unregister_prot_hook(
struct sock *sk,
bool sync)
279 __unregister_prot_hook(sk, sync);
284 if (is_vmalloc_addr(addr))
309 WARN(1,
"TPACKET version not supported.\n");
316 static int __packet_get_status(
struct packet_sock *po,
void *frame)
330 return h.h1->tp_status;
333 return h.h2->tp_status;
336 WARN(1,
"TPACKET version not supported.\n");
342 static void *packet_lookup_frame(
struct packet_sock *po,
344 unsigned int position,
357 h.raw = rb->
pg_vec[pg_vec_pos].buffer +
360 if (status != __packet_get_status(po,
h.raw))
366 static void *packet_current_frame(
struct packet_sock *po,
370 return packet_lookup_frame(po, rb, rb->
head, status);
378 static void prb_shutdown_retire_blk_timer(
struct packet_sock *po,
386 spin_lock(&rb_queue->
lock);
388 spin_unlock(&rb_queue->
lock);
390 prb_del_retire_blk_timer(pkc);
393 static void prb_init_blk_timer(
struct packet_sock *po,
395 void (*
func) (
unsigned long))
411 prb_init_blk_timer(po, pkc, prb_retire_rx_blk_timer_expired);
414 static int prb_calc_retire_blk_tmo(
struct packet_sock *po,
415 int blk_size_in_bytes)
418 unsigned int mbits = 0,
msec = 0,
div = 0, tmo = 0;
430 speed = ethtool_cmd_speed(&ecmd);
445 mbits = (blk_size_in_bytes * 8) / (1024 * 1024);
471 memset(p1, 0x0,
sizeof(*p1));
483 if (req_u->
req3.tp_retire_blk_tov)
487 req_u->
req3.tp_block_size);
491 prb_init_ft_ops(p1, req_u);
492 prb_setup_retire_blk_timer(po, tx_ring);
493 prb_open_block(p1, pbd);
529 static void prb_retire_rx_blk_timer_expired(
unsigned long data)
536 spin_lock(&po->
sk.sk_receive_queue.lock);
538 frozen = prb_queue_frozen(pkc);
563 if (!prb_dispatch_next_block(pkc, po))
571 if (prb_curr_blk_in_use(pkc, pbd)) {
585 prb_open_block(pkc, pbd);
592 _prb_refresh_rx_retire_blk_timer(pkc);
595 spin_unlock(&po->
sk.sk_receive_queue.lock);
603 #if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE == 1
624 #if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE == 1
650 if (po->
stats.tp_drops)
671 prb_flush_block(pkc1, pbd1, status);
705 h1->ts_first_pkt.ts_sec =
ts.tv_sec;
706 h1->ts_first_pkt.ts_nsec =
ts.tv_nsec;
714 prb_thaw_queue(pkc1);
715 _prb_refresh_rx_retire_blk_timer(pkc1);
722 WARN(1,
"ERROR block:%p is NOT FREE status:%d kactive_blk_num:%d\n",
758 #define TOTAL_PKT_LEN_INCL_ALIGN(length) (ALIGN((length), V3_ALIGNMENT))
778 prb_freeze_queue(pkc, po);
787 prb_open_block(pkc, pbd);
813 prb_close_block(pkc, pbd, po, status);
842 ppd->
hv1.tp_rxhash = skb_get_rxhash(pkc->
skb);
848 ppd->
hv1.tp_rxhash = 0;
858 ppd->
hv1.tp_vlan_tci = 0;
866 prb_fill_vlan_info(pkc, ppd);
869 prb_fill_rxhash(pkc, ppd);
871 prb_clear_rxhash(pkc, ppd);
874 static void prb_fill_curr_block(
char *
curr,
888 prb_run_all_ft_ops(pkc, ppd);
892 static void *__packet_lookup_frame_in_block(
struct packet_sock *po,
906 if (prb_queue_frozen(pkc)) {
911 if (prb_curr_blk_in_use(pkc, pbd)) {
921 prb_open_block(pkc, pbd);
932 prb_fill_curr_block(curr, pkc, pbd, len);
937 prb_retire_current_block(pkc, po, 0);
940 curr = (
char *)prb_dispatch_next_block(pkc, po);
943 prb_fill_curr_block(curr, pkc, pbd, len);
954 static void *packet_current_rx_frame(
struct packet_sock *po,
956 int status,
unsigned int len)
962 curr = packet_lookup_frame(po, &po->
rx_ring,
966 return __packet_lookup_frame_in_block(po, skb, status, len);
968 WARN(1,
"TPACKET version not supported\n");
974 static void *prb_lookup_block(
struct packet_sock *po,
976 unsigned int previous,
991 prev = rb->
prb_bdqc.kactive_blk_num-1;
998 static void *__prb_previous_block(
struct packet_sock *po,
1002 unsigned int previous = prb_previous_blk_num(rb);
1003 return prb_lookup_block(po, rb, previous, status);
1006 static void *packet_previous_rx_frame(
struct packet_sock *po,
1011 return packet_previous_frame(po, rb, status);
1013 return __prb_previous_block(po, rb, status);
1016 static void packet_increment_rx_head(
struct packet_sock *po,
1022 return packet_increment_head(rb);
1025 WARN(1,
"TPACKET version not supported.\n");
1031 static void *packet_previous_frame(
struct packet_sock *po,
1036 return packet_lookup_frame(po, rb, previous, status);
1044 static void packet_sock_destruct(
struct sock *sk)
1052 pr_err(
"Attempt to release alive packet socket: %p\n", sk);
1059 static int fanout_rr_next(
struct packet_fanout *
f,
unsigned int num)
1073 idx = ((
u64)hash * num) >> 32;
1084 fanout_rr_next(f, num))) != cur)
1093 return f->
arr[cpu % num];
1104 if (!net_eq(dev_net(dev),
read_pnet(&f->net)) ||
1118 skb_get_rxhash(skb);
1119 sk = fanout_demux_hash(f, skb, num);
1122 sk = fanout_demux_lb(f, skb, num);
1125 sk = fanout_demux_cpu(f, skb, num);
1131 return po->prot_hook.func(skb, dev, &po->prot_hook, orig_dev);
1142 spin_lock(&f->
lock);
1146 spin_unlock(&f->
lock);
1154 spin_lock(&f->
lock);
1156 if (f->
arr[i] == sk)
1162 spin_unlock(&f->
lock);
1165 static bool match_fanout_group(
struct packet_type *ptype,
struct sock * sk)
1173 static int fanout_add(
struct sock *sk,
u16 id,
u16 type_flags)
1177 u8 type = type_flags & 0xff;
1206 if (match && match->
defrag != defrag)
1218 INIT_LIST_HEAD(&match->
list);
1221 match->prot_hook.
type = po->prot_hook.type;
1222 match->prot_hook.dev = po->prot_hook.dev;
1223 match->prot_hook.func = packet_rcv_fanout;
1224 match->prot_hook.af_packet_priv =
match;
1225 match->prot_hook.id_match = match_fanout_group;
1227 list_add(&match->
list, &fanout_list);
1230 if (match->
type == type &&
1231 match->prot_hook.
type == po->prot_hook.type &&
1232 match->prot_hook.dev == po->prot_hook.dev) {
1238 __fanout_link(sk, po);
1247 static void fanout_release(
struct sock *sk)
1267 static const struct proto_ops packet_ops;
1269 static const struct proto_ops packet_ops_spkt;
1298 if (!net_eq(dev_net(dev), sock_net(sk)))
1346 struct sock *sk = sock->
sk;
1388 if (!netif_supports_nofcs(dev)) {
1412 skb_reserve(skb, reserved);
1413 skb_reset_network_header(skb);
1420 skb_reset_network_header(skb);
1434 skb_reset_mac_header(skb);
1435 ehdr = eth_hdr(skb);
1464 static unsigned int run_filter(
const struct sk_buff *skb,
1465 const struct sock *sk,
1497 u8 *skb_head = skb->
data;
1498 int skb_len = skb->
len;
1499 unsigned int snaplen,
res;
1507 if (!net_eq(dev_net(dev), sock_net(sk)))
1524 skb_pull(skb, skb_network_offset(skb));
1530 res = run_filter(skb, sk, snaplen);
1532 goto drop_n_restore;
1539 if (skb_shared(skb)) {
1544 if (skb_head != skb->
data) {
1545 skb->
data = skb_head;
1569 if (pskb_trim(skb, snaplen))
1572 skb_set_owner_r(skb, sk);
1580 po->
stats.tp_packets++;
1589 po->
stats.tp_drops++;
1594 if (skb_head != skb->
data && skb_shared(skb)) {
1595 skb->
data = skb_head;
1615 u8 *skb_head = skb->
data;
1616 int skb_len = skb->
len;
1617 unsigned int snaplen,
res;
1619 unsigned short macoff, netoff,
hdrlen;
1631 if (!net_eq(dev_net(dev), sock_net(sk)))
1639 skb_pull(skb, skb_network_offset(skb));
1648 res = run_filter(skb, sk, snaplen);
1650 goto drop_n_restore;
1658 unsigned int maclen = skb_network_offset(skb);
1660 (maclen < 16 ? 16 : maclen)) +
1662 macoff = netoff - maclen;
1665 if (macoff + snaplen > po->
rx_ring.frame_size) {
1668 if (skb_shared(skb)) {
1671 copy_skb = skb_get(skb);
1672 skb_head = skb->
data;
1675 skb_set_owner_r(copy_skb, sk);
1677 snaplen = po->
rx_ring.frame_size - macoff;
1678 if ((
int)snaplen < 0)
1683 h.raw = packet_current_rx_frame(po, skb,
1688 packet_increment_rx_head(po, &po->
rx_ring);
1695 if (po->
stats.tp_drops)
1698 po->
stats.tp_packets++;
1709 h.h1->tp_len = skb->
len;
1710 h.h1->tp_snaplen = snaplen;
1711 h.h1->tp_mac = macoff;
1712 h.h1->tp_net = netoff;
1715 tv = ktime_to_timeval(shhwtstamps->
syststamp);
1718 tv = ktime_to_timeval(shhwtstamps->
hwtstamp);
1720 tv = ktime_to_timeval(skb->
tstamp);
1723 h.h1->tp_sec = tv.tv_sec;
1724 h.h1->tp_usec = tv.tv_usec;
1725 hdrlen =
sizeof(*
h.h1);
1728 h.h2->tp_len = skb->
len;
1729 h.h2->tp_snaplen = snaplen;
1730 h.h2->tp_mac = macoff;
1731 h.h2->tp_net = netoff;
1737 ts = ktime_to_timespec(shhwtstamps->
hwtstamp);
1739 ts = ktime_to_timespec(skb->
tstamp);
1742 h.h2->tp_sec =
ts.tv_sec;
1743 h.h2->tp_nsec =
ts.tv_nsec;
1748 h.h2->tp_vlan_tci = 0;
1750 h.h2->tp_padding = 0;
1751 hdrlen =
sizeof(*
h.h2);
1758 h.h3->tp_len = skb->
len;
1759 h.h3->tp_snaplen = snaplen;
1760 h.h3->tp_mac = macoff;
1761 h.h3->tp_net = netoff;
1767 ts = ktime_to_timespec(shhwtstamps->
hwtstamp);
1769 ts = ktime_to_timespec(skb->
tstamp);
1772 h.h3->tp_sec =
ts.tv_sec;
1773 h.h3->tp_nsec =
ts.tv_nsec;
1774 hdrlen =
sizeof(*
h.h3);
1792 #if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE == 1
1798 + macoff + snaplen);
1799 for (start =
h.raw; start < end; start +=
PAGE_SIZE)
1806 __packet_set_status(po,
h.raw, status);
1808 prb_clear_blk_fill_status(&po->
rx_ring);
1813 if (skb_head != skb->
data && skb_shared(skb)) {
1814 skb->
data = skb_head;
1822 po->
stats.tp_drops++;
1827 goto drop_n_restore;
1830 static void tpacket_destruct_skb(
struct sk_buff *skb)
1836 ph = skb_shinfo(skb)->destructor_arg;
1855 struct socket *sock = po->
sk.sk_socket;
1865 skb->
mark = po->
sk.sk_mark;
1866 skb_shinfo(skb)->destructor_arg = ph.raw;
1870 tp_len = ph.h2->tp_len;
1873 tp_len = ph.h1->tp_len;
1877 pr_err(
"packet size is too long (%d > %d)\n", tp_len, size_max);
1881 skb_reserve(skb, hlen);
1882 skb_reset_network_header(skb);
1888 err = dev_hard_header(skb, dev,
ntohs(proto), addr,
1894 if (
unlikely(tp_len <= dev->hard_header_len)) {
1895 pr_err(
"packet size is too short (%d < %d)\n",
1913 len = ((to_write > len_max) ? len_max : to_write);
1916 skb->
len += to_write;
1920 while (
likely(to_write)) {
1921 nr_frags = skb_shinfo(skb)->nr_frags;
1924 pr_err(
"Packet exceed the number of skb frags(%lu)\n",
1929 page = pgv_to_page(data);
1933 skb_fill_page_desc(skb, nr_frags, page, offset, len);
1937 len = ((to_write > len_max) ? len_max : to_write);
1948 bool need_rls_dev =
false;
1952 int tp_len, size_max;
1953 unsigned char *addr;
1961 if (saddr ==
NULL) {
1962 dev = po->prot_hook.dev;
1976 need_rls_dev =
true;
1989 size_max = po->
tx_ring.frame_size
1992 if (size_max > dev->
mtu + reserve)
1996 ph = packet_current_frame(po, &po->
tx_ring,
2014 tp_len = tpacket_fill_skb(po, skb, ph, dev, size_max, proto,
2019 __packet_set_status(po, ph,
2021 packet_increment_head(&po->
tx_ring);
2039 if (err && __packet_get_status(po, ph) ==
2051 packet_increment_head(&po->
tx_ring);
2062 __packet_set_status(po, ph, status);
2072 static struct sk_buff *packet_alloc_skb(
struct sock *sk,
size_t prepad,
2073 size_t reserve,
size_t len,
2074 size_t linear,
int noblock,
2080 if (prepad + len <
PAGE_SIZE || !linear)
2088 skb_reserve(skb, reserve);
2096 static int packet_snd(
struct socket *sock,
2097 struct msghdr *msg,
size_t len)
2099 struct sock *sk = sock->
sk;
2104 bool need_rls_dev =
false;
2105 unsigned char *addr;
2106 int err, reserve = 0;
2111 unsigned short gso_type = 0;
2119 if (saddr ==
NULL) {
2120 dev = po->prot_hook.dev;
2132 need_rls_dev =
true;
2146 vnet_hdr_len =
sizeof(vnet_hdr);
2149 if (len < vnet_hdr_len)
2152 len -= vnet_hdr_len;
2160 (vnet_hdr.csum_start + vnet_hdr.csum_offset + 2 >
2162 vnet_hdr.hdr_len = vnet_hdr.csum_start +
2163 vnet_hdr.csum_offset + 2;
2166 if (vnet_hdr.hdr_len > len)
2187 if (vnet_hdr.gso_size == 0)
2194 if (!netif_supports_nofcs(dev)) {
2202 if (!gso_type && (len > dev->
mtu + reserve +
VLAN_HLEN + extra_len))
2208 skb = packet_alloc_skb(sk, hlen + tlen, hlen, len, vnet_hdr.hdr_len,
2213 skb_set_network_header(skb, reserve);
2217 (offset = dev_hard_header(skb, dev,
ntohs(proto), addr,
NULL, len)) < 0)
2228 if (!gso_type && (len > dev->
mtu + reserve + extra_len)) {
2234 skb_reset_mac_header(skb);
2235 ehdr = eth_hdr(skb);
2250 vnet_hdr.csum_offset)) {
2256 skb_shinfo(skb)->gso_size = vnet_hdr.gso_size;
2257 skb_shinfo(skb)->gso_type = gso_type;
2261 skb_shinfo(skb)->gso_segs = 0;
2263 len += vnet_hdr_len;
2285 if (dev && need_rls_dev)
2291 static int packet_sendmsg(
struct kiocb *iocb,
struct socket *sock,
2292 struct msghdr *msg,
size_t len)
2294 struct sock *sk = sock->
sk;
2297 return tpacket_snd(po, msg);
2299 return packet_snd(sock, msg, len);
2307 static int packet_release(
struct socket *sock)
2309 struct sock *sk = sock->
sk;
2325 sock_prot_inuse_add(net, sk->sk_prot, -1);
2329 unregister_prot_hook(sk,
false);
2330 if (po->prot_hook.dev) {
2331 dev_put(po->prot_hook.dev);
2332 po->prot_hook.dev =
NULL;
2336 packet_flush_mclist(sk);
2338 memset(&req_u, 0,
sizeof(req_u));
2341 packet_set_ring(sk, &req_u, 1, 0);
2344 packet_set_ring(sk, &req_u, 1, 1);
2382 unregister_prot_hook(sk,
true);
2385 if (po->prot_hook.dev)
2386 dev_put(po->prot_hook.dev);
2387 po->prot_hook.dev =
dev;
2395 register_prot_hook(sk);
2415 struct sock *sk = sock->
sk;
2424 if (addr_len !=
sizeof(
struct sockaddr))
2430 err = packet_do_bind(sk, dev, pkt_sk(sk)->num);
2434 static int packet_bind(
struct socket *sock,
struct sockaddr *uaddr,
int addr_len)
2437 struct sock *sk = sock->
sk;
2457 err = packet_do_bind(sk, dev, sll->
sll_protocol ? : pkt_sk(sk)->num);
2463 static struct proto packet_proto = {
2473 static int packet_create(
struct net *net,
struct socket *sock,
int protocol,
2494 sock->
ops = &packet_ops;
2496 sock->
ops = &packet_ops_spkt;
2513 po->prot_hook.func = packet_rcv;
2516 po->prot_hook.func = packet_rcv_spkt;
2518 po->prot_hook.af_packet_priv =
sk;
2521 po->prot_hook.type =
proto;
2522 register_prot_hook(sk);
2526 sk_add_node_rcu(sk, &net->
packet.sklist);
2530 sock_prot_inuse_add(net, &packet_proto, 1);
2538 static int packet_recv_error(
struct sock *sk,
struct msghdr *msg,
int len)
2558 sock_recv_timestamp(msg, sk, skb);
2562 sizeof(serr->
ee), &serr->
ee);
2588 static int packet_recvmsg(
struct kiocb *iocb,
struct socket *sock,
2591 struct sock *sk = sock->
sk;
2595 int vnet_hdr_len = 0;
2603 if (pkt_sk(sk)->ifindex < 0)
2608 err = packet_recv_error(sk, msg, len);
2632 if (pkt_sk(sk)->has_vnet_hdr) {
2636 vnet_hdr_len =
sizeof(vnet_hdr);
2637 if (len < vnet_hdr_len)
2640 len -= vnet_hdr_len;
2642 if (skb_is_gso(skb)) {
2646 vnet_hdr.
hdr_len = skb_headlen(skb);
2665 vnet_hdr.
csum_start = skb_checksum_start_offset(skb);
2703 sock_recv_ts_and_drops(msg, sk, skb);
2709 if (pkt_sk(sk)->auxdata) {
2716 aux.tp_snaplen = skb->
len;
2718 aux.tp_net = skb_network_offset(skb);
2723 aux.tp_vlan_tci = 0;
2733 err = vnet_hdr_len + ((flags&
MSG_TRUNC) ? skb->
len : copied);
2741 static int packet_getname_spkt(
struct socket *sock,
struct sockaddr *uaddr,
2742 int *uaddr_len,
int peer)
2745 struct sock *sk = sock->
sk;
2758 *uaddr_len =
sizeof(*uaddr);
2763 static int packet_getname(
struct socket *sock,
struct sockaddr *uaddr,
2764 int *uaddr_len,
int peer)
2767 struct sock *sk = sock->
sk;
2828 for ( ;
i; i = i->
next) {
2830 packet_dev_mc(dev, i, what);
2834 static int packet_mc_add(
struct sock *sk,
struct packet_mreq_max *mreq)
2877 err = packet_dev_mc(dev, i, 1);
2888 static int packet_mc_drop(
struct sock *sk,
struct packet_mreq_max *mreq)
2894 for (mlp = &pkt_sk(sk)->mclist; (ml = *mlp) !=
NULL; mlp = &ml->
next) {
2899 if (--ml->
count == 0) {
2904 packet_dev_mc(dev, ml, -1);
2915 static void packet_flush_mclist(
struct sock *sk)
2930 packet_dev_mc(dev, ml, -1);
2937 packet_setsockopt(
struct socket *sock,
int level,
int optname,
char __user *optval,
unsigned int optlen)
2939 struct sock *sk = sock->
sk;
2952 memset(&mreq, 0,
sizeof(mreq));
2955 if (len >
sizeof(mreq))
2962 ret = packet_mc_add(sk, &mreq);
2964 ret = packet_mc_drop(sk, &mreq);
2977 len =
sizeof(req_u.
req);
2981 len =
sizeof(req_u.
req3);
2986 if (pkt_sk(sk)->has_vnet_hdr)
2990 return packet_set_ring(sk, &req_u, 0,
2997 if (optlen !=
sizeof(val))
3002 pkt_sk(sk)->copy_thresh =
val;
3009 if (optlen !=
sizeof(val))
3029 if (optlen !=
sizeof(val))
3042 if (optlen !=
sizeof(val))
3055 if (optlen <
sizeof(val))
3067 if (optlen <
sizeof(val))
3083 if (optlen <
sizeof(val))
3095 if (optlen !=
sizeof(val))
3107 if (optlen !=
sizeof(val))
3112 return fanout_add(sk, val & 0xffff, val >> 16);
3119 static int packet_getsockopt(
struct socket *sock,
int level,
int optname,
3120 char __user *optval,
int __user *optlen)
3124 struct sock *sk = sock->
sk;
3146 st_u.stats3.tp_freeze_q_cnt =
3148 st_u.stats3.tp_packets += po->
stats.tp_drops;
3149 data = &st_u.stats3;
3153 st.tp_packets +=
st.tp_drops;
3172 if (len >
sizeof(
int))
3219 static int packet_notifier(
struct notifier_block *
this,
unsigned long msg,
void *data)
3224 struct net *net = dev_net(dev);
3233 packet_dev_mclist(dev, po->
mclist, -1);
3240 __unregister_prot_hook(sk,
false);
3247 if (po->prot_hook.dev)
3248 dev_put(po->prot_hook.dev);
3249 po->prot_hook.dev =
NULL;
3258 register_prot_hook(sk);
3269 static int packet_ioctl(
struct socket *sock,
unsigned int cmd,
3272 struct sock *sk = sock->
sk;
3277 int amount = sk_wmem_alloc_get(sk);
3279 return put_user(amount, (
int __user *)arg);
3291 return put_user(amount, (
int __user *)arg);
3322 static unsigned int packet_poll(
struct file *
file,
struct socket *sock,
3325 struct sock *sk = sock->
sk;
3331 if (!packet_previous_rx_frame(po, &po->
rx_ring,
3352 struct file *file = vma->
vm_file;
3354 struct sock *sk = sock->
sk;
3362 struct file *file = vma->
vm_file;
3364 struct sock *sk = sock->
sk;
3370 static const struct vm_operations_struct packet_mmap_ops = {
3371 .open = packet_mm_open,
3372 .close = packet_mm_close,
3375 static void free_pg_vec(
struct pgv *pg_vec,
unsigned int order,
3380 for (i = 0; i < len; i++) {
3382 if (is_vmalloc_addr(pg_vec[i].buffer))
3383 vfree(pg_vec[i].buffer);
3393 static char *alloc_one_pg_vec_page(
unsigned long order)
3395 char *buffer =
NULL;
3436 for (i = 0; i < block_nr; i++) {
3437 pg_vec[
i].
buffer = alloc_one_pg_vec_page(order);
3439 goto out_free_pgvec;
3446 free_pg_vec(pg_vec, order, block_nr);
3451 static int packet_set_ring(
struct sock *sk,
union tpacket_req_u *req_u,
3452 int closing,
int tx_ring)
3456 int was_running, order = 0;
3466 WARN(1,
"Tx-ring is not supported.\n");
3519 pg_vec = alloc_pg_vec(req, order);
3528 init_prb_bdqc(po, rb, pg_vec, req_u, tx_ring);
3549 __unregister_prot_hook(sk,
false);
3559 spin_lock_bh(&rb_queue->
lock);
3564 spin_unlock_bh(&rb_queue->
lock);
3570 po->prot_hook.func = (po->
rx_ring.pg_vec) ?
3571 tpacket_rcv : packet_rcv;
3574 pr_err(
"packet_mmap: vma is busy: %d\n",
3582 register_prot_hook(sk);
3588 prb_shutdown_retire_blk_timer(po, tx_ring, rb_queue);
3598 static int packet_mmap(
struct file *file,
struct socket *sock,
3601 struct sock *sk = sock->
sk;
3603 unsigned long size, expected_size;
3605 unsigned long start;
3615 for (rb = &po->
rx_ring; rb <= &po->tx_ring; rb++) {
3623 if (expected_size == 0)
3627 if (size != expected_size)
3631 for (rb = &po->
rx_ring; rb <= &po->tx_ring; rb++) {
3637 void *kaddr = rb->
pg_vec[
i].buffer;
3640 for (pg_num = 0; pg_num < rb->
pg_vec_pages; pg_num++) {
3641 page = pgv_to_page(kaddr);
3652 vma->
vm_ops = &packet_mmap_ops;
3660 static const struct proto_ops packet_ops_spkt = {
3663 .release = packet_release,
3664 .bind = packet_bind_spkt,
3668 .getname = packet_getname_spkt,
3670 .ioctl = packet_ioctl,
3675 .sendmsg = packet_sendmsg_spkt,
3676 .recvmsg = packet_recvmsg,
3681 static const struct proto_ops packet_ops = {
3684 .release = packet_release,
3685 .bind = packet_bind,
3689 .getname = packet_getname,
3690 .poll = packet_poll,
3691 .ioctl = packet_ioctl,
3694 .setsockopt = packet_setsockopt,
3695 .getsockopt = packet_getsockopt,
3696 .sendmsg = packet_sendmsg,
3697 .recvmsg = packet_recvmsg,
3698 .mmap = packet_mmap,
3704 .create = packet_create,
3709 .notifier_call = packet_notifier,
3712 #ifdef CONFIG_PROC_FS
3714 static void *packet_seq_start(
struct seq_file *seq, loff_t *
pos)
3717 struct net *net = seq_file_net(seq);
3723 static void *packet_seq_next(
struct seq_file *seq,
void *
v, loff_t *
pos)
3725 struct net *net = seq_file_net(seq);
3729 static void packet_seq_stop(
struct seq_file *seq,
void *
v)
3735 static int packet_seq_show(
struct seq_file *seq,
void *
v)
3738 seq_puts(seq,
"sk RefCnt Type Proto Iface R Rmem User Inode\n");
3740 struct sock *
s = sk_entry(v);
3744 "%pK %-6d %-4d %04x %-5d %1d %-6u %-6u %-6lu\n",
3760 .
start = packet_seq_start,
3761 .next = packet_seq_next,
3762 .stop = packet_seq_stop,
3763 .show = packet_seq_show,
3766 static int packet_seq_open(
struct inode *
inode,
struct file *file)
3774 .open = packet_seq_open,
3782 static int __net_init packet_net_init(
struct net *net)
3793 static void __net_exit packet_net_exit(
struct net *net)
3799 .init = packet_net_init,
3800 .exit = packet_net_exit,
3804 static void __exit packet_exit(
void)
3812 static int __init packet_init(
void)