You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
This commit is contained in:
@@ -31,16 +31,19 @@
|
||||
#include <linux/connector.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
static void cn_queue_wrapper(void *data)
|
||||
void cn_queue_wrapper(void *data)
|
||||
{
|
||||
struct cn_callback_entry *cbq = data;
|
||||
struct cn_callback_data *d = data;
|
||||
|
||||
cbq->cb->callback(cbq->cb->priv);
|
||||
cbq->destruct_data(cbq->ddata);
|
||||
cbq->ddata = NULL;
|
||||
d->callback(d->callback_priv);
|
||||
|
||||
d->destruct_data(d->ddata);
|
||||
d->ddata = NULL;
|
||||
|
||||
kfree(d->free);
|
||||
}
|
||||
|
||||
static struct cn_callback_entry *cn_queue_alloc_callback_entry(struct cn_callback *cb)
|
||||
static struct cn_callback_entry *cn_queue_alloc_callback_entry(char *name, struct cb_id *id, void (*callback)(void *))
|
||||
{
|
||||
struct cn_callback_entry *cbq;
|
||||
|
||||
@@ -50,8 +53,11 @@ static struct cn_callback_entry *cn_queue_alloc_callback_entry(struct cn_callbac
|
||||
return NULL;
|
||||
}
|
||||
|
||||
cbq->cb = cb;
|
||||
INIT_WORK(&cbq->work, &cn_queue_wrapper, cbq);
|
||||
snprintf(cbq->id.name, sizeof(cbq->id.name), "%s", name);
|
||||
memcpy(&cbq->id.id, id, sizeof(struct cb_id));
|
||||
cbq->data.callback = callback;
|
||||
|
||||
INIT_WORK(&cbq->work, &cn_queue_wrapper, &cbq->data);
|
||||
return cbq;
|
||||
}
|
||||
|
||||
@@ -68,12 +74,12 @@ int cn_cb_equal(struct cb_id *i1, struct cb_id *i2)
|
||||
return ((i1->idx == i2->idx) && (i1->val == i2->val));
|
||||
}
|
||||
|
||||
int cn_queue_add_callback(struct cn_queue_dev *dev, struct cn_callback *cb)
|
||||
int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id, void (*callback)(void *))
|
||||
{
|
||||
struct cn_callback_entry *cbq, *__cbq;
|
||||
int found = 0;
|
||||
|
||||
cbq = cn_queue_alloc_callback_entry(cb);
|
||||
cbq = cn_queue_alloc_callback_entry(name, id, callback);
|
||||
if (!cbq)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -82,7 +88,7 @@ int cn_queue_add_callback(struct cn_queue_dev *dev, struct cn_callback *cb)
|
||||
|
||||
spin_lock_bh(&dev->queue_lock);
|
||||
list_for_each_entry(__cbq, &dev->queue_list, callback_entry) {
|
||||
if (cn_cb_equal(&__cbq->cb->id, &cb->id)) {
|
||||
if (cn_cb_equal(&__cbq->id.id, id)) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
@@ -99,7 +105,7 @@ int cn_queue_add_callback(struct cn_queue_dev *dev, struct cn_callback *cb)
|
||||
|
||||
cbq->nls = dev->nls;
|
||||
cbq->seq = 0;
|
||||
cbq->group = cbq->cb->id.idx;
|
||||
cbq->group = cbq->id.id.idx;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -111,7 +117,7 @@ void cn_queue_del_callback(struct cn_queue_dev *dev, struct cb_id *id)
|
||||
|
||||
spin_lock_bh(&dev->queue_lock);
|
||||
list_for_each_entry_safe(cbq, n, &dev->queue_list, callback_entry) {
|
||||
if (cn_cb_equal(&cbq->cb->id, id)) {
|
||||
if (cn_cb_equal(&cbq->id.id, id)) {
|
||||
list_del(&cbq->callback_entry);
|
||||
found = 1;
|
||||
break;
|
||||
|
||||
@@ -84,7 +84,7 @@ int cn_netlink_send(struct cn_msg *msg, u32 __group, int gfp_mask)
|
||||
spin_lock_bh(&dev->cbdev->queue_lock);
|
||||
list_for_each_entry(__cbq, &dev->cbdev->queue_list,
|
||||
callback_entry) {
|
||||
if (cn_cb_equal(&__cbq->cb->id, &msg->id)) {
|
||||
if (cn_cb_equal(&__cbq->id.id, &msg->id)) {
|
||||
found = 1;
|
||||
group = __cbq->group;
|
||||
}
|
||||
@@ -127,42 +127,56 @@ static int cn_call_callback(struct cn_msg *msg, void (*destruct_data)(void *), v
|
||||
{
|
||||
struct cn_callback_entry *__cbq;
|
||||
struct cn_dev *dev = &cdev;
|
||||
int found = 0;
|
||||
int err = -ENODEV;
|
||||
|
||||
spin_lock_bh(&dev->cbdev->queue_lock);
|
||||
list_for_each_entry(__cbq, &dev->cbdev->queue_list, callback_entry) {
|
||||
if (cn_cb_equal(&__cbq->cb->id, &msg->id)) {
|
||||
/*
|
||||
* Let's scream if there is some magic and the
|
||||
* data will arrive asynchronously here.
|
||||
* [i.e. netlink messages will be queued].
|
||||
* After the first warning I will fix it
|
||||
* quickly, but now I think it is
|
||||
* impossible. --zbr (2004_04_27).
|
||||
*/
|
||||
if (cn_cb_equal(&__cbq->id.id, &msg->id)) {
|
||||
if (likely(!test_bit(0, &__cbq->work.pending) &&
|
||||
__cbq->ddata == NULL)) {
|
||||
__cbq->cb->priv = msg;
|
||||
__cbq->data.ddata == NULL)) {
|
||||
__cbq->data.callback_priv = msg;
|
||||
|
||||
__cbq->ddata = data;
|
||||
__cbq->destruct_data = destruct_data;
|
||||
__cbq->data.ddata = data;
|
||||
__cbq->data.destruct_data = destruct_data;
|
||||
|
||||
if (queue_work(dev->cbdev->cn_queue,
|
||||
&__cbq->work))
|
||||
found = 1;
|
||||
err = 0;
|
||||
} else {
|
||||
printk("%s: cbq->data=%p, "
|
||||
"work->pending=%08lx.\n",
|
||||
__func__, __cbq->ddata,
|
||||
__cbq->work.pending);
|
||||
WARN_ON(1);
|
||||
struct work_struct *w;
|
||||
struct cn_callback_data *d;
|
||||
|
||||
w = kzalloc(sizeof(*w) + sizeof(*d), GFP_ATOMIC);
|
||||
if (w) {
|
||||
d = (struct cn_callback_data *)(w+1);
|
||||
|
||||
d->callback_priv = msg;
|
||||
d->callback = __cbq->data.callback;
|
||||
d->ddata = data;
|
||||
d->destruct_data = destruct_data;
|
||||
d->free = w;
|
||||
|
||||
INIT_LIST_HEAD(&w->entry);
|
||||
w->pending = 0;
|
||||
w->func = &cn_queue_wrapper;
|
||||
w->data = d;
|
||||
init_timer(&w->timer);
|
||||
|
||||
if (queue_work(dev->cbdev->cn_queue, w))
|
||||
err = 0;
|
||||
else {
|
||||
kfree(w);
|
||||
err = -EINVAL;
|
||||
}
|
||||
} else
|
||||
err = -ENOMEM;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
spin_unlock_bh(&dev->cbdev->queue_lock);
|
||||
|
||||
return found ? 0 : -ENODEV;
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -291,22 +305,10 @@ int cn_add_callback(struct cb_id *id, char *name, void (*callback)(void *))
|
||||
{
|
||||
int err;
|
||||
struct cn_dev *dev = &cdev;
|
||||
struct cn_callback *cb;
|
||||
|
||||
cb = kzalloc(sizeof(*cb), GFP_KERNEL);
|
||||
if (!cb)
|
||||
return -ENOMEM;
|
||||
|
||||
scnprintf(cb->name, sizeof(cb->name), "%s", name);
|
||||
|
||||
memcpy(&cb->id, id, sizeof(cb->id));
|
||||
cb->callback = callback;
|
||||
|
||||
err = cn_queue_add_callback(dev->cbdev, cb);
|
||||
if (err) {
|
||||
kfree(cb);
|
||||
err = cn_queue_add_callback(dev->cbdev, name, id, callback);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
cn_notify(id, 0);
|
||||
|
||||
|
||||
@@ -104,12 +104,19 @@ struct cn_queue_dev {
|
||||
struct sock *nls;
|
||||
};
|
||||
|
||||
struct cn_callback {
|
||||
struct cn_callback_id {
|
||||
unsigned char name[CN_CBQ_NAMELEN];
|
||||
|
||||
struct cb_id id;
|
||||
};
|
||||
|
||||
struct cn_callback_data {
|
||||
void (*destruct_data) (void *);
|
||||
void *ddata;
|
||||
|
||||
void *callback_priv;
|
||||
void (*callback) (void *);
|
||||
void *priv;
|
||||
|
||||
void *free;
|
||||
};
|
||||
|
||||
struct cn_callback_entry {
|
||||
@@ -118,8 +125,8 @@ struct cn_callback_entry {
|
||||
struct work_struct work;
|
||||
struct cn_queue_dev *pdev;
|
||||
|
||||
void (*destruct_data) (void *);
|
||||
void *ddata;
|
||||
struct cn_callback_id id;
|
||||
struct cn_callback_data data;
|
||||
|
||||
int seq, group;
|
||||
struct sock *nls;
|
||||
@@ -144,7 +151,7 @@ int cn_add_callback(struct cb_id *, char *, void (*callback) (void *));
|
||||
void cn_del_callback(struct cb_id *);
|
||||
int cn_netlink_send(struct cn_msg *, u32, int);
|
||||
|
||||
int cn_queue_add_callback(struct cn_queue_dev *dev, struct cn_callback *cb);
|
||||
int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id, void (*callback)(void *));
|
||||
void cn_queue_del_callback(struct cn_queue_dev *dev, struct cb_id *id);
|
||||
|
||||
struct cn_queue_dev *cn_queue_alloc_dev(char *name, struct sock *);
|
||||
@@ -152,6 +159,8 @@ void cn_queue_free_dev(struct cn_queue_dev *dev);
|
||||
|
||||
int cn_cb_equal(struct cb_id *, struct cb_id *);
|
||||
|
||||
void cn_queue_wrapper(void *data);
|
||||
|
||||
extern int cn_already_initialized;
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
@@ -5,16 +5,14 @@
|
||||
|
||||
/* This header used to share core functionality between the standalone
|
||||
NAT module, and the compatibility layer's use of NAT for masquerading. */
|
||||
extern int ip_nat_init(void);
|
||||
extern void ip_nat_cleanup(void);
|
||||
|
||||
extern unsigned int nat_packet(struct ip_conntrack *ct,
|
||||
extern unsigned int ip_nat_packet(struct ip_conntrack *ct,
|
||||
enum ip_conntrack_info conntrackinfo,
|
||||
unsigned int hooknum,
|
||||
struct sk_buff **pskb);
|
||||
|
||||
extern int icmp_reply_translation(struct sk_buff **pskb,
|
||||
struct ip_conntrack *ct,
|
||||
enum ip_nat_manip_type manip,
|
||||
enum ip_conntrack_dir dir);
|
||||
extern int ip_nat_icmp_reply_translation(struct sk_buff **pskb,
|
||||
struct ip_conntrack *ct,
|
||||
enum ip_nat_manip_type manip,
|
||||
enum ip_conntrack_dir dir);
|
||||
#endif /* _IP_NAT_CORE_H */
|
||||
|
||||
+25
-1
@@ -202,7 +202,8 @@ enum
|
||||
NET_TR=14,
|
||||
NET_DECNET=15,
|
||||
NET_ECONET=16,
|
||||
NET_SCTP=17,
|
||||
NET_SCTP=17,
|
||||
NET_LLC=18,
|
||||
};
|
||||
|
||||
/* /proc/sys/kernel/random */
|
||||
@@ -522,6 +523,29 @@ enum {
|
||||
NET_IPX_FORWARDING=2
|
||||
};
|
||||
|
||||
/* /proc/sys/net/llc */
|
||||
enum {
|
||||
NET_LLC2=1,
|
||||
NET_LLC_STATION=2,
|
||||
};
|
||||
|
||||
/* /proc/sys/net/llc/llc2 */
|
||||
enum {
|
||||
NET_LLC2_TIMEOUT=1,
|
||||
};
|
||||
|
||||
/* /proc/sys/net/llc/station */
|
||||
enum {
|
||||
NET_LLC_STATION_ACK_TIMEOUT=1,
|
||||
};
|
||||
|
||||
/* /proc/sys/net/llc/llc2/timeout */
|
||||
enum {
|
||||
NET_LLC2_ACK_TIMEOUT=1,
|
||||
NET_LLC2_P_TIMEOUT=2,
|
||||
NET_LLC2_REJ_TIMEOUT=3,
|
||||
NET_LLC2_BUSY_TIMEOUT=4,
|
||||
};
|
||||
|
||||
/* /proc/sys/net/appletalk */
|
||||
enum {
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
#include <linux/list.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
|
||||
struct net_device;
|
||||
struct packet_type;
|
||||
struct sk_buff;
|
||||
@@ -44,6 +46,7 @@ struct llc_sap {
|
||||
unsigned char state;
|
||||
unsigned char p_bit;
|
||||
unsigned char f_bit;
|
||||
atomic_t refcnt;
|
||||
int (*rcv_func)(struct sk_buff *skb,
|
||||
struct net_device *dev,
|
||||
struct packet_type *pt,
|
||||
@@ -81,13 +84,27 @@ extern struct llc_sap *llc_sap_open(unsigned char lsap,
|
||||
struct net_device *dev,
|
||||
struct packet_type *pt,
|
||||
struct net_device *orig_dev));
|
||||
static inline void llc_sap_hold(struct llc_sap *sap)
|
||||
{
|
||||
atomic_inc(&sap->refcnt);
|
||||
}
|
||||
|
||||
extern void llc_sap_close(struct llc_sap *sap);
|
||||
|
||||
static inline void llc_sap_put(struct llc_sap *sap)
|
||||
{
|
||||
if (atomic_dec_and_test(&sap->refcnt))
|
||||
llc_sap_close(sap);
|
||||
}
|
||||
|
||||
extern struct llc_sap *llc_sap_find(unsigned char sap_value);
|
||||
|
||||
extern int llc_build_and_send_ui_pkt(struct llc_sap *sap, struct sk_buff *skb,
|
||||
unsigned char *dmac, unsigned char dsap);
|
||||
|
||||
extern void llc_sap_handler(struct llc_sap *sap, struct sk_buff *skb);
|
||||
extern void llc_conn_handler(struct llc_sap *sap, struct sk_buff *skb);
|
||||
|
||||
extern int llc_station_init(void);
|
||||
extern void llc_station_exit(void);
|
||||
|
||||
@@ -98,4 +115,17 @@ extern void llc_proc_exit(void);
|
||||
#define llc_proc_init() (0)
|
||||
#define llc_proc_exit() do { } while(0)
|
||||
#endif /* CONFIG_PROC_FS */
|
||||
#ifdef CONFIG_SYSCTL
|
||||
extern int llc_sysctl_init(void);
|
||||
extern void llc_sysctl_exit(void);
|
||||
|
||||
extern int sysctl_llc2_ack_timeout;
|
||||
extern int sysctl_llc2_busy_timeout;
|
||||
extern int sysctl_llc2_p_timeout;
|
||||
extern int sysctl_llc2_rej_timeout;
|
||||
extern int sysctl_llc_station_ack_timeout;
|
||||
#else
|
||||
#define llc_sysctl_init() (0)
|
||||
#define llc_sysctl_exit() do { } while(0)
|
||||
#endif /* CONFIG_SYSCTL */
|
||||
#endif /* LLC_H */
|
||||
|
||||
@@ -19,14 +19,14 @@
|
||||
#define LLC_EVENT 1
|
||||
#define LLC_PACKET 2
|
||||
|
||||
#define LLC_P_TIME 2
|
||||
#define LLC_ACK_TIME 1
|
||||
#define LLC_REJ_TIME 3
|
||||
#define LLC_BUSY_TIME 3
|
||||
#define LLC2_P_TIME 2
|
||||
#define LLC2_ACK_TIME 1
|
||||
#define LLC2_REJ_TIME 3
|
||||
#define LLC2_BUSY_TIME 3
|
||||
|
||||
struct llc_timer {
|
||||
struct timer_list timer;
|
||||
u16 expire; /* timer expire time */
|
||||
unsigned long expire; /* timer expire time */
|
||||
};
|
||||
|
||||
struct llc_sock {
|
||||
@@ -38,6 +38,7 @@ struct llc_sock {
|
||||
struct llc_addr laddr; /* lsap/mac pair */
|
||||
struct llc_addr daddr; /* dsap/mac pair */
|
||||
struct net_device *dev; /* device to send to remote */
|
||||
u32 copied_seq; /* head of yet unread data */
|
||||
u8 retry_count; /* number of retries */
|
||||
u8 ack_must_be_send;
|
||||
u8 first_pdu_Ns;
|
||||
@@ -92,7 +93,8 @@ static __inline__ char llc_backlog_type(struct sk_buff *skb)
|
||||
return skb->cb[sizeof(skb->cb) - 1];
|
||||
}
|
||||
|
||||
extern struct sock *llc_sk_alloc(int family, int priority, struct proto *prot);
|
||||
extern struct sock *llc_sk_alloc(int family, unsigned int __nocast priority,
|
||||
struct proto *prot);
|
||||
extern void llc_sk_free(struct sock *sk);
|
||||
|
||||
extern void llc_sk_reset(struct sock *sk);
|
||||
@@ -115,5 +117,4 @@ extern void llc_sap_remove_socket(struct llc_sap *sap, struct sock *sk);
|
||||
|
||||
extern u8 llc_data_accept_state(u8 state);
|
||||
extern void llc_build_offset_table(void);
|
||||
extern int llc_release_sockets(struct llc_sap *sap);
|
||||
#endif /* LLC_CONN_H */
|
||||
|
||||
@@ -12,11 +12,15 @@
|
||||
* See the GNU General Public License for more details.
|
||||
*/
|
||||
struct llc_sap;
|
||||
struct net_device;
|
||||
struct sk_buff;
|
||||
struct sock;
|
||||
|
||||
extern void llc_sap_rtn_pdu(struct llc_sap *sap, struct sk_buff *skb);
|
||||
extern void llc_save_primitive(struct sk_buff* skb, unsigned char prim);
|
||||
extern struct sk_buff *llc_alloc_frame(void);
|
||||
extern void llc_save_primitive(struct sock *sk, struct sk_buff* skb,
|
||||
unsigned char prim);
|
||||
extern struct sk_buff *llc_alloc_frame(struct sock *sk,
|
||||
struct net_device *dev);
|
||||
|
||||
extern void llc_build_and_send_test_pkt(struct llc_sap *sap,
|
||||
struct sk_buff *skb,
|
||||
|
||||
+1
-1
@@ -56,7 +56,7 @@ struct datalink_proto *register_8022_client(unsigned char type,
|
||||
|
||||
void unregister_8022_client(struct datalink_proto *proto)
|
||||
{
|
||||
llc_sap_close(proto->sap);
|
||||
llc_sap_put(proto->sap);
|
||||
kfree(proto);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -106,7 +106,7 @@ module_init(snap_init);
|
||||
|
||||
static void __exit snap_exit(void)
|
||||
{
|
||||
llc_sap_close(snap_sap);
|
||||
llc_sap_put(snap_sap);
|
||||
}
|
||||
|
||||
module_exit(snap_exit);
|
||||
|
||||
+1
-1
@@ -238,7 +238,7 @@ unsigned short tr_type_trans(struct sk_buff *skb, struct net_device *dev)
|
||||
return trllc->ethertype;
|
||||
}
|
||||
|
||||
return ntohs(ETH_P_802_2);
|
||||
return ntohs(ETH_P_TR_802_2);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -574,6 +574,8 @@ struct net_device *dev_getbyhwaddr(unsigned short type, char *ha)
|
||||
return dev;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(dev_getbyhwaddr);
|
||||
|
||||
struct net_device *dev_getfirstbyhwtype(unsigned short type)
|
||||
{
|
||||
struct net_device *dev;
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
|
||||
# objects for the standalone - connection tracking / NAT
|
||||
ip_conntrack-objs := ip_conntrack_standalone.o ip_conntrack_core.o ip_conntrack_proto_generic.o ip_conntrack_proto_tcp.o ip_conntrack_proto_udp.o ip_conntrack_proto_icmp.o
|
||||
iptable_nat-objs := ip_nat_standalone.o ip_nat_rule.o ip_nat_core.o ip_nat_helper.o ip_nat_proto_unknown.o ip_nat_proto_tcp.o ip_nat_proto_udp.o ip_nat_proto_icmp.o
|
||||
ip_nat-objs := ip_nat_core.o ip_nat_helper.o ip_nat_proto_unknown.o ip_nat_proto_tcp.o ip_nat_proto_udp.o ip_nat_proto_icmp.o
|
||||
iptable_nat-objs := ip_nat_rule.o ip_nat_standalone.o
|
||||
|
||||
ip_conntrack_pptp-objs := ip_conntrack_helper_pptp.o ip_conntrack_proto_gre.o
|
||||
ip_nat_pptp-objs := ip_nat_helper_pptp.o ip_nat_proto_gre.o
|
||||
@@ -40,7 +41,7 @@ obj-$(CONFIG_IP_NF_IPTABLES) += ip_tables.o
|
||||
# the three instances of ip_tables
|
||||
obj-$(CONFIG_IP_NF_FILTER) += iptable_filter.o
|
||||
obj-$(CONFIG_IP_NF_MANGLE) += iptable_mangle.o
|
||||
obj-$(CONFIG_IP_NF_NAT) += iptable_nat.o
|
||||
obj-$(CONFIG_IP_NF_NAT) += iptable_nat.o ip_nat.o
|
||||
obj-$(CONFIG_IP_NF_RAW) += iptable_raw.o
|
||||
|
||||
# matches
|
||||
|
||||
@@ -74,12 +74,14 @@ ip_nat_proto_find_get(u_int8_t protonum)
|
||||
|
||||
return p;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ip_nat_proto_find_get);
|
||||
|
||||
void
|
||||
ip_nat_proto_put(struct ip_nat_protocol *p)
|
||||
{
|
||||
module_put(p->me);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ip_nat_proto_put);
|
||||
|
||||
/* We keep an extra hash for each conntrack, for fast searching. */
|
||||
static inline unsigned int
|
||||
@@ -111,6 +113,7 @@ ip_nat_cheat_check(u_int32_t oldvalinv, u_int32_t newval, u_int16_t oldcheck)
|
||||
return csum_fold(csum_partial((char *)diffs, sizeof(diffs),
|
||||
oldcheck^0xFFFF));
|
||||
}
|
||||
EXPORT_SYMBOL(ip_nat_cheat_check);
|
||||
|
||||
/* Is this tuple already taken? (not by us) */
|
||||
int
|
||||
@@ -127,6 +130,7 @@ ip_nat_used_tuple(const struct ip_conntrack_tuple *tuple,
|
||||
invert_tuplepr(&reply, tuple);
|
||||
return ip_conntrack_tuple_taken(&reply, ignored_conntrack);
|
||||
}
|
||||
EXPORT_SYMBOL(ip_nat_used_tuple);
|
||||
|
||||
/* If we source map this tuple so reply looks like reply_tuple, will
|
||||
* that meet the constraints of range. */
|
||||
@@ -347,6 +351,7 @@ ip_nat_setup_info(struct ip_conntrack *conntrack,
|
||||
|
||||
return NF_ACCEPT;
|
||||
}
|
||||
EXPORT_SYMBOL(ip_nat_setup_info);
|
||||
|
||||
/* Returns true if succeeded. */
|
||||
static int
|
||||
@@ -387,10 +392,10 @@ manip_pkt(u_int16_t proto,
|
||||
}
|
||||
|
||||
/* Do packet manipulations according to ip_nat_setup_info. */
|
||||
unsigned int nat_packet(struct ip_conntrack *ct,
|
||||
enum ip_conntrack_info ctinfo,
|
||||
unsigned int hooknum,
|
||||
struct sk_buff **pskb)
|
||||
unsigned int ip_nat_packet(struct ip_conntrack *ct,
|
||||
enum ip_conntrack_info ctinfo,
|
||||
unsigned int hooknum,
|
||||
struct sk_buff **pskb)
|
||||
{
|
||||
enum ip_conntrack_dir dir = CTINFO2DIR(ctinfo);
|
||||
unsigned long statusbit;
|
||||
@@ -417,12 +422,13 @@ unsigned int nat_packet(struct ip_conntrack *ct,
|
||||
}
|
||||
return NF_ACCEPT;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ip_nat_packet);
|
||||
|
||||
/* Dir is direction ICMP is coming from (opposite to packet it contains) */
|
||||
int icmp_reply_translation(struct sk_buff **pskb,
|
||||
struct ip_conntrack *ct,
|
||||
enum ip_nat_manip_type manip,
|
||||
enum ip_conntrack_dir dir)
|
||||
int ip_nat_icmp_reply_translation(struct sk_buff **pskb,
|
||||
struct ip_conntrack *ct,
|
||||
enum ip_nat_manip_type manip,
|
||||
enum ip_conntrack_dir dir)
|
||||
{
|
||||
struct {
|
||||
struct icmphdr icmp;
|
||||
@@ -509,6 +515,7 @@ int icmp_reply_translation(struct sk_buff **pskb,
|
||||
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ip_nat_icmp_reply_translation);
|
||||
|
||||
/* Protocol registration. */
|
||||
int ip_nat_protocol_register(struct ip_nat_protocol *proto)
|
||||
@@ -525,6 +532,7 @@ int ip_nat_protocol_register(struct ip_nat_protocol *proto)
|
||||
write_unlock_bh(&ip_nat_lock);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(ip_nat_protocol_register);
|
||||
|
||||
/* Noone stores the protocol anywhere; simply delete it. */
|
||||
void ip_nat_protocol_unregister(struct ip_nat_protocol *proto)
|
||||
@@ -536,6 +544,7 @@ void ip_nat_protocol_unregister(struct ip_nat_protocol *proto)
|
||||
/* Someone could be still looking at the proto in a bh. */
|
||||
synchronize_net();
|
||||
}
|
||||
EXPORT_SYMBOL(ip_nat_protocol_unregister);
|
||||
|
||||
#if defined(CONFIG_IP_NF_CONNTRACK_NETLINK) || \
|
||||
defined(CONFIG_IP_NF_CONNTRACK_NETLINK_MODULE)
|
||||
@@ -582,7 +591,7 @@ EXPORT_SYMBOL_GPL(ip_nat_port_nfattr_to_range);
|
||||
EXPORT_SYMBOL_GPL(ip_nat_port_range_to_nfattr);
|
||||
#endif
|
||||
|
||||
int __init ip_nat_init(void)
|
||||
static int __init ip_nat_init(void)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
@@ -624,10 +633,14 @@ static int clean_nat(struct ip_conntrack *i, void *data)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Not __exit: called from ip_nat_standalone.c:init_or_cleanup() --RR */
|
||||
void ip_nat_cleanup(void)
|
||||
static void __exit ip_nat_cleanup(void)
|
||||
{
|
||||
ip_ct_iterate_cleanup(&clean_nat, NULL);
|
||||
ip_conntrack_destroyed = NULL;
|
||||
vfree(bysource);
|
||||
}
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
module_init(ip_nat_init);
|
||||
module_exit(ip_nat_cleanup);
|
||||
|
||||
@@ -199,6 +199,7 @@ ip_nat_mangle_tcp_packet(struct sk_buff **pskb,
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL(ip_nat_mangle_tcp_packet);
|
||||
|
||||
/* Generic function for mangling variable-length address changes inside
|
||||
* NATed UDP connections (like the CONNECT DATA XXXXX MESG XXXXX INDEX XXXXX
|
||||
@@ -256,6 +257,7 @@ ip_nat_mangle_udp_packet(struct sk_buff **pskb,
|
||||
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL(ip_nat_mangle_udp_packet);
|
||||
|
||||
/* Adjust one found SACK option including checksum correction */
|
||||
static void
|
||||
@@ -399,6 +401,7 @@ ip_nat_seq_adjust(struct sk_buff **pskb,
|
||||
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL(ip_nat_seq_adjust);
|
||||
|
||||
/* Setup NAT on this expected conntrack so it follows master. */
|
||||
/* If we fail to get a free NAT slot, we'll get dropped on confirm */
|
||||
@@ -425,3 +428,4 @@ void ip_nat_follow_master(struct ip_conntrack *ct,
|
||||
/* hook doesn't matter, but it has to do destination manip */
|
||||
ip_nat_setup_info(ct, &range, NF_IP_PRE_ROUTING);
|
||||
}
|
||||
EXPORT_SYMBOL(ip_nat_follow_master);
|
||||
|
||||
@@ -108,8 +108,8 @@ ip_nat_fn(unsigned int hooknum,
|
||||
case IP_CT_RELATED:
|
||||
case IP_CT_RELATED+IP_CT_IS_REPLY:
|
||||
if ((*pskb)->nh.iph->protocol == IPPROTO_ICMP) {
|
||||
if (!icmp_reply_translation(pskb, ct, maniptype,
|
||||
CTINFO2DIR(ctinfo)))
|
||||
if (!ip_nat_icmp_reply_translation(pskb, ct, maniptype,
|
||||
CTINFO2DIR(ctinfo)))
|
||||
return NF_DROP;
|
||||
else
|
||||
return NF_ACCEPT;
|
||||
@@ -152,7 +152,7 @@ ip_nat_fn(unsigned int hooknum,
|
||||
}
|
||||
|
||||
IP_NF_ASSERT(info);
|
||||
return nat_packet(ct, ctinfo, hooknum, pskb);
|
||||
return ip_nat_packet(ct, ctinfo, hooknum, pskb);
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
@@ -325,15 +325,10 @@ static int init_or_cleanup(int init)
|
||||
printk("ip_nat_init: can't setup rules.\n");
|
||||
goto cleanup_nothing;
|
||||
}
|
||||
ret = ip_nat_init();
|
||||
if (ret < 0) {
|
||||
printk("ip_nat_init: can't setup rules.\n");
|
||||
goto cleanup_rule_init;
|
||||
}
|
||||
ret = nf_register_hook(&ip_nat_in_ops);
|
||||
if (ret < 0) {
|
||||
printk("ip_nat_init: can't register in hook.\n");
|
||||
goto cleanup_nat;
|
||||
goto cleanup_rule_init;
|
||||
}
|
||||
ret = nf_register_hook(&ip_nat_out_ops);
|
||||
if (ret < 0) {
|
||||
@@ -374,8 +369,6 @@ static int init_or_cleanup(int init)
|
||||
nf_unregister_hook(&ip_nat_out_ops);
|
||||
cleanup_inops:
|
||||
nf_unregister_hook(&ip_nat_in_ops);
|
||||
cleanup_nat:
|
||||
ip_nat_cleanup();
|
||||
cleanup_rule_init:
|
||||
ip_nat_rule_cleanup();
|
||||
cleanup_nothing:
|
||||
@@ -395,14 +388,4 @@ static void __exit fini(void)
|
||||
module_init(init);
|
||||
module_exit(fini);
|
||||
|
||||
EXPORT_SYMBOL(ip_nat_setup_info);
|
||||
EXPORT_SYMBOL(ip_nat_protocol_register);
|
||||
EXPORT_SYMBOL(ip_nat_protocol_unregister);
|
||||
EXPORT_SYMBOL_GPL(ip_nat_proto_find_get);
|
||||
EXPORT_SYMBOL_GPL(ip_nat_proto_put);
|
||||
EXPORT_SYMBOL(ip_nat_cheat_check);
|
||||
EXPORT_SYMBOL(ip_nat_mangle_tcp_packet);
|
||||
EXPORT_SYMBOL(ip_nat_mangle_udp_packet);
|
||||
EXPORT_SYMBOL(ip_nat_used_tuple);
|
||||
EXPORT_SYMBOL(ip_nat_follow_master);
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
@@ -3520,6 +3520,8 @@ int __init addrconf_init(void)
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
ip6_null_entry.rt6i_idev = in6_dev_get(&loopback_dev);
|
||||
|
||||
register_netdevice_notifier(&ipv6_dev_notf);
|
||||
|
||||
#ifdef CONFIG_IPV6_PRIVACY
|
||||
|
||||
@@ -22,3 +22,4 @@ llc2-y := llc_if.o llc_c_ev.o llc_c_ac.o llc_conn.o llc_c_st.o llc_pdu.o \
|
||||
llc_sap.o llc_s_ac.o llc_s_ev.o llc_s_st.o af_llc.o llc_station.o
|
||||
|
||||
llc2-$(CONFIG_PROC_FS) += llc_proc.o
|
||||
llc2-$(CONFIG_SYSCTL) += sysctl_net_llc.o
|
||||
|
||||
+319
-216
File diff suppressed because it is too large
Load Diff
+98
-173
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user