packet: Kill CONFIG_PACKET_MMAP.
Early on this was an experimental facility that few people other than Alexey Kuznetsov played with. Now it's a pretty fundamental thing and as people add more features to AF_PACKET sockets this config options creates ifdef spaghetti. So kill it off. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
7aeef972cc
Коммит
889b8f964f
|
@ -2,7 +2,7 @@
|
|||
+ ABSTRACT
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
This file documents the CONFIG_PACKET_MMAP option available with the PACKET
|
||||
This file documents the mmap() facility available with the PACKET
|
||||
socket interface on 2.4 and 2.6 kernels. This type of sockets is used for
|
||||
capture network traffic with utilities like tcpdump or any other that needs
|
||||
raw access to network interface.
|
||||
|
@ -44,7 +44,7 @@ enabled. For transmission, check the MTU (Maximum Transmission Unit) used and
|
|||
supported by devices of your network.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
+ How to use CONFIG_PACKET_MMAP to improve capture process
|
||||
+ How to use mmap() to improve capture process
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
From the user standpoint, you should use the higher level libpcap library, which
|
||||
|
@ -64,7 +64,7 @@ the low level details or want to improve libpcap by including PACKET_MMAP
|
|||
support.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
+ How to use CONFIG_PACKET_MMAP directly to improve capture process
|
||||
+ How to use mmap() directly to improve capture process
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
From the system calls stand point, the use of PACKET_MMAP involves
|
||||
|
@ -105,7 +105,7 @@ also the mapping of the circular buffer in the user process and
|
|||
the use of this buffer.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
+ How to use CONFIG_PACKET_MMAP directly to improve transmission process
|
||||
+ How to use mmap() directly to improve transmission process
|
||||
--------------------------------------------------------------------------------
|
||||
Transmission process is similar to capture as shown below.
|
||||
|
||||
|
|
|
@ -14,13 +14,3 @@ config PACKET
|
|||
be called af_packet.
|
||||
|
||||
If unsure, say Y.
|
||||
|
||||
config PACKET_MMAP
|
||||
bool "Packet socket: mmapped IO"
|
||||
depends on PACKET
|
||||
help
|
||||
If you say Y here, the Packet protocol driver will use an IO
|
||||
mechanism that results in faster communication.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
|
|
|
@ -157,7 +157,6 @@ struct packet_mreq_max {
|
|||
unsigned char mr_address[MAX_ADDR_LEN];
|
||||
};
|
||||
|
||||
#ifdef CONFIG_PACKET_MMAP
|
||||
static int packet_set_ring(struct sock *sk, struct tpacket_req *req,
|
||||
int closing, int tx_ring);
|
||||
|
||||
|
@ -177,7 +176,6 @@ struct packet_ring_buffer {
|
|||
|
||||
struct packet_sock;
|
||||
static int tpacket_snd(struct packet_sock *po, struct msghdr *msg);
|
||||
#endif
|
||||
|
||||
static void packet_flush_mclist(struct sock *sk);
|
||||
|
||||
|
@ -185,11 +183,9 @@ struct packet_sock {
|
|||
/* struct sock has to be the first member of packet_sock */
|
||||
struct sock sk;
|
||||
struct tpacket_stats stats;
|
||||
#ifdef CONFIG_PACKET_MMAP
|
||||
struct packet_ring_buffer rx_ring;
|
||||
struct packet_ring_buffer tx_ring;
|
||||
int copy_thresh;
|
||||
#endif
|
||||
spinlock_t bind_lock;
|
||||
struct mutex pg_vec_lock;
|
||||
unsigned int running:1, /* prot_hook is attached*/
|
||||
|
@ -199,13 +195,11 @@ struct packet_sock {
|
|||
int ifindex; /* bound device */
|
||||
__be16 num;
|
||||
struct packet_mclist *mclist;
|
||||
#ifdef CONFIG_PACKET_MMAP
|
||||
atomic_t mapped;
|
||||
enum tpacket_versions tp_version;
|
||||
unsigned int tp_hdrlen;
|
||||
unsigned int tp_reserve;
|
||||
unsigned int tp_loss:1;
|
||||
#endif
|
||||
struct packet_type prot_hook ____cacheline_aligned_in_smp;
|
||||
};
|
||||
|
||||
|
@ -219,8 +213,6 @@ struct packet_skb_cb {
|
|||
|
||||
#define PACKET_SKB_CB(__skb) ((struct packet_skb_cb *)((__skb)->cb))
|
||||
|
||||
#ifdef CONFIG_PACKET_MMAP
|
||||
|
||||
static void __packet_set_status(struct packet_sock *po, void *frame, int status)
|
||||
{
|
||||
union {
|
||||
|
@ -315,8 +307,6 @@ static inline void packet_increment_head(struct packet_ring_buffer *buff)
|
|||
buff->head = buff->head != buff->frame_max ? buff->head+1 : 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static inline struct packet_sock *pkt_sk(struct sock *sk)
|
||||
{
|
||||
return (struct packet_sock *)sk;
|
||||
|
@ -640,7 +630,6 @@ drop:
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PACKET_MMAP
|
||||
static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
|
||||
struct packet_type *pt, struct net_device *orig_dev)
|
||||
{
|
||||
|
@ -1056,7 +1045,6 @@ out:
|
|||
mutex_unlock(&po->pg_vec_lock);
|
||||
return err;
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline struct sk_buff *packet_alloc_skb(struct sock *sk, size_t prepad,
|
||||
size_t reserve, size_t len,
|
||||
|
@ -1248,13 +1236,11 @@ out:
|
|||
static int packet_sendmsg(struct kiocb *iocb, struct socket *sock,
|
||||
struct msghdr *msg, size_t len)
|
||||
{
|
||||
#ifdef CONFIG_PACKET_MMAP
|
||||
struct sock *sk = sock->sk;
|
||||
struct packet_sock *po = pkt_sk(sk);
|
||||
if (po->tx_ring.pg_vec)
|
||||
return tpacket_snd(po, msg);
|
||||
else
|
||||
#endif
|
||||
return packet_snd(sock, msg, len);
|
||||
}
|
||||
|
||||
|
@ -1268,9 +1254,7 @@ static int packet_release(struct socket *sock)
|
|||
struct sock *sk = sock->sk;
|
||||
struct packet_sock *po;
|
||||
struct net *net;
|
||||
#ifdef CONFIG_PACKET_MMAP
|
||||
struct tpacket_req req;
|
||||
#endif
|
||||
|
||||
if (!sk)
|
||||
return 0;
|
||||
|
@ -1299,7 +1283,6 @@ static int packet_release(struct socket *sock)
|
|||
|
||||
packet_flush_mclist(sk);
|
||||
|
||||
#ifdef CONFIG_PACKET_MMAP
|
||||
memset(&req, 0, sizeof(req));
|
||||
|
||||
if (po->rx_ring.pg_vec)
|
||||
|
@ -1307,7 +1290,6 @@ static int packet_release(struct socket *sock)
|
|||
|
||||
if (po->tx_ring.pg_vec)
|
||||
packet_set_ring(sk, &req, 1, 1);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Now the socket is dead. No more input will appear.
|
||||
|
@ -1872,7 +1854,6 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv
|
|||
return ret;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PACKET_MMAP
|
||||
case PACKET_RX_RING:
|
||||
case PACKET_TX_RING:
|
||||
{
|
||||
|
@ -1943,7 +1924,6 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv
|
|||
po->tp_loss = !!val;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
case PACKET_AUXDATA:
|
||||
{
|
||||
int val;
|
||||
|
@ -2041,7 +2021,6 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
|
|||
|
||||
data = &val;
|
||||
break;
|
||||
#ifdef CONFIG_PACKET_MMAP
|
||||
case PACKET_VERSION:
|
||||
if (len > sizeof(int))
|
||||
len = sizeof(int);
|
||||
|
@ -2077,7 +2056,6 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
|
|||
val = po->tp_loss;
|
||||
data = &val;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
return -ENOPROTOOPT;
|
||||
}
|
||||
|
@ -2197,11 +2175,6 @@ static int packet_ioctl(struct socket *sock, unsigned int cmd,
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_PACKET_MMAP
|
||||
#define packet_mmap sock_no_mmap
|
||||
#define packet_poll datagram_poll
|
||||
#else
|
||||
|
||||
static unsigned int packet_poll(struct file *file, struct socket *sock,
|
||||
poll_table *wait)
|
||||
{
|
||||
|
@ -2483,8 +2456,6 @@ out:
|
|||
mutex_unlock(&po->pg_vec_lock);
|
||||
return err;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static const struct proto_ops packet_ops_spkt = {
|
||||
.family = PF_PACKET,
|
||||
|
|
Загрузка…
Ссылка в новой задаче