Commit 245f9eba authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://kernel.bkbits.net/davem/net-2.6

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 76dd2a8f fcf28f99
...@@ -60,8 +60,8 @@ ...@@ -60,8 +60,8 @@
#define DRV_MODULE_NAME "tg3" #define DRV_MODULE_NAME "tg3"
#define PFX DRV_MODULE_NAME ": " #define PFX DRV_MODULE_NAME ": "
#define DRV_MODULE_VERSION "3.20" #define DRV_MODULE_VERSION "3.21"
#define DRV_MODULE_RELDATE "February 2, 2005" #define DRV_MODULE_RELDATE "February 8, 2005"
#define TG3_DEF_MAC_MODE 0 #define TG3_DEF_MAC_MODE 0
#define TG3_DEF_RX_MODE 0 #define TG3_DEF_RX_MODE 0
...@@ -893,7 +893,7 @@ static void tg3_frob_aux_power(struct tg3 *tp) ...@@ -893,7 +893,7 @@ static void tg3_frob_aux_power(struct tg3 *tp)
GRC_LCLCTRL_GPIO_OUTPUT1)); GRC_LCLCTRL_GPIO_OUTPUT1));
udelay(100); udelay(100);
} else { } else {
int no_gpio2; u32 no_gpio2;
u32 grc_local_ctrl; u32 grc_local_ctrl;
if (tp_peer != tp && if (tp_peer != tp &&
...@@ -901,8 +901,8 @@ static void tg3_frob_aux_power(struct tg3 *tp) ...@@ -901,8 +901,8 @@ static void tg3_frob_aux_power(struct tg3 *tp)
return; return;
/* On 5753 and variants, GPIO2 cannot be used. */ /* On 5753 and variants, GPIO2 cannot be used. */
no_gpio2 = (tp->nic_sram_data_cfg & no_gpio2 = tp->nic_sram_data_cfg &
NIC_SRAM_DATA_CFG_NO_GPIO2) != 0; NIC_SRAM_DATA_CFG_NO_GPIO2;
grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 | grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
GRC_LCLCTRL_GPIO_OE1 | GRC_LCLCTRL_GPIO_OE1 |
...@@ -914,29 +914,17 @@ static void tg3_frob_aux_power(struct tg3 *tp) ...@@ -914,29 +914,17 @@ static void tg3_frob_aux_power(struct tg3 *tp)
GRC_LCLCTRL_GPIO_OUTPUT2); GRC_LCLCTRL_GPIO_OUTPUT2);
} }
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
grc_local_ctrl); grc_local_ctrl);
udelay(100); udelay(100);
grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 | grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
GRC_LCLCTRL_GPIO_OE1 |
GRC_LCLCTRL_GPIO_OE2 |
GRC_LCLCTRL_GPIO_OUTPUT0 |
GRC_LCLCTRL_GPIO_OUTPUT1 |
GRC_LCLCTRL_GPIO_OUTPUT2;
if (no_gpio2) {
grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
GRC_LCLCTRL_GPIO_OUTPUT2);
}
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
grc_local_ctrl); grc_local_ctrl);
udelay(100); udelay(100);
grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
GRC_LCLCTRL_GPIO_OE1 |
GRC_LCLCTRL_GPIO_OE2 |
GRC_LCLCTRL_GPIO_OUTPUT0 |
GRC_LCLCTRL_GPIO_OUTPUT1;
if (!no_gpio2) { if (!no_gpio2) {
grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
grc_local_ctrl); grc_local_ctrl);
udelay(100); udelay(100);
......
...@@ -108,6 +108,7 @@ ...@@ -108,6 +108,7 @@
#include <linux/kallsyms.h> #include <linux/kallsyms.h>
#include <linux/netpoll.h> #include <linux/netpoll.h>
#include <linux/rcupdate.h> #include <linux/rcupdate.h>
#include <linux/delay.h>
#ifdef CONFIG_NET_RADIO #ifdef CONFIG_NET_RADIO
#include <linux/wireless.h> /* Note : will define WIRELESS_EXT */ #include <linux/wireless.h> /* Note : will define WIRELESS_EXT */
#include <net/iw_handler.h> #include <net/iw_handler.h>
...@@ -2899,8 +2900,7 @@ static void netdev_wait_allrefs(struct net_device *dev) ...@@ -2899,8 +2900,7 @@ static void netdev_wait_allrefs(struct net_device *dev)
rebroadcast_time = jiffies; rebroadcast_time = jiffies;
} }
current->state = TASK_INTERRUPTIBLE; msleep(250);
schedule_timeout(HZ / 4);
if (time_after(jiffies, warning_time + 10 * HZ)) { if (time_after(jiffies, warning_time + 10 * HZ)) {
printk(KERN_EMERG "unregister_netdevice: " printk(KERN_EMERG "unregister_netdevice: "
......
...@@ -53,6 +53,7 @@ ...@@ -53,6 +53,7 @@
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/major.h> #include <linux/major.h>
#include <linux/root_dev.h> #include <linux/root_dev.h>
#include <linux/delay.h>
#include <net/arp.h> #include <net/arp.h>
#include <net/ip.h> #include <net/ip.h>
#include <net/ipconfig.h> #include <net/ipconfig.h>
...@@ -84,8 +85,8 @@ ...@@ -84,8 +85,8 @@
#endif #endif
/* Define the friendly delay before and after opening net devices */ /* Define the friendly delay before and after opening net devices */
#define CONF_PRE_OPEN (HZ/2) /* Before opening: 1/2 second */ #define CONF_PRE_OPEN 500 /* Before opening: 1/2 second */
#define CONF_POST_OPEN (1*HZ) /* After opening: 1 second */ #define CONF_POST_OPEN 1 /* After opening: 1 second */
/* Define the timeout for waiting for a DHCP/BOOTP/RARP reply */ /* Define the timeout for waiting for a DHCP/BOOTP/RARP reply */
#define CONF_OPEN_RETRIES 2 /* (Re)open devices twice */ #define CONF_OPEN_RETRIES 2 /* (Re)open devices twice */
...@@ -1259,16 +1260,14 @@ static int __init ip_auto_config(void) ...@@ -1259,16 +1260,14 @@ static int __init ip_auto_config(void)
try_try_again: try_try_again:
#endif #endif
/* Give hardware a chance to settle */ /* Give hardware a chance to settle */
set_current_state(TASK_UNINTERRUPTIBLE); msleep(CONF_PRE_OPEN);
schedule_timeout(CONF_PRE_OPEN);
/* Setup all network devices */ /* Setup all network devices */
if (ic_open_devs() < 0) if (ic_open_devs() < 0)
return -1; return -1;
/* Give drivers a chance to settle */ /* Give drivers a chance to settle */
set_current_state(TASK_UNINTERRUPTIBLE); ssleep(CONF_POST_OPEN);
schedule_timeout(CONF_POST_OPEN);
/* /*
* If the config information is insufficient (e.g., our IP address or * If the config information is insufficient (e.g., our IP address or
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/net.h> #include <linux/net.h>
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/delay.h>
#include <linux/skbuff.h> #include <linux/skbuff.h>
#include <linux/in.h> #include <linux/in.h>
#include <linux/igmp.h> /* for ip_mc_join_group */ #include <linux/igmp.h> /* for ip_mc_join_group */
...@@ -647,8 +647,7 @@ static void sync_master_loop(void) ...@@ -647,8 +647,7 @@ static void sync_master_loop(void)
if (stop_master_sync) if (stop_master_sync)
break; break;
__set_current_state(TASK_INTERRUPTIBLE); ssleep(1);
schedule_timeout(HZ);
} }
/* clean up the sync_buff queue */ /* clean up the sync_buff queue */
...@@ -705,8 +704,7 @@ static void sync_backup_loop(void) ...@@ -705,8 +704,7 @@ static void sync_backup_loop(void)
if (stop_backup_sync) if (stop_backup_sync)
break; break;
__set_current_state(TASK_INTERRUPTIBLE); ssleep(1);
schedule_timeout(HZ);
} }
/* release the sending multicast socket */ /* release the sending multicast socket */
...@@ -818,8 +816,7 @@ static int fork_sync_thread(void *startup) ...@@ -818,8 +816,7 @@ static int fork_sync_thread(void *startup)
if ((pid = kernel_thread(sync_thread, startup, 0)) < 0) { if ((pid = kernel_thread(sync_thread, startup, 0)) < 0) {
IP_VS_ERR("could not create sync_thread due to %d... " IP_VS_ERR("could not create sync_thread due to %d... "
"retrying.\n", pid); "retrying.\n", pid);
current->state = TASK_UNINTERRUPTIBLE; ssleep(1);
schedule_timeout(HZ);
goto repeat; goto repeat;
} }
...@@ -853,8 +850,7 @@ int start_sync_thread(int state, char *mcast_ifn, __u8 syncid) ...@@ -853,8 +850,7 @@ int start_sync_thread(int state, char *mcast_ifn, __u8 syncid)
if ((pid = kernel_thread(fork_sync_thread, &startup, 0)) < 0) { if ((pid = kernel_thread(fork_sync_thread, &startup, 0)) < 0) {
IP_VS_ERR("could not create fork_sync_thread due to %d... " IP_VS_ERR("could not create fork_sync_thread due to %d... "
"retrying.\n", pid); "retrying.\n", pid);
current->state = TASK_UNINTERRUPTIBLE; ssleep(1);
schedule_timeout(HZ);
goto repeat; goto repeat;
} }
......
...@@ -3760,8 +3760,7 @@ tcp_collapse(struct sock *sk, struct sk_buff *head, ...@@ -3760,8 +3760,7 @@ tcp_collapse(struct sock *sk, struct sk_buff *head,
while (before(start, end)) { while (before(start, end)) {
struct sk_buff *nskb; struct sk_buff *nskb;
int header = skb_headroom(skb); int header = skb_headroom(skb);
int copy = (PAGE_SIZE - sizeof(struct sk_buff) - int copy = SKB_MAX_ORDER(header, 0);
sizeof(struct skb_shared_info) - header - 31)&~15;
/* Too big header? This can happen with IPv6. */ /* Too big header? This can happen with IPv6. */
if (copy < 0) if (copy < 0)
......
...@@ -91,6 +91,7 @@ struct tc_u_hnode ...@@ -91,6 +91,7 @@ struct tc_u_hnode
{ {
struct tc_u_hnode *next; struct tc_u_hnode *next;
u32 handle; u32 handle;
u32 prio;
struct tc_u_common *tp_c; struct tc_u_common *tp_c;
int refcnt; int refcnt;
unsigned divisor; unsigned divisor;
...@@ -323,6 +324,7 @@ static int u32_init(struct tcf_proto *tp) ...@@ -323,6 +324,7 @@ static int u32_init(struct tcf_proto *tp)
root_ht->divisor = 0; root_ht->divisor = 0;
root_ht->refcnt++; root_ht->refcnt++;
root_ht->handle = tp_c ? gen_new_htid(tp_c) : 0x80000000; root_ht->handle = tp_c ? gen_new_htid(tp_c) : 0x80000000;
root_ht->prio = tp->prio;
if (tp_c == NULL) { if (tp_c == NULL) {
tp_c = kmalloc(sizeof(*tp_c), GFP_KERNEL); tp_c = kmalloc(sizeof(*tp_c), GFP_KERNEL);
...@@ -587,6 +589,7 @@ static int u32_change(struct tcf_proto *tp, unsigned long base, u32 handle, ...@@ -587,6 +589,7 @@ static int u32_change(struct tcf_proto *tp, unsigned long base, u32 handle,
ht->refcnt = 0; ht->refcnt = 0;
ht->divisor = divisor; ht->divisor = divisor;
ht->handle = handle; ht->handle = handle;
ht->prio = tp->prio;
ht->next = tp_c->hlist; ht->next = tp_c->hlist;
tp_c->hlist = ht; tp_c->hlist = ht;
*arg = (unsigned long)ht; *arg = (unsigned long)ht;
...@@ -703,6 +706,8 @@ static void u32_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -703,6 +706,8 @@ static void u32_walk(struct tcf_proto *tp, struct tcf_walker *arg)
return; return;
for (ht = tp_c->hlist; ht; ht = ht->next) { for (ht = tp_c->hlist; ht; ht = ht->next) {
if (ht->prio != tp->prio)
continue;
if (arg->count >= arg->skip) { if (arg->count >= arg->skip) {
if (arg->fn(tp, (unsigned long)ht, arg) < 0) { if (arg->fn(tp, (unsigned long)ht, arg) < 0) {
arg->stop = 1; arg->stop = 1;
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
# Makefile for the XFRM subsystem. # Makefile for the XFRM subsystem.
# #
obj-$(CONFIG_XFRM) := xfrm_policy.o xfrm_state.o xfrm_input.o xfrm_algo.o \ obj-$(CONFIG_XFRM) := xfrm_policy.o xfrm_state.o xfrm_input.o xfrm_algo.o
xfrm_export.o
obj-$(CONFIG_XFRM_USER) += xfrm_user.o obj-$(CONFIG_XFRM_USER) += xfrm_user.o
...@@ -316,6 +316,7 @@ struct xfrm_algo_desc *xfrm_aalg_get_byid(int alg_id) ...@@ -316,6 +316,7 @@ struct xfrm_algo_desc *xfrm_aalg_get_byid(int alg_id)
} }
return NULL; return NULL;
} }
EXPORT_SYMBOL_GPL(xfrm_aalg_get_byid);
struct xfrm_algo_desc *xfrm_ealg_get_byid(int alg_id) struct xfrm_algo_desc *xfrm_ealg_get_byid(int alg_id)
{ {
...@@ -331,6 +332,7 @@ struct xfrm_algo_desc *xfrm_ealg_get_byid(int alg_id) ...@@ -331,6 +332,7 @@ struct xfrm_algo_desc *xfrm_ealg_get_byid(int alg_id)
} }
return NULL; return NULL;
} }
EXPORT_SYMBOL_GPL(xfrm_ealg_get_byid);
struct xfrm_algo_desc *xfrm_calg_get_byid(int alg_id) struct xfrm_algo_desc *xfrm_calg_get_byid(int alg_id)
{ {
...@@ -346,6 +348,7 @@ struct xfrm_algo_desc *xfrm_calg_get_byid(int alg_id) ...@@ -346,6 +348,7 @@ struct xfrm_algo_desc *xfrm_calg_get_byid(int alg_id)
} }
return NULL; return NULL;
} }
EXPORT_SYMBOL_GPL(xfrm_calg_get_byid);
static struct xfrm_algo_desc *xfrm_get_byname(struct xfrm_algo_desc *list, static struct xfrm_algo_desc *xfrm_get_byname(struct xfrm_algo_desc *list,
int entries, char *name, int entries, char *name,
...@@ -380,16 +383,19 @@ struct xfrm_algo_desc *xfrm_aalg_get_byname(char *name, int probe) ...@@ -380,16 +383,19 @@ struct xfrm_algo_desc *xfrm_aalg_get_byname(char *name, int probe)
{ {
return xfrm_get_byname(aalg_list, aalg_entries(), name, probe); return xfrm_get_byname(aalg_list, aalg_entries(), name, probe);
} }
EXPORT_SYMBOL_GPL(xfrm_aalg_get_byname);
struct xfrm_algo_desc *xfrm_ealg_get_byname(char *name, int probe) struct xfrm_algo_desc *xfrm_ealg_get_byname(char *name, int probe)
{ {
return xfrm_get_byname(ealg_list, ealg_entries(), name, probe); return xfrm_get_byname(ealg_list, ealg_entries(), name, probe);
} }
EXPORT_SYMBOL_GPL(xfrm_ealg_get_byname);
struct xfrm_algo_desc *xfrm_calg_get_byname(char *name, int probe) struct xfrm_algo_desc *xfrm_calg_get_byname(char *name, int probe)
{ {
return xfrm_get_byname(calg_list, calg_entries(), name, probe); return xfrm_get_byname(calg_list, calg_entries(), name, probe);
} }
EXPORT_SYMBOL_GPL(xfrm_calg_get_byname);
struct xfrm_algo_desc *xfrm_aalg_get_byidx(unsigned int idx) struct xfrm_algo_desc *xfrm_aalg_get_byidx(unsigned int idx)
{ {
...@@ -398,6 +404,7 @@ struct xfrm_algo_desc *xfrm_aalg_get_byidx(unsigned int idx) ...@@ -398,6 +404,7 @@ struct xfrm_algo_desc *xfrm_aalg_get_byidx(unsigned int idx)
return &aalg_list[idx]; return &aalg_list[idx];
} }
EXPORT_SYMBOL_GPL(xfrm_aalg_get_byidx);
struct xfrm_algo_desc *xfrm_ealg_get_byidx(unsigned int idx) struct xfrm_algo_desc *xfrm_ealg_get_byidx(unsigned int idx)
{ {
...@@ -406,6 +413,7 @@ struct xfrm_algo_desc *xfrm_ealg_get_byidx(unsigned int idx) ...@@ -406,6 +413,7 @@ struct xfrm_algo_desc *xfrm_ealg_get_byidx(unsigned int idx)
return &ealg_list[idx]; return &ealg_list[idx];
} }
EXPORT_SYMBOL_GPL(xfrm_ealg_get_byidx);
/* /*
* Probe for the availability of crypto algorithms, and set the available * Probe for the availability of crypto algorithms, and set the available
...@@ -438,6 +446,7 @@ void xfrm_probe_algs(void) ...@@ -438,6 +446,7 @@ void xfrm_probe_algs(void)
} }
#endif #endif
} }
EXPORT_SYMBOL_GPL(xfrm_probe_algs);
int xfrm_count_auth_supported(void) int xfrm_count_auth_supported(void)
{ {
...@@ -448,6 +457,7 @@ int xfrm_count_auth_supported(void) ...@@ -448,6 +457,7 @@ int xfrm_count_auth_supported(void)
n++; n++;
return n; return n;
} }
EXPORT_SYMBOL_GPL(xfrm_count_auth_supported);
int xfrm_count_enc_supported(void) int xfrm_count_enc_supported(void)
{ {
...@@ -458,6 +468,7 @@ int xfrm_count_enc_supported(void) ...@@ -458,6 +468,7 @@ int xfrm_count_enc_supported(void)
n++; n++;
return n; return n;
} }
EXPORT_SYMBOL_GPL(xfrm_count_enc_supported);
/* Move to common area: it is shared with AH. */ /* Move to common area: it is shared with AH. */
...@@ -532,6 +543,7 @@ void skb_icv_walk(const struct sk_buff *skb, struct crypto_tfm *tfm, ...@@ -532,6 +543,7 @@ void skb_icv_walk(const struct sk_buff *skb, struct crypto_tfm *tfm,
if (len) if (len)
BUG(); BUG();
} }
EXPORT_SYMBOL_GPL(skb_icv_walk);
#if defined(CONFIG_INET_ESP) || defined(CONFIG_INET_ESP_MODULE) || defined(CONFIG_INET6_ESP) || defined(CONFIG_INET6_ESP_MODULE) #if defined(CONFIG_INET_ESP) || defined(CONFIG_INET_ESP_MODULE) || defined(CONFIG_INET6_ESP) || defined(CONFIG_INET6_ESP_MODULE)
......
#include <linux/module.h>
#include <net/xfrm.h>
EXPORT_SYMBOL(xfrm_user_policy);
EXPORT_SYMBOL(km_waitq);
EXPORT_SYMBOL(km_new_mapping);
EXPORT_SYMBOL(xfrm_cfg_sem);
EXPORT_SYMBOL(xfrm_policy_alloc);
EXPORT_SYMBOL(__xfrm_policy_destroy);
EXPORT_SYMBOL(xfrm_lookup);
EXPORT_SYMBOL(__xfrm_policy_check);
EXPORT_SYMBOL(__xfrm_route_forward);
EXPORT_SYMBOL(xfrm_state_alloc);
EXPORT_SYMBOL(__xfrm_state_destroy);
EXPORT_SYMBOL(xfrm_state_insert);
EXPORT_SYMBOL(xfrm_state_add);
EXPORT_SYMBOL(xfrm_state_update);
EXPORT_SYMBOL(xfrm_state_check_expire);
EXPORT_SYMBOL(xfrm_state_check);
EXPORT_SYMBOL(xfrm_state_lookup);
EXPORT_SYMBOL(xfrm_state_register_afinfo);
EXPORT_SYMBOL(xfrm_state_unregister_afinfo);
EXPORT_SYMBOL(xfrm_state_delete_tunnel);
EXPORT_SYMBOL(xfrm_replay_check);
EXPORT_SYMBOL(xfrm_replay_advance);
EXPORT_SYMBOL(__secpath_destroy);
EXPORT_SYMBOL(secpath_dup);
EXPORT_SYMBOL(xfrm_get_acqseq);
EXPORT_SYMBOL(xfrm_parse_spi);
EXPORT_SYMBOL(xfrm_register_type);
EXPORT_SYMBOL(xfrm_unregister_type);
EXPORT_SYMBOL(xfrm_get_type);
EXPORT_SYMBOL(xfrm_register_km);
EXPORT_SYMBOL(xfrm_unregister_km);
EXPORT_SYMBOL(xfrm_state_delete);
EXPORT_SYMBOL(xfrm_state_walk);
EXPORT_SYMBOL(xfrm_find_acq_byseq);
EXPORT_SYMBOL(xfrm_find_acq);
EXPORT_SYMBOL(xfrm_alloc_spi);
EXPORT_SYMBOL(xfrm_state_flush);
EXPORT_SYMBOL(xfrm_policy_bysel);
EXPORT_SYMBOL(xfrm_policy_insert);
EXPORT_SYMBOL(xfrm_policy_walk);
EXPORT_SYMBOL(xfrm_policy_flush);
EXPORT_SYMBOL(xfrm_policy_byid);
EXPORT_SYMBOL(xfrm_policy_list);
EXPORT_SYMBOL(xfrm_dst_lookup);
EXPORT_SYMBOL(xfrm_policy_register_afinfo);
EXPORT_SYMBOL(xfrm_policy_unregister_afinfo);
EXPORT_SYMBOL_GPL(xfrm_probe_algs);
EXPORT_SYMBOL_GPL(xfrm_count_auth_supported);
EXPORT_SYMBOL_GPL(xfrm_count_enc_supported);
EXPORT_SYMBOL_GPL(xfrm_aalg_get_byidx);
EXPORT_SYMBOL_GPL(xfrm_ealg_get_byidx);
EXPORT_SYMBOL_GPL(xfrm_aalg_get_byid);
EXPORT_SYMBOL_GPL(xfrm_ealg_get_byid);
EXPORT_SYMBOL_GPL(xfrm_calg_get_byid);
EXPORT_SYMBOL_GPL(xfrm_aalg_get_byname);
EXPORT_SYMBOL_GPL(xfrm_ealg_get_byname);
EXPORT_SYMBOL_GPL(xfrm_calg_get_byname);
EXPORT_SYMBOL_GPL(skb_icv_walk);
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
*/ */
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/module.h>
#include <net/ip.h> #include <net/ip.h>
#include <net/xfrm.h> #include <net/xfrm.h>
...@@ -20,6 +21,7 @@ void __secpath_destroy(struct sec_path *sp) ...@@ -20,6 +21,7 @@ void __secpath_destroy(struct sec_path *sp)
xfrm_state_put(sp->x[i].xvec); xfrm_state_put(sp->x[i].xvec);
kmem_cache_free(secpath_cachep, sp); kmem_cache_free(secpath_cachep, sp);
} }
EXPORT_SYMBOL(__secpath_destroy);
struct sec_path *secpath_dup(struct sec_path *src) struct sec_path *secpath_dup(struct sec_path *src)
{ {
...@@ -40,6 +42,7 @@ struct sec_path *secpath_dup(struct sec_path *src) ...@@ -40,6 +42,7 @@ struct sec_path *secpath_dup(struct sec_path *src)
atomic_set(&sp->refcnt, 1); atomic_set(&sp->refcnt, 1);
return sp; return sp;
} }
EXPORT_SYMBOL(secpath_dup);
/* Fetch spi and seq from ipsec header */ /* Fetch spi and seq from ipsec header */
...@@ -73,6 +76,7 @@ int xfrm_parse_spi(struct sk_buff *skb, u8 nexthdr, u32 *spi, u32 *seq) ...@@ -73,6 +76,7 @@ int xfrm_parse_spi(struct sk_buff *skb, u8 nexthdr, u32 *spi, u32 *seq)
*seq = *(u32*)(skb->h.raw + offset_seq); *seq = *(u32*)(skb->h.raw + offset_seq);
return 0; return 0;
} }
EXPORT_SYMBOL(xfrm_parse_spi);
void __init xfrm_input_init(void) void __init xfrm_input_init(void)
{ {
......
...@@ -21,14 +21,17 @@ ...@@ -21,14 +21,17 @@
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <linux/notifier.h> #include <linux/notifier.h>
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/module.h>
#include <net/xfrm.h> #include <net/xfrm.h>
#include <net/ip.h> #include <net/ip.h>
DECLARE_MUTEX(xfrm_cfg_sem); DECLARE_MUTEX(xfrm_cfg_sem);
EXPORT_SYMBOL(xfrm_cfg_sem);
static DEFINE_RWLOCK(xfrm_policy_lock); static DEFINE_RWLOCK(xfrm_policy_lock);
struct xfrm_policy *xfrm_policy_list[XFRM_POLICY_MAX*2]; struct xfrm_policy *xfrm_policy_list[XFRM_POLICY_MAX*2];
EXPORT_SYMBOL(xfrm_policy_list);
static DEFINE_RWLOCK(xfrm_policy_afinfo_lock); static DEFINE_RWLOCK(xfrm_policy_afinfo_lock);
static struct xfrm_policy_afinfo *xfrm_policy_afinfo[NPROTO]; static struct xfrm_policy_afinfo *xfrm_policy_afinfo[NPROTO];
...@@ -62,6 +65,7 @@ int xfrm_register_type(struct xfrm_type *type, unsigned short family) ...@@ -62,6 +65,7 @@ int xfrm_register_type(struct xfrm_type *type, unsigned short family)
xfrm_policy_put_afinfo(afinfo); xfrm_policy_put_afinfo(afinfo);
return err; return err;
} }
EXPORT_SYMBOL(xfrm_register_type);
int xfrm_unregister_type(struct xfrm_type *type, unsigned short family) int xfrm_unregister_type(struct xfrm_type *type, unsigned short family)
{ {
...@@ -82,6 +86,7 @@ int xfrm_unregister_type(struct xfrm_type *type, unsigned short family) ...@@ -82,6 +86,7 @@ int xfrm_unregister_type(struct xfrm_type *type, unsigned short family)
xfrm_policy_put_afinfo(afinfo); xfrm_policy_put_afinfo(afinfo);
return err; return err;
} }
EXPORT_SYMBOL(xfrm_unregister_type);
struct xfrm_type *xfrm_get_type(u8 proto, unsigned short family) struct xfrm_type *xfrm_get_type(u8 proto, unsigned short family)
{ {
...@@ -112,6 +117,7 @@ struct xfrm_type *xfrm_get_type(u8 proto, unsigned short family) ...@@ -112,6 +117,7 @@ struct xfrm_type *xfrm_get_type(u8 proto, unsigned short family)
xfrm_policy_put_afinfo(afinfo); xfrm_policy_put_afinfo(afinfo);
return type; return type;
} }
EXPORT_SYMBOL(xfrm_get_type);
int xfrm_dst_lookup(struct xfrm_dst **dst, struct flowi *fl, int xfrm_dst_lookup(struct xfrm_dst **dst, struct flowi *fl,
unsigned short family) unsigned short family)
...@@ -129,6 +135,7 @@ int xfrm_dst_lookup(struct xfrm_dst **dst, struct flowi *fl, ...@@ -129,6 +135,7 @@ int xfrm_dst_lookup(struct xfrm_dst **dst, struct flowi *fl,
xfrm_policy_put_afinfo(afinfo); xfrm_policy_put_afinfo(afinfo);
return err; return err;
} }
EXPORT_SYMBOL(xfrm_dst_lookup);
void xfrm_put_type(struct xfrm_type *type) void xfrm_put_type(struct xfrm_type *type)
{ {
...@@ -234,6 +241,7 @@ struct xfrm_policy *xfrm_policy_alloc(int gfp) ...@@ -234,6 +241,7 @@ struct xfrm_policy *xfrm_policy_alloc(int gfp)
} }
return policy; return policy;
} }
EXPORT_SYMBOL(xfrm_policy_alloc);
/* Destroy xfrm_policy: descendant resources must be released to this moment. */ /* Destroy xfrm_policy: descendant resources must be released to this moment. */
...@@ -250,6 +258,7 @@ void __xfrm_policy_destroy(struct xfrm_policy *policy) ...@@ -250,6 +258,7 @@ void __xfrm_policy_destroy(struct xfrm_policy *policy)
kfree(policy); kfree(policy);
} }
EXPORT_SYMBOL(__xfrm_policy_destroy);
static void xfrm_policy_gc_kill(struct xfrm_policy *policy) static void xfrm_policy_gc_kill(struct xfrm_policy *policy)
{ {
...@@ -373,6 +382,7 @@ int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl) ...@@ -373,6 +382,7 @@ int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl)
} }
return 0; return 0;
} }
EXPORT_SYMBOL(xfrm_policy_insert);
struct xfrm_policy *xfrm_policy_bysel(int dir, struct xfrm_selector *sel, struct xfrm_policy *xfrm_policy_bysel(int dir, struct xfrm_selector *sel,
int delete) int delete)
...@@ -396,6 +406,7 @@ struct xfrm_policy *xfrm_policy_bysel(int dir, struct xfrm_selector *sel, ...@@ -396,6 +406,7 @@ struct xfrm_policy *xfrm_policy_bysel(int dir, struct xfrm_selector *sel,
} }
return pol; return pol;
} }
EXPORT_SYMBOL(xfrm_policy_bysel);
struct xfrm_policy *xfrm_policy_byid(int dir, u32 id, int delete) struct xfrm_policy *xfrm_policy_byid(int dir, u32 id, int delete)
{ {
...@@ -418,6 +429,7 @@ struct xfrm_policy *xfrm_policy_byid(int dir, u32 id, int delete) ...@@ -418,6 +429,7 @@ struct xfrm_policy *xfrm_policy_byid(int dir, u32 id, int delete)
} }
return pol; return pol;
} }
EXPORT_SYMBOL(xfrm_policy_byid);
void xfrm_policy_flush(void) void xfrm_policy_flush(void)
{ {
...@@ -438,6 +450,7 @@ void xfrm_policy_flush(void) ...@@ -438,6 +450,7 @@ void xfrm_policy_flush(void)
atomic_inc(&flow_cache_genid); atomic_inc(&flow_cache_genid);
write_unlock_bh(&xfrm_policy_lock); write_unlock_bh(&xfrm_policy_lock);
} }
EXPORT_SYMBOL(xfrm_policy_flush);
int xfrm_policy_walk(int (*func)(struct xfrm_policy *, int, int, void*), int xfrm_policy_walk(int (*func)(struct xfrm_policy *, int, int, void*),
void *data) void *data)
...@@ -470,7 +483,7 @@ int xfrm_policy_walk(int (*func)(struct xfrm_policy *, int, int, void*), ...@@ -470,7 +483,7 @@ int xfrm_policy_walk(int (*func)(struct xfrm_policy *, int, int, void*),
read_unlock_bh(&xfrm_policy_lock); read_unlock_bh(&xfrm_policy_lock);
return error; return error;
} }
EXPORT_SYMBOL(xfrm_policy_walk);
/* Find policy to apply to this flow. */ /* Find policy to apply to this flow. */
...@@ -845,6 +858,7 @@ int xfrm_lookup(struct dst_entry **dst_p, struct flowi *fl, ...@@ -845,6 +858,7 @@ int xfrm_lookup(struct dst_entry **dst_p, struct flowi *fl,
*dst_p = NULL; *dst_p = NULL;
return err; return err;
} }
EXPORT_SYMBOL(xfrm_lookup);
/* When skb is transformed back to its "native" form, we have to /* When skb is transformed back to its "native" form, we have to
* check policy restrictions. At the moment we make this in maximally * check policy restrictions. At the moment we make this in maximally
...@@ -981,6 +995,7 @@ int __xfrm_policy_check(struct sock *sk, int dir, struct sk_buff *skb, ...@@ -981,6 +995,7 @@ int __xfrm_policy_check(struct sock *sk, int dir, struct sk_buff *skb,
xfrm_pol_put(pol); xfrm_pol_put(pol);
return 0; return 0;
} }
EXPORT_SYMBOL(__xfrm_policy_check);
int __xfrm_route_forward(struct sk_buff *skb, unsigned short family) int __xfrm_route_forward(struct sk_buff *skb, unsigned short family)
{ {
...@@ -991,6 +1006,7 @@ int __xfrm_route_forward(struct sk_buff *skb, unsigned short family) ...@@ -991,6 +1006,7 @@ int __xfrm_route_forward(struct sk_buff *skb, unsigned short family)
return xfrm_lookup(&skb->dst, &fl, NULL, 0) == 0; return xfrm_lookup(&skb->dst, &fl, NULL, 0) == 0;
} }
EXPORT_SYMBOL(__xfrm_route_forward);
/* Optimize later using cookies and generation ids. */ /* Optimize later using cookies and generation ids. */
...@@ -1163,6 +1179,7 @@ int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo) ...@@ -1163,6 +1179,7 @@ int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo)
write_unlock(&xfrm_policy_afinfo_lock); write_unlock(&xfrm_policy_afinfo_lock);
return err; return err;
} }
EXPORT_SYMBOL(xfrm_policy_register_afinfo);
int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo) int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo)
{ {
...@@ -1190,6 +1207,7 @@ int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo) ...@@ -1190,6 +1207,7 @@ int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo)
write_unlock(&xfrm_policy_afinfo_lock); write_unlock(&xfrm_policy_afinfo_lock);
return err; return err;
} }
EXPORT_SYMBOL(xfrm_policy_unregister_afinfo);
static struct xfrm_policy_afinfo *xfrm_policy_get_afinfo(unsigned short family) static struct xfrm_policy_afinfo *xfrm_policy_get_afinfo(unsigned short family)
{ {
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <net/xfrm.h> #include <net/xfrm.h>
#include <linux/pfkeyv2.h> #include <linux/pfkeyv2.h>
#include <linux/ipsec.h> #include <linux/ipsec.h>
#include <linux/module.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
/* Each xfrm_state may be linked to two tables: /* Each xfrm_state may be linked to two tables:
...@@ -38,6 +39,7 @@ static struct list_head xfrm_state_bydst[XFRM_DST_HSIZE]; ...@@ -38,6 +39,7 @@ static struct list_head xfrm_state_bydst[XFRM_DST_HSIZE];
static struct list_head xfrm_state_byspi[XFRM_DST_HSIZE]; static struct list_head xfrm_state_byspi[XFRM_DST_HSIZE];
DECLARE_WAIT_QUEUE_HEAD(km_waitq); DECLARE_WAIT_QUEUE_HEAD(km_waitq);
EXPORT_SYMBOL(km_waitq);
static DEFINE_RWLOCK(xfrm_state_afinfo_lock); static DEFINE_RWLOCK(xfrm_state_afinfo_lock);
static struct xfrm_state_afinfo *xfrm_state_afinfo[NPROTO]; static struct xfrm_state_afinfo *xfrm_state_afinfo[NPROTO];
...@@ -193,6 +195,7 @@ struct xfrm_state *xfrm_state_alloc(void) ...@@ -193,6 +195,7 @@ struct xfrm_state *xfrm_state_alloc(void)
} }
return x; return x;
} }
EXPORT_SYMBOL(xfrm_state_alloc);
void __xfrm_state_destroy(struct xfrm_state *x) void __xfrm_state_destroy(struct xfrm_state *x)
{ {
...@@ -203,6 +206,7 @@ void __xfrm_state_destroy(struct xfrm_state *x) ...@@ -203,6 +206,7 @@ void __xfrm_state_destroy(struct xfrm_state *x)
spin_unlock_bh(&xfrm_state_gc_lock); spin_unlock_bh(&xfrm_state_gc_lock);
schedule_work(&xfrm_state_gc_work); schedule_work(&xfrm_state_gc_work);
} }
EXPORT_SYMBOL(__xfrm_state_destroy);
static void __xfrm_state_delete(struct xfrm_state *x) static void __xfrm_state_delete(struct xfrm_state *x)
{ {
...@@ -241,6 +245,7 @@ void xfrm_state_delete(struct xfrm_state *x) ...@@ -241,6 +245,7 @@ void xfrm_state_delete(struct xfrm_state *x)
__xfrm_state_delete(x); __xfrm_state_delete(x);
spin_unlock_bh(&x->lock); spin_unlock_bh(&x->lock);
} }
EXPORT_SYMBOL(xfrm_state_delete);
void xfrm_state_flush(u8 proto) void xfrm_state_flush(u8 proto)
{ {
...@@ -267,6 +272,7 @@ void xfrm_state_flush(u8 proto) ...@@ -267,6 +272,7 @@ void xfrm_state_flush(u8 proto)
spin_unlock_bh(&xfrm_state_lock); spin_unlock_bh(&xfrm_state_lock);
wake_up(&km_waitq); wake_up(&km_waitq);
} }
EXPORT_SYMBOL(xfrm_state_flush);
static int static int
xfrm_init_tempsel(struct xfrm_state *x, struct flowi *fl, xfrm_init_tempsel(struct xfrm_state *x, struct flowi *fl,
...@@ -392,6 +398,7 @@ void xfrm_state_insert(struct xfrm_state *x) ...@@ -392,6 +398,7 @@ void xfrm_state_insert(struct xfrm_state *x)
__xfrm_state_insert(x); __xfrm_state_insert(x);
spin_unlock_bh(&xfrm_state_lock); spin_unlock_bh(&xfrm_state_lock);
} }
EXPORT_SYMBOL(xfrm_state_insert);
static struct xfrm_state *__xfrm_find_acq_byseq(u32 seq); static struct xfrm_state *__xfrm_find_acq_byseq(u32 seq);
...@@ -444,6 +451,7 @@ int xfrm_state_add(struct xfrm_state *x) ...@@ -444,6 +451,7 @@ int xfrm_state_add(struct xfrm_state *x)
return err; return err;
} }
EXPORT_SYMBOL(xfrm_state_add);
int xfrm_state_update(struct xfrm_state *x) int xfrm_state_update(struct xfrm_state *x)
{ {
...@@ -508,6 +516,7 @@ int xfrm_state_update(struct xfrm_state *x) ...@@ -508,6 +516,7 @@ int xfrm_state_update(struct xfrm_state *x)
return err; return err;
} }
EXPORT_SYMBOL(xfrm_state_update);
int xfrm_state_check_expire(struct xfrm_state *x) int xfrm_state_check_expire(struct xfrm_state *x)
{ {
...@@ -531,6 +540,7 @@ int xfrm_state_check_expire(struct xfrm_state *x) ...@@ -531,6 +540,7 @@ int xfrm_state_check_expire(struct xfrm_state *x)
km_state_expired(x, 0); km_state_expired(x, 0);
return 0; return 0;
} }
EXPORT_SYMBOL(xfrm_state_check_expire);
static int xfrm_state_check_space(struct xfrm_state *x, struct sk_buff *skb) static int xfrm_state_check_space(struct xfrm_state *x, struct sk_buff *skb)
{ {
...@@ -553,6 +563,7 @@ int xfrm_state_check(struct xfrm_state *x, struct sk_buff *skb) ...@@ -553,6 +563,7 @@ int xfrm_state_check(struct xfrm_state *x, struct sk_buff *skb)
err: err:
return err; return err;
} }
EXPORT_SYMBOL(xfrm_state_check);
struct xfrm_state * struct xfrm_state *
xfrm_state_lookup(xfrm_address_t *daddr, u32 spi, u8 proto, xfrm_state_lookup(xfrm_address_t *daddr, u32 spi, u8 proto,
...@@ -569,6 +580,7 @@ xfrm_state_lookup(xfrm_address_t *daddr, u32 spi, u8 proto, ...@@ -569,6 +580,7 @@ xfrm_state_lookup(xfrm_address_t *daddr, u32 spi, u8 proto,
xfrm_state_put_afinfo(afinfo); xfrm_state_put_afinfo(afinfo);
return x; return x;
} }
EXPORT_SYMBOL(xfrm_state_lookup);
struct xfrm_state * struct xfrm_state *
xfrm_find_acq(u8 mode, u32 reqid, u8 proto, xfrm_find_acq(u8 mode, u32 reqid, u8 proto,
...@@ -586,6 +598,7 @@ xfrm_find_acq(u8 mode, u32 reqid, u8 proto, ...@@ -586,6 +598,7 @@ xfrm_find_acq(u8 mode, u32 reqid, u8 proto,
xfrm_state_put_afinfo(afinfo); xfrm_state_put_afinfo(afinfo);
return x; return x;
} }
EXPORT_SYMBOL(xfrm_find_acq);
/* Silly enough, but I'm lazy to build resolution list */ /* Silly enough, but I'm lazy to build resolution list */
...@@ -614,7 +627,8 @@ struct xfrm_state *xfrm_find_acq_byseq(u32 seq) ...@@ -614,7 +627,8 @@ struct xfrm_state *xfrm_find_acq_byseq(u32 seq)
spin_unlock_bh(&xfrm_state_lock); spin_unlock_bh(&xfrm_state_lock);
return x; return x;
} }
EXPORT_SYMBOL(xfrm_find_acq_byseq);
u32 xfrm_get_acqseq(void) u32 xfrm_get_acqseq(void)
{ {
u32 res; u32 res;
...@@ -626,6 +640,7 @@ u32 xfrm_get_acqseq(void) ...@@ -626,6 +640,7 @@ u32 xfrm_get_acqseq(void)
spin_unlock_bh(&acqseq_lock); spin_unlock_bh(&acqseq_lock);
return res; return res;
} }
EXPORT_SYMBOL(xfrm_get_acqseq);
void void
xfrm_alloc_spi(struct xfrm_state *x, u32 minspi, u32 maxspi) xfrm_alloc_spi(struct xfrm_state *x, u32 minspi, u32 maxspi)
...@@ -666,6 +681,7 @@ xfrm_alloc_spi(struct xfrm_state *x, u32 minspi, u32 maxspi) ...@@ -666,6 +681,7 @@ xfrm_alloc_spi(struct xfrm_state *x, u32 minspi, u32 maxspi)
wake_up(&km_waitq); wake_up(&km_waitq);
} }
} }
EXPORT_SYMBOL(xfrm_alloc_spi);
int xfrm_state_walk(u8 proto, int (*func)(struct xfrm_state *, int, void*), int xfrm_state_walk(u8 proto, int (*func)(struct xfrm_state *, int, void*),
void *data) void *data)
...@@ -700,7 +716,7 @@ int xfrm_state_walk(u8 proto, int (*func)(struct xfrm_state *, int, void*), ...@@ -700,7 +716,7 @@ int xfrm_state_walk(u8 proto, int (*func)(struct xfrm_state *, int, void*),
spin_unlock_bh(&xfrm_state_lock); spin_unlock_bh(&xfrm_state_lock);
return err; return err;
} }
EXPORT_SYMBOL(xfrm_state_walk);
int xfrm_replay_check(struct xfrm_state *x, u32 seq) int xfrm_replay_check(struct xfrm_state *x, u32 seq)
{ {
...@@ -726,6 +742,7 @@ int xfrm_replay_check(struct xfrm_state *x, u32 seq) ...@@ -726,6 +742,7 @@ int xfrm_replay_check(struct xfrm_state *x, u32 seq)
} }
return 0; return 0;
} }
EXPORT_SYMBOL(xfrm_replay_check);
void xfrm_replay_advance(struct xfrm_state *x, u32 seq) void xfrm_replay_advance(struct xfrm_state *x, u32 seq)
{ {
...@@ -745,6 +762,7 @@ void xfrm_replay_advance(struct xfrm_state *x, u32 seq) ...@@ -745,6 +762,7 @@ void xfrm_replay_advance(struct xfrm_state *x, u32 seq)
x->replay.bitmap |= (1U << diff); x->replay.bitmap |= (1U << diff);
} }
} }
EXPORT_SYMBOL(xfrm_replay_advance);
static struct list_head xfrm_km_list = LIST_HEAD_INIT(xfrm_km_list); static struct list_head xfrm_km_list = LIST_HEAD_INIT(xfrm_km_list);
static DEFINE_RWLOCK(xfrm_km_lock); static DEFINE_RWLOCK(xfrm_km_lock);
...@@ -797,6 +815,7 @@ int km_new_mapping(struct xfrm_state *x, xfrm_address_t *ipaddr, u16 sport) ...@@ -797,6 +815,7 @@ int km_new_mapping(struct xfrm_state *x, xfrm_address_t *ipaddr, u16 sport)
read_unlock(&xfrm_km_lock); read_unlock(&xfrm_km_lock);
return err; return err;
} }
EXPORT_SYMBOL(km_new_mapping);
void km_policy_expired(struct xfrm_policy *pol, int dir, int hard) void km_policy_expired(struct xfrm_policy *pol, int dir, int hard)
{ {
...@@ -850,6 +869,7 @@ int xfrm_user_policy(struct sock *sk, int optname, u8 __user *optval, int optlen ...@@ -850,6 +869,7 @@ int xfrm_user_policy(struct sock *sk, int optname, u8 __user *optval, int optlen
kfree(data); kfree(data);
return err; return err;
} }
EXPORT_SYMBOL(xfrm_user_policy);
int xfrm_register_km(struct xfrm_mgr *km) int xfrm_register_km(struct xfrm_mgr *km)
{ {
...@@ -858,6 +878,7 @@ int xfrm_register_km(struct xfrm_mgr *km) ...@@ -858,6 +878,7 @@ int xfrm_register_km(struct xfrm_mgr *km)
write_unlock_bh(&xfrm_km_lock); write_unlock_bh(&xfrm_km_lock);
return 0; return 0;
} }
EXPORT_SYMBOL(xfrm_register_km);
int xfrm_unregister_km(struct xfrm_mgr *km) int xfrm_unregister_km(struct xfrm_mgr *km)
{ {
...@@ -866,6 +887,7 @@ int xfrm_unregister_km(struct xfrm_mgr *km) ...@@ -866,6 +887,7 @@ int xfrm_unregister_km(struct xfrm_mgr *km)
write_unlock_bh(&xfrm_km_lock); write_unlock_bh(&xfrm_km_lock);
return 0; return 0;
} }
EXPORT_SYMBOL(xfrm_unregister_km);
int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo) int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo)
{ {
...@@ -885,6 +907,7 @@ int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo) ...@@ -885,6 +907,7 @@ int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo)
write_unlock(&xfrm_state_afinfo_lock); write_unlock(&xfrm_state_afinfo_lock);
return err; return err;
} }
EXPORT_SYMBOL(xfrm_state_register_afinfo);
int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo) int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo)
{ {
...@@ -906,6 +929,7 @@ int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo) ...@@ -906,6 +929,7 @@ int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo)
write_unlock(&xfrm_state_afinfo_lock); write_unlock(&xfrm_state_afinfo_lock);
return err; return err;
} }
EXPORT_SYMBOL(xfrm_state_unregister_afinfo);
static struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned short family) static struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned short family)
{ {
...@@ -940,6 +964,7 @@ void xfrm_state_delete_tunnel(struct xfrm_state *x) ...@@ -940,6 +964,7 @@ void xfrm_state_delete_tunnel(struct xfrm_state *x)
x->tunnel = NULL; x->tunnel = NULL;
} }
} }
EXPORT_SYMBOL(xfrm_state_delete_tunnel);
void __init xfrm_state_init(void) void __init xfrm_state_init(void)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment