|
|
|
@ -574,7 +574,7 @@ |
|
|
|
|
+
|
|
|
|
|
--- a/drivers/net/Kconfig
|
|
|
|
|
+++ b/drivers/net/Kconfig
|
|
|
|
|
@@ -110,6 +110,129 @@
|
|
|
|
|
@@ -110,6 +110,129 @@ config EQUALIZER
|
|
|
|
|
To compile this driver as a module, choose M here: the module
|
|
|
|
|
will be called eql. If unsure, say N.
|
|
|
|
|
|
|
|
|
@ -706,7 +706,7 @@ |
|
|
|
|
select CRC32
|
|
|
|
|
--- a/drivers/net/Makefile
|
|
|
|
|
+++ b/drivers/net/Makefile
|
|
|
|
|
@@ -150,6 +150,7 @@
|
|
|
|
|
@@ -150,6 +150,7 @@ obj-$(CONFIG_SLHC) += slhc.o
|
|
|
|
|
obj-$(CONFIG_XEN_NETDEV_FRONTEND) += xen-netfront.o
|
|
|
|
|
|
|
|
|
|
obj-$(CONFIG_DUMMY) += dummy.o
|
|
|
|
@ -768,7 +768,7 @@ |
|
|
|
|
|
|
|
|
|
#define HAVE_ALLOC_SKB /* For the drivers to know */
|
|
|
|
|
#define HAVE_ALIGNABLE_SKB /* Ditto 8) */
|
|
|
|
|
@@ -282,6 +285,9 @@
|
|
|
|
|
@@ -282,6 +285,9 @@ struct sk_buff {
|
|
|
|
|
* first. This is owned by whoever has the skb queued ATM.
|
|
|
|
|
*/
|
|
|
|
|
char cb[48];
|
|
|
|
@ -778,7 +778,7 @@ |
|
|
|
|
|
|
|
|
|
unsigned int len,
|
|
|
|
|
data_len;
|
|
|
|
|
@@ -312,6 +318,9 @@
|
|
|
|
|
@@ -312,6 +318,9 @@ struct sk_buff {
|
|
|
|
|
struct nf_conntrack *nfct;
|
|
|
|
|
struct sk_buff *nfct_reasm;
|
|
|
|
|
#endif
|
|
|
|
@ -788,7 +788,7 @@ |
|
|
|
|
#ifdef CONFIG_BRIDGE_NETFILTER
|
|
|
|
|
struct nf_bridge_info *nf_bridge;
|
|
|
|
|
#endif
|
|
|
|
|
@@ -332,6 +341,9 @@
|
|
|
|
|
@@ -332,6 +341,9 @@ struct sk_buff {
|
|
|
|
|
__u8 requeue:1;
|
|
|
|
|
#endif
|
|
|
|
|
/* 0/13/14 bit hole */
|
|
|
|
@ -798,7 +798,7 @@ |
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_NET_DMA
|
|
|
|
|
dma_cookie_t dma_cookie;
|
|
|
|
|
@@ -372,6 +384,12 @@
|
|
|
|
|
@@ -372,6 +384,12 @@ extern void skb_dma_unmap(struct device
|
|
|
|
|
enum dma_data_direction dir);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
@ -811,7 +811,7 @@ |
|
|
|
|
extern void kfree_skb(struct sk_buff *skb);
|
|
|
|
|
extern void __kfree_skb(struct sk_buff *skb);
|
|
|
|
|
extern struct sk_buff *__alloc_skb(unsigned int size,
|
|
|
|
|
@@ -1844,6 +1862,10 @@
|
|
|
|
|
@@ -1844,6 +1862,10 @@ static inline void __nf_copy(struct sk_b
|
|
|
|
|
dst->nfct_reasm = src->nfct_reasm;
|
|
|
|
|
nf_conntrack_get_reasm(src->nfct_reasm);
|
|
|
|
|
#endif
|
|
|
|
@ -834,7 +834,7 @@ |
|
|
|
|
#include <linux/proc_fs.h>
|
|
|
|
|
#include <linux/seq_file.h>
|
|
|
|
|
#include <linux/stat.h>
|
|
|
|
|
@@ -1671,7 +1674,11 @@
|
|
|
|
|
@@ -1671,7 +1674,11 @@ int dev_hard_start_xmit(struct sk_buff *
|
|
|
|
|
|
|
|
|
|
prefetch(&dev->netdev_ops->ndo_start_xmit);
|
|
|
|
|
if (likely(!skb->next)) {
|
|
|
|
@ -847,7 +847,7 @@ |
|
|
|
|
dev_queue_xmit_nit(skb, dev);
|
|
|
|
|
|
|
|
|
|
if (netif_needs_gso(dev, skb)) {
|
|
|
|
|
@@ -1762,8 +1769,7 @@
|
|
|
|
|
@@ -1762,8 +1769,7 @@ static u16 simple_tx_hash(struct net_dev
|
|
|
|
|
return (u16) (((u64) hash * dev->real_num_tx_queues) >> 32);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -857,7 +857,7 @@ |
|
|
|
|
{
|
|
|
|
|
const struct net_device_ops *ops = dev->netdev_ops;
|
|
|
|
|
u16 queue_index = 0;
|
|
|
|
|
@@ -1776,6 +1782,7 @@
|
|
|
|
|
@@ -1776,6 +1782,7 @@ static struct netdev_queue *dev_pick_tx(
|
|
|
|
|
skb_set_queue_mapping(skb, queue_index);
|
|
|
|
|
return netdev_get_tx_queue(dev, queue_index);
|
|
|
|
|
}
|
|
|
|
@ -867,7 +867,7 @@ |
|
|
|
|
* dev_queue_xmit - transmit a buffer
|
|
|
|
|
--- a/include/linux/netdevice.h
|
|
|
|
|
+++ b/include/linux/netdevice.h
|
|
|
|
|
@@ -1071,6 +1071,7 @@
|
|
|
|
|
@@ -1071,6 +1071,7 @@ extern int dev_alloc_name(struct net_de
|
|
|
|
|
extern int dev_open(struct net_device *dev);
|
|
|
|
|
extern int dev_close(struct net_device *dev);
|
|
|
|
|
extern void dev_disable_lro(struct net_device *dev);
|
|
|
|
@ -889,7 +889,7 @@ |
|
|
|
|
+
|
|
|
|
|
--- a/include/net/netfilter/nf_queue.h
|
|
|
|
|
+++ b/include/net/netfilter/nf_queue.h
|
|
|
|
|
@@ -13,6 +13,12 @@
|
|
|
|
|
@@ -13,6 +13,12 @@ struct nf_queue_entry {
|
|
|
|
|
struct net_device *indev;
|
|
|
|
|
struct net_device *outdev;
|
|
|
|
|
int (*okfn)(struct sk_buff *);
|
|
|
|
@ -902,7 +902,7 @@ |
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#define nf_queue_entry_reroute(x) ((void *)x + sizeof(struct nf_queue_entry))
|
|
|
|
|
@@ -30,5 +36,11 @@
|
|
|
|
|
@@ -30,5 +36,11 @@ extern int nf_unregister_queue_handler(u
|
|
|
|
|
const struct nf_queue_handler *qh);
|
|
|
|
|
extern void nf_unregister_queue_handlers(const struct nf_queue_handler *qh);
|
|
|
|
|
extern void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict);
|
|
|
|
@ -926,7 +926,7 @@ |
|
|
|
|
|
|
|
|
|
static void sock_pipe_buf_release(struct pipe_inode_info *pipe,
|
|
|
|
|
struct pipe_buffer *buf)
|
|
|
|
|
@@ -88,6 +91,80 @@
|
|
|
|
|
@@ -88,6 +91,80 @@ static int sock_pipe_buf_steal(struct pi
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1007,7 +1007,7 @@ |
|
|
|
|
|
|
|
|
|
/* Pipe buffer operations for a socket. */
|
|
|
|
|
static struct pipe_buf_operations sock_pipe_buf_ops = {
|
|
|
|
|
@@ -381,6 +458,15 @@
|
|
|
|
|
@@ -381,6 +458,15 @@ static void skb_release_head_state(struc
|
|
|
|
|
WARN_ON(in_irq());
|
|
|
|
|
skb->destructor(skb);
|
|
|
|
|
}
|
|
|
|
@ -1023,7 +1023,7 @@ |
|
|
|
|
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
|
|
|
|
|
nf_conntrack_put(skb->nfct);
|
|
|
|
|
nf_conntrack_put_reasm(skb->nfct_reasm);
|
|
|
|
|
@@ -493,6 +579,9 @@
|
|
|
|
|
@@ -493,6 +579,9 @@ static void __copy_skb_header(struct sk_
|
|
|
|
|
new->sp = secpath_get(old->sp);
|
|
|
|
|
#endif
|
|
|
|
|
memcpy(new->cb, old->cb, sizeof(old->cb));
|
|
|
|
@ -1033,7 +1033,7 @@ |
|
|
|
|
new->csum_start = old->csum_start;
|
|
|
|
|
new->csum_offset = old->csum_offset;
|
|
|
|
|
new->local_df = old->local_df;
|
|
|
|
|
@@ -2664,6 +2753,13 @@
|
|
|
|
|
@@ -2664,6 +2753,13 @@ void __init skb_init(void)
|
|
|
|
|
0,
|
|
|
|
|
SLAB_HWCACHE_ALIGN|SLAB_PANIC,
|
|
|
|
|
NULL);
|
|
|
|
@ -1049,7 +1049,7 @@ |
|
|
|
|
/**
|
|
|
|
|
--- a/net/netfilter/Kconfig
|
|
|
|
|
+++ b/net/netfilter/Kconfig
|
|
|
|
|
@@ -357,6 +357,18 @@
|
|
|
|
|
@@ -357,6 +357,18 @@ config NETFILTER_XT_TARGET_DSCP
|
|
|
|
|
|
|
|
|
|
To compile it as a module, choose M here. If unsure, say N.
|
|
|
|
|
|
|
|
|
@ -1070,7 +1070,7 @@ |
|
|
|
|
default m if NETFILTER_ADVANCED=n
|
|
|
|
|
--- a/net/netfilter/Makefile
|
|
|
|
|
+++ b/net/netfilter/Makefile
|
|
|
|
|
@@ -45,6 +45,7 @@
|
|
|
|
|
@@ -45,6 +45,7 @@ obj-$(CONFIG_NETFILTER_XT_TARGET_CLASSIF
|
|
|
|
|
obj-$(CONFIG_NETFILTER_XT_TARGET_CONNMARK) += xt_CONNMARK.o
|
|
|
|
|
obj-$(CONFIG_NETFILTER_XT_TARGET_CONNSECMARK) += xt_CONNSECMARK.o
|
|
|
|
|
obj-$(CONFIG_NETFILTER_XT_TARGET_DSCP) += xt_DSCP.o
|
|
|
|
@ -1080,7 +1080,7 @@ |
|
|
|
|
obj-$(CONFIG_NETFILTER_XT_TARGET_NFQUEUE) += xt_NFQUEUE.o
|
|
|
|
|
--- a/net/netfilter/nf_queue.c
|
|
|
|
|
+++ b/net/netfilter/nf_queue.c
|
|
|
|
|
@@ -20,6 +20,26 @@
|
|
|
|
|
@@ -20,6 +20,26 @@ static const struct nf_queue_handler *qu
|
|
|
|
|
|
|
|
|
|
static DEFINE_MUTEX(queue_handler_mutex);
|
|
|
|
|
|
|
|
|
@ -1107,7 +1107,7 @@ |
|
|
|
|
/* return EBUSY when somebody else is registered, return EEXIST if the
|
|
|
|
|
* same handler is registered, return 0 in case of success. */
|
|
|
|
|
int nf_register_queue_handler(u_int8_t pf, const struct nf_queue_handler *qh)
|
|
|
|
|
@@ -80,7 +100,7 @@
|
|
|
|
|
@@ -80,7 +100,7 @@ void nf_unregister_queue_handlers(const
|
|
|
|
|
}
|
|
|
|
|
EXPORT_SYMBOL_GPL(nf_unregister_queue_handlers);
|
|
|
|
|
|
|
|
|
@ -1116,7 +1116,7 @@ |
|
|
|
|
{
|
|
|
|
|
/* Release those devices we held, or Alexey will kill me. */
|
|
|
|
|
if (entry->indev)
|
|
|
|
|
@@ -100,6 +120,7 @@
|
|
|
|
|
@@ -100,6 +120,7 @@ static void nf_queue_entry_release_refs(
|
|
|
|
|
/* Drop reference to owner of hook which queued us. */
|
|
|
|
|
module_put(entry->elem->owner);
|
|
|
|
|
}
|
|
|
|
@ -1124,7 +1124,7 @@ |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Any packet that leaves via this function must come back
|
|
|
|
|
@@ -121,12 +142,26 @@
|
|
|
|
|
@@ -121,12 +142,26 @@ static int __nf_queue(struct sk_buff *sk
|
|
|
|
|
#endif
|
|
|
|
|
const struct nf_afinfo *afinfo;
|
|
|
|
|
const struct nf_queue_handler *qh;
|
|
|
|
@ -1151,7 +1151,7 @@ |
|
|
|
|
goto err_unlock;
|
|
|
|
|
|
|
|
|
|
afinfo = nf_get_afinfo(pf);
|
|
|
|
|
@@ -145,6 +180,10 @@
|
|
|
|
|
@@ -145,6 +180,10 @@ static int __nf_queue(struct sk_buff *sk
|
|
|
|
|
.indev = indev,
|
|
|
|
|
.outdev = outdev,
|
|
|
|
|
.okfn = okfn,
|
|
|
|
@ -1162,7 +1162,7 @@ |
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* If it's going away, ignore hook. */
|
|
|
|
|
@@ -170,8 +209,19 @@
|
|
|
|
|
@@ -170,8 +209,19 @@ static int __nf_queue(struct sk_buff *sk
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
afinfo->saveroute(skb, entry);
|
|
|
|
|