aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-03-29 14:29:33 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-03-29 14:29:33 -0500
commitf3cab8a0b1a772dc8b055b7affa567a366627c9e (patch)
tree39c4736047e7f1f6617a4703b3ebf62df1d68d34
parent76babde121d2ffef04ca692ce64ef9f8a9866086 (diff)
parent65b4b4e81a5094d52cbe372b887b1779abe53f9b (diff)
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: [NETFILTER]: Rename init functions. [TCP]: Fix RFC2465 typo. [INET]: Introduce tunnel4/tunnel6 [NET]: deinline 200+ byte inlines in sock.h [ECONET]: Convert away from SOCKOPS_WRAPPED [NET]: Fix ipx/econet/appletalk/irda ioctl crashes [NET]: Kill Documentation/networking/TODO [TG3]: Update version and reldate [TG3]: Skip timer code during full lock [TG3]: Speed up SRAM access [TG3]: Fix PHY loopback on 5700 [TG3]: Fix bug in 40-bit DMA workaround code [TG3]: Fix probe failure due to invalid MAC address
-rw-r--r--Documentation/networking/TODO18
-rw-r--r--MAINTAINERS1
-rw-r--r--drivers/net/tg3.c118
-rw-r--r--include/net/sock.h91
-rw-r--r--include/net/xfrm.h16
-rw-r--r--net/appletalk/ddp.c19
-rw-r--r--net/bridge/netfilter/ebt_802_3.c8
-rw-r--r--net/bridge/netfilter/ebt_among.c8
-rw-r--r--net/bridge/netfilter/ebt_arp.c8
-rw-r--r--net/bridge/netfilter/ebt_arpreply.c8
-rw-r--r--net/bridge/netfilter/ebt_dnat.c8
-rw-r--r--net/bridge/netfilter/ebt_ip.c8
-rw-r--r--net/bridge/netfilter/ebt_limit.c8
-rw-r--r--net/bridge/netfilter/ebt_log.c8
-rw-r--r--net/bridge/netfilter/ebt_mark.c8
-rw-r--r--net/bridge/netfilter/ebt_mark_m.c8
-rw-r--r--net/bridge/netfilter/ebt_pkttype.c8
-rw-r--r--net/bridge/netfilter/ebt_redirect.c8
-rw-r--r--net/bridge/netfilter/ebt_snat.c8
-rw-r--r--net/bridge/netfilter/ebt_stp.c8
-rw-r--r--net/bridge/netfilter/ebt_ulog.c8
-rw-r--r--net/bridge/netfilter/ebt_vlan.c8
-rw-r--r--net/bridge/netfilter/ebtable_broute.c8
-rw-r--r--net/bridge/netfilter/ebtable_filter.c8
-rw-r--r--net/bridge/netfilter/ebtable_nat.c8
-rw-r--r--net/bridge/netfilter/ebtables.c8
-rw-r--r--net/core/sock.c93
-rw-r--r--net/decnet/netfilter/dn_rtmsg.c8
-rw-r--r--net/econet/af_econet.c124
-rw-r--r--net/ipv4/Kconfig17
-rw-r--r--net/ipv4/Makefile3
-rw-r--r--net/ipv4/ipip.c79
-rw-r--r--net/ipv4/netfilter.c8
-rw-r--r--net/ipv4/netfilter/arp_tables.c8
-rw-r--r--net/ipv4/netfilter/arpt_mangle.c8
-rw-r--r--net/ipv4/netfilter/arptable_filter.c8
-rw-r--r--net/ipv4/netfilter/ip_conntrack_amanda.c8
-rw-r--r--net/ipv4/netfilter/ip_conntrack_ftp.c10
-rw-r--r--net/ipv4/netfilter/ip_conntrack_helper_pptp.c8
-rw-r--r--net/ipv4/netfilter/ip_conntrack_irc.c12
-rw-r--r--net/ipv4/netfilter/ip_conntrack_netbios_ns.c8
-rw-r--r--net/ipv4/netfilter/ip_conntrack_proto_sctp.c8
-rw-r--r--net/ipv4/netfilter/ip_conntrack_standalone.c8
-rw-r--r--net/ipv4/netfilter/ip_conntrack_tftp.c10
-rw-r--r--net/ipv4/netfilter/ip_nat_amanda.c8
-rw-r--r--net/ipv4/netfilter/ip_nat_ftp.c8
-rw-r--r--net/ipv4/netfilter/ip_nat_helper_pptp.c8
-rw-r--r--net/ipv4/netfilter/ip_nat_irc.c8
-rw-r--r--net/ipv4/netfilter/ip_nat_snmp_basic.c8
-rw-r--r--net/ipv4/netfilter/ip_nat_standalone.c8
-rw-r--r--net/ipv4/netfilter/ip_nat_tftp.c8
-rw-r--r--net/ipv4/netfilter/ip_queue.c8
-rw-r--r--net/ipv4/netfilter/ip_tables.c8
-rw-r--r--net/ipv4/netfilter/ipt_CLUSTERIP.c8
-rw-r--r--net/ipv4/netfilter/ipt_DSCP.c8
-rw-r--r--net/ipv4/netfilter/ipt_ECN.c8
-rw-r--r--net/ipv4/netfilter/ipt_LOG.c8
-rw-r--r--net/ipv4/netfilter/ipt_MASQUERADE.c8
-rw-r--r--net/ipv4/netfilter/ipt_NETMAP.c8
-rw-r--r--net/ipv4/netfilter/ipt_REDIRECT.c8
-rw-r--r--net/ipv4/netfilter/ipt_REJECT.c8
-rw-r--r--net/ipv4/netfilter/ipt_SAME.c8
-rw-r--r--net/ipv4/netfilter/ipt_TCPMSS.c8
-rw-r--r--net/ipv4/netfilter/ipt_TOS.c8
-rw-r--r--net/ipv4/netfilter/ipt_TTL.c8
-rw-r--r--net/ipv4/netfilter/ipt_ULOG.c8
-rw-r--r--net/ipv4/netfilter/ipt_addrtype.c8
-rw-r--r--net/ipv4/netfilter/ipt_ah.c8
-rw-r--r--net/ipv4/netfilter/ipt_dscp.c8
-rw-r--r--net/ipv4/netfilter/ipt_ecn.c8
-rw-r--r--net/ipv4/netfilter/ipt_esp.c8
-rw-r--r--net/ipv4/netfilter/ipt_hashlimit.c8
-rw-r--r--net/ipv4/netfilter/ipt_iprange.c8
-rw-r--r--net/ipv4/netfilter/ipt_multiport.c8
-rw-r--r--net/ipv4/netfilter/ipt_owner.c8
-rw-r--r--net/ipv4/netfilter/ipt_recent.c8
-rw-r--r--net/ipv4/netfilter/ipt_tos.c8
-rw-r--r--net/ipv4/netfilter/ipt_ttl.c8
-rw-r--r--net/ipv4/netfilter/iptable_filter.c8
-rw-r--r--net/ipv4/netfilter/iptable_mangle.c8
-rw-r--r--net/ipv4/netfilter/iptable_raw.c8
-rw-r--r--net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c8
-rw-r--r--net/ipv4/tcp_cong.c2
-rw-r--r--net/ipv4/tunnel4.c113
-rw-r--r--net/ipv4/xfrm4_tunnel.c79
-rw-r--r--net/ipv6/Kconfig19
-rw-r--r--net/ipv6/Makefile3
-rw-r--r--net/ipv6/ip6_tunnel.c45
-rw-r--r--net/ipv6/netfilter/ip6_queue.c8
-rw-r--r--net/ipv6/netfilter/ip6_tables.c8
-rw-r--r--net/ipv6/netfilter/ip6t_HL.c8
-rw-r--r--net/ipv6/netfilter/ip6t_LOG.c8
-rw-r--r--net/ipv6/netfilter/ip6t_REJECT.c8
-rw-r--r--net/ipv6/netfilter/ip6t_ah.c8
-rw-r--r--net/ipv6/netfilter/ip6t_dst.c8
-rw-r--r--net/ipv6/netfilter/ip6t_esp.c8
-rw-r--r--net/ipv6/netfilter/ip6t_eui64.c8
-rw-r--r--net/ipv6/netfilter/ip6t_frag.c8
-rw-r--r--net/ipv6/netfilter/ip6t_hbh.c8
-rw-r--r--net/ipv6/netfilter/ip6t_hl.c8
-rw-r--r--net/ipv6/netfilter/ip6t_multiport.c8
-rw-r--r--net/ipv6/netfilter/ip6t_owner.c8
-rw-r--r--net/ipv6/netfilter/ip6t_rt.c8
-rw-r--r--net/ipv6/netfilter/ip6table_filter.c8
-rw-r--r--net/ipv6/netfilter/ip6table_mangle.c8
-rw-r--r--net/ipv6/netfilter/ip6table_raw.c8
-rw-r--r--net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c8
-rw-r--r--net/ipv6/tunnel6.c131
-rw-r--r--net/ipv6/xfrm6_input.c5
-rw-r--r--net/ipv6/xfrm6_tunnel.c81
-rw-r--r--net/ipx/af_ipx.c26
-rw-r--r--net/irda/af_irda.c25
-rw-r--r--net/netfilter/nf_conntrack_ftp.c10
-rw-r--r--net/netfilter/nf_conntrack_proto_sctp.c8
-rw-r--r--net/netfilter/nf_conntrack_standalone.c8
-rw-r--r--net/netfilter/nfnetlink_log.c8
-rw-r--r--net/netfilter/nfnetlink_queue.c8
-rw-r--r--net/netfilter/xt_CLASSIFY.c8
-rw-r--r--net/netfilter/xt_CONNMARK.c8
-rw-r--r--net/netfilter/xt_MARK.c8
-rw-r--r--net/netfilter/xt_NFQUEUE.c8
-rw-r--r--net/netfilter/xt_NOTRACK.c8
-rw-r--r--net/netfilter/xt_comment.c8
-rw-r--r--net/netfilter/xt_connbytes.c8
-rw-r--r--net/netfilter/xt_connmark.c8
-rw-r--r--net/netfilter/xt_conntrack.c8
-rw-r--r--net/netfilter/xt_dccp.c8
-rw-r--r--net/netfilter/xt_helper.c8
-rw-r--r--net/netfilter/xt_length.c8
-rw-r--r--net/netfilter/xt_limit.c8
-rw-r--r--net/netfilter/xt_mac.c8
-rw-r--r--net/netfilter/xt_mark.c8
-rw-r--r--net/netfilter/xt_physdev.c8
-rw-r--r--net/netfilter/xt_pkttype.c8
-rw-r--r--net/netfilter/xt_realm.c8
-rw-r--r--net/netfilter/xt_sctp.c8
-rw-r--r--net/netfilter/xt_state.c8
-rw-r--r--net/netfilter/xt_string.c8
-rw-r--r--net/netfilter/xt_tcpmss.c8
-rw-r--r--net/netfilter/xt_tcpudp.c8
140 files changed, 1144 insertions, 918 deletions
diff --git a/Documentation/networking/TODO b/Documentation/networking/TODO
deleted file mode 100644
index 66d36ff14bae..000000000000
--- a/Documentation/networking/TODO
+++ /dev/null
@@ -1,18 +0,0 @@
1To-do items for network drivers
2-------------------------------
3
4* Move ethernet crc routine to generic code
5
6* (for 2.5) Integrate Jamal Hadi Salim's netdev Rx polling API change
7
8* Audit all net drivers to make sure magic packet / wake-on-lan /
9 similar features are disabled in the driver by default.
10
11* Audit all net drivers to make sure the module always prints out a
12 version string when loaded as a module, but only prints a version
13 string when built into the kernel if a device is detected.
14
15* Add ETHTOOL_GDRVINFO ioctl support to all ethernet drivers.
16
17* dmfe PCI DMA is totally wrong and only works on x86
18
diff --git a/MAINTAINERS b/MAINTAINERS
index e5b051f0e27e..c9465811addc 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1885,6 +1885,7 @@ NETWORKING [GENERAL]
1885P: Networking Team 1885P: Networking Team
1886M: netdev@vger.kernel.org 1886M: netdev@vger.kernel.org
1887L: netdev@vger.kernel.org 1887L: netdev@vger.kernel.org
1888W: http://linux-net.osdl.org/
1888S: Maintained 1889S: Maintained
1889 1890
1890NETWORKING [IPv4/IPv6] 1891NETWORKING [IPv4/IPv6]
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index b5473325bff4..964c09644832 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -69,8 +69,8 @@
69 69
70#define DRV_MODULE_NAME "tg3" 70#define DRV_MODULE_NAME "tg3"
71#define PFX DRV_MODULE_NAME ": " 71#define PFX DRV_MODULE_NAME ": "
72#define DRV_MODULE_VERSION "3.54" 72#define DRV_MODULE_VERSION "3.55"
73#define DRV_MODULE_RELDATE "Mar 23, 2006" 73#define DRV_MODULE_RELDATE "Mar 27, 2006"
74 74
75#define TG3_DEF_MAC_MODE 0 75#define TG3_DEF_MAC_MODE 0
76#define TG3_DEF_RX_MODE 0 76#define TG3_DEF_RX_MODE 0
@@ -497,21 +497,20 @@ static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
497 unsigned long flags; 497 unsigned long flags;
498 498
499 spin_lock_irqsave(&tp->indirect_lock, flags); 499 spin_lock_irqsave(&tp->indirect_lock, flags);
500 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 500 if (tp->write32 != tg3_write_indirect_reg32) {
501 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 501 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
502 tw32_f(TG3PCI_MEM_WIN_DATA, val);
502 503
503 /* Always leave this as zero. */ 504 /* Always leave this as zero. */
504 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 505 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
505 spin_unlock_irqrestore(&tp->indirect_lock, flags); 506 } else {
506} 507 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
508 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
507 509
508static void tg3_write_mem_fast(struct tg3 *tp, u32 off, u32 val) 510 /* Always leave this as zero. */
509{ 511 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
510 /* If no workaround is needed, write to mem space directly */ 512 }
511 if (tp->write32 != tg3_write_indirect_reg32) 513 spin_unlock_irqrestore(&tp->indirect_lock, flags);
512 tw32(NIC_SRAM_WIN_BASE + off, val);
513 else
514 tg3_write_mem(tp, off, val);
515} 514}
516 515
517static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val) 516static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
@@ -519,11 +518,19 @@ static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
519 unsigned long flags; 518 unsigned long flags;
520 519
521 spin_lock_irqsave(&tp->indirect_lock, flags); 520 spin_lock_irqsave(&tp->indirect_lock, flags);
522 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 521 if (tp->write32 != tg3_write_indirect_reg32) {
523 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 522 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
523 *val = tr32(TG3PCI_MEM_WIN_DATA);
524 524
525 /* Always leave this as zero. */ 525 /* Always leave this as zero. */
526 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 526 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
527 } else {
528 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
529 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
530
531 /* Always leave this as zero. */
532 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
533 }
527 spin_unlock_irqrestore(&tp->indirect_lock, flags); 534 spin_unlock_irqrestore(&tp->indirect_lock, flags);
528} 535}
529 536
@@ -1367,12 +1374,12 @@ static int tg3_set_power_state(struct tg3 *tp, pci_power_t state)
1367 } 1374 }
1368 } 1375 }
1369 1376
1377 tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
1378
1370 /* Finally, set the new power state. */ 1379 /* Finally, set the new power state. */
1371 pci_write_config_word(tp->pdev, pm + PCI_PM_CTRL, power_control); 1380 pci_write_config_word(tp->pdev, pm + PCI_PM_CTRL, power_control);
1372 udelay(100); /* Delay after power state change */ 1381 udelay(100); /* Delay after power state change */
1373 1382
1374 tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
1375
1376 return 0; 1383 return 0;
1377} 1384}
1378 1385
@@ -3600,7 +3607,7 @@ static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
3600 int len) 3607 int len)
3601{ 3608{
3602#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64) 3609#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
3603 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) 3610 if (tp->tg3_flags & TG3_FLAG_40BIT_DMA_BUG)
3604 return (((u64) mapping + len) > DMA_40BIT_MASK); 3611 return (((u64) mapping + len) > DMA_40BIT_MASK);
3605 return 0; 3612 return 0;
3606#else 3613#else
@@ -6461,6 +6468,9 @@ static void tg3_timer(unsigned long __opaque)
6461{ 6468{
6462 struct tg3 *tp = (struct tg3 *) __opaque; 6469 struct tg3 *tp = (struct tg3 *) __opaque;
6463 6470
6471 if (tp->irq_sync)
6472 goto restart_timer;
6473
6464 spin_lock(&tp->lock); 6474 spin_lock(&tp->lock);
6465 6475
6466 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)) { 6476 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)) {
@@ -6537,11 +6547,11 @@ static void tg3_timer(unsigned long __opaque)
6537 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) { 6547 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
6538 u32 val; 6548 u32 val;
6539 6549
6540 tg3_write_mem_fast(tp, NIC_SRAM_FW_CMD_MBOX, 6550 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
6541 FWCMD_NICDRV_ALIVE2); 6551 FWCMD_NICDRV_ALIVE2);
6542 tg3_write_mem_fast(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4); 6552 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
6543 /* 5 seconds timeout */ 6553 /* 5 seconds timeout */
6544 tg3_write_mem_fast(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 5); 6554 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 5);
6545 val = tr32(GRC_RX_CPU_EVENT); 6555 val = tr32(GRC_RX_CPU_EVENT);
6546 val |= (1 << 14); 6556 val |= (1 << 14);
6547 tw32(GRC_RX_CPU_EVENT, val); 6557 tw32(GRC_RX_CPU_EVENT, val);
@@ -6551,6 +6561,7 @@ static void tg3_timer(unsigned long __opaque)
6551 6561
6552 spin_unlock(&tp->lock); 6562 spin_unlock(&tp->lock);
6553 6563
6564restart_timer:
6554 tp->timer.expires = jiffies + tp->timer_offset; 6565 tp->timer.expires = jiffies + tp->timer_offset;
6555 add_timer(&tp->timer); 6566 add_timer(&tp->timer);
6556} 6567}
@@ -8399,8 +8410,11 @@ static int tg3_run_loopback(struct tg3 *tp, int loopback_mode)
8399 } 8410 }
8400 mac_mode = (tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK) | 8411 mac_mode = (tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK) |
8401 MAC_MODE_LINK_POLARITY | MAC_MODE_PORT_MODE_GMII; 8412 MAC_MODE_LINK_POLARITY | MAC_MODE_PORT_MODE_GMII;
8402 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) 8413 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) {
8403 mac_mode &= ~MAC_MODE_LINK_POLARITY; 8414 mac_mode &= ~MAC_MODE_LINK_POLARITY;
8415 tg3_writephy(tp, MII_TG3_EXT_CTRL,
8416 MII_TG3_EXT_CTRL_LNK3_LED_MODE);
8417 }
8404 tw32(MAC_MODE, mac_mode); 8418 tw32(MAC_MODE, mac_mode);
8405 } 8419 }
8406 else 8420 else
@@ -10531,6 +10545,7 @@ static int __devinit tg3_get_device_address(struct tg3 *tp)
10531{ 10545{
10532 struct net_device *dev = tp->dev; 10546 struct net_device *dev = tp->dev;
10533 u32 hi, lo, mac_offset; 10547 u32 hi, lo, mac_offset;
10548 int addr_ok = 0;
10534 10549
10535#ifdef CONFIG_SPARC64 10550#ifdef CONFIG_SPARC64
10536 if (!tg3_get_macaddr_sparc(tp)) 10551 if (!tg3_get_macaddr_sparc(tp))
@@ -10560,29 +10575,34 @@ static int __devinit tg3_get_device_address(struct tg3 *tp)
10560 dev->dev_addr[3] = (lo >> 16) & 0xff; 10575 dev->dev_addr[3] = (lo >> 16) & 0xff;
10561 dev->dev_addr[4] = (lo >> 8) & 0xff; 10576 dev->dev_addr[4] = (lo >> 8) & 0xff;
10562 dev->dev_addr[5] = (lo >> 0) & 0xff; 10577 dev->dev_addr[5] = (lo >> 0) & 0xff;
10563 }
10564 /* Next, try NVRAM. */
10565 else if (!(tp->tg3_flags & TG3_FLG2_SUN_570X) &&
10566 !tg3_nvram_read(tp, mac_offset + 0, &hi) &&
10567 !tg3_nvram_read(tp, mac_offset + 4, &lo)) {
10568 dev->dev_addr[0] = ((hi >> 16) & 0xff);
10569 dev->dev_addr[1] = ((hi >> 24) & 0xff);
10570 dev->dev_addr[2] = ((lo >> 0) & 0xff);
10571 dev->dev_addr[3] = ((lo >> 8) & 0xff);
10572 dev->dev_addr[4] = ((lo >> 16) & 0xff);
10573 dev->dev_addr[5] = ((lo >> 24) & 0xff);
10574 }
10575 /* Finally just fetch it out of the MAC control regs. */
10576 else {
10577 hi = tr32(MAC_ADDR_0_HIGH);
10578 lo = tr32(MAC_ADDR_0_LOW);
10579 10578
10580 dev->dev_addr[5] = lo & 0xff; 10579 /* Some old bootcode may report a 0 MAC address in SRAM */
10581 dev->dev_addr[4] = (lo >> 8) & 0xff; 10580 addr_ok = is_valid_ether_addr(&dev->dev_addr[0]);
10582 dev->dev_addr[3] = (lo >> 16) & 0xff; 10581 }
10583 dev->dev_addr[2] = (lo >> 24) & 0xff; 10582 if (!addr_ok) {
10584 dev->dev_addr[1] = hi & 0xff; 10583 /* Next, try NVRAM. */
10585 dev->dev_addr[0] = (hi >> 8) & 0xff; 10584 if (!(tp->tg3_flags & TG3_FLG2_SUN_570X) &&
10585 !tg3_nvram_read(tp, mac_offset + 0, &hi) &&
10586 !tg3_nvram_read(tp, mac_offset + 4, &lo)) {
10587 dev->dev_addr[0] = ((hi >> 16) & 0xff);
10588 dev->dev_addr[1] = ((hi >> 24) & 0xff);
10589 dev->dev_addr[2] = ((lo >> 0) & 0xff);
10590 dev->dev_addr[3] = ((lo >> 8) & 0xff);
10591 dev->dev_addr[4] = ((lo >> 16) & 0xff);
10592 dev->dev_addr[5] = ((lo >> 24) & 0xff);
10593 }
10594 /* Finally just fetch it out of the MAC control regs. */
10595 else {
10596 hi = tr32(MAC_ADDR_0_HIGH);
10597 lo = tr32(MAC_ADDR_0_LOW);
10598
10599 dev->dev_addr[5] = lo & 0xff;
10600 dev->dev_addr[4] = (lo >> 8) & 0xff;
10601 dev->dev_addr[3] = (lo >> 16) & 0xff;
10602 dev->dev_addr[2] = (lo >> 24) & 0xff;
10603 dev->dev_addr[1] = hi & 0xff;
10604 dev->dev_addr[0] = (hi >> 8) & 0xff;
10605 }
10586 } 10606 }
10587 10607
10588 if (!is_valid_ether_addr(&dev->dev_addr[0])) { 10608 if (!is_valid_ether_addr(&dev->dev_addr[0])) {
diff --git a/include/net/sock.h b/include/net/sock.h
index 2aa73c0ec6c2..af2b0544586e 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -938,28 +938,7 @@ static inline void sock_put(struct sock *sk)
938 sk_free(sk); 938 sk_free(sk);
939} 939}
940 940
941static inline int sk_receive_skb(struct sock *sk, struct sk_buff *skb) 941extern int sk_receive_skb(struct sock *sk, struct sk_buff *skb);
942{
943 int rc = NET_RX_SUCCESS;
944
945 if (sk_filter(sk, skb, 0))
946 goto discard_and_relse;
947
948 skb->dev = NULL;
949
950 bh_lock_sock(sk);
951 if (!sock_owned_by_user(sk))
952 rc = sk->sk_backlog_rcv(sk, skb);
953 else
954 sk_add_backlog(sk, skb);
955 bh_unlock_sock(sk);
956out:
957 sock_put(sk);
958 return rc;
959discard_and_relse:
960 kfree_skb(skb);
961 goto out;
962}
963 942
964/* Detach socket from process context. 943/* Detach socket from process context.
965 * Announce socket dead, detach it from wait queue and inode. 944 * Announce socket dead, detach it from wait queue and inode.
@@ -1044,33 +1023,9 @@ sk_dst_reset(struct sock *sk)
1044 write_unlock(&sk->sk_dst_lock); 1023 write_unlock(&sk->sk_dst_lock);
1045} 1024}
1046 1025
1047static inline struct dst_entry * 1026extern struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie);
1048__sk_dst_check(struct sock *sk, u32 cookie)
1049{
1050 struct dst_entry *dst = sk->sk_dst_cache;
1051
1052 if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
1053 sk->sk_dst_cache = NULL;
1054 dst_release(dst);
1055 return NULL;
1056 }
1057
1058 return dst;
1059}
1060
1061static inline struct dst_entry *
1062sk_dst_check(struct sock *sk, u32 cookie)
1063{
1064 struct dst_entry *dst = sk_dst_get(sk);
1065 1027
1066 if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) { 1028extern struct dst_entry *sk_dst_check(struct sock *sk, u32 cookie);
1067 sk_dst_reset(sk);
1068 dst_release(dst);
1069 return NULL;
1070 }
1071
1072 return dst;
1073}
1074 1029
1075static inline void sk_setup_caps(struct sock *sk, struct dst_entry *dst) 1030static inline void sk_setup_caps(struct sock *sk, struct dst_entry *dst)
1076{ 1031{
@@ -1140,45 +1095,7 @@ extern void sk_reset_timer(struct sock *sk, struct timer_list* timer,
1140 1095
1141extern void sk_stop_timer(struct sock *sk, struct timer_list* timer); 1096extern void sk_stop_timer(struct sock *sk, struct timer_list* timer);
1142 1097
1143static inline int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) 1098extern int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb);
1144{
1145 int err = 0;
1146 int skb_len;
1147
1148 /* Cast skb->rcvbuf to unsigned... It's pointless, but reduces
1149 number of warnings when compiling with -W --ANK
1150 */
1151 if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >=
1152 (unsigned)sk->sk_rcvbuf) {
1153 err = -ENOMEM;
1154 goto out;
1155 }
1156
1157 /* It would be deadlock, if sock_queue_rcv_skb is used
1158 with socket lock! We assume that users of this
1159 function are lock free.
1160 */
1161 err = sk_filter(sk, skb, 1);
1162 if (err)
1163 goto out;
1164
1165 skb->dev = NULL;
1166 skb_set_owner_r(skb, sk);
1167
1168 /* Cache the SKB length before we tack it onto the receive
1169 * queue. Once it is added it no longer belongs to us and
1170 * may be freed by other threads of control pulling packets
1171 * from the queue.
1172 */
1173 skb_len = skb->len;
1174
1175 skb_queue_tail(&sk->sk_receive_queue, skb);
1176
1177 if (!sock_flag(sk, SOCK_DEAD))
1178 sk->sk_data_ready(sk, skb_len);
1179out:
1180 return err;
1181}
1182 1099
1183static inline int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb) 1100static inline int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb)
1184{ 1101{
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index 61b7504fc2ba..e100291e43f4 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -864,13 +864,19 @@ struct xfrm_algo_desc {
864/* XFRM tunnel handlers. */ 864/* XFRM tunnel handlers. */
865struct xfrm_tunnel { 865struct xfrm_tunnel {
866 int (*handler)(struct sk_buff *skb); 866 int (*handler)(struct sk_buff *skb);
867 void (*err_handler)(struct sk_buff *skb, __u32 info); 867 int (*err_handler)(struct sk_buff *skb, __u32 info);
868
869 struct xfrm_tunnel *next;
870 int priority;
868}; 871};
869 872
870struct xfrm6_tunnel { 873struct xfrm6_tunnel {
871 int (*handler)(struct sk_buff **pskb); 874 int (*handler)(struct sk_buff *skb);
872 void (*err_handler)(struct sk_buff *skb, struct inet6_skb_parm *opt, 875 int (*err_handler)(struct sk_buff *skb, struct inet6_skb_parm *opt,
873 int type, int code, int offset, __u32 info); 876 int type, int code, int offset, __u32 info);
877
878 struct xfrm6_tunnel *next;
879 int priority;
874}; 880};
875 881
876extern void xfrm_init(void); 882extern void xfrm_init(void);
@@ -906,7 +912,7 @@ extern int xfrm4_rcv(struct sk_buff *skb);
906extern int xfrm4_output(struct sk_buff *skb); 912extern int xfrm4_output(struct sk_buff *skb);
907extern int xfrm4_tunnel_register(struct xfrm_tunnel *handler); 913extern int xfrm4_tunnel_register(struct xfrm_tunnel *handler);
908extern int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler); 914extern int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler);
909extern int xfrm6_rcv_spi(struct sk_buff **pskb, u32 spi); 915extern int xfrm6_rcv_spi(struct sk_buff *skb, u32 spi);
910extern int xfrm6_rcv(struct sk_buff **pskb); 916extern int xfrm6_rcv(struct sk_buff **pskb);
911extern int xfrm6_tunnel_register(struct xfrm6_tunnel *handler); 917extern int xfrm6_tunnel_register(struct xfrm6_tunnel *handler);
912extern int xfrm6_tunnel_deregister(struct xfrm6_tunnel *handler); 918extern int xfrm6_tunnel_deregister(struct xfrm6_tunnel *handler);
diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c
index 697ac55e29dc..7b1eb9a4fc96 100644
--- a/net/appletalk/ddp.c
+++ b/net/appletalk/ddp.c
@@ -1819,6 +1819,22 @@ static int atalk_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1819 return rc; 1819 return rc;
1820} 1820}
1821 1821
1822
1823#ifdef CONFIG_COMPAT
1824static int atalk_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1825{
1826 /*
1827 * All Appletalk ioctls except SIOCATALKDIFADDR are standard. And
1828 * SIOCATALKDIFADDR is handled by upper layer as well, so there is
1829 * nothing to do. Eventually SIOCATALKDIFADDR should be moved
1830 * here so there is no generic SIOCPROTOPRIVATE translation in the
1831 * system.
1832 */
1833 return -ENOIOCTLCMD;
1834}
1835#endif
1836
1837
1822static struct net_proto_family atalk_family_ops = { 1838static struct net_proto_family atalk_family_ops = {
1823 .family = PF_APPLETALK, 1839 .family = PF_APPLETALK,
1824 .create = atalk_create, 1840 .create = atalk_create,
@@ -1836,6 +1852,9 @@ static const struct proto_ops SOCKOPS_WRAPPED(atalk_dgram_ops) = {
1836 .getname = atalk_getname, 1852 .getname = atalk_getname,
1837 .poll = datagram_poll, 1853 .poll = datagram_poll,
1838 .ioctl = atalk_ioctl, 1854 .ioctl = atalk_ioctl,
1855#ifdef CONFIG_COMPAT
1856 .compat_ioctl = atalk_compat_ioctl,
1857#endif
1839 .listen = sock_no_listen, 1858 .listen = sock_no_listen,
1840 .shutdown = sock_no_shutdown, 1859 .shutdown = sock_no_shutdown,
1841 .setsockopt = sock_no_setsockopt, 1860 .setsockopt = sock_no_setsockopt,
diff --git a/net/bridge/netfilter/ebt_802_3.c b/net/bridge/netfilter/ebt_802_3.c
index 468ebdf4bc1c..d42f63f5e9f8 100644
--- a/net/bridge/netfilter/ebt_802_3.c
+++ b/net/bridge/netfilter/ebt_802_3.c
@@ -58,16 +58,16 @@ static struct ebt_match filter_802_3 =
58 .me = THIS_MODULE, 58 .me = THIS_MODULE,
59}; 59};
60 60
61static int __init init(void) 61static int __init ebt_802_3_init(void)
62{ 62{
63 return ebt_register_match(&filter_802_3); 63 return ebt_register_match(&filter_802_3);
64} 64}
65 65
66static void __exit fini(void) 66static void __exit ebt_802_3_fini(void)
67{ 67{
68 ebt_unregister_match(&filter_802_3); 68 ebt_unregister_match(&filter_802_3);
69} 69}
70 70
71module_init(init); 71module_init(ebt_802_3_init);
72module_exit(fini); 72module_exit(ebt_802_3_fini);
73MODULE_LICENSE("GPL"); 73MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebt_among.c b/net/bridge/netfilter/ebt_among.c
index 5a1f5e3bff15..a614485828af 100644
--- a/net/bridge/netfilter/ebt_among.c
+++ b/net/bridge/netfilter/ebt_among.c
@@ -213,16 +213,16 @@ static struct ebt_match filter_among = {
213 .me = THIS_MODULE, 213 .me = THIS_MODULE,
214}; 214};
215 215
216static int __init init(void) 216static int __init ebt_among_init(void)
217{ 217{
218 return ebt_register_match(&filter_among); 218 return ebt_register_match(&filter_among);
219} 219}
220 220
221static void __exit fini(void) 221static void __exit ebt_among_fini(void)
222{ 222{
223 ebt_unregister_match(&filter_among); 223 ebt_unregister_match(&filter_among);
224} 224}
225 225
226module_init(init); 226module_init(ebt_among_init);
227module_exit(fini); 227module_exit(ebt_among_fini);
228MODULE_LICENSE("GPL"); 228MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebt_arp.c b/net/bridge/netfilter/ebt_arp.c
index b94c48cb6e4b..a6c81d9f73b8 100644
--- a/net/bridge/netfilter/ebt_arp.c
+++ b/net/bridge/netfilter/ebt_arp.c
@@ -125,16 +125,16 @@ static struct ebt_match filter_arp =
125 .me = THIS_MODULE, 125 .me = THIS_MODULE,
126}; 126};
127 127
128static int __init init(void) 128static int __init ebt_arp_init(void)
129{ 129{
130 return ebt_register_match(&filter_arp); 130 return ebt_register_match(&filter_arp);
131} 131}
132 132
133static void __exit fini(void) 133static void __exit ebt_arp_fini(void)
134{ 134{
135 ebt_unregister_match(&filter_arp); 135 ebt_unregister_match(&filter_arp);
136} 136}
137 137
138module_init(init); 138module_init(ebt_arp_init);
139module_exit(fini); 139module_exit(ebt_arp_fini);
140MODULE_LICENSE("GPL"); 140MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebt_arpreply.c b/net/bridge/netfilter/ebt_arpreply.c
index b934de90f7c5..d19fc4b328dc 100644
--- a/net/bridge/netfilter/ebt_arpreply.c
+++ b/net/bridge/netfilter/ebt_arpreply.c
@@ -82,16 +82,16 @@ static struct ebt_target reply_target =
82 .me = THIS_MODULE, 82 .me = THIS_MODULE,
83}; 83};
84 84
85static int __init init(void) 85static int __init ebt_arpreply_init(void)
86{ 86{
87 return ebt_register_target(&reply_target); 87 return ebt_register_target(&reply_target);
88} 88}
89 89
90static void __exit fini(void) 90static void __exit ebt_arpreply_fini(void)
91{ 91{
92 ebt_unregister_target(&reply_target); 92 ebt_unregister_target(&reply_target);
93} 93}
94 94
95module_init(init); 95module_init(ebt_arpreply_init);
96module_exit(fini); 96module_exit(ebt_arpreply_fini);
97MODULE_LICENSE("GPL"); 97MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebt_dnat.c b/net/bridge/netfilter/ebt_dnat.c
index f5463086c7bd..4582659dff0e 100644
--- a/net/bridge/netfilter/ebt_dnat.c
+++ b/net/bridge/netfilter/ebt_dnat.c
@@ -61,16 +61,16 @@ static struct ebt_target dnat =
61 .me = THIS_MODULE, 61 .me = THIS_MODULE,
62}; 62};
63 63
64static int __init init(void) 64static int __init ebt_dnat_init(void)
65{ 65{
66 return ebt_register_target(&dnat); 66 return ebt_register_target(&dnat);
67} 67}
68 68
69static void __exit fini(void) 69static void __exit ebt_dnat_fini(void)
70{ 70{
71 ebt_unregister_target(&dnat); 71 ebt_unregister_target(&dnat);
72} 72}
73 73
74module_init(init); 74module_init(ebt_dnat_init);
75module_exit(fini); 75module_exit(ebt_dnat_fini);
76MODULE_LICENSE("GPL"); 76MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebt_ip.c b/net/bridge/netfilter/ebt_ip.c
index dc5d0b2427cf..65b665ce57b5 100644
--- a/net/bridge/netfilter/ebt_ip.c
+++ b/net/bridge/netfilter/ebt_ip.c
@@ -112,16 +112,16 @@ static struct ebt_match filter_ip =
112 .me = THIS_MODULE, 112 .me = THIS_MODULE,
113}; 113};
114 114
115static int __init init(void) 115static int __init ebt_ip_init(void)
116{ 116{
117 return ebt_register_match(&filter_ip); 117 return ebt_register_match(&filter_ip);
118} 118}
119 119
120static void __exit fini(void) 120static void __exit ebt_ip_fini(void)
121{ 121{
122 ebt_unregister_match(&filter_ip); 122 ebt_unregister_match(&filter_ip);
123} 123}
124 124
125module_init(init); 125module_init(ebt_ip_init);
126module_exit(fini); 126module_exit(ebt_ip_fini);
127MODULE_LICENSE("GPL"); 127MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebt_limit.c b/net/bridge/netfilter/ebt_limit.c
index 637c8844cd5f..d48fa5cb26cf 100644
--- a/net/bridge/netfilter/ebt_limit.c
+++ b/net/bridge/netfilter/ebt_limit.c
@@ -98,16 +98,16 @@ static struct ebt_match ebt_limit_reg =
98 .me = THIS_MODULE, 98 .me = THIS_MODULE,
99}; 99};
100 100
101static int __init init(void) 101static int __init ebt_limit_init(void)
102{ 102{
103 return ebt_register_match(&ebt_limit_reg); 103 return ebt_register_match(&ebt_limit_reg);
104} 104}
105 105
106static void __exit fini(void) 106static void __exit ebt_limit_fini(void)
107{ 107{
108 ebt_unregister_match(&ebt_limit_reg); 108 ebt_unregister_match(&ebt_limit_reg);
109} 109}
110 110
111module_init(init); 111module_init(ebt_limit_init);
112module_exit(fini); 112module_exit(ebt_limit_fini);
113MODULE_LICENSE("GPL"); 113MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebt_log.c b/net/bridge/netfilter/ebt_log.c
index 288ff1d4ccc4..d159c92cca84 100644
--- a/net/bridge/netfilter/ebt_log.c
+++ b/net/bridge/netfilter/ebt_log.c
@@ -188,7 +188,7 @@ static struct nf_logger ebt_log_logger = {
188 .me = THIS_MODULE, 188 .me = THIS_MODULE,
189}; 189};
190 190
191static int __init init(void) 191static int __init ebt_log_init(void)
192{ 192{
193 int ret; 193 int ret;
194 194
@@ -205,12 +205,12 @@ static int __init init(void)
205 return 0; 205 return 0;
206} 206}
207 207
208static void __exit fini(void) 208static void __exit ebt_log_fini(void)
209{ 209{
210 nf_log_unregister_logger(&ebt_log_logger); 210 nf_log_unregister_logger(&ebt_log_logger);
211 ebt_unregister_watcher(&log); 211 ebt_unregister_watcher(&log);
212} 212}
213 213
214module_init(init); 214module_init(ebt_log_init);
215module_exit(fini); 215module_exit(ebt_log_fini);
216MODULE_LICENSE("GPL"); 216MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebt_mark.c b/net/bridge/netfilter/ebt_mark.c
index c93d35ab95c0..770c0df972a3 100644
--- a/net/bridge/netfilter/ebt_mark.c
+++ b/net/bridge/netfilter/ebt_mark.c
@@ -52,16 +52,16 @@ static struct ebt_target mark_target =
52 .me = THIS_MODULE, 52 .me = THIS_MODULE,
53}; 53};
54 54
55static int __init init(void) 55static int __init ebt_mark_init(void)
56{ 56{
57 return ebt_register_target(&mark_target); 57 return ebt_register_target(&mark_target);
58} 58}
59 59
60static void __exit fini(void) 60static void __exit ebt_mark_fini(void)
61{ 61{
62 ebt_unregister_target(&mark_target); 62 ebt_unregister_target(&mark_target);
63} 63}
64 64
65module_init(init); 65module_init(ebt_mark_init);
66module_exit(fini); 66module_exit(ebt_mark_fini);
67MODULE_LICENSE("GPL"); 67MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebt_mark_m.c b/net/bridge/netfilter/ebt_mark_m.c
index 625102de1495..a6413e4b4982 100644
--- a/net/bridge/netfilter/ebt_mark_m.c
+++ b/net/bridge/netfilter/ebt_mark_m.c
@@ -47,16 +47,16 @@ static struct ebt_match filter_mark =
47 .me = THIS_MODULE, 47 .me = THIS_MODULE,
48}; 48};
49 49
50static int __init init(void) 50static int __init ebt_mark_m_init(void)
51{ 51{
52 return ebt_register_match(&filter_mark); 52 return ebt_register_match(&filter_mark);
53} 53}
54 54
55static void __exit fini(void) 55static void __exit ebt_mark_m_fini(void)
56{ 56{
57 ebt_unregister_match(&filter_mark); 57 ebt_unregister_match(&filter_mark);
58} 58}
59 59
60module_init(init); 60module_init(ebt_mark_m_init);
61module_exit(fini); 61module_exit(ebt_mark_m_fini);
62MODULE_LICENSE("GPL"); 62MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebt_pkttype.c b/net/bridge/netfilter/ebt_pkttype.c
index ecd3b42b19b0..4fffd70e4da7 100644
--- a/net/bridge/netfilter/ebt_pkttype.c
+++ b/net/bridge/netfilter/ebt_pkttype.c
@@ -44,16 +44,16 @@ static struct ebt_match filter_pkttype =
44 .me = THIS_MODULE, 44 .me = THIS_MODULE,
45}; 45};
46 46
47static int __init init(void) 47static int __init ebt_pkttype_init(void)
48{ 48{
49 return ebt_register_match(&filter_pkttype); 49 return ebt_register_match(&filter_pkttype);
50} 50}
51 51
52static void __exit fini(void) 52static void __exit ebt_pkttype_fini(void)
53{ 53{
54 ebt_unregister_match(&filter_pkttype); 54 ebt_unregister_match(&filter_pkttype);
55} 55}
56 56
57module_init(init); 57module_init(ebt_pkttype_init);
58module_exit(fini); 58module_exit(ebt_pkttype_fini);
59MODULE_LICENSE("GPL"); 59MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebt_redirect.c b/net/bridge/netfilter/ebt_redirect.c
index 1538b4386662..9f378eab72d0 100644
--- a/net/bridge/netfilter/ebt_redirect.c
+++ b/net/bridge/netfilter/ebt_redirect.c
@@ -66,16 +66,16 @@ static struct ebt_target redirect_target =
66 .me = THIS_MODULE, 66 .me = THIS_MODULE,
67}; 67};
68 68
69static int __init init(void) 69static int __init ebt_redirect_init(void)
70{ 70{
71 return ebt_register_target(&redirect_target); 71 return ebt_register_target(&redirect_target);
72} 72}
73 73
74static void __exit fini(void) 74static void __exit ebt_redirect_fini(void)
75{ 75{
76 ebt_unregister_target(&redirect_target); 76 ebt_unregister_target(&redirect_target);
77} 77}
78 78
79module_init(init); 79module_init(ebt_redirect_init);
80module_exit(fini); 80module_exit(ebt_redirect_fini);
81MODULE_LICENSE("GPL"); 81MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebt_snat.c b/net/bridge/netfilter/ebt_snat.c
index 1529bdcb9a48..cbb33e24ca8a 100644
--- a/net/bridge/netfilter/ebt_snat.c
+++ b/net/bridge/netfilter/ebt_snat.c
@@ -61,16 +61,16 @@ static struct ebt_target snat =
61 .me = THIS_MODULE, 61 .me = THIS_MODULE,
62}; 62};
63 63
64static int __init init(void) 64static int __init ebt_snat_init(void)
65{ 65{
66 return ebt_register_target(&snat); 66 return ebt_register_target(&snat);
67} 67}
68 68
69static void __exit fini(void) 69static void __exit ebt_snat_fini(void)
70{ 70{
71 ebt_unregister_target(&snat); 71 ebt_unregister_target(&snat);
72} 72}
73 73
74module_init(init); 74module_init(ebt_snat_init);
75module_exit(fini); 75module_exit(ebt_snat_fini);
76MODULE_LICENSE("GPL"); 76MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebt_stp.c b/net/bridge/netfilter/ebt_stp.c
index 0248c67277ee..a0bed82145ed 100644
--- a/net/bridge/netfilter/ebt_stp.c
+++ b/net/bridge/netfilter/ebt_stp.c
@@ -180,16 +180,16 @@ static struct ebt_match filter_stp =
180 .me = THIS_MODULE, 180 .me = THIS_MODULE,
181}; 181};
182 182
183static int __init init(void) 183static int __init ebt_stp_init(void)
184{ 184{
185 return ebt_register_match(&filter_stp); 185 return ebt_register_match(&filter_stp);
186} 186}
187 187
188static void __exit fini(void) 188static void __exit ebt_stp_fini(void)
189{ 189{
190 ebt_unregister_match(&filter_stp); 190 ebt_unregister_match(&filter_stp);
191} 191}
192 192
193module_init(init); 193module_init(ebt_stp_init);
194module_exit(fini); 194module_exit(ebt_stp_fini);
195MODULE_LICENSE("GPL"); 195MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebt_ulog.c b/net/bridge/netfilter/ebt_ulog.c
index 802baf755ef4..ee5a51761260 100644
--- a/net/bridge/netfilter/ebt_ulog.c
+++ b/net/bridge/netfilter/ebt_ulog.c
@@ -281,7 +281,7 @@ static struct nf_logger ebt_ulog_logger = {
281 .me = THIS_MODULE, 281 .me = THIS_MODULE,
282}; 282};
283 283
284static int __init init(void) 284static int __init ebt_ulog_init(void)
285{ 285{
286 int i, ret = 0; 286 int i, ret = 0;
287 287
@@ -316,7 +316,7 @@ static int __init init(void)
316 return ret; 316 return ret;
317} 317}
318 318
319static void __exit fini(void) 319static void __exit ebt_ulog_fini(void)
320{ 320{
321 ebt_ulog_buff_t *ub; 321 ebt_ulog_buff_t *ub;
322 int i; 322 int i;
@@ -337,8 +337,8 @@ static void __exit fini(void)
337 sock_release(ebtulognl->sk_socket); 337 sock_release(ebtulognl->sk_socket);
338} 338}
339 339
340module_init(init); 340module_init(ebt_ulog_init);
341module_exit(fini); 341module_exit(ebt_ulog_fini);
342MODULE_LICENSE("GPL"); 342MODULE_LICENSE("GPL");
343MODULE_AUTHOR("Bart De Schuymer <bdschuym@pandora.be>"); 343MODULE_AUTHOR("Bart De Schuymer <bdschuym@pandora.be>");
344MODULE_DESCRIPTION("ebtables userspace logging module for bridged Ethernet" 344MODULE_DESCRIPTION("ebtables userspace logging module for bridged Ethernet"
diff --git a/net/bridge/netfilter/ebt_vlan.c b/net/bridge/netfilter/ebt_vlan.c
index db60d734908b..a2b452862b73 100644
--- a/net/bridge/netfilter/ebt_vlan.c
+++ b/net/bridge/netfilter/ebt_vlan.c
@@ -178,7 +178,7 @@ static struct ebt_match filter_vlan = {
178 .me = THIS_MODULE, 178 .me = THIS_MODULE,
179}; 179};
180 180
181static int __init init(void) 181static int __init ebt_vlan_init(void)
182{ 182{
183 DEBUG_MSG("ebtables 802.1Q extension module v" 183 DEBUG_MSG("ebtables 802.1Q extension module v"
184 MODULE_VERS "\n"); 184 MODULE_VERS "\n");
@@ -186,10 +186,10 @@ static int __init init(void)
186 return ebt_register_match(&filter_vlan); 186 return ebt_register_match(&filter_vlan);
187} 187}
188 188
189static void __exit fini(void) 189static void __exit ebt_vlan_fini(void)
190{ 190{
191 ebt_unregister_match(&filter_vlan); 191 ebt_unregister_match(&filter_vlan);
192} 192}
193 193
194module_init(init); 194module_init(ebt_vlan_init);
195module_exit(fini); 195module_exit(ebt_vlan_fini);
diff --git a/net/bridge/netfilter/ebtable_broute.c b/net/bridge/netfilter/ebtable_broute.c
index 1767c94cd3de..9a6e548e148b 100644
--- a/net/bridge/netfilter/ebtable_broute.c
+++ b/net/bridge/netfilter/ebtable_broute.c
@@ -62,7 +62,7 @@ static int ebt_broute(struct sk_buff **pskb)
62 return 0; /* bridge it */ 62 return 0; /* bridge it */
63} 63}
64 64
65static int __init init(void) 65static int __init ebtable_broute_init(void)
66{ 66{
67 int ret; 67 int ret;
68 68
@@ -74,13 +74,13 @@ static int __init init(void)
74 return ret; 74 return ret;
75} 75}
76 76
77static void __exit fini(void) 77static void __exit ebtable_broute_fini(void)
78{ 78{
79 br_should_route_hook = NULL; 79 br_should_route_hook = NULL;
80 synchronize_net(); 80 synchronize_net();
81 ebt_unregister_table(&broute_table); 81 ebt_unregister_table(&broute_table);
82} 82}
83 83
84module_init(init); 84module_init(ebtable_broute_init);
85module_exit(fini); 85module_exit(ebtable_broute_fini);
86MODULE_LICENSE("GPL"); 86MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebtable_filter.c b/net/bridge/netfilter/ebtable_filter.c
index c18666e0392b..3d5bd44f2395 100644
--- a/net/bridge/netfilter/ebtable_filter.c
+++ b/net/bridge/netfilter/ebtable_filter.c
@@ -91,7 +91,7 @@ static struct nf_hook_ops ebt_ops_filter[] = {
91 }, 91 },
92}; 92};
93 93
94static int __init init(void) 94static int __init ebtable_filter_init(void)
95{ 95{
96 int i, j, ret; 96 int i, j, ret;
97 97
@@ -109,7 +109,7 @@ cleanup:
109 return ret; 109 return ret;
110} 110}
111 111
112static void __exit fini(void) 112static void __exit ebtable_filter_fini(void)
113{ 113{
114 int i; 114 int i;
115 115
@@ -118,6 +118,6 @@ static void __exit fini(void)
118 ebt_unregister_table(&frame_filter); 118 ebt_unregister_table(&frame_filter);
119} 119}
120 120
121module_init(init); 121module_init(ebtable_filter_init);
122module_exit(fini); 122module_exit(ebtable_filter_fini);
123MODULE_LICENSE("GPL"); 123MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebtable_nat.c b/net/bridge/netfilter/ebtable_nat.c
index 828cac2cc4a3..04dd42efda1d 100644
--- a/net/bridge/netfilter/ebtable_nat.c
+++ b/net/bridge/netfilter/ebtable_nat.c
@@ -98,7 +98,7 @@ static struct nf_hook_ops ebt_ops_nat[] = {
98 }, 98 },
99}; 99};
100 100
101static int __init init(void) 101static int __init ebtable_nat_init(void)
102{ 102{
103 int i, ret, j; 103 int i, ret, j;
104 104
@@ -116,7 +116,7 @@ cleanup:
116 return ret; 116 return ret;
117} 117}
118 118
119static void __exit fini(void) 119static void __exit ebtable_nat_fini(void)
120{ 120{
121 int i; 121 int i;
122 122
@@ -125,6 +125,6 @@ static void __exit fini(void)
125 ebt_unregister_table(&frame_nat); 125 ebt_unregister_table(&frame_nat);
126} 126}
127 127
128module_init(init); 128module_init(ebtable_nat_init);
129module_exit(fini); 129module_exit(ebtable_nat_fini);
130MODULE_LICENSE("GPL"); 130MODULE_LICENSE("GPL");
diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c
index 997953367204..01eae97c53d9 100644
--- a/net/bridge/netfilter/ebtables.c
+++ b/net/bridge/netfilter/ebtables.c
@@ -1487,7 +1487,7 @@ static struct nf_sockopt_ops ebt_sockopts =
1487 .get = do_ebt_get_ctl, 1487 .get = do_ebt_get_ctl,
1488}; 1488};
1489 1489
1490static int __init init(void) 1490static int __init ebtables_init(void)
1491{ 1491{
1492 int ret; 1492 int ret;
1493 1493
@@ -1501,7 +1501,7 @@ static int __init init(void)
1501 return 0; 1501 return 0;
1502} 1502}
1503 1503
1504static void __exit fini(void) 1504static void __exit ebtables_fini(void)
1505{ 1505{
1506 nf_unregister_sockopt(&ebt_sockopts); 1506 nf_unregister_sockopt(&ebt_sockopts);
1507 printk(KERN_NOTICE "Ebtables v2.0 unregistered\n"); 1507 printk(KERN_NOTICE "Ebtables v2.0 unregistered\n");
@@ -1516,6 +1516,6 @@ EXPORT_SYMBOL(ebt_unregister_watcher);
1516EXPORT_SYMBOL(ebt_register_target); 1516EXPORT_SYMBOL(ebt_register_target);
1517EXPORT_SYMBOL(ebt_unregister_target); 1517EXPORT_SYMBOL(ebt_unregister_target);
1518EXPORT_SYMBOL(ebt_do_table); 1518EXPORT_SYMBOL(ebt_do_table);
1519module_init(init); 1519module_init(ebtables_init);
1520module_exit(fini); 1520module_exit(ebtables_fini);
1521MODULE_LICENSE("GPL"); 1521MODULE_LICENSE("GPL");
diff --git a/net/core/sock.c b/net/core/sock.c
index e110b9004147..a96ea7dd0fc1 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -187,6 +187,99 @@ static void sock_disable_timestamp(struct sock *sk)
187} 187}
188 188
189 189
190int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
191{
192 int err = 0;
193 int skb_len;
194
195 /* Cast skb->rcvbuf to unsigned... It's pointless, but reduces
196 number of warnings when compiling with -W --ANK
197 */
198 if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >=
199 (unsigned)sk->sk_rcvbuf) {
200 err = -ENOMEM;
201 goto out;
202 }
203
204 /* It would be deadlock, if sock_queue_rcv_skb is used
205 with socket lock! We assume that users of this
206 function are lock free.
207 */
208 err = sk_filter(sk, skb, 1);
209 if (err)
210 goto out;
211
212 skb->dev = NULL;
213 skb_set_owner_r(skb, sk);
214
215 /* Cache the SKB length before we tack it onto the receive
216 * queue. Once it is added it no longer belongs to us and
217 * may be freed by other threads of control pulling packets
218 * from the queue.
219 */
220 skb_len = skb->len;
221
222 skb_queue_tail(&sk->sk_receive_queue, skb);
223
224 if (!sock_flag(sk, SOCK_DEAD))
225 sk->sk_data_ready(sk, skb_len);
226out:
227 return err;
228}
229EXPORT_SYMBOL(sock_queue_rcv_skb);
230
231int sk_receive_skb(struct sock *sk, struct sk_buff *skb)
232{
233 int rc = NET_RX_SUCCESS;
234
235 if (sk_filter(sk, skb, 0))
236 goto discard_and_relse;
237
238 skb->dev = NULL;
239
240 bh_lock_sock(sk);
241 if (!sock_owned_by_user(sk))
242 rc = sk->sk_backlog_rcv(sk, skb);
243 else
244 sk_add_backlog(sk, skb);
245 bh_unlock_sock(sk);
246out:
247 sock_put(sk);
248 return rc;
249discard_and_relse:
250 kfree_skb(skb);
251 goto out;
252}
253EXPORT_SYMBOL(sk_receive_skb);
254
255struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie)
256{
257 struct dst_entry *dst = sk->sk_dst_cache;
258
259 if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
260 sk->sk_dst_cache = NULL;
261 dst_release(dst);
262 return NULL;
263 }
264
265 return dst;
266}
267EXPORT_SYMBOL(__sk_dst_check);
268
269struct dst_entry *sk_dst_check(struct sock *sk, u32 cookie)
270{
271 struct dst_entry *dst = sk_dst_get(sk);
272
273 if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
274 sk_dst_reset(sk);
275 dst_release(dst);
276 return NULL;
277 }
278
279 return dst;
280}
281EXPORT_SYMBOL(sk_dst_check);
282
190/* 283/*
191 * This is meant for all protocols to use and covers goings on 284 * This is meant for all protocols to use and covers goings on
192 * at the socket level. Everything here is generic. 285 * at the socket level. Everything here is generic.
diff --git a/net/decnet/netfilter/dn_rtmsg.c b/net/decnet/netfilter/dn_rtmsg.c
index 16a5a31e2126..74133ecd7700 100644
--- a/net/decnet/netfilter/dn_rtmsg.c
+++ b/net/decnet/netfilter/dn_rtmsg.c
@@ -133,7 +133,7 @@ static struct nf_hook_ops dnrmg_ops = {
133 .priority = NF_DN_PRI_DNRTMSG, 133 .priority = NF_DN_PRI_DNRTMSG,
134}; 134};
135 135
136static int __init init(void) 136static int __init dn_rtmsg_init(void)
137{ 137{
138 int rv = 0; 138 int rv = 0;
139 139
@@ -152,7 +152,7 @@ static int __init init(void)
152 return rv; 152 return rv;
153} 153}
154 154
155static void __exit fini(void) 155static void __exit dn_rtmsg_fini(void)
156{ 156{
157 nf_unregister_hook(&dnrmg_ops); 157 nf_unregister_hook(&dnrmg_ops);
158 sock_release(dnrmg->sk_socket); 158 sock_release(dnrmg->sk_socket);
@@ -164,6 +164,6 @@ MODULE_AUTHOR("Steven Whitehouse <steve@chygwyn.com>");
164MODULE_LICENSE("GPL"); 164MODULE_LICENSE("GPL");
165MODULE_ALIAS_NET_PF_PROTO(PF_NETLINK, NETLINK_DNRTMSG); 165MODULE_ALIAS_NET_PF_PROTO(PF_NETLINK, NETLINK_DNRTMSG);
166 166
167module_init(init); 167module_init(dn_rtmsg_init);
168module_exit(fini); 168module_exit(dn_rtmsg_fini);
169 169
diff --git a/net/econet/af_econet.c b/net/econet/af_econet.c
index c792994d7952..868265619dbb 100644
--- a/net/econet/af_econet.c
+++ b/net/econet/af_econet.c
@@ -42,6 +42,7 @@
42#include <linux/spinlock.h> 42#include <linux/spinlock.h>
43#include <linux/rcupdate.h> 43#include <linux/rcupdate.h>
44#include <linux/bitops.h> 44#include <linux/bitops.h>
45#include <linux/mutex.h>
45 46
46#include <asm/uaccess.h> 47#include <asm/uaccess.h>
47#include <asm/system.h> 48#include <asm/system.h>
@@ -49,6 +50,7 @@
49static const struct proto_ops econet_ops; 50static const struct proto_ops econet_ops;
50static struct hlist_head econet_sklist; 51static struct hlist_head econet_sklist;
51static DEFINE_RWLOCK(econet_lock); 52static DEFINE_RWLOCK(econet_lock);
53static DEFINE_MUTEX(econet_mutex);
52 54
53/* Since there are only 256 possible network numbers (or fewer, depends 55/* Since there are only 256 possible network numbers (or fewer, depends
54 how you count) it makes sense to use a simple lookup table. */ 56 how you count) it makes sense to use a simple lookup table. */
@@ -124,6 +126,8 @@ static int econet_recvmsg(struct kiocb *iocb, struct socket *sock,
124 126
125 msg->msg_namelen = sizeof(struct sockaddr_ec); 127 msg->msg_namelen = sizeof(struct sockaddr_ec);
126 128
129 mutex_lock(&econet_mutex);
130
127 /* 131 /*
128 * Call the generic datagram receiver. This handles all sorts 132 * Call the generic datagram receiver. This handles all sorts
129 * of horrible races and re-entrancy so we can forget about it 133 * of horrible races and re-entrancy so we can forget about it
@@ -174,6 +178,7 @@ static int econet_recvmsg(struct kiocb *iocb, struct socket *sock,
174out_free: 178out_free:
175 skb_free_datagram(sk, skb); 179 skb_free_datagram(sk, skb);
176out: 180out:
181 mutex_unlock(&econet_mutex);
177 return err; 182 return err;
178} 183}
179 184
@@ -184,8 +189,8 @@ out:
184static int econet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) 189static int econet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
185{ 190{
186 struct sockaddr_ec *sec = (struct sockaddr_ec *)uaddr; 191 struct sockaddr_ec *sec = (struct sockaddr_ec *)uaddr;
187 struct sock *sk=sock->sk; 192 struct sock *sk;
188 struct econet_sock *eo = ec_sk(sk); 193 struct econet_sock *eo;
189 194
190 /* 195 /*
191 * Check legality 196 * Check legality
@@ -195,11 +200,18 @@ static int econet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len
195 sec->sec_family != AF_ECONET) 200 sec->sec_family != AF_ECONET)
196 return -EINVAL; 201 return -EINVAL;
197 202
203 mutex_lock(&econet_mutex);
204
205 sk = sock->sk;
206 eo = ec_sk(sk);
207
198 eo->cb = sec->cb; 208 eo->cb = sec->cb;
199 eo->port = sec->port; 209 eo->port = sec->port;
200 eo->station = sec->addr.station; 210 eo->station = sec->addr.station;
201 eo->net = sec->addr.net; 211 eo->net = sec->addr.net;
202 212
213 mutex_unlock(&econet_mutex);
214
203 return 0; 215 return 0;
204} 216}
205 217
@@ -284,6 +296,8 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
284 * Get and verify the address. 296 * Get and verify the address.
285 */ 297 */
286 298
299 mutex_lock(&econet_mutex);
300
287 if (saddr == NULL) { 301 if (saddr == NULL) {
288 struct econet_sock *eo = ec_sk(sk); 302 struct econet_sock *eo = ec_sk(sk);
289 303
@@ -292,8 +306,10 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
292 port = eo->port; 306 port = eo->port;
293 cb = eo->cb; 307 cb = eo->cb;
294 } else { 308 } else {
295 if (msg->msg_namelen < sizeof(struct sockaddr_ec)) 309 if (msg->msg_namelen < sizeof(struct sockaddr_ec)) {
310 mutex_unlock(&econet_mutex);
296 return -EINVAL; 311 return -EINVAL;
312 }
297 addr.station = saddr->addr.station; 313 addr.station = saddr->addr.station;
298 addr.net = saddr->addr.net; 314 addr.net = saddr->addr.net;
299 port = saddr->port; 315 port = saddr->port;
@@ -304,19 +320,21 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
304 dev = net2dev_map[addr.net]; 320 dev = net2dev_map[addr.net];
305 321
306 /* If not directly reachable, use some default */ 322 /* If not directly reachable, use some default */
307 if (dev == NULL) 323 if (dev == NULL) {
308 {
309 dev = net2dev_map[0]; 324 dev = net2dev_map[0];
310 /* No interfaces at all? */ 325 /* No interfaces at all? */
311 if (dev == NULL) 326 if (dev == NULL) {
327 mutex_unlock(&econet_mutex);
312 return -ENETDOWN; 328 return -ENETDOWN;
329 }
313 } 330 }
314 331
315 if (len + 15 > dev->mtu) 332 if (len + 15 > dev->mtu) {
333 mutex_unlock(&econet_mutex);
316 return -EMSGSIZE; 334 return -EMSGSIZE;
335 }
317 336
318 if (dev->type == ARPHRD_ECONET) 337 if (dev->type == ARPHRD_ECONET) {
319 {
320 /* Real hardware Econet. We're not worthy etc. */ 338 /* Real hardware Econet. We're not worthy etc. */
321#ifdef CONFIG_ECONET_NATIVE 339#ifdef CONFIG_ECONET_NATIVE
322 unsigned short proto = 0; 340 unsigned short proto = 0;
@@ -374,6 +392,7 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
374 392
375 dev_queue_xmit(skb); 393 dev_queue_xmit(skb);
376 dev_put(dev); 394 dev_put(dev);
395 mutex_unlock(&econet_mutex);
377 return(len); 396 return(len);
378 397
379 out_free: 398 out_free:
@@ -384,14 +403,18 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
384#else 403#else
385 err = -EPROTOTYPE; 404 err = -EPROTOTYPE;
386#endif 405#endif
406 mutex_unlock(&econet_mutex);
407
387 return err; 408 return err;
388 } 409 }
389 410
390#ifdef CONFIG_ECONET_AUNUDP 411#ifdef CONFIG_ECONET_AUNUDP
391 /* AUN virtual Econet. */ 412 /* AUN virtual Econet. */
392 413
393 if (udpsock == NULL) 414 if (udpsock == NULL) {
415 mutex_unlock(&econet_mutex);
394 return -ENETDOWN; /* No socket - can't send */ 416 return -ENETDOWN; /* No socket - can't send */
417 }
395 418
396 /* Make up a UDP datagram and hand it off to some higher intellect. */ 419 /* Make up a UDP datagram and hand it off to some higher intellect. */
397 420
@@ -438,8 +461,10 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
438 void __user *base = msg->msg_iov[i].iov_base; 461 void __user *base = msg->msg_iov[i].iov_base;
439 size_t len = msg->msg_iov[i].iov_len; 462 size_t len = msg->msg_iov[i].iov_len;
440 /* Check it now since we switch to KERNEL_DS later. */ 463 /* Check it now since we switch to KERNEL_DS later. */
441 if (!access_ok(VERIFY_READ, base, len)) 464 if (!access_ok(VERIFY_READ, base, len)) {
465 mutex_unlock(&econet_mutex);
442 return -EFAULT; 466 return -EFAULT;
467 }
443 iov[i+1].iov_base = base; 468 iov[i+1].iov_base = base;
444 iov[i+1].iov_len = len; 469 iov[i+1].iov_len = len;
445 size += len; 470 size += len;
@@ -447,8 +472,11 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
447 472
448 /* Get a skbuff (no data, just holds our cb information) */ 473 /* Get a skbuff (no data, just holds our cb information) */
449 if ((skb = sock_alloc_send_skb(sk, 0, 474 if ((skb = sock_alloc_send_skb(sk, 0,
450 msg->msg_flags & MSG_DONTWAIT, &err)) == NULL) 475 msg->msg_flags & MSG_DONTWAIT,
476 &err)) == NULL) {
477 mutex_unlock(&econet_mutex);
451 return err; 478 return err;
479 }
452 480
453 eb = (struct ec_cb *)&skb->cb; 481 eb = (struct ec_cb *)&skb->cb;
454 482
@@ -475,6 +503,8 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
475#else 503#else
476 err = -EPROTOTYPE; 504 err = -EPROTOTYPE;
477#endif 505#endif
506 mutex_unlock(&econet_mutex);
507
478 return err; 508 return err;
479} 509}
480 510
@@ -485,18 +515,25 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
485static int econet_getname(struct socket *sock, struct sockaddr *uaddr, 515static int econet_getname(struct socket *sock, struct sockaddr *uaddr,
486 int *uaddr_len, int peer) 516 int *uaddr_len, int peer)
487{ 517{
488 struct sock *sk = sock->sk; 518 struct sock *sk;
489 struct econet_sock *eo = ec_sk(sk); 519 struct econet_sock *eo;
490 struct sockaddr_ec *sec = (struct sockaddr_ec *)uaddr; 520 struct sockaddr_ec *sec = (struct sockaddr_ec *)uaddr;
491 521
492 if (peer) 522 if (peer)
493 return -EOPNOTSUPP; 523 return -EOPNOTSUPP;
494 524
525 mutex_lock(&econet_mutex);
526
527 sk = sock->sk;
528 eo = ec_sk(sk);
529
495 sec->sec_family = AF_ECONET; 530 sec->sec_family = AF_ECONET;
496 sec->port = eo->port; 531 sec->port = eo->port;
497 sec->addr.station = eo->station; 532 sec->addr.station = eo->station;
498 sec->addr.net = eo->net; 533 sec->addr.net = eo->net;
499 534
535 mutex_unlock(&econet_mutex);
536
500 *uaddr_len = sizeof(*sec); 537 *uaddr_len = sizeof(*sec);
501 return 0; 538 return 0;
502} 539}
@@ -522,10 +559,13 @@ static void econet_destroy_timer(unsigned long data)
522 559
523static int econet_release(struct socket *sock) 560static int econet_release(struct socket *sock)
524{ 561{
525 struct sock *sk = sock->sk; 562 struct sock *sk;
526 563
564 mutex_lock(&econet_mutex);
565
566 sk = sock->sk;
527 if (!sk) 567 if (!sk)
528 return 0; 568 goto out_unlock;
529 569
530 econet_remove_socket(&econet_sklist, sk); 570 econet_remove_socket(&econet_sklist, sk);
531 571
@@ -549,10 +589,14 @@ static int econet_release(struct socket *sock)
549 sk->sk_timer.expires = jiffies + HZ; 589 sk->sk_timer.expires = jiffies + HZ;
550 sk->sk_timer.function = econet_destroy_timer; 590 sk->sk_timer.function = econet_destroy_timer;
551 add_timer(&sk->sk_timer); 591 add_timer(&sk->sk_timer);
552 return 0; 592
593 goto out_unlock;
553 } 594 }
554 595
555 sk_free(sk); 596 sk_free(sk);
597
598out_unlock:
599 mutex_unlock(&econet_mutex);
556 return 0; 600 return 0;
557} 601}
558 602
@@ -608,6 +652,7 @@ static int ec_dev_ioctl(struct socket *sock, unsigned int cmd, void __user *arg)
608 struct ec_device *edev; 652 struct ec_device *edev;
609 struct net_device *dev; 653 struct net_device *dev;
610 struct sockaddr_ec *sec; 654 struct sockaddr_ec *sec;
655 int err;
611 656
612 /* 657 /*
613 * Fetch the caller's info block into kernel space 658 * Fetch the caller's info block into kernel space
@@ -621,38 +666,35 @@ static int ec_dev_ioctl(struct socket *sock, unsigned int cmd, void __user *arg)
621 666
622 sec = (struct sockaddr_ec *)&ifr.ifr_addr; 667 sec = (struct sockaddr_ec *)&ifr.ifr_addr;
623 668
624 switch (cmd) 669 mutex_lock(&econet_mutex);
625 { 670
671 err = 0;
672 switch (cmd) {
626 case SIOCSIFADDR: 673 case SIOCSIFADDR:
627 edev = dev->ec_ptr; 674 edev = dev->ec_ptr;
628 if (edev == NULL) 675 if (edev == NULL) {
629 {
630 /* Magic up a new one. */ 676 /* Magic up a new one. */
631 edev = kmalloc(sizeof(struct ec_device), GFP_KERNEL); 677 edev = kmalloc(sizeof(struct ec_device), GFP_KERNEL);
632 if (edev == NULL) { 678 if (edev == NULL) {
633 printk("af_ec: memory squeeze.\n"); 679 err = -ENOMEM;
634 dev_put(dev); 680 break;
635 return -ENOMEM;
636 } 681 }
637 memset(edev, 0, sizeof(struct ec_device)); 682 memset(edev, 0, sizeof(struct ec_device));
638 dev->ec_ptr = edev; 683 dev->ec_ptr = edev;
639 } 684 } else
640 else
641 net2dev_map[edev->net] = NULL; 685 net2dev_map[edev->net] = NULL;
642 edev->station = sec->addr.station; 686 edev->station = sec->addr.station;
643 edev->net = sec->addr.net; 687 edev->net = sec->addr.net;
644 net2dev_map[sec->addr.net] = dev; 688 net2dev_map[sec->addr.net] = dev;
645 if (!net2dev_map[0]) 689 if (!net2dev_map[0])
646 net2dev_map[0] = dev; 690 net2dev_map[0] = dev;
647 dev_put(dev); 691 break;
648 return 0;
649 692
650 case SIOCGIFADDR: 693 case SIOCGIFADDR:
651 edev = dev->ec_ptr; 694 edev = dev->ec_ptr;
652 if (edev == NULL) 695 if (edev == NULL) {
653 { 696 err = -ENODEV;
654 dev_put(dev); 697 break;
655 return -ENODEV;
656 } 698 }
657 memset(sec, 0, sizeof(struct sockaddr_ec)); 699 memset(sec, 0, sizeof(struct sockaddr_ec));
658 sec->addr.station = edev->station; 700 sec->addr.station = edev->station;
@@ -660,12 +702,19 @@ static int ec_dev_ioctl(struct socket *sock, unsigned int cmd, void __user *arg)
660 sec->sec_family = AF_ECONET; 702 sec->sec_family = AF_ECONET;
661 dev_put(dev); 703 dev_put(dev);
662 if (copy_to_user(arg, &ifr, sizeof(struct ifreq))) 704 if (copy_to_user(arg, &ifr, sizeof(struct ifreq)))
663 return -EFAULT; 705 err = -EFAULT;
664 return 0; 706 break;
707
708 default:
709 err = -EINVAL;
710 break;
665 } 711 }
666 712
713 mutex_unlock(&econet_mutex);
714
667 dev_put(dev); 715 dev_put(dev);
668 return -EINVAL; 716
717 return err;
669} 718}
670 719
671/* 720/*
@@ -699,7 +748,7 @@ static struct net_proto_family econet_family_ops = {
699 .owner = THIS_MODULE, 748 .owner = THIS_MODULE,
700}; 749};
701 750
702static const struct proto_ops SOCKOPS_WRAPPED(econet_ops) = { 751static const struct proto_ops econet_ops = {
703 .family = PF_ECONET, 752 .family = PF_ECONET,
704 .owner = THIS_MODULE, 753 .owner = THIS_MODULE,
705 .release = econet_release, 754 .release = econet_release,
@@ -720,9 +769,6 @@ static const struct proto_ops SOCKOPS_WRAPPED(econet_ops) = {
720 .sendpage = sock_no_sendpage, 769 .sendpage = sock_no_sendpage,
721}; 770};
722 771
723#include <linux/smp_lock.h>
724SOCKOPS_WRAP(econet, PF_ECONET);
725
726#if defined(CONFIG_ECONET_AUNUDP) || defined(CONFIG_ECONET_NATIVE) 772#if defined(CONFIG_ECONET_AUNUDP) || defined(CONFIG_ECONET_NATIVE)
727/* 773/*
728 * Find the listening socket, if any, for the given data. 774 * Find the listening socket, if any, for the given data.
diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig
index 011cca7ae02b..e40f75322377 100644
--- a/net/ipv4/Kconfig
+++ b/net/ipv4/Kconfig
@@ -235,6 +235,7 @@ config IP_PNP_RARP
235# bool ' IP: ARP support' CONFIG_IP_PNP_ARP 235# bool ' IP: ARP support' CONFIG_IP_PNP_ARP
236config NET_IPIP 236config NET_IPIP
237 tristate "IP: tunneling" 237 tristate "IP: tunneling"
238 select INET_TUNNEL
238 ---help--- 239 ---help---
239 Tunneling means encapsulating data of one protocol type within 240 Tunneling means encapsulating data of one protocol type within
240 another protocol and sending it over a channel that understands the 241 another protocol and sending it over a channel that understands the
@@ -395,7 +396,7 @@ config INET_ESP
395config INET_IPCOMP 396config INET_IPCOMP
396 tristate "IP: IPComp transformation" 397 tristate "IP: IPComp transformation"
397 select XFRM 398 select XFRM
398 select INET_TUNNEL 399 select INET_XFRM_TUNNEL
399 select CRYPTO 400 select CRYPTO
400 select CRYPTO_DEFLATE 401 select CRYPTO_DEFLATE
401 ---help--- 402 ---help---
@@ -404,14 +405,14 @@ config INET_IPCOMP
404 405
405 If unsure, say Y. 406 If unsure, say Y.
406 407
408config INET_XFRM_TUNNEL
409 tristate
410 select INET_TUNNEL
411 default n
412
407config INET_TUNNEL 413config INET_TUNNEL
408 tristate "IP: tunnel transformation" 414 tristate
409 select XFRM 415 default n
410 ---help---
411 Support for generic IP tunnel transformation, which is required by
412 the IP tunneling module as well as tunnel mode IPComp.
413
414 If unsure, say Y.
415 416
416config INET_DIAG 417config INET_DIAG
417 tristate "INET: socket monitoring interface" 418 tristate "INET: socket monitoring interface"
diff --git a/net/ipv4/Makefile b/net/ipv4/Makefile
index 35e5f5999092..9ef50a0b9d2c 100644
--- a/net/ipv4/Makefile
+++ b/net/ipv4/Makefile
@@ -22,7 +22,8 @@ obj-$(CONFIG_SYN_COOKIES) += syncookies.o
22obj-$(CONFIG_INET_AH) += ah4.o 22obj-$(CONFIG_INET_AH) += ah4.o
23obj-$(CONFIG_INET_ESP) += esp4.o 23obj-$(CONFIG_INET_ESP) += esp4.o
24obj-$(CONFIG_INET_IPCOMP) += ipcomp.o 24obj-$(CONFIG_INET_IPCOMP) += ipcomp.o
25obj-$(CONFIG_INET_TUNNEL) += xfrm4_tunnel.o 25obj-$(CONFIG_INET_XFRM_TUNNEL) += xfrm4_tunnel.o
26obj-$(CONFIG_INET_TUNNEL) += tunnel4.o
26obj-$(CONFIG_IP_PNP) += ipconfig.o 27obj-$(CONFIG_IP_PNP) += ipconfig.o
27obj-$(CONFIG_IP_ROUTE_MULTIPATH_RR) += multipath_rr.o 28obj-$(CONFIG_IP_ROUTE_MULTIPATH_RR) += multipath_rr.o
28obj-$(CONFIG_IP_ROUTE_MULTIPATH_RANDOM) += multipath_random.o 29obj-$(CONFIG_IP_ROUTE_MULTIPATH_RANDOM) += multipath_random.o
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
index 03d13742a4b8..eef07b0916a3 100644
--- a/net/ipv4/ipip.c
+++ b/net/ipv4/ipip.c
@@ -114,7 +114,6 @@
114#include <net/sock.h> 114#include <net/sock.h>
115#include <net/ip.h> 115#include <net/ip.h>
116#include <net/icmp.h> 116#include <net/icmp.h>
117#include <net/protocol.h>
118#include <net/ipip.h> 117#include <net/ipip.h>
119#include <net/inet_ecn.h> 118#include <net/inet_ecn.h>
120#include <net/xfrm.h> 119#include <net/xfrm.h>
@@ -274,7 +273,7 @@ static void ipip_tunnel_uninit(struct net_device *dev)
274 dev_put(dev); 273 dev_put(dev);
275} 274}
276 275
277static void ipip_err(struct sk_buff *skb, u32 info) 276static int ipip_err(struct sk_buff *skb, u32 info)
278{ 277{
279#ifndef I_WISH_WORLD_WERE_PERFECT 278#ifndef I_WISH_WORLD_WERE_PERFECT
280 279
@@ -286,21 +285,22 @@ static void ipip_err(struct sk_buff *skb, u32 info)
286 int type = skb->h.icmph->type; 285 int type = skb->h.icmph->type;
287 int code = skb->h.icmph->code; 286 int code = skb->h.icmph->code;
288 struct ip_tunnel *t; 287 struct ip_tunnel *t;
288 int err;
289 289
290 switch (type) { 290 switch (type) {
291 default: 291 default:
292 case ICMP_PARAMETERPROB: 292 case ICMP_PARAMETERPROB:
293 return; 293 return 0;
294 294
295 case ICMP_DEST_UNREACH: 295 case ICMP_DEST_UNREACH:
296 switch (code) { 296 switch (code) {
297 case ICMP_SR_FAILED: 297 case ICMP_SR_FAILED:
298 case ICMP_PORT_UNREACH: 298 case ICMP_PORT_UNREACH:
299 /* Impossible event. */ 299 /* Impossible event. */
300 return; 300 return 0;
301 case ICMP_FRAG_NEEDED: 301 case ICMP_FRAG_NEEDED:
302 /* Soft state for pmtu is maintained by IP core. */ 302 /* Soft state for pmtu is maintained by IP core. */
303 return; 303 return 0;
304 default: 304 default:
305 /* All others are translated to HOST_UNREACH. 305 /* All others are translated to HOST_UNREACH.
306 rfc2003 contains "deep thoughts" about NET_UNREACH, 306 rfc2003 contains "deep thoughts" about NET_UNREACH,
@@ -311,14 +311,18 @@ static void ipip_err(struct sk_buff *skb, u32 info)
311 break; 311 break;
312 case ICMP_TIME_EXCEEDED: 312 case ICMP_TIME_EXCEEDED:
313 if (code != ICMP_EXC_TTL) 313 if (code != ICMP_EXC_TTL)
314 return; 314 return 0;
315 break; 315 break;
316 } 316 }
317 317
318 err = -ENOENT;
319
318 read_lock(&ipip_lock); 320 read_lock(&ipip_lock);
319 t = ipip_tunnel_lookup(iph->daddr, iph->saddr); 321 t = ipip_tunnel_lookup(iph->daddr, iph->saddr);
320 if (t == NULL || t->parms.iph.daddr == 0) 322 if (t == NULL || t->parms.iph.daddr == 0)
321 goto out; 323 goto out;
324
325 err = 0;
322 if (t->parms.iph.ttl == 0 && type == ICMP_TIME_EXCEEDED) 326 if (t->parms.iph.ttl == 0 && type == ICMP_TIME_EXCEEDED)
323 goto out; 327 goto out;
324 328
@@ -329,7 +333,7 @@ static void ipip_err(struct sk_buff *skb, u32 info)
329 t->err_time = jiffies; 333 t->err_time = jiffies;
330out: 334out:
331 read_unlock(&ipip_lock); 335 read_unlock(&ipip_lock);
332 return; 336 return err;
333#else 337#else
334 struct iphdr *iph = (struct iphdr*)dp; 338 struct iphdr *iph = (struct iphdr*)dp;
335 int hlen = iph->ihl<<2; 339 int hlen = iph->ihl<<2;
@@ -344,15 +348,15 @@ out:
344 struct rtable *rt; 348 struct rtable *rt;
345 349
346 if (len < hlen + sizeof(struct iphdr)) 350 if (len < hlen + sizeof(struct iphdr))
347 return; 351 return 0;
348 eiph = (struct iphdr*)(dp + hlen); 352 eiph = (struct iphdr*)(dp + hlen);
349 353
350 switch (type) { 354 switch (type) {
351 default: 355 default:
352 return; 356 return 0;
353 case ICMP_PARAMETERPROB: 357 case ICMP_PARAMETERPROB:
354 if (skb->h.icmph->un.gateway < hlen) 358 if (skb->h.icmph->un.gateway < hlen)
355 return; 359 return 0;
356 360
357 /* So... This guy found something strange INSIDE encapsulated 361 /* So... This guy found something strange INSIDE encapsulated
358 packet. Well, he is fool, but what can we do ? 362 packet. Well, he is fool, but what can we do ?
@@ -366,16 +370,16 @@ out:
366 case ICMP_SR_FAILED: 370 case ICMP_SR_FAILED:
367 case ICMP_PORT_UNREACH: 371 case ICMP_PORT_UNREACH:
368 /* Impossible event. */ 372 /* Impossible event. */
369 return; 373 return 0;
370 case ICMP_FRAG_NEEDED: 374 case ICMP_FRAG_NEEDED:
371 /* And it is the only really necessary thing :-) */ 375 /* And it is the only really necessary thing :-) */
372 rel_info = ntohs(skb->h.icmph->un.frag.mtu); 376 rel_info = ntohs(skb->h.icmph->un.frag.mtu);
373 if (rel_info < hlen+68) 377 if (rel_info < hlen+68)
374 return; 378 return 0;
375 rel_info -= hlen; 379 rel_info -= hlen;
376 /* BSD 4.2 MORE DOES NOT EXIST IN NATURE. */ 380 /* BSD 4.2 MORE DOES NOT EXIST IN NATURE. */
377 if (rel_info > ntohs(eiph->tot_len)) 381 if (rel_info > ntohs(eiph->tot_len))
378 return; 382 return 0;
379 break; 383 break;
380 default: 384 default:
381 /* All others are translated to HOST_UNREACH. 385 /* All others are translated to HOST_UNREACH.
@@ -389,14 +393,14 @@ out:
389 break; 393 break;
390 case ICMP_TIME_EXCEEDED: 394 case ICMP_TIME_EXCEEDED:
391 if (code != ICMP_EXC_TTL) 395 if (code != ICMP_EXC_TTL)
392 return; 396 return 0;
393 break; 397 break;
394 } 398 }
395 399
396 /* Prepare fake skb to feed it to icmp_send */ 400 /* Prepare fake skb to feed it to icmp_send */
397 skb2 = skb_clone(skb, GFP_ATOMIC); 401 skb2 = skb_clone(skb, GFP_ATOMIC);
398 if (skb2 == NULL) 402 if (skb2 == NULL)
399 return; 403 return 0;
400 dst_release(skb2->dst); 404 dst_release(skb2->dst);
401 skb2->dst = NULL; 405 skb2->dst = NULL;
402 skb_pull(skb2, skb->data - (u8*)eiph); 406 skb_pull(skb2, skb->data - (u8*)eiph);
@@ -409,7 +413,7 @@ out:
409 fl.proto = IPPROTO_IPIP; 413 fl.proto = IPPROTO_IPIP;
410 if (ip_route_output_key(&rt, &key)) { 414 if (ip_route_output_key(&rt, &key)) {
411 kfree_skb(skb2); 415 kfree_skb(skb2);
412 return; 416 return 0;
413 } 417 }
414 skb2->dev = rt->u.dst.dev; 418 skb2->dev = rt->u.dst.dev;
415 419
@@ -424,14 +428,14 @@ out:
424 rt->u.dst.dev->type != ARPHRD_TUNNEL) { 428 rt->u.dst.dev->type != ARPHRD_TUNNEL) {
425 ip_rt_put(rt); 429 ip_rt_put(rt);
426 kfree_skb(skb2); 430 kfree_skb(skb2);
427 return; 431 return 0;
428 } 432 }
429 } else { 433 } else {
430 ip_rt_put(rt); 434 ip_rt_put(rt);
431 if (ip_route_input(skb2, eiph->daddr, eiph->saddr, eiph->tos, skb2->dev) || 435 if (ip_route_input(skb2, eiph->daddr, eiph->saddr, eiph->tos, skb2->dev) ||
432 skb2->dst->dev->type != ARPHRD_TUNNEL) { 436 skb2->dst->dev->type != ARPHRD_TUNNEL) {
433 kfree_skb(skb2); 437 kfree_skb(skb2);
434 return; 438 return 0;
435 } 439 }
436 } 440 }
437 441
@@ -439,7 +443,7 @@ out:
439 if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) { 443 if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) {
440 if (rel_info > dst_mtu(skb2->dst)) { 444 if (rel_info > dst_mtu(skb2->dst)) {
441 kfree_skb(skb2); 445 kfree_skb(skb2);
442 return; 446 return 0;
443 } 447 }
444 skb2->dst->ops->update_pmtu(skb2->dst, rel_info); 448 skb2->dst->ops->update_pmtu(skb2->dst, rel_info);
445 rel_info = htonl(rel_info); 449 rel_info = htonl(rel_info);
@@ -453,7 +457,7 @@ out:
453 457
454 icmp_send(skb2, rel_type, rel_code, rel_info); 458 icmp_send(skb2, rel_type, rel_code, rel_info);
455 kfree_skb(skb2); 459 kfree_skb(skb2);
456 return; 460 return 0;
457#endif 461#endif
458} 462}
459 463
@@ -855,39 +859,12 @@ static int __init ipip_fb_tunnel_init(struct net_device *dev)
855 return 0; 859 return 0;
856} 860}
857 861
858#ifdef CONFIG_INET_TUNNEL
859static struct xfrm_tunnel ipip_handler = { 862static struct xfrm_tunnel ipip_handler = {
860 .handler = ipip_rcv, 863 .handler = ipip_rcv,
861 .err_handler = ipip_err, 864 .err_handler = ipip_err,
865 .priority = 1,
862}; 866};
863 867
864static inline int ipip_register(void)
865{
866 return xfrm4_tunnel_register(&ipip_handler);
867}
868
869static inline int ipip_unregister(void)
870{
871 return xfrm4_tunnel_deregister(&ipip_handler);
872}
873#else
874static struct net_protocol ipip_protocol = {
875 .handler = ipip_rcv,
876 .err_handler = ipip_err,
877 .no_policy = 1,
878};
879
880static inline int ipip_register(void)
881{
882 return inet_add_protocol(&ipip_protocol, IPPROTO_IPIP);
883}
884
885static inline int ipip_unregister(void)
886{
887 return inet_del_protocol(&ipip_protocol, IPPROTO_IPIP);
888}
889#endif
890
891static char banner[] __initdata = 868static char banner[] __initdata =
892 KERN_INFO "IPv4 over IPv4 tunneling driver\n"; 869 KERN_INFO "IPv4 over IPv4 tunneling driver\n";
893 870
@@ -897,7 +874,7 @@ static int __init ipip_init(void)
897 874
898 printk(banner); 875 printk(banner);
899 876
900 if (ipip_register() < 0) { 877 if (xfrm4_tunnel_register(&ipip_handler)) {
901 printk(KERN_INFO "ipip init: can't register tunnel\n"); 878 printk(KERN_INFO "ipip init: can't register tunnel\n");
902 return -EAGAIN; 879 return -EAGAIN;
903 } 880 }
@@ -919,7 +896,7 @@ static int __init ipip_init(void)
919 err2: 896 err2:
920 free_netdev(ipip_fb_tunnel_dev); 897 free_netdev(ipip_fb_tunnel_dev);
921 err1: 898 err1:
922 ipip_unregister(); 899 xfrm4_tunnel_deregister(&ipip_handler);
923 goto out; 900 goto out;
924} 901}
925 902
@@ -939,7 +916,7 @@ static void __exit ipip_destroy_tunnels(void)
939 916
940static void __exit ipip_fini(void) 917static void __exit ipip_fini(void)
941{ 918{
942 if (ipip_unregister() < 0) 919 if (xfrm4_tunnel_deregister(&ipip_handler))
943 printk(KERN_INFO "ipip close: can't deregister tunnel\n"); 920 printk(KERN_INFO "ipip close: can't deregister tunnel\n");
944 921
945 rtnl_lock(); 922 rtnl_lock();
diff --git a/net/ipv4/netfilter.c b/net/ipv4/netfilter.c
index ed42cdc57cd9..b5ad9ac2fbcc 100644
--- a/net/ipv4/netfilter.c
+++ b/net/ipv4/netfilter.c
@@ -167,15 +167,15 @@ static struct nf_queue_rerouter ip_reroute = {
167 .reroute = queue_reroute, 167 .reroute = queue_reroute,
168}; 168};
169 169
170static int init(void) 170static int ipv4_netfilter_init(void)
171{ 171{
172 return nf_register_queue_rerouter(PF_INET, &ip_reroute); 172 return nf_register_queue_rerouter(PF_INET, &ip_reroute);
173} 173}
174 174
175static void fini(void) 175static void ipv4_netfilter_fini(void)
176{ 176{
177 nf_unregister_queue_rerouter(PF_INET); 177 nf_unregister_queue_rerouter(PF_INET);
178} 178}
179 179
180module_init(init); 180module_init(ipv4_netfilter_init);
181module_exit(fini); 181module_exit(ipv4_netfilter_fini);
diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c
index ff0c594a4198..a44a5d73457d 100644
--- a/net/ipv4/netfilter/arp_tables.c
+++ b/net/ipv4/netfilter/arp_tables.c
@@ -1166,7 +1166,7 @@ static struct nf_sockopt_ops arpt_sockopts = {
1166 .get = do_arpt_get_ctl, 1166 .get = do_arpt_get_ctl,
1167}; 1167};
1168 1168
1169static int __init init(void) 1169static int __init arp_tables_init(void)
1170{ 1170{
1171 int ret; 1171 int ret;
1172 1172
@@ -1187,7 +1187,7 @@ static int __init init(void)
1187 return 0; 1187 return 0;
1188} 1188}
1189 1189
1190static void __exit fini(void) 1190static void __exit arp_tables_fini(void)
1191{ 1191{
1192 nf_unregister_sockopt(&arpt_sockopts); 1192 nf_unregister_sockopt(&arpt_sockopts);
1193 xt_proto_fini(NF_ARP); 1193 xt_proto_fini(NF_ARP);
@@ -1197,5 +1197,5 @@ EXPORT_SYMBOL(arpt_register_table);
1197EXPORT_SYMBOL(arpt_unregister_table); 1197EXPORT_SYMBOL(arpt_unregister_table);
1198EXPORT_SYMBOL(arpt_do_table); 1198EXPORT_SYMBOL(arpt_do_table);
1199 1199
1200module_init(init); 1200module_init(arp_tables_init);
1201module_exit(fini); 1201module_exit(arp_tables_fini);
diff --git a/net/ipv4/netfilter/arpt_mangle.c b/net/ipv4/netfilter/arpt_mangle.c
index 0f2a95350e26..a58325c1ceb9 100644
--- a/net/ipv4/netfilter/arpt_mangle.c
+++ b/net/ipv4/netfilter/arpt_mangle.c
@@ -89,7 +89,7 @@ static struct arpt_target arpt_mangle_reg = {
89 .me = THIS_MODULE, 89 .me = THIS_MODULE,
90}; 90};
91 91
92static int __init init(void) 92static int __init arpt_mangle_init(void)
93{ 93{
94 if (arpt_register_target(&arpt_mangle_reg)) 94 if (arpt_register_target(&arpt_mangle_reg))
95 return -EINVAL; 95 return -EINVAL;
@@ -97,10 +97,10 @@ static int __init init(void)
97 return 0; 97 return 0;
98} 98}
99 99
100static void __exit fini(void) 100static void __exit arpt_mangle_fini(void)
101{ 101{
102 arpt_unregister_target(&arpt_mangle_reg); 102 arpt_unregister_target(&arpt_mangle_reg);
103} 103}
104 104
105module_init(init); 105module_init(arpt_mangle_init);
106module_exit(fini); 106module_exit(arpt_mangle_fini);
diff --git a/net/ipv4/netfilter/arptable_filter.c b/net/ipv4/netfilter/arptable_filter.c
index f6ab45f48681..d0d379c7df9a 100644
--- a/net/ipv4/netfilter/arptable_filter.c
+++ b/net/ipv4/netfilter/arptable_filter.c
@@ -179,7 +179,7 @@ static struct nf_hook_ops arpt_ops[] = {
179 }, 179 },
180}; 180};
181 181
182static int __init init(void) 182static int __init arptable_filter_init(void)
183{ 183{
184 int ret, i; 184 int ret, i;
185 185
@@ -201,7 +201,7 @@ cleanup_hooks:
201 return ret; 201 return ret;
202} 202}
203 203
204static void __exit fini(void) 204static void __exit arptable_filter_fini(void)
205{ 205{
206 unsigned int i; 206 unsigned int i;
207 207
@@ -211,5 +211,5 @@ static void __exit fini(void)
211 arpt_unregister_table(&packet_filter); 211 arpt_unregister_table(&packet_filter);
212} 212}
213 213
214module_init(init); 214module_init(arptable_filter_init);
215module_exit(fini); 215module_exit(arptable_filter_fini);
diff --git a/net/ipv4/netfilter/ip_conntrack_amanda.c b/net/ipv4/netfilter/ip_conntrack_amanda.c
index 84e4f79b7ffa..a604b1ccfdaa 100644
--- a/net/ipv4/netfilter/ip_conntrack_amanda.c
+++ b/net/ipv4/netfilter/ip_conntrack_amanda.c
@@ -153,13 +153,13 @@ static struct ip_conntrack_helper amanda_helper = {
153 }, 153 },
154}; 154};
155 155
156static void __exit fini(void) 156static void __exit ip_conntrack_amanda_fini(void)
157{ 157{
158 ip_conntrack_helper_unregister(&amanda_helper); 158 ip_conntrack_helper_unregister(&amanda_helper);
159 kfree(amanda_buffer); 159 kfree(amanda_buffer);
160} 160}
161 161
162static int __init init(void) 162static int __init ip_conntrack_amanda_init(void)
163{ 163{
164 int ret; 164 int ret;
165 165
@@ -177,5 +177,5 @@ static int __init init(void)
177 177
178} 178}
179 179
180module_init(init); 180module_init(ip_conntrack_amanda_init);
181module_exit(fini); 181module_exit(ip_conntrack_amanda_fini);
diff --git a/net/ipv4/netfilter/ip_conntrack_ftp.c b/net/ipv4/netfilter/ip_conntrack_ftp.c
index e627e5856172..3e542bf28a9d 100644
--- a/net/ipv4/netfilter/ip_conntrack_ftp.c
+++ b/net/ipv4/netfilter/ip_conntrack_ftp.c
@@ -453,7 +453,7 @@ static struct ip_conntrack_helper ftp[MAX_PORTS];
453static char ftp_names[MAX_PORTS][sizeof("ftp-65535")]; 453static char ftp_names[MAX_PORTS][sizeof("ftp-65535")];
454 454
455/* Not __exit: called from init() */ 455/* Not __exit: called from init() */
456static void fini(void) 456static void ip_conntrack_ftp_fini(void)
457{ 457{
458 int i; 458 int i;
459 for (i = 0; i < ports_c; i++) { 459 for (i = 0; i < ports_c; i++) {
@@ -465,7 +465,7 @@ static void fini(void)
465 kfree(ftp_buffer); 465 kfree(ftp_buffer);
466} 466}
467 467
468static int __init init(void) 468static int __init ip_conntrack_ftp_init(void)
469{ 469{
470 int i, ret; 470 int i, ret;
471 char *tmpname; 471 char *tmpname;
@@ -499,12 +499,12 @@ static int __init init(void)
499 ret = ip_conntrack_helper_register(&ftp[i]); 499 ret = ip_conntrack_helper_register(&ftp[i]);
500 500
501 if (ret) { 501 if (ret) {
502 fini(); 502 ip_conntrack_ftp_fini();
503 return ret; 503 return ret;
504 } 504 }
505 } 505 }
506 return 0; 506 return 0;
507} 507}
508 508
509module_init(init); 509module_init(ip_conntrack_ftp_init);
510module_exit(fini); 510module_exit(ip_conntrack_ftp_fini);
diff --git a/net/ipv4/netfilter/ip_conntrack_helper_pptp.c b/net/ipv4/netfilter/ip_conntrack_helper_pptp.c
index d716bba798f2..7d3ba4302e9e 100644
--- a/net/ipv4/netfilter/ip_conntrack_helper_pptp.c
+++ b/net/ipv4/netfilter/ip_conntrack_helper_pptp.c
@@ -766,7 +766,7 @@ extern void ip_ct_proto_gre_fini(void);
766extern int __init ip_ct_proto_gre_init(void); 766extern int __init ip_ct_proto_gre_init(void);
767 767
768/* ip_conntrack_pptp initialization */ 768/* ip_conntrack_pptp initialization */
769static int __init init(void) 769static int __init ip_conntrack_helper_pptp_init(void)
770{ 770{
771 int retcode; 771 int retcode;
772 772
@@ -786,15 +786,15 @@ static int __init init(void)
786 return 0; 786 return 0;
787} 787}
788 788
789static void __exit fini(void) 789static void __exit ip_conntrack_helper_pptp_fini(void)
790{ 790{
791 ip_conntrack_helper_unregister(&pptp); 791 ip_conntrack_helper_unregister(&pptp);
792 ip_ct_proto_gre_fini(); 792 ip_ct_proto_gre_fini();
793 printk("ip_conntrack_pptp version %s unloaded\n", IP_CT_PPTP_VERSION); 793 printk("ip_conntrack_pptp version %s unloaded\n", IP_CT_PPTP_VERSION);
794} 794}
795 795
796module_init(init); 796module_init(ip_conntrack_helper_pptp_init);
797module_exit(fini); 797module_exit(ip_conntrack_helper_pptp_fini);
798 798
799EXPORT_SYMBOL(ip_nat_pptp_hook_outbound); 799EXPORT_SYMBOL(ip_nat_pptp_hook_outbound);
800EXPORT_SYMBOL(ip_nat_pptp_hook_inbound); 800EXPORT_SYMBOL(ip_nat_pptp_hook_inbound);
diff --git a/net/ipv4/netfilter/ip_conntrack_irc.c b/net/ipv4/netfilter/ip_conntrack_irc.c
index c51a2cf71b4b..a2ac5ce544b2 100644
--- a/net/ipv4/netfilter/ip_conntrack_irc.c
+++ b/net/ipv4/netfilter/ip_conntrack_irc.c
@@ -242,9 +242,9 @@ static int help(struct sk_buff **pskb,
242static struct ip_conntrack_helper irc_helpers[MAX_PORTS]; 242static struct ip_conntrack_helper irc_helpers[MAX_PORTS];
243static char irc_names[MAX_PORTS][sizeof("irc-65535")]; 243static char irc_names[MAX_PORTS][sizeof("irc-65535")];
244 244
245static void fini(void); 245static void ip_conntrack_irc_fini(void);
246 246
247static int __init init(void) 247static int __init ip_conntrack_irc_init(void)
248{ 248{
249 int i, ret; 249 int i, ret;
250 struct ip_conntrack_helper *hlpr; 250 struct ip_conntrack_helper *hlpr;
@@ -288,7 +288,7 @@ static int __init init(void)
288 if (ret) { 288 if (ret) {
289 printk("ip_conntrack_irc: ERROR registering port %d\n", 289 printk("ip_conntrack_irc: ERROR registering port %d\n",
290 ports[i]); 290 ports[i]);
291 fini(); 291 ip_conntrack_irc_fini();
292 return -EBUSY; 292 return -EBUSY;
293 } 293 }
294 } 294 }
@@ -297,7 +297,7 @@ static int __init init(void)
297 297
298/* This function is intentionally _NOT_ defined as __exit, because 298/* This function is intentionally _NOT_ defined as __exit, because
299 * it is needed by the init function */ 299 * it is needed by the init function */
300static void fini(void) 300static void ip_conntrack_irc_fini(void)
301{ 301{
302 int i; 302 int i;
303 for (i = 0; i < ports_c; i++) { 303 for (i = 0; i < ports_c; i++) {
@@ -308,5 +308,5 @@ static void fini(void)
308 kfree(irc_buffer); 308 kfree(irc_buffer);
309} 309}
310 310
311module_init(init); 311module_init(ip_conntrack_irc_init);
312module_exit(fini); 312module_exit(ip_conntrack_irc_fini);
diff --git a/net/ipv4/netfilter/ip_conntrack_netbios_ns.c b/net/ipv4/netfilter/ip_conntrack_netbios_ns.c
index 4e68e16a2612..a566a81325b2 100644
--- a/net/ipv4/netfilter/ip_conntrack_netbios_ns.c
+++ b/net/ipv4/netfilter/ip_conntrack_netbios_ns.c
@@ -127,16 +127,16 @@ static struct ip_conntrack_helper helper = {
127 .help = help, 127 .help = help,
128}; 128};
129 129
130static int __init init(void) 130static int __init ip_conntrack_netbios_ns_init(void)
131{ 131{
132 helper.timeout = timeout; 132 helper.timeout = timeout;
133 return ip_conntrack_helper_register(&helper); 133 return ip_conntrack_helper_register(&helper);
134} 134}
135 135
136static void __exit fini(void) 136static void __exit ip_conntrack_netbios_ns_fini(void)
137{ 137{
138 ip_conntrack_helper_unregister(&helper); 138 ip_conntrack_helper_unregister(&helper);
139} 139}
140 140
141module_init(init); 141module_init(ip_conntrack_netbios_ns_init);
142module_exit(fini); 142module_exit(ip_conntrack_netbios_ns_fini);
diff --git a/net/ipv4/netfilter/ip_conntrack_proto_sctp.c b/net/ipv4/netfilter/ip_conntrack_proto_sctp.c
index be602e8aeab0..5259abd0fb42 100644
--- a/net/ipv4/netfilter/ip_conntrack_proto_sctp.c
+++ b/net/ipv4/netfilter/ip_conntrack_proto_sctp.c
@@ -609,7 +609,7 @@ static ctl_table ip_ct_net_table[] = {
609static struct ctl_table_header *ip_ct_sysctl_header; 609static struct ctl_table_header *ip_ct_sysctl_header;
610#endif 610#endif
611 611
612static int __init init(void) 612static int __init ip_conntrack_proto_sctp_init(void)
613{ 613{
614 int ret; 614 int ret;
615 615
@@ -640,7 +640,7 @@ static int __init init(void)
640 return ret; 640 return ret;
641} 641}
642 642
643static void __exit fini(void) 643static void __exit ip_conntrack_proto_sctp_fini(void)
644{ 644{
645 ip_conntrack_protocol_unregister(&ip_conntrack_protocol_sctp); 645 ip_conntrack_protocol_unregister(&ip_conntrack_protocol_sctp);
646#ifdef CONFIG_SYSCTL 646#ifdef CONFIG_SYSCTL
@@ -649,8 +649,8 @@ static void __exit fini(void)
649 DEBUGP("SCTP conntrack module unloaded\n"); 649 DEBUGP("SCTP conntrack module unloaded\n");
650} 650}
651 651
652module_init(init); 652module_init(ip_conntrack_proto_sctp_init);
653module_exit(fini); 653module_exit(ip_conntrack_proto_sctp_fini);
654 654
655MODULE_LICENSE("GPL"); 655MODULE_LICENSE("GPL");
656MODULE_AUTHOR("Kiran Kumar Immidi"); 656MODULE_AUTHOR("Kiran Kumar Immidi");
diff --git a/net/ipv4/netfilter/ip_conntrack_standalone.c b/net/ipv4/netfilter/ip_conntrack_standalone.c
index 833fcb4be5e7..52076026db36 100644
--- a/net/ipv4/netfilter/ip_conntrack_standalone.c
+++ b/net/ipv4/netfilter/ip_conntrack_standalone.c
@@ -929,18 +929,18 @@ void ip_conntrack_protocol_unregister(struct ip_conntrack_protocol *proto)
929 ip_ct_iterate_cleanup(kill_proto, &proto->proto); 929 ip_ct_iterate_cleanup(kill_proto, &proto->proto);
930} 930}
931 931
932static int __init init(void) 932static int __init ip_conntrack_standalone_init(void)
933{ 933{
934 return init_or_cleanup(1); 934 return init_or_cleanup(1);
935} 935}
936 936
937static void __exit fini(void) 937static void __exit ip_conntrack_standalone_fini(void)
938{ 938{
939 init_or_cleanup(0); 939 init_or_cleanup(0);
940} 940}
941 941
942module_init(init); 942module_init(ip_conntrack_standalone_init);
943module_exit(fini); 943module_exit(ip_conntrack_standalone_fini);
944 944
945/* Some modules need us, but don't depend directly on any symbol. 945/* Some modules need us, but don't depend directly on any symbol.
946 They should call this. */ 946 They should call this. */
diff --git a/net/ipv4/netfilter/ip_conntrack_tftp.c b/net/ipv4/netfilter/ip_conntrack_tftp.c
index 4ba4463cec28..7e33d3bed5e3 100644
--- a/net/ipv4/netfilter/ip_conntrack_tftp.c
+++ b/net/ipv4/netfilter/ip_conntrack_tftp.c
@@ -103,7 +103,7 @@ static int tftp_help(struct sk_buff **pskb,
103static struct ip_conntrack_helper tftp[MAX_PORTS]; 103static struct ip_conntrack_helper tftp[MAX_PORTS];
104static char tftp_names[MAX_PORTS][sizeof("tftp-65535")]; 104static char tftp_names[MAX_PORTS][sizeof("tftp-65535")];
105 105
106static void fini(void) 106static void ip_conntrack_tftp_fini(void)
107{ 107{
108 int i; 108 int i;
109 109
@@ -114,7 +114,7 @@ static void fini(void)
114 } 114 }
115} 115}
116 116
117static int __init init(void) 117static int __init ip_conntrack_tftp_init(void)
118{ 118{
119 int i, ret; 119 int i, ret;
120 char *tmpname; 120 char *tmpname;
@@ -148,12 +148,12 @@ static int __init init(void)
148 if (ret) { 148 if (ret) {
149 printk("ERROR registering helper for port %d\n", 149 printk("ERROR registering helper for port %d\n",
150 ports[i]); 150 ports[i]);
151 fini(); 151 ip_conntrack_tftp_fini();
152 return(ret); 152 return(ret);
153 } 153 }
154 } 154 }
155 return(0); 155 return(0);
156} 156}
157 157
158module_init(init); 158module_init(ip_conntrack_tftp_init);
159module_exit(fini); 159module_exit(ip_conntrack_tftp_fini);
diff --git a/net/ipv4/netfilter/ip_nat_amanda.c b/net/ipv4/netfilter/ip_nat_amanda.c
index 706c8074f422..3a888715bbf3 100644
--- a/net/ipv4/netfilter/ip_nat_amanda.c
+++ b/net/ipv4/netfilter/ip_nat_amanda.c
@@ -68,19 +68,19 @@ static unsigned int help(struct sk_buff **pskb,
68 return ret; 68 return ret;
69} 69}
70 70
71static void __exit fini(void) 71static void __exit ip_nat_amanda_fini(void)
72{ 72{
73 ip_nat_amanda_hook = NULL; 73 ip_nat_amanda_hook = NULL;
74 /* Make sure noone calls it, meanwhile. */ 74 /* Make sure noone calls it, meanwhile. */
75 synchronize_net(); 75 synchronize_net();
76} 76}
77 77
78static int __init init(void) 78static int __init ip_nat_amanda_init(void)
79{ 79{
80 BUG_ON(ip_nat_amanda_hook); 80 BUG_ON(ip_nat_amanda_hook);
81 ip_nat_amanda_hook = help; 81 ip_nat_amanda_hook = help;
82 return 0; 82 return 0;
83} 83}
84 84
85module_init(init); 85module_init(ip_nat_amanda_init);
86module_exit(fini); 86module_exit(ip_nat_amanda_fini);
diff --git a/net/ipv4/netfilter/ip_nat_ftp.c b/net/ipv4/netfilter/ip_nat_ftp.c
index b8daab3c64af..3328fc5c5f50 100644
--- a/net/ipv4/netfilter/ip_nat_ftp.c
+++ b/net/ipv4/netfilter/ip_nat_ftp.c
@@ -154,14 +154,14 @@ static unsigned int ip_nat_ftp(struct sk_buff **pskb,
154 return NF_ACCEPT; 154 return NF_ACCEPT;
155} 155}
156 156
157static void __exit fini(void) 157static void __exit ip_nat_ftp_fini(void)
158{ 158{
159 ip_nat_ftp_hook = NULL; 159 ip_nat_ftp_hook = NULL;
160 /* Make sure noone calls it, meanwhile. */ 160 /* Make sure noone calls it, meanwhile. */
161 synchronize_net(); 161 synchronize_net();
162} 162}
163 163
164static int __init init(void) 164static int __init ip_nat_ftp_init(void)
165{ 165{
166 BUG_ON(ip_nat_ftp_hook); 166 BUG_ON(ip_nat_ftp_hook);
167 ip_nat_ftp_hook = ip_nat_ftp; 167 ip_nat_ftp_hook = ip_nat_ftp;
@@ -177,5 +177,5 @@ static int warn_set(const char *val, struct kernel_param *kp)
177} 177}
178module_param_call(ports, warn_set, NULL, NULL, 0); 178module_param_call(ports, warn_set, NULL, NULL, 0);
179 179
180module_init(init); 180module_init(ip_nat_ftp_init);
181module_exit(fini); 181module_exit(ip_nat_ftp_fini);
diff --git a/net/ipv4/netfilter/ip_nat_helper_pptp.c b/net/ipv4/netfilter/ip_nat_helper_pptp.c
index b9c016c063b8..f3977726ff09 100644
--- a/net/ipv4/netfilter/ip_nat_helper_pptp.c
+++ b/net/ipv4/netfilter/ip_nat_helper_pptp.c
@@ -370,7 +370,7 @@ pptp_inbound_pkt(struct sk_buff **pskb,
370extern int __init ip_nat_proto_gre_init(void); 370extern int __init ip_nat_proto_gre_init(void);
371extern void __exit ip_nat_proto_gre_fini(void); 371extern void __exit ip_nat_proto_gre_fini(void);
372 372
373static int __init init(void) 373static int __init ip_nat_helper_pptp_init(void)
374{ 374{
375 int ret; 375 int ret;
376 376
@@ -396,7 +396,7 @@ static int __init init(void)
396 return 0; 396 return 0;
397} 397}
398 398
399static void __exit fini(void) 399static void __exit ip_nat_helper_pptp_fini(void)
400{ 400{
401 DEBUGP("cleanup_module\n" ); 401 DEBUGP("cleanup_module\n" );
402 402
@@ -412,5 +412,5 @@ static void __exit fini(void)
412 printk("ip_nat_pptp version %s unloaded\n", IP_NAT_PPTP_VERSION); 412 printk("ip_nat_pptp version %s unloaded\n", IP_NAT_PPTP_VERSION);
413} 413}
414 414
415module_init(init); 415module_init(ip_nat_helper_pptp_init);
416module_exit(fini); 416module_exit(ip_nat_helper_pptp_fini);
diff --git a/net/ipv4/netfilter/ip_nat_irc.c b/net/ipv4/netfilter/ip_nat_irc.c
index 461c833eaca1..a767123e082c 100644
--- a/net/ipv4/netfilter/ip_nat_irc.c
+++ b/net/ipv4/netfilter/ip_nat_irc.c
@@ -96,14 +96,14 @@ static unsigned int help(struct sk_buff **pskb,
96 return ret; 96 return ret;
97} 97}
98 98
99static void __exit fini(void) 99static void __exit ip_nat_irc_fini(void)
100{ 100{
101 ip_nat_irc_hook = NULL; 101 ip_nat_irc_hook = NULL;
102 /* Make sure noone calls it, meanwhile. */ 102 /* Make sure noone calls it, meanwhile. */
103 synchronize_net(); 103 synchronize_net();
104} 104}
105 105
106static int __init init(void) 106static int __init ip_nat_irc_init(void)
107{ 107{
108 BUG_ON(ip_nat_irc_hook); 108 BUG_ON(ip_nat_irc_hook);
109 ip_nat_irc_hook = help; 109 ip_nat_irc_hook = help;
@@ -119,5 +119,5 @@ static int warn_set(const char *val, struct kernel_param *kp)
119} 119}
120module_param_call(ports, warn_set, NULL, NULL, 0); 120module_param_call(ports, warn_set, NULL, NULL, 0);
121 121
122module_init(init); 122module_init(ip_nat_irc_init);
123module_exit(fini); 123module_exit(ip_nat_irc_fini);
diff --git a/net/ipv4/netfilter/ip_nat_snmp_basic.c b/net/ipv4/netfilter/ip_nat_snmp_basic.c
index f029da2a60ee..c62253845538 100644
--- a/net/ipv4/netfilter/ip_nat_snmp_basic.c
+++ b/net/ipv4/netfilter/ip_nat_snmp_basic.c
@@ -1324,7 +1324,7 @@ static struct ip_conntrack_helper snmp_trap_helper = {
1324 * 1324 *
1325 *****************************************************************************/ 1325 *****************************************************************************/
1326 1326
1327static int __init init(void) 1327static int __init ip_nat_snmp_basic_init(void)
1328{ 1328{
1329 int ret = 0; 1329 int ret = 0;
1330 1330
@@ -1339,13 +1339,13 @@ static int __init init(void)
1339 return ret; 1339 return ret;
1340} 1340}
1341 1341
1342static void __exit fini(void) 1342static void __exit ip_nat_snmp_basic_fini(void)
1343{ 1343{
1344 ip_conntrack_helper_unregister(&snmp_helper); 1344 ip_conntrack_helper_unregister(&snmp_helper);
1345 ip_conntrack_helper_unregister(&snmp_trap_helper); 1345 ip_conntrack_helper_unregister(&snmp_trap_helper);
1346} 1346}
1347 1347
1348module_init(init); 1348module_init(ip_nat_snmp_basic_init);
1349module_exit(fini); 1349module_exit(ip_nat_snmp_basic_fini);
1350 1350
1351module_param(debug, bool, 0600); 1351module_param(debug, bool, 0600);
diff --git a/net/ipv4/netfilter/ip_nat_standalone.c b/net/ipv4/netfilter/ip_nat_standalone.c
index 380aef3d7865..3505b0de2e04 100644
--- a/net/ipv4/netfilter/ip_nat_standalone.c
+++ b/net/ipv4/netfilter/ip_nat_standalone.c
@@ -425,17 +425,17 @@ static int init_or_cleanup(int init)
425 return ret; 425 return ret;
426} 426}
427 427
428static int __init init(void) 428static int __init ip_nat_standalone_init(void)
429{ 429{
430 return init_or_cleanup(1); 430 return init_or_cleanup(1);
431} 431}
432 432
433static void __exit fini(void) 433static void __exit ip_nat_standalone_fini(void)
434{ 434{
435 init_or_cleanup(0); 435 init_or_cleanup(0);
436} 436}
437 437
438module_init(init); 438module_init(ip_nat_standalone_init);
439module_exit(fini); 439module_exit(ip_nat_standalone_fini);
440 440
441MODULE_LICENSE("GPL"); 441MODULE_LICENSE("GPL");
diff --git a/net/ipv4/netfilter/ip_nat_tftp.c b/net/ipv4/netfilter/ip_nat_tftp.c
index 43c3bd7c118e..94a78015451c 100644
--- a/net/ipv4/netfilter/ip_nat_tftp.c
+++ b/net/ipv4/netfilter/ip_nat_tftp.c
@@ -53,19 +53,19 @@ static unsigned int help(struct sk_buff **pskb,
53 return NF_ACCEPT; 53 return NF_ACCEPT;
54} 54}
55 55
56static void __exit fini(void) 56static void __exit ip_nat_tftp_fini(void)
57{ 57{
58 ip_nat_tftp_hook = NULL; 58 ip_nat_tftp_hook = NULL;
59 /* Make sure noone calls it, meanwhile. */ 59 /* Make sure noone calls it, meanwhile. */
60 synchronize_net(); 60 synchronize_net();
61} 61}
62 62
63static int __init init(void) 63static int __init ip_nat_tftp_init(void)
64{ 64{
65 BUG_ON(ip_nat_tftp_hook); 65 BUG_ON(ip_nat_tftp_hook);
66 ip_nat_tftp_hook = help; 66 ip_nat_tftp_hook = help;
67 return 0; 67 return 0;
68} 68}
69 69
70module_init(init); 70module_init(ip_nat_tftp_init);
71module_exit(fini); 71module_exit(ip_nat_tftp_fini);
diff --git a/net/ipv4/netfilter/ip_queue.c b/net/ipv4/netfilter/ip_queue.c
index 1655866c55b9..896a244f8f91 100644
--- a/net/ipv4/netfilter/ip_queue.c
+++ b/net/ipv4/netfilter/ip_queue.c
@@ -717,13 +717,13 @@ cleanup_netlink_notifier:
717 return status; 717 return status;
718} 718}
719 719
720static int __init init(void) 720static int __init ip_queue_init(void)
721{ 721{
722 722
723 return init_or_cleanup(1); 723 return init_or_cleanup(1);
724} 724}
725 725
726static void __exit fini(void) 726static void __exit ip_queue_fini(void)
727{ 727{
728 init_or_cleanup(0); 728 init_or_cleanup(0);
729} 729}
@@ -732,5 +732,5 @@ MODULE_DESCRIPTION("IPv4 packet queue handler");
732MODULE_AUTHOR("James Morris <jmorris@intercode.com.au>"); 732MODULE_AUTHOR("James Morris <jmorris@intercode.com.au>");
733MODULE_LICENSE("GPL"); 733MODULE_LICENSE("GPL");
734 734
735module_init(init); 735module_init(ip_queue_init);
736module_exit(fini); 736module_exit(ip_queue_fini);
diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c
index a7b194c4d79d..460fd905fad0 100644
--- a/net/ipv4/netfilter/ip_tables.c
+++ b/net/ipv4/netfilter/ip_tables.c
@@ -1364,7 +1364,7 @@ static struct ipt_match icmp_matchstruct = {
1364 .checkentry = icmp_checkentry, 1364 .checkentry = icmp_checkentry,
1365}; 1365};
1366 1366
1367static int __init init(void) 1367static int __init ip_tables_init(void)
1368{ 1368{
1369 int ret; 1369 int ret;
1370 1370
@@ -1386,7 +1386,7 @@ static int __init init(void)
1386 return 0; 1386 return 0;
1387} 1387}
1388 1388
1389static void __exit fini(void) 1389static void __exit ip_tables_fini(void)
1390{ 1390{
1391 nf_unregister_sockopt(&ipt_sockopts); 1391 nf_unregister_sockopt(&ipt_sockopts);
1392 1392
@@ -1400,5 +1400,5 @@ static void __exit fini(void)
1400EXPORT_SYMBOL(ipt_register_table); 1400EXPORT_SYMBOL(ipt_register_table);
1401EXPORT_SYMBOL(ipt_unregister_table); 1401EXPORT_SYMBOL(ipt_unregister_table);
1402EXPORT_SYMBOL(ipt_do_table); 1402EXPORT_SYMBOL(ipt_do_table);
1403module_init(init); 1403module_init(ip_tables_init);
1404module_exit(fini); 1404module_exit(ip_tables_fini);
diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c
index 61e11edcd6af..e4768a31718b 100644
--- a/net/ipv4/netfilter/ipt_CLUSTERIP.c
+++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c
@@ -770,15 +770,15 @@ cleanup_none:
770 return -EINVAL; 770 return -EINVAL;
771} 771}
772 772
773static int __init init(void) 773static int __init ipt_clusterip_init(void)
774{ 774{
775 return init_or_cleanup(0); 775 return init_or_cleanup(0);
776} 776}
777 777
778static void __exit fini(void) 778static void __exit ipt_clusterip_fini(void)
779{ 779{
780 init_or_cleanup(1); 780 init_or_cleanup(1);
781} 781}
782 782
783module_init(init); 783module_init(ipt_clusterip_init);
784module_exit(fini); 784module_exit(ipt_clusterip_fini);
diff --git a/net/ipv4/netfilter/ipt_DSCP.c b/net/ipv4/netfilter/ipt_DSCP.c
index cfb0b90e598a..c8e971288dfe 100644
--- a/net/ipv4/netfilter/ipt_DSCP.c
+++ b/net/ipv4/netfilter/ipt_DSCP.c
@@ -82,15 +82,15 @@ static struct ipt_target ipt_dscp_reg = {
82 .me = THIS_MODULE, 82 .me = THIS_MODULE,
83}; 83};
84 84
85static int __init init(void) 85static int __init ipt_dscp_init(void)
86{ 86{
87 return ipt_register_target(&ipt_dscp_reg); 87 return ipt_register_target(&ipt_dscp_reg);
88} 88}
89 89
90static void __exit fini(void) 90static void __exit ipt_dscp_fini(void)
91{ 91{
92 ipt_unregister_target(&ipt_dscp_reg); 92 ipt_unregister_target(&ipt_dscp_reg);
93} 93}
94 94
95module_init(init); 95module_init(ipt_dscp_init);
96module_exit(fini); 96module_exit(ipt_dscp_fini);
diff --git a/net/ipv4/netfilter/ipt_ECN.c b/net/ipv4/netfilter/ipt_ECN.c
index b9b80f90c84e..4adf5c9d34f5 100644
--- a/net/ipv4/netfilter/ipt_ECN.c
+++ b/net/ipv4/netfilter/ipt_ECN.c
@@ -151,15 +151,15 @@ static struct ipt_target ipt_ecn_reg = {
151 .me = THIS_MODULE, 151 .me = THIS_MODULE,
152}; 152};
153 153
154static int __init init(void) 154static int __init ipt_ecn_init(void)
155{ 155{
156 return ipt_register_target(&ipt_ecn_reg); 156 return ipt_register_target(&ipt_ecn_reg);
157} 157}
158 158
159static void __exit fini(void) 159static void __exit ipt_ecn_fini(void)
160{ 160{
161 ipt_unregister_target(&ipt_ecn_reg); 161 ipt_unregister_target(&ipt_ecn_reg);
162} 162}
163 163
164module_init(init); 164module_init(ipt_ecn_init);
165module_exit(fini); 165module_exit(ipt_ecn_fini);
diff --git a/net/ipv4/netfilter/ipt_LOG.c b/net/ipv4/netfilter/ipt_LOG.c
index 750d3221b280..39fd4c2a2386 100644
--- a/net/ipv4/netfilter/ipt_LOG.c
+++ b/net/ipv4/netfilter/ipt_LOG.c
@@ -471,7 +471,7 @@ static struct nf_logger ipt_log_logger ={
471 .me = THIS_MODULE, 471 .me = THIS_MODULE,
472}; 472};
473 473
474static int __init init(void) 474static int __init ipt_log_init(void)
475{ 475{
476 if (ipt_register_target(&ipt_log_reg)) 476 if (ipt_register_target(&ipt_log_reg))
477 return -EINVAL; 477 return -EINVAL;
@@ -485,11 +485,11 @@ static int __init init(void)
485 return 0; 485 return 0;
486} 486}
487 487
488static void __exit fini(void) 488static void __exit ipt_log_fini(void)
489{ 489{
490 nf_log_unregister_logger(&ipt_log_logger); 490 nf_log_unregister_logger(&ipt_log_logger);
491 ipt_unregister_target(&ipt_log_reg); 491 ipt_unregister_target(&ipt_log_reg);
492} 492}
493 493
494module_init(init); 494module_init(ipt_log_init);
495module_exit(fini); 495module_exit(ipt_log_fini);
diff --git a/net/ipv4/netfilter/ipt_MASQUERADE.c b/net/ipv4/netfilter/ipt_MASQUERADE.c
index e0c321c3bae5..8b3e7f99b861 100644
--- a/net/ipv4/netfilter/ipt_MASQUERADE.c
+++ b/net/ipv4/netfilter/ipt_MASQUERADE.c
@@ -175,7 +175,7 @@ static struct ipt_target masquerade = {
175 .me = THIS_MODULE, 175 .me = THIS_MODULE,
176}; 176};
177 177
178static int __init init(void) 178static int __init ipt_masquerade_init(void)
179{ 179{
180 int ret; 180 int ret;
181 181
@@ -191,12 +191,12 @@ static int __init init(void)
191 return ret; 191 return ret;
192} 192}
193 193
194static void __exit fini(void) 194static void __exit ipt_masquerade_fini(void)
195{ 195{
196 ipt_unregister_target(&masquerade); 196 ipt_unregister_target(&masquerade);
197 unregister_netdevice_notifier(&masq_dev_notifier); 197 unregister_netdevice_notifier(&masq_dev_notifier);
198 unregister_inetaddr_notifier(&masq_inet_notifier); 198 unregister_inetaddr_notifier(&masq_inet_notifier);
199} 199}
200 200
201module_init(init); 201module_init(ipt_masquerade_init);
202module_exit(fini); 202module_exit(ipt_masquerade_fini);
diff --git a/net/ipv4/netfilter/ipt_NETMAP.c b/net/ipv4/netfilter/ipt_NETMAP.c
index fba181c2a426..2fcf1075b027 100644
--- a/net/ipv4/netfilter/ipt_NETMAP.c
+++ b/net/ipv4/netfilter/ipt_NETMAP.c
@@ -98,15 +98,15 @@ static struct ipt_target target_module = {
98 .me = THIS_MODULE 98 .me = THIS_MODULE
99}; 99};
100 100
101static int __init init(void) 101static int __init ipt_netmap_init(void)
102{ 102{
103 return ipt_register_target(&target_module); 103 return ipt_register_target(&target_module);
104} 104}
105 105
106static void __exit fini(void) 106static void __exit ipt_netmap_fini(void)
107{ 107{
108 ipt_unregister_target(&target_module); 108 ipt_unregister_target(&target_module);
109} 109}
110 110
111module_init(init); 111module_init(ipt_netmap_init);
112module_exit(fini); 112module_exit(ipt_netmap_fini);
diff --git a/net/ipv4/netfilter/ipt_REDIRECT.c b/net/ipv4/netfilter/ipt_REDIRECT.c
index be3da7c4b871..f290463232de 100644
--- a/net/ipv4/netfilter/ipt_REDIRECT.c
+++ b/net/ipv4/netfilter/ipt_REDIRECT.c
@@ -112,15 +112,15 @@ static struct ipt_target redirect_reg = {
112 .me = THIS_MODULE, 112 .me = THIS_MODULE,
113}; 113};
114 114
115static int __init init(void) 115static int __init ipt_redirect_init(void)
116{ 116{
117 return ipt_register_target(&redirect_reg); 117 return ipt_register_target(&redirect_reg);
118} 118}
119 119
120static void __exit fini(void) 120static void __exit ipt_redirect_fini(void)
121{ 121{
122 ipt_unregister_target(&redirect_reg); 122 ipt_unregister_target(&redirect_reg);
123} 123}
124 124
125module_init(init); 125module_init(ipt_redirect_init);
126module_exit(fini); 126module_exit(ipt_redirect_fini);
diff --git a/net/ipv4/netfilter/ipt_REJECT.c b/net/ipv4/netfilter/ipt_REJECT.c
index 9d3b3579f27c..4269a5440d43 100644
--- a/net/ipv4/netfilter/ipt_REJECT.c
+++ b/net/ipv4/netfilter/ipt_REJECT.c
@@ -313,15 +313,15 @@ static struct ipt_target ipt_reject_reg = {
313 .me = THIS_MODULE, 313 .me = THIS_MODULE,
314}; 314};
315 315
316static int __init init(void) 316static int __init ipt_reject_init(void)
317{ 317{
318 return ipt_register_target(&ipt_reject_reg); 318 return ipt_register_target(&ipt_reject_reg);
319} 319}
320 320
321static void __exit fini(void) 321static void __exit ipt_reject_fini(void)
322{ 322{
323 ipt_unregister_target(&ipt_reject_reg); 323 ipt_unregister_target(&ipt_reject_reg);
324} 324}
325 325
326module_init(init); 326module_init(ipt_reject_init);
327module_exit(fini); 327module_exit(ipt_reject_fini);
diff --git a/net/ipv4/netfilter/ipt_SAME.c b/net/ipv4/netfilter/ipt_SAME.c
index 7e2ebc9d945e..7169b09b5a67 100644
--- a/net/ipv4/netfilter/ipt_SAME.c
+++ b/net/ipv4/netfilter/ipt_SAME.c
@@ -189,16 +189,16 @@ static struct ipt_target same_reg = {
189 .me = THIS_MODULE, 189 .me = THIS_MODULE,
190}; 190};
191 191
192static int __init init(void) 192static int __init ipt_same_init(void)
193{ 193{
194 return ipt_register_target(&same_reg); 194 return ipt_register_target(&same_reg);
195} 195}
196 196
197static void __exit fini(void) 197static void __exit ipt_same_fini(void)
198{ 198{
199 ipt_unregister_target(&same_reg); 199 ipt_unregister_target(&same_reg);
200} 200}
201 201
202module_init(init); 202module_init(ipt_same_init);
203module_exit(fini); 203module_exit(ipt_same_fini);
204 204
diff --git a/net/ipv4/netfilter/ipt_TCPMSS.c b/net/ipv4/netfilter/ipt_TCPMSS.c
index c4fc50ec2ddb..ef2fe5b3f0d8 100644
--- a/net/ipv4/netfilter/ipt_TCPMSS.c
+++ b/net/ipv4/netfilter/ipt_TCPMSS.c
@@ -243,15 +243,15 @@ static struct ipt_target ipt_tcpmss_reg = {
243 .me = THIS_MODULE, 243 .me = THIS_MODULE,
244}; 244};
245 245
246static int __init init(void) 246static int __init ipt_tcpmss_init(void)
247{ 247{
248 return ipt_register_target(&ipt_tcpmss_reg); 248 return ipt_register_target(&ipt_tcpmss_reg);
249} 249}
250 250
251static void __exit fini(void) 251static void __exit ipt_tcpmss_fini(void)
252{ 252{
253 ipt_unregister_target(&ipt_tcpmss_reg); 253 ipt_unregister_target(&ipt_tcpmss_reg);
254} 254}
255 255
256module_init(init); 256module_init(ipt_tcpmss_init);
257module_exit(fini); 257module_exit(ipt_tcpmss_fini);
diff --git a/net/ipv4/netfilter/ipt_TOS.c b/net/ipv4/netfilter/ipt_TOS.c
index 9aa7817657f0..1c7a5ca399b3 100644
--- a/net/ipv4/netfilter/ipt_TOS.c
+++ b/net/ipv4/netfilter/ipt_TOS.c
@@ -81,15 +81,15 @@ static struct ipt_target ipt_tos_reg = {
81 .me = THIS_MODULE, 81 .me = THIS_MODULE,
82}; 82};
83 83
84static int __init init(void) 84static int __init ipt_tos_init(void)
85{ 85{
86 return ipt_register_target(&ipt_tos_reg); 86 return ipt_register_target(&ipt_tos_reg);
87} 87}
88 88
89static void __exit fini(void) 89static void __exit ipt_tos_fini(void)
90{ 90{
91 ipt_unregister_target(&ipt_tos_reg); 91 ipt_unregister_target(&ipt_tos_reg);
92} 92}
93 93
94module_init(init); 94module_init(ipt_tos_init);
95module_exit(fini); 95module_exit(ipt_tos_fini);
diff --git a/net/ipv4/netfilter/ipt_TTL.c b/net/ipv4/netfilter/ipt_TTL.c
index 5009a003d578..f48892ae0be5 100644
--- a/net/ipv4/netfilter/ipt_TTL.c
+++ b/net/ipv4/netfilter/ipt_TTL.c
@@ -94,15 +94,15 @@ static struct ipt_target ipt_TTL = {
94 .me = THIS_MODULE, 94 .me = THIS_MODULE,
95}; 95};
96 96
97static int __init init(void) 97static int __init ipt_ttl_init(void)
98{ 98{
99 return ipt_register_target(&ipt_TTL); 99 return ipt_register_target(&ipt_TTL);
100} 100}
101 101
102static void __exit fini(void) 102static void __exit ipt_ttl_fini(void)
103{ 103{
104 ipt_unregister_target(&ipt_TTL); 104 ipt_unregister_target(&ipt_TTL);
105} 105}
106 106
107module_init(init); 107module_init(ipt_ttl_init);
108module_exit(fini); 108module_exit(ipt_ttl_fini);
diff --git a/net/ipv4/netfilter/ipt_ULOG.c b/net/ipv4/netfilter/ipt_ULOG.c
index a82a32ed0e2f..c84cc03389d8 100644
--- a/net/ipv4/netfilter/ipt_ULOG.c
+++ b/net/ipv4/netfilter/ipt_ULOG.c
@@ -374,7 +374,7 @@ static struct nf_logger ipt_ulog_logger = {
374 .me = THIS_MODULE, 374 .me = THIS_MODULE,
375}; 375};
376 376
377static int __init init(void) 377static int __init ipt_ulog_init(void)
378{ 378{
379 int i; 379 int i;
380 380
@@ -407,7 +407,7 @@ static int __init init(void)
407 return 0; 407 return 0;
408} 408}
409 409
410static void __exit fini(void) 410static void __exit ipt_ulog_fini(void)
411{ 411{
412 ulog_buff_t *ub; 412 ulog_buff_t *ub;
413 int i; 413 int i;
@@ -435,5 +435,5 @@ static void __exit fini(void)
435 435
436} 436}
437 437
438module_init(init); 438module_init(ipt_ulog_init);
439module_exit(fini); 439module_exit(ipt_ulog_fini);
diff --git a/net/ipv4/netfilter/ipt_addrtype.c b/net/ipv4/netfilter/ipt_addrtype.c
index 5fdf85d0efcf..893dae210b04 100644
--- a/net/ipv4/netfilter/ipt_addrtype.c
+++ b/net/ipv4/netfilter/ipt_addrtype.c
@@ -51,15 +51,15 @@ static struct ipt_match addrtype_match = {
51 .me = THIS_MODULE 51 .me = THIS_MODULE
52}; 52};
53 53
54static int __init init(void) 54static int __init ipt_addrtype_init(void)
55{ 55{
56 return ipt_register_match(&addrtype_match); 56 return ipt_register_match(&addrtype_match);
57} 57}
58 58
59static void __exit fini(void) 59static void __exit ipt_addrtype_fini(void)
60{ 60{
61 ipt_unregister_match(&addrtype_match); 61 ipt_unregister_match(&addrtype_match);
62} 62}
63 63
64module_init(init); 64module_init(ipt_addrtype_init);
65module_exit(fini); 65module_exit(ipt_addrtype_fini);
diff --git a/net/ipv4/netfilter/ipt_ah.c b/net/ipv4/netfilter/ipt_ah.c
index 35a21fb1f8e0..2927135873d7 100644
--- a/net/ipv4/netfilter/ipt_ah.c
+++ b/net/ipv4/netfilter/ipt_ah.c
@@ -96,15 +96,15 @@ static struct ipt_match ah_match = {
96 .me = THIS_MODULE, 96 .me = THIS_MODULE,
97}; 97};
98 98
99static int __init init(void) 99static int __init ipt_ah_init(void)
100{ 100{
101 return ipt_register_match(&ah_match); 101 return ipt_register_match(&ah_match);
102} 102}
103 103
104static void __exit cleanup(void) 104static void __exit ipt_ah_fini(void)
105{ 105{
106 ipt_unregister_match(&ah_match); 106 ipt_unregister_match(&ah_match);
107} 107}
108 108
109module_init(init); 109module_init(ipt_ah_init);
110module_exit(cleanup); 110module_exit(ipt_ah_fini);
diff --git a/net/ipv4/netfilter/ipt_dscp.c b/net/ipv4/netfilter/ipt_dscp.c
index 11963c385dea..47177591aeb6 100644
--- a/net/ipv4/netfilter/ipt_dscp.c
+++ b/net/ipv4/netfilter/ipt_dscp.c
@@ -39,16 +39,16 @@ static struct ipt_match dscp_match = {
39 .me = THIS_MODULE, 39 .me = THIS_MODULE,
40}; 40};
41 41
42static int __init init(void) 42static int __init ipt_dscp_init(void)
43{ 43{
44 return ipt_register_match(&dscp_match); 44 return ipt_register_match(&dscp_match);
45} 45}
46 46
47static void __exit fini(void) 47static void __exit ipt_dscp_fini(void)
48{ 48{
49 ipt_unregister_match(&dscp_match); 49 ipt_unregister_match(&dscp_match);
50 50
51} 51}
52 52
53module_init(init); 53module_init(ipt_dscp_init);
54module_exit(fini); 54module_exit(ipt_dscp_fini);
diff --git a/net/ipv4/netfilter/ipt_ecn.c b/net/ipv4/netfilter/ipt_ecn.c
index d7e29f6a38d8..b28250414933 100644
--- a/net/ipv4/netfilter/ipt_ecn.c
+++ b/net/ipv4/netfilter/ipt_ecn.c
@@ -118,15 +118,15 @@ static struct ipt_match ecn_match = {
118 .me = THIS_MODULE, 118 .me = THIS_MODULE,
119}; 119};
120 120
121static int __init init(void) 121static int __init ipt_ecn_init(void)
122{ 122{
123 return ipt_register_match(&ecn_match); 123 return ipt_register_match(&ecn_match);
124} 124}
125 125
126static void __exit fini(void) 126static void __exit ipt_ecn_fini(void)
127{ 127{
128 ipt_unregister_match(&ecn_match); 128 ipt_unregister_match(&ecn_match);
129} 129}
130 130
131module_init(init); 131module_init(ipt_ecn_init);
132module_exit(fini); 132module_exit(ipt_ecn_fini);
diff --git a/net/ipv4/netfilter/ipt_esp.c b/net/ipv4/netfilter/ipt_esp.c
index af0d5ec79cb5..3840b417a3c5 100644
--- a/net/ipv4/netfilter/ipt_esp.c
+++ b/net/ipv4/netfilter/ipt_esp.c
@@ -97,15 +97,15 @@ static struct ipt_match esp_match = {
97 .me = THIS_MODULE, 97 .me = THIS_MODULE,
98}; 98};
99 99
100static int __init init(void) 100static int __init ipt_esp_init(void)
101{ 101{
102 return ipt_register_match(&esp_match); 102 return ipt_register_match(&esp_match);
103} 103}
104 104
105static void __exit cleanup(void) 105static void __exit ipt_esp_fini(void)
106{ 106{
107 ipt_unregister_match(&esp_match); 107 ipt_unregister_match(&esp_match);
108} 108}
109 109
110module_init(init); 110module_init(ipt_esp_init);
111module_exit(cleanup); 111module_exit(ipt_esp_fini);
diff --git a/net/ipv4/netfilter/ipt_hashlimit.c b/net/ipv4/netfilter/ipt_hashlimit.c
index ba5e23505e88..7c6836c4646e 100644
--- a/net/ipv4/netfilter/ipt_hashlimit.c
+++ b/net/ipv4/netfilter/ipt_hashlimit.c
@@ -719,15 +719,15 @@ cleanup_nothing:
719 719
720} 720}
721 721
722static int __init init(void) 722static int __init ipt_hashlimit_init(void)
723{ 723{
724 return init_or_fini(0); 724 return init_or_fini(0);
725} 725}
726 726
727static void __exit fini(void) 727static void __exit ipt_hashlimit_fini(void)
728{ 728{
729 init_or_fini(1); 729 init_or_fini(1);
730} 730}
731 731
732module_init(init); 732module_init(ipt_hashlimit_init);
733module_exit(fini); 733module_exit(ipt_hashlimit_fini);
diff --git a/net/ipv4/netfilter/ipt_iprange.c b/net/ipv4/netfilter/ipt_iprange.c
index ae70112f5e06..5202edd8d333 100644
--- a/net/ipv4/netfilter/ipt_iprange.c
+++ b/net/ipv4/netfilter/ipt_iprange.c
@@ -71,15 +71,15 @@ static struct ipt_match iprange_match = {
71 .me = THIS_MODULE 71 .me = THIS_MODULE
72}; 72};
73 73
74static int __init init(void) 74static int __init ipt_iprange_init(void)
75{ 75{
76 return ipt_register_match(&iprange_match); 76 return ipt_register_match(&iprange_match);
77} 77}
78 78
79static void __exit fini(void) 79static void __exit ipt_iprange_fini(void)
80{ 80{
81 ipt_unregister_match(&iprange_match); 81 ipt_unregister_match(&iprange_match);
82} 82}
83 83
84module_init(init); 84module_init(ipt_iprange_init);
85module_exit(fini); 85module_exit(ipt_iprange_fini);
diff --git a/net/ipv4/netfilter/ipt_multiport.c b/net/ipv4/netfilter/ipt_multiport.c
index bd07f7c53872..ac95d8390bcc 100644
--- a/net/ipv4/netfilter/ipt_multiport.c
+++ b/net/ipv4/netfilter/ipt_multiport.c
@@ -171,7 +171,7 @@ static struct ipt_match multiport_match_v1 = {
171 .me = THIS_MODULE, 171 .me = THIS_MODULE,
172}; 172};
173 173
174static int __init init(void) 174static int __init ipt_multiport_init(void)
175{ 175{
176 int err; 176 int err;
177 177
@@ -185,11 +185,11 @@ static int __init init(void)
185 return err; 185 return err;
186} 186}
187 187
188static void __exit fini(void) 188static void __exit ipt_multiport_fini(void)
189{ 189{
190 ipt_unregister_match(&multiport_match); 190 ipt_unregister_match(&multiport_match);
191 ipt_unregister_match(&multiport_match_v1); 191 ipt_unregister_match(&multiport_match_v1);
192} 192}
193 193
194module_init(init); 194module_init(ipt_multiport_init);
195module_exit(fini); 195module_exit(ipt_multiport_fini);
diff --git a/net/ipv4/netfilter/ipt_owner.c b/net/ipv4/netfilter/ipt_owner.c
index 3900428771f3..5ac6ac023b5e 100644
--- a/net/ipv4/netfilter/ipt_owner.c
+++ b/net/ipv4/netfilter/ipt_owner.c
@@ -78,15 +78,15 @@ static struct ipt_match owner_match = {
78 .me = THIS_MODULE, 78 .me = THIS_MODULE,
79}; 79};
80 80
81static int __init init(void) 81static int __init ipt_owner_init(void)
82{ 82{
83 return ipt_register_match(&owner_match); 83 return ipt_register_match(&owner_match);
84} 84}
85 85
86static void __exit fini(void) 86static void __exit ipt_owner_fini(void)
87{ 87{
88 ipt_unregister_match(&owner_match); 88 ipt_unregister_match(&owner_match);
89} 89}
90 90
91module_init(init); 91module_init(ipt_owner_init);
92module_exit(fini); 92module_exit(ipt_owner_fini);
diff --git a/net/ipv4/netfilter/ipt_recent.c b/net/ipv4/netfilter/ipt_recent.c
index 06792ead1da4..143843285702 100644
--- a/net/ipv4/netfilter/ipt_recent.c
+++ b/net/ipv4/netfilter/ipt_recent.c
@@ -962,7 +962,7 @@ static struct ipt_match recent_match = {
962}; 962};
963 963
964/* Kernel module initialization. */ 964/* Kernel module initialization. */
965static int __init init(void) 965static int __init ipt_recent_init(void)
966{ 966{
967 int err, count; 967 int err, count;
968 968
@@ -995,7 +995,7 @@ static int __init init(void)
995} 995}
996 996
997/* Kernel module destruction. */ 997/* Kernel module destruction. */
998static void __exit fini(void) 998static void __exit ipt_recent_fini(void)
999{ 999{
1000 ipt_unregister_match(&recent_match); 1000 ipt_unregister_match(&recent_match);
1001 1001
@@ -1003,5 +1003,5 @@ static void __exit fini(void)
1003} 1003}
1004 1004
1005/* Register our module with the kernel. */ 1005/* Register our module with the kernel. */
1006module_init(init); 1006module_init(ipt_recent_init);
1007module_exit(fini); 1007module_exit(ipt_recent_fini);
diff --git a/net/ipv4/netfilter/ipt_tos.c b/net/ipv4/netfilter/ipt_tos.c
index e404e92ddd01..5549c39c7851 100644
--- a/net/ipv4/netfilter/ipt_tos.c
+++ b/net/ipv4/netfilter/ipt_tos.c
@@ -39,15 +39,15 @@ static struct ipt_match tos_match = {
39 .me = THIS_MODULE, 39 .me = THIS_MODULE,
40}; 40};
41 41
42static int __init init(void) 42static int __init ipt_multiport_init(void)
43{ 43{
44 return ipt_register_match(&tos_match); 44 return ipt_register_match(&tos_match);
45} 45}
46 46
47static void __exit fini(void) 47static void __exit ipt_multiport_fini(void)
48{ 48{
49 ipt_unregister_match(&tos_match); 49 ipt_unregister_match(&tos_match);
50} 50}
51 51
52module_init(init); 52module_init(ipt_multiport_init);
53module_exit(fini); 53module_exit(ipt_multiport_fini);
diff --git a/net/ipv4/netfilter/ipt_ttl.c b/net/ipv4/netfilter/ipt_ttl.c
index ae7ce4d8d90e..a5243bdb87d7 100644
--- a/net/ipv4/netfilter/ipt_ttl.c
+++ b/net/ipv4/netfilter/ipt_ttl.c
@@ -55,16 +55,16 @@ static struct ipt_match ttl_match = {
55 .me = THIS_MODULE, 55 .me = THIS_MODULE,
56}; 56};
57 57
58static int __init init(void) 58static int __init ipt_ttl_init(void)
59{ 59{
60 return ipt_register_match(&ttl_match); 60 return ipt_register_match(&ttl_match);
61} 61}
62 62
63static void __exit fini(void) 63static void __exit ipt_ttl_fini(void)
64{ 64{
65 ipt_unregister_match(&ttl_match); 65 ipt_unregister_match(&ttl_match);
66 66
67} 67}
68 68
69module_init(init); 69module_init(ipt_ttl_init);
70module_exit(fini); 70module_exit(ipt_ttl_fini);
diff --git a/net/ipv4/netfilter/iptable_filter.c b/net/ipv4/netfilter/iptable_filter.c
index 212a3079085b..3d80aefe9cfa 100644
--- a/net/ipv4/netfilter/iptable_filter.c
+++ b/net/ipv4/netfilter/iptable_filter.c
@@ -139,7 +139,7 @@ static struct nf_hook_ops ipt_ops[] = {
139static int forward = NF_ACCEPT; 139static int forward = NF_ACCEPT;
140module_param(forward, bool, 0000); 140module_param(forward, bool, 0000);
141 141
142static int __init init(void) 142static int __init iptable_filter_init(void)
143{ 143{
144 int ret; 144 int ret;
145 145
@@ -181,7 +181,7 @@ static int __init init(void)
181 return ret; 181 return ret;
182} 182}
183 183
184static void __exit fini(void) 184static void __exit iptable_filter_fini(void)
185{ 185{
186 unsigned int i; 186 unsigned int i;
187 187
@@ -191,5 +191,5 @@ static void __exit fini(void)
191 ipt_unregister_table(&packet_filter); 191 ipt_unregister_table(&packet_filter);
192} 192}
193 193
194module_init(init); 194module_init(iptable_filter_init);
195module_exit(fini); 195module_exit(iptable_filter_fini);
diff --git a/net/ipv4/netfilter/iptable_mangle.c b/net/ipv4/netfilter/iptable_mangle.c
index 3212a5cc4b6b..412fc96cc896 100644
--- a/net/ipv4/netfilter/iptable_mangle.c
+++ b/net/ipv4/netfilter/iptable_mangle.c
@@ -201,7 +201,7 @@ static struct nf_hook_ops ipt_ops[] = {
201 }, 201 },
202}; 202};
203 203
204static int __init init(void) 204static int __init iptable_mangle_init(void)
205{ 205{
206 int ret; 206 int ret;
207 207
@@ -247,7 +247,7 @@ static int __init init(void)
247 return ret; 247 return ret;
248} 248}
249 249
250static void __exit fini(void) 250static void __exit iptable_mangle_fini(void)
251{ 251{
252 unsigned int i; 252 unsigned int i;
253 253
@@ -257,5 +257,5 @@ static void __exit fini(void)
257 ipt_unregister_table(&packet_mangler); 257 ipt_unregister_table(&packet_mangler);
258} 258}
259 259
260module_init(init); 260module_init(iptable_mangle_init);
261module_exit(fini); 261module_exit(iptable_mangle_fini);
diff --git a/net/ipv4/netfilter/iptable_raw.c b/net/ipv4/netfilter/iptable_raw.c
index fdb9e9c81e81..03cc79a6160a 100644
--- a/net/ipv4/netfilter/iptable_raw.c
+++ b/net/ipv4/netfilter/iptable_raw.c
@@ -116,7 +116,7 @@ static struct nf_hook_ops ipt_ops[] = {
116 }, 116 },
117}; 117};
118 118
119static int __init init(void) 119static int __init iptable_raw_init(void)
120{ 120{
121 int ret; 121 int ret;
122 122
@@ -144,7 +144,7 @@ static int __init init(void)
144 return ret; 144 return ret;
145} 145}
146 146
147static void __exit fini(void) 147static void __exit iptable_raw_fini(void)
148{ 148{
149 unsigned int i; 149 unsigned int i;
150 150
@@ -154,6 +154,6 @@ static void __exit fini(void)
154 ipt_unregister_table(&packet_raw); 154 ipt_unregister_table(&packet_raw);
155} 155}
156 156
157module_init(init); 157module_init(iptable_raw_init);
158module_exit(fini); 158module_exit(iptable_raw_fini);
159MODULE_LICENSE("GPL"); 159MODULE_LICENSE("GPL");
diff --git a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c
index c8abc9d859b9..4afbc699d3ba 100644
--- a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c
+++ b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c
@@ -571,18 +571,18 @@ static int init_or_cleanup(int init)
571MODULE_ALIAS("nf_conntrack-" __stringify(AF_INET)); 571MODULE_ALIAS("nf_conntrack-" __stringify(AF_INET));
572MODULE_LICENSE("GPL"); 572MODULE_LICENSE("GPL");
573 573
574static int __init init(void) 574static int __init nf_conntrack_l3proto_ipv4_init(void)
575{ 575{
576 need_conntrack(); 576 need_conntrack();
577 return init_or_cleanup(1); 577 return init_or_cleanup(1);
578} 578}
579 579
580static void __exit fini(void) 580static void __exit nf_conntrack_l3proto_ipv4_fini(void)
581{ 581{
582 init_or_cleanup(0); 582 init_or_cleanup(0);
583} 583}
584 584
585module_init(init); 585module_init(nf_conntrack_l3proto_ipv4_init);
586module_exit(fini); 586module_exit(nf_conntrack_l3proto_ipv4_fini);
587 587
588EXPORT_SYMBOL(nf_ct_ipv4_gather_frags); 588EXPORT_SYMBOL(nf_ct_ipv4_gather_frags);
diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c
index e688c687d62d..91c2f41c7f58 100644
--- a/net/ipv4/tcp_cong.c
+++ b/net/ipv4/tcp_cong.c
@@ -223,7 +223,7 @@ void tcp_reno_cong_avoid(struct sock *sk, u32 ack, u32 rtt, u32 in_flight,
223 223
224 /* In dangerous area, increase slowly. */ 224 /* In dangerous area, increase slowly. */
225 else if (sysctl_tcp_abc) { 225 else if (sysctl_tcp_abc) {
226 /* RFC3465: Apppriate Byte Count 226 /* RFC3465: Appropriate Byte Count
227 * increase once for each full cwnd acked 227 * increase once for each full cwnd acked
228 */ 228 */
229 if (tp->bytes_acked >= tp->snd_cwnd*tp->mss_cache) { 229 if (tp->bytes_acked >= tp->snd_cwnd*tp->mss_cache) {
diff --git a/net/ipv4/tunnel4.c b/net/ipv4/tunnel4.c
new file mode 100644
index 000000000000..0d7d386dac22
--- /dev/null
+++ b/net/ipv4/tunnel4.c
@@ -0,0 +1,113 @@
1/* tunnel4.c: Generic IP tunnel transformer.
2 *
3 * Copyright (C) 2003 David S. Miller (davem@redhat.com)
4 */
5
6#include <linux/init.h>
7#include <linux/module.h>
8#include <linux/mutex.h>
9#include <linux/netdevice.h>
10#include <linux/skbuff.h>
11#include <net/protocol.h>
12#include <net/xfrm.h>
13
14static struct xfrm_tunnel *tunnel4_handlers;
15static DEFINE_MUTEX(tunnel4_mutex);
16
17int xfrm4_tunnel_register(struct xfrm_tunnel *handler)
18{
19 struct xfrm_tunnel **pprev;
20 int ret = -EEXIST;
21 int priority = handler->priority;
22
23 mutex_lock(&tunnel4_mutex);
24
25 for (pprev = &tunnel4_handlers; *pprev; pprev = &(*pprev)->next) {
26 if ((*pprev)->priority > priority)
27 break;
28 if ((*pprev)->priority == priority)
29 goto err;
30 }
31
32 handler->next = *pprev;
33 *pprev = handler;
34
35 ret = 0;
36
37err:
38 mutex_unlock(&tunnel4_mutex);
39
40 return ret;
41}
42
43EXPORT_SYMBOL(xfrm4_tunnel_register);
44
45int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler)
46{
47 struct xfrm_tunnel **pprev;
48 int ret = -ENOENT;
49
50 mutex_lock(&tunnel4_mutex);
51
52 for (pprev = &tunnel4_handlers; *pprev; pprev = &(*pprev)->next) {
53 if (*pprev == handler) {
54 *pprev = handler->next;
55 ret = 0;
56 break;
57 }
58 }
59
60 mutex_unlock(&tunnel4_mutex);
61
62 synchronize_net();
63
64 return ret;
65}
66
67EXPORT_SYMBOL(xfrm4_tunnel_deregister);
68
69static int tunnel4_rcv(struct sk_buff *skb)
70{
71 struct xfrm_tunnel *handler;
72
73 for (handler = tunnel4_handlers; handler; handler = handler->next)
74 if (!handler->handler(skb))
75 return 0;
76
77 kfree_skb(skb);
78 return 0;
79}
80
81static void tunnel4_err(struct sk_buff *skb, u32 info)
82{
83 struct xfrm_tunnel *handler;
84
85 for (handler = tunnel4_handlers; handler; handler = handler->next)
86 if (!handler->err_handler(skb, info))
87 break;
88}
89
90static struct net_protocol tunnel4_protocol = {
91 .handler = tunnel4_rcv,
92 .err_handler = tunnel4_err,
93 .no_policy = 1,
94};
95
96static int __init tunnel4_init(void)
97{
98 if (inet_add_protocol(&tunnel4_protocol, IPPROTO_IPIP)) {
99 printk(KERN_ERR "tunnel4 init: can't add protocol\n");
100 return -EAGAIN;
101 }
102 return 0;
103}
104
105static void __exit tunnel4_fini(void)
106{
107 if (inet_del_protocol(&tunnel4_protocol, IPPROTO_IPIP))
108 printk(KERN_ERR "tunnel4 close: can't remove protocol\n");
109}
110
111module_init(tunnel4_init);
112module_exit(tunnel4_fini);
113MODULE_LICENSE("GPL");
diff --git a/net/ipv4/xfrm4_tunnel.c b/net/ipv4/xfrm4_tunnel.c
index b08d56b117f8..2d670935c2b5 100644
--- a/net/ipv4/xfrm4_tunnel.c
+++ b/net/ipv4/xfrm4_tunnel.c
@@ -26,64 +26,6 @@ static int ipip_xfrm_rcv(struct xfrm_state *x, struct xfrm_decap_state *decap, s
26 return 0; 26 return 0;
27} 27}
28 28
29static struct xfrm_tunnel *ipip_handler;
30static DEFINE_MUTEX(xfrm4_tunnel_mutex);
31
32int xfrm4_tunnel_register(struct xfrm_tunnel *handler)
33{
34 int ret;
35
36 mutex_lock(&xfrm4_tunnel_mutex);
37 ret = 0;
38 if (ipip_handler != NULL)
39 ret = -EINVAL;
40 if (!ret)
41 ipip_handler = handler;
42 mutex_unlock(&xfrm4_tunnel_mutex);
43
44 return ret;
45}
46
47EXPORT_SYMBOL(xfrm4_tunnel_register);
48
49int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler)
50{
51 int ret;
52
53 mutex_lock(&xfrm4_tunnel_mutex);
54 ret = 0;
55 if (ipip_handler != handler)
56 ret = -EINVAL;
57 if (!ret)
58 ipip_handler = NULL;
59 mutex_unlock(&xfrm4_tunnel_mutex);
60
61 synchronize_net();
62
63 return ret;
64}
65
66EXPORT_SYMBOL(xfrm4_tunnel_deregister);
67
68static int ipip_rcv(struct sk_buff *skb)
69{
70 struct xfrm_tunnel *handler = ipip_handler;
71
72 /* Tunnel devices take precedence. */
73 if (handler && handler->handler(skb) == 0)
74 return 0;
75
76 return xfrm4_rcv(skb);
77}
78
79static void ipip_err(struct sk_buff *skb, u32 info)
80{
81 struct xfrm_tunnel *handler = ipip_handler;
82
83 if (handler)
84 handler->err_handler(skb, info);
85}
86
87static int ipip_init_state(struct xfrm_state *x) 29static int ipip_init_state(struct xfrm_state *x)
88{ 30{
89 if (!x->props.mode) 31 if (!x->props.mode)
@@ -111,10 +53,15 @@ static struct xfrm_type ipip_type = {
111 .output = ipip_output 53 .output = ipip_output
112}; 54};
113 55
114static struct net_protocol ipip_protocol = { 56static int xfrm_tunnel_err(struct sk_buff *skb, u32 info)
115 .handler = ipip_rcv, 57{
116 .err_handler = ipip_err, 58 return -ENOENT;
117 .no_policy = 1, 59}
60
61static struct xfrm_tunnel xfrm_tunnel_handler = {
62 .handler = xfrm4_rcv,
63 .err_handler = xfrm_tunnel_err,
64 .priority = 2,
118}; 65};
119 66
120static int __init ipip_init(void) 67static int __init ipip_init(void)
@@ -123,8 +70,8 @@ static int __init ipip_init(void)
123 printk(KERN_INFO "ipip init: can't add xfrm type\n"); 70 printk(KERN_INFO "ipip init: can't add xfrm type\n");
124 return -EAGAIN; 71 return -EAGAIN;
125 } 72 }
126 if (inet_add_protocol(&ipip_protocol, IPPROTO_IPIP) < 0) { 73 if (xfrm4_tunnel_register(&xfrm_tunnel_handler)) {
127 printk(KERN_INFO "ipip init: can't add protocol\n"); 74 printk(KERN_INFO "ipip init: can't add xfrm handler\n");
128 xfrm_unregister_type(&ipip_type, AF_INET); 75 xfrm_unregister_type(&ipip_type, AF_INET);
129 return -EAGAIN; 76 return -EAGAIN;
130 } 77 }
@@ -133,8 +80,8 @@ static int __init ipip_init(void)
133 80
134static void __exit ipip_fini(void) 81static void __exit ipip_fini(void)
135{ 82{
136 if (inet_del_protocol(&ipip_protocol, IPPROTO_IPIP) < 0) 83 if (xfrm4_tunnel_deregister(&xfrm_tunnel_handler))
137 printk(KERN_INFO "ipip close: can't remove protocol\n"); 84 printk(KERN_INFO "ipip close: can't remove xfrm handler\n");
138 if (xfrm_unregister_type(&ipip_type, AF_INET) < 0) 85 if (xfrm_unregister_type(&ipip_type, AF_INET) < 0)
139 printk(KERN_INFO "ipip close: can't remove xfrm type\n"); 86 printk(KERN_INFO "ipip close: can't remove xfrm type\n");
140} 87}
diff --git a/net/ipv6/Kconfig b/net/ipv6/Kconfig
index e6f83b6a2b76..f8a107ab5592 100644
--- a/net/ipv6/Kconfig
+++ b/net/ipv6/Kconfig
@@ -88,7 +88,7 @@ config INET6_IPCOMP
88 tristate "IPv6: IPComp transformation" 88 tristate "IPv6: IPComp transformation"
89 depends on IPV6 89 depends on IPV6
90 select XFRM 90 select XFRM
91 select INET6_TUNNEL 91 select INET6_XFRM_TUNNEL
92 select CRYPTO 92 select CRYPTO
93 select CRYPTO_DEFLATE 93 select CRYPTO_DEFLATE
94 ---help--- 94 ---help---
@@ -97,19 +97,18 @@ config INET6_IPCOMP
97 97
98 If unsure, say Y. 98 If unsure, say Y.
99 99
100config INET6_XFRM_TUNNEL
101 tristate
102 select INET6_TUNNEL
103 default n
104
100config INET6_TUNNEL 105config INET6_TUNNEL
101 tristate "IPv6: tunnel transformation" 106 tristate
102 depends on IPV6 107 default n
103 select XFRM
104 ---help---
105 Support for generic IPv6-in-IPv6 tunnel transformation, which is
106 required by the IPv6-in-IPv6 tunneling module as well as tunnel mode
107 IPComp.
108
109 If unsure, say Y.
110 108
111config IPV6_TUNNEL 109config IPV6_TUNNEL
112 tristate "IPv6: IPv6-in-IPv6 tunnel" 110 tristate "IPv6: IPv6-in-IPv6 tunnel"
111 select INET6_TUNNEL
113 depends on IPV6 112 depends on IPV6
114 ---help--- 113 ---help---
115 Support for IPv6-in-IPv6 tunnels described in RFC 2473. 114 Support for IPv6-in-IPv6 tunnels described in RFC 2473.
diff --git a/net/ipv6/Makefile b/net/ipv6/Makefile
index 41877abd22e6..a760b0988fbb 100644
--- a/net/ipv6/Makefile
+++ b/net/ipv6/Makefile
@@ -18,7 +18,8 @@ ipv6-objs += $(ipv6-y)
18obj-$(CONFIG_INET6_AH) += ah6.o 18obj-$(CONFIG_INET6_AH) += ah6.o
19obj-$(CONFIG_INET6_ESP) += esp6.o 19obj-$(CONFIG_INET6_ESP) += esp6.o
20obj-$(CONFIG_INET6_IPCOMP) += ipcomp6.o 20obj-$(CONFIG_INET6_IPCOMP) += ipcomp6.o
21obj-$(CONFIG_INET6_TUNNEL) += xfrm6_tunnel.o 21obj-$(CONFIG_INET6_XFRM_TUNNEL) += xfrm6_tunnel.o
22obj-$(CONFIG_INET6_TUNNEL) += tunnel6.o
22obj-$(CONFIG_NETFILTER) += netfilter/ 23obj-$(CONFIG_NETFILTER) += netfilter/
23 24
24obj-$(CONFIG_IPV6_TUNNEL) += ip6_tunnel.o 25obj-$(CONFIG_IPV6_TUNNEL) += ip6_tunnel.o
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index 48597538db3f..ff9040c92556 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -44,7 +44,6 @@
44 44
45#include <net/ip.h> 45#include <net/ip.h>
46#include <net/ipv6.h> 46#include <net/ipv6.h>
47#include <net/protocol.h>
48#include <net/ip6_route.h> 47#include <net/ip6_route.h>
49#include <net/addrconf.h> 48#include <net/addrconf.h>
50#include <net/ip6_tunnel.h> 49#include <net/ip6_tunnel.h>
@@ -391,7 +390,7 @@ parse_tlv_tnl_enc_lim(struct sk_buff *skb, __u8 * raw)
391 * to the specifications in RFC 2473. 390 * to the specifications in RFC 2473.
392 **/ 391 **/
393 392
394static void 393static int
395ip6ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, 394ip6ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
396 int type, int code, int offset, __u32 info) 395 int type, int code, int offset, __u32 info)
397{ 396{
@@ -402,6 +401,7 @@ ip6ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
402 int rel_code = ICMPV6_ADDR_UNREACH; 401 int rel_code = ICMPV6_ADDR_UNREACH;
403 __u32 rel_info = 0; 402 __u32 rel_info = 0;
404 __u16 len; 403 __u16 len;
404 int err = -ENOENT;
405 405
406 /* If the packet doesn't contain the original IPv6 header we are 406 /* If the packet doesn't contain the original IPv6 header we are
407 in trouble since we might need the source address for further 407 in trouble since we might need the source address for further
@@ -411,6 +411,8 @@ ip6ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
411 if ((t = ip6ip6_tnl_lookup(&ipv6h->daddr, &ipv6h->saddr)) == NULL) 411 if ((t = ip6ip6_tnl_lookup(&ipv6h->daddr, &ipv6h->saddr)) == NULL)
412 goto out; 412 goto out;
413 413
414 err = 0;
415
414 switch (type) { 416 switch (type) {
415 __u32 teli; 417 __u32 teli;
416 struct ipv6_tlv_tnl_enc_lim *tel; 418 struct ipv6_tlv_tnl_enc_lim *tel;
@@ -492,6 +494,7 @@ ip6ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
492 } 494 }
493out: 495out:
494 read_unlock(&ip6ip6_lock); 496 read_unlock(&ip6ip6_lock);
497 return err;
495} 498}
496 499
497static inline void ip6ip6_ecn_decapsulate(struct ipv6hdr *outer_iph, 500static inline void ip6ip6_ecn_decapsulate(struct ipv6hdr *outer_iph,
@@ -511,9 +514,8 @@ static inline void ip6ip6_ecn_decapsulate(struct ipv6hdr *outer_iph,
511 **/ 514 **/
512 515
513static int 516static int
514ip6ip6_rcv(struct sk_buff **pskb) 517ip6ip6_rcv(struct sk_buff *skb)
515{ 518{
516 struct sk_buff *skb = *pskb;
517 struct ipv6hdr *ipv6h; 519 struct ipv6hdr *ipv6h;
518 struct ip6_tnl *t; 520 struct ip6_tnl *t;
519 521
@@ -1112,39 +1114,12 @@ ip6ip6_fb_tnl_dev_init(struct net_device *dev)
1112 return 0; 1114 return 0;
1113} 1115}
1114 1116
1115#ifdef CONFIG_INET6_TUNNEL
1116static struct xfrm6_tunnel ip6ip6_handler = { 1117static struct xfrm6_tunnel ip6ip6_handler = {
1117 .handler = ip6ip6_rcv, 1118 .handler = ip6ip6_rcv,
1118 .err_handler = ip6ip6_err, 1119 .err_handler = ip6ip6_err,
1120 .priority = 1,
1119}; 1121};
1120 1122
1121static inline int ip6ip6_register(void)
1122{
1123 return xfrm6_tunnel_register(&ip6ip6_handler);
1124}
1125
1126static inline int ip6ip6_unregister(void)
1127{
1128 return xfrm6_tunnel_deregister(&ip6ip6_handler);
1129}
1130#else
1131static struct inet6_protocol xfrm6_tunnel_protocol = {
1132 .handler = ip6ip6_rcv,
1133 .err_handler = ip6ip6_err,
1134 .flags = INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
1135};
1136
1137static inline int ip6ip6_register(void)
1138{
1139 return inet6_add_protocol(&xfrm6_tunnel_protocol, IPPROTO_IPV6);
1140}
1141
1142static inline int ip6ip6_unregister(void)
1143{
1144 return inet6_del_protocol(&xfrm6_tunnel_protocol, IPPROTO_IPV6);
1145}
1146#endif
1147
1148/** 1123/**
1149 * ip6_tunnel_init - register protocol and reserve needed resources 1124 * ip6_tunnel_init - register protocol and reserve needed resources
1150 * 1125 *
@@ -1155,7 +1130,7 @@ static int __init ip6_tunnel_init(void)
1155{ 1130{
1156 int err; 1131 int err;
1157 1132
1158 if (ip6ip6_register() < 0) { 1133 if (xfrm6_tunnel_register(&ip6ip6_handler)) {
1159 printk(KERN_ERR "ip6ip6 init: can't register tunnel\n"); 1134 printk(KERN_ERR "ip6ip6 init: can't register tunnel\n");
1160 return -EAGAIN; 1135 return -EAGAIN;
1161 } 1136 }
@@ -1174,7 +1149,7 @@ static int __init ip6_tunnel_init(void)
1174 } 1149 }
1175 return 0; 1150 return 0;
1176fail: 1151fail:
1177 ip6ip6_unregister(); 1152 xfrm6_tunnel_deregister(&ip6ip6_handler);
1178 return err; 1153 return err;
1179} 1154}
1180 1155
@@ -1184,7 +1159,7 @@ fail:
1184 1159
1185static void __exit ip6_tunnel_cleanup(void) 1160static void __exit ip6_tunnel_cleanup(void)
1186{ 1161{
1187 if (ip6ip6_unregister() < 0) 1162 if (xfrm6_tunnel_deregister(&ip6ip6_handler))
1188 printk(KERN_INFO "ip6ip6 close: can't deregister tunnel\n"); 1163 printk(KERN_INFO "ip6ip6 close: can't deregister tunnel\n");
1189 1164
1190 unregister_netdev(ip6ip6_fb_tnl_dev); 1165 unregister_netdev(ip6ip6_fb_tnl_dev);
diff --git a/net/ipv6/netfilter/ip6_queue.c b/net/ipv6/netfilter/ip6_queue.c
index 344eab3b5da8..e81c6a9dab81 100644
--- a/net/ipv6/netfilter/ip6_queue.c
+++ b/net/ipv6/netfilter/ip6_queue.c
@@ -713,13 +713,13 @@ cleanup_netlink_notifier:
713 return status; 713 return status;
714} 714}
715 715
716static int __init init(void) 716static int __init ip6_queue_init(void)
717{ 717{
718 718
719 return init_or_cleanup(1); 719 return init_or_cleanup(1);
720} 720}
721 721
722static void __exit fini(void) 722static void __exit ip6_queue_fini(void)
723{ 723{
724 init_or_cleanup(0); 724 init_or_cleanup(0);
725} 725}
@@ -727,5 +727,5 @@ static void __exit fini(void)
727MODULE_DESCRIPTION("IPv6 packet queue handler"); 727MODULE_DESCRIPTION("IPv6 packet queue handler");
728MODULE_LICENSE("GPL"); 728MODULE_LICENSE("GPL");
729 729
730module_init(init); 730module_init(ip6_queue_init);
731module_exit(fini); 731module_exit(ip6_queue_fini);
diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c
index db3c9ae98e95..3ecf2db841f8 100644
--- a/net/ipv6/netfilter/ip6_tables.c
+++ b/net/ipv6/netfilter/ip6_tables.c
@@ -1406,7 +1406,7 @@ static struct ip6t_match icmp6_matchstruct = {
1406 .family = AF_INET6, 1406 .family = AF_INET6,
1407}; 1407};
1408 1408
1409static int __init init(void) 1409static int __init ip6_tables_init(void)
1410{ 1410{
1411 int ret; 1411 int ret;
1412 1412
@@ -1429,7 +1429,7 @@ static int __init init(void)
1429 return 0; 1429 return 0;
1430} 1430}
1431 1431
1432static void __exit fini(void) 1432static void __exit ip6_tables_fini(void)
1433{ 1433{
1434 nf_unregister_sockopt(&ip6t_sockopts); 1434 nf_unregister_sockopt(&ip6t_sockopts);
1435 xt_unregister_match(&icmp6_matchstruct); 1435 xt_unregister_match(&icmp6_matchstruct);
@@ -1517,5 +1517,5 @@ EXPORT_SYMBOL(ip6t_do_table);
1517EXPORT_SYMBOL(ip6t_ext_hdr); 1517EXPORT_SYMBOL(ip6t_ext_hdr);
1518EXPORT_SYMBOL(ipv6_find_hdr); 1518EXPORT_SYMBOL(ipv6_find_hdr);
1519 1519
1520module_init(init); 1520module_init(ip6_tables_init);
1521module_exit(fini); 1521module_exit(ip6_tables_fini);
diff --git a/net/ipv6/netfilter/ip6t_HL.c b/net/ipv6/netfilter/ip6t_HL.c
index da14c6d86bcc..b8eff8ee69b1 100644
--- a/net/ipv6/netfilter/ip6t_HL.c
+++ b/net/ipv6/netfilter/ip6t_HL.c
@@ -93,15 +93,15 @@ static struct ip6t_target ip6t_HL = {
93 .me = THIS_MODULE 93 .me = THIS_MODULE
94}; 94};
95 95
96static int __init init(void) 96static int __init ip6t_hl_init(void)
97{ 97{
98 return ip6t_register_target(&ip6t_HL); 98 return ip6t_register_target(&ip6t_HL);
99} 99}
100 100
101static void __exit fini(void) 101static void __exit ip6t_hl_fini(void)
102{ 102{
103 ip6t_unregister_target(&ip6t_HL); 103 ip6t_unregister_target(&ip6t_HL);
104} 104}
105 105
106module_init(init); 106module_init(ip6t_hl_init);
107module_exit(fini); 107module_exit(ip6t_hl_fini);
diff --git a/net/ipv6/netfilter/ip6t_LOG.c b/net/ipv6/netfilter/ip6t_LOG.c
index 07c6bcbe4c5f..a96c0de14b00 100644
--- a/net/ipv6/netfilter/ip6t_LOG.c
+++ b/net/ipv6/netfilter/ip6t_LOG.c
@@ -483,7 +483,7 @@ static struct nf_logger ip6t_logger = {
483 .me = THIS_MODULE, 483 .me = THIS_MODULE,
484}; 484};
485 485
486static int __init init(void) 486static int __init ip6t_log_init(void)
487{ 487{
488 if (ip6t_register_target(&ip6t_log_reg)) 488 if (ip6t_register_target(&ip6t_log_reg))
489 return -EINVAL; 489 return -EINVAL;
@@ -497,11 +497,11 @@ static int __init init(void)
497 return 0; 497 return 0;
498} 498}
499 499
500static void __exit fini(void) 500static void __exit ip6t_log_fini(void)
501{ 501{
502 nf_log_unregister_logger(&ip6t_logger); 502 nf_log_unregister_logger(&ip6t_logger);
503 ip6t_unregister_target(&ip6t_log_reg); 503 ip6t_unregister_target(&ip6t_log_reg);
504} 504}
505 505
506module_init(init); 506module_init(ip6t_log_init);
507module_exit(fini); 507module_exit(ip6t_log_fini);
diff --git a/net/ipv6/netfilter/ip6t_REJECT.c b/net/ipv6/netfilter/ip6t_REJECT.c
index ddfa38575fe2..de1175c27f6d 100644
--- a/net/ipv6/netfilter/ip6t_REJECT.c
+++ b/net/ipv6/netfilter/ip6t_REJECT.c
@@ -255,17 +255,17 @@ static struct ip6t_target ip6t_reject_reg = {
255 .me = THIS_MODULE 255 .me = THIS_MODULE
256}; 256};
257 257
258static int __init init(void) 258static int __init ip6t_reject_init(void)
259{ 259{
260 if (ip6t_register_target(&ip6t_reject_reg)) 260 if (ip6t_register_target(&ip6t_reject_reg))
261 return -EINVAL; 261 return -EINVAL;
262 return 0; 262 return 0;
263} 263}
264 264
265static void __exit fini(void) 265static void __exit ip6t_reject_fini(void)
266{ 266{
267 ip6t_unregister_target(&ip6t_reject_reg); 267 ip6t_unregister_target(&ip6t_reject_reg);
268} 268}
269 269
270module_init(init); 270module_init(ip6t_reject_init);
271module_exit(fini); 271module_exit(ip6t_reject_fini);
diff --git a/net/ipv6/netfilter/ip6t_ah.c b/net/ipv6/netfilter/ip6t_ah.c
index 178f6fb1e53d..2f7bb20c758b 100644
--- a/net/ipv6/netfilter/ip6t_ah.c
+++ b/net/ipv6/netfilter/ip6t_ah.c
@@ -122,15 +122,15 @@ static struct ip6t_match ah_match = {
122 .me = THIS_MODULE, 122 .me = THIS_MODULE,
123}; 123};
124 124
125static int __init init(void) 125static int __init ip6t_ah_init(void)
126{ 126{
127 return ip6t_register_match(&ah_match); 127 return ip6t_register_match(&ah_match);
128} 128}
129 129
130static void __exit cleanup(void) 130static void __exit ip6t_ah_fini(void)
131{ 131{
132 ip6t_unregister_match(&ah_match); 132 ip6t_unregister_match(&ah_match);
133} 133}
134 134
135module_init(init); 135module_init(ip6t_ah_init);
136module_exit(cleanup); 136module_exit(ip6t_ah_fini);
diff --git a/net/ipv6/netfilter/ip6t_dst.c b/net/ipv6/netfilter/ip6t_dst.c
index e97a70226987..9422413d0571 100644
--- a/net/ipv6/netfilter/ip6t_dst.c
+++ b/net/ipv6/netfilter/ip6t_dst.c
@@ -206,15 +206,15 @@ static struct ip6t_match opts_match = {
206 .me = THIS_MODULE, 206 .me = THIS_MODULE,
207}; 207};
208 208
209static int __init init(void) 209static int __init ip6t_dst_init(void)
210{ 210{
211 return ip6t_register_match(&opts_match); 211 return ip6t_register_match(&opts_match);
212} 212}
213 213
214static void __exit cleanup(void) 214static void __exit ip6t_dst_fini(void)
215{ 215{
216 ip6t_unregister_match(&opts_match); 216 ip6t_unregister_match(&opts_match);
217} 217}
218 218
219module_init(init); 219module_init(ip6t_dst_init);
220module_exit(cleanup); 220module_exit(ip6t_dst_fini);
diff --git a/net/ipv6/netfilter/ip6t_esp.c b/net/ipv6/netfilter/ip6t_esp.c
index 540b8bfd5055..36bedad2c6f7 100644
--- a/net/ipv6/netfilter/ip6t_esp.c
+++ b/net/ipv6/netfilter/ip6t_esp.c
@@ -101,15 +101,15 @@ static struct ip6t_match esp_match = {
101 .me = THIS_MODULE, 101 .me = THIS_MODULE,
102}; 102};
103 103
104static int __init init(void) 104static int __init ip6t_esp_init(void)
105{ 105{
106 return ip6t_register_match(&esp_match); 106 return ip6t_register_match(&esp_match);
107} 107}
108 108
109static void __exit cleanup(void) 109static void __exit ip6t_esp_fini(void)
110{ 110{
111 ip6t_unregister_match(&esp_match); 111 ip6t_unregister_match(&esp_match);
112} 112}
113 113
114module_init(init); 114module_init(ip6t_esp_init);
115module_exit(cleanup); 115module_exit(ip6t_esp_fini);
diff --git a/net/ipv6/netfilter/ip6t_eui64.c b/net/ipv6/netfilter/ip6t_eui64.c
index d4b0bad52830..94dbdb8b458d 100644
--- a/net/ipv6/netfilter/ip6t_eui64.c
+++ b/net/ipv6/netfilter/ip6t_eui64.c
@@ -70,15 +70,15 @@ static struct ip6t_match eui64_match = {
70 .me = THIS_MODULE, 70 .me = THIS_MODULE,
71}; 71};
72 72
73static int __init init(void) 73static int __init ip6t_eui64_init(void)
74{ 74{
75 return ip6t_register_match(&eui64_match); 75 return ip6t_register_match(&eui64_match);
76} 76}
77 77
78static void __exit fini(void) 78static void __exit ip6t_eui64_fini(void)
79{ 79{
80 ip6t_unregister_match(&eui64_match); 80 ip6t_unregister_match(&eui64_match);
81} 81}
82 82
83module_init(init); 83module_init(ip6t_eui64_init);
84module_exit(fini); 84module_exit(ip6t_eui64_fini);
diff --git a/net/ipv6/netfilter/ip6t_frag.c b/net/ipv6/netfilter/ip6t_frag.c
index 4c41e14823d5..06768c84bd31 100644
--- a/net/ipv6/netfilter/ip6t_frag.c
+++ b/net/ipv6/netfilter/ip6t_frag.c
@@ -139,15 +139,15 @@ static struct ip6t_match frag_match = {
139 .me = THIS_MODULE, 139 .me = THIS_MODULE,
140}; 140};
141 141
142static int __init init(void) 142static int __init ip6t_frag_init(void)
143{ 143{
144 return ip6t_register_match(&frag_match); 144 return ip6t_register_match(&frag_match);
145} 145}
146 146
147static void __exit cleanup(void) 147static void __exit ip6t_frag_fini(void)
148{ 148{
149 ip6t_unregister_match(&frag_match); 149 ip6t_unregister_match(&frag_match);
150} 150}
151 151
152module_init(init); 152module_init(ip6t_frag_init);
153module_exit(cleanup); 153module_exit(ip6t_frag_fini);
diff --git a/net/ipv6/netfilter/ip6t_hbh.c b/net/ipv6/netfilter/ip6t_hbh.c
index b4a1fdfe6abc..374f1be85c0d 100644
--- a/net/ipv6/netfilter/ip6t_hbh.c
+++ b/net/ipv6/netfilter/ip6t_hbh.c
@@ -206,15 +206,15 @@ static struct ip6t_match opts_match = {
206 .me = THIS_MODULE, 206 .me = THIS_MODULE,
207}; 207};
208 208
209static int __init init(void) 209static int __init ip6t_hbh_init(void)
210{ 210{
211 return ip6t_register_match(&opts_match); 211 return ip6t_register_match(&opts_match);
212} 212}
213 213
214static void __exit cleanup(void) 214static void __exit ip6t_hbh_fini(void)
215{ 215{
216 ip6t_unregister_match(&opts_match); 216 ip6t_unregister_match(&opts_match);
217} 217}
218 218
219module_init(init); 219module_init(ip6t_hbh_init);
220module_exit(cleanup); 220module_exit(ip6t_hbh_fini);
diff --git a/net/ipv6/netfilter/ip6t_hl.c b/net/ipv6/netfilter/ip6t_hl.c
index 374055733b26..44a729e17c48 100644
--- a/net/ipv6/netfilter/ip6t_hl.c
+++ b/net/ipv6/netfilter/ip6t_hl.c
@@ -55,16 +55,16 @@ static struct ip6t_match hl_match = {
55 .me = THIS_MODULE, 55 .me = THIS_MODULE,
56}; 56};
57 57
58static int __init init(void) 58static int __init ip6t_hl_init(void)
59{ 59{
60 return ip6t_register_match(&hl_match); 60 return ip6t_register_match(&hl_match);
61} 61}
62 62
63static void __exit fini(void) 63static void __exit ip6t_hl_fini(void)
64{ 64{
65 ip6t_unregister_match(&hl_match); 65 ip6t_unregister_match(&hl_match);
66 66
67} 67}
68 68
69module_init(init); 69module_init(ip6t_hl_init);
70module_exit(fini); 70module_exit(ip6t_hl_fini);
diff --git a/net/ipv6/netfilter/ip6t_multiport.c b/net/ipv6/netfilter/ip6t_multiport.c
index 752b65d21c72..10c48ba596d6 100644
--- a/net/ipv6/netfilter/ip6t_multiport.c
+++ b/net/ipv6/netfilter/ip6t_multiport.c
@@ -111,15 +111,15 @@ static struct ip6t_match multiport_match = {
111 .me = THIS_MODULE, 111 .me = THIS_MODULE,
112}; 112};
113 113
114static int __init init(void) 114static int __init ip6t_multiport_init(void)
115{ 115{
116 return ip6t_register_match(&multiport_match); 116 return ip6t_register_match(&multiport_match);
117} 117}
118 118
119static void __exit fini(void) 119static void __exit ip6t_multiport_fini(void)
120{ 120{
121 ip6t_unregister_match(&multiport_match); 121 ip6t_unregister_match(&multiport_match);
122} 122}
123 123
124module_init(init); 124module_init(ip6t_multiport_init);
125module_exit(fini); 125module_exit(ip6t_multiport_fini);
diff --git a/net/ipv6/netfilter/ip6t_owner.c b/net/ipv6/netfilter/ip6t_owner.c
index e2cee3bcdef9..5d047990cd44 100644
--- a/net/ipv6/netfilter/ip6t_owner.c
+++ b/net/ipv6/netfilter/ip6t_owner.c
@@ -79,15 +79,15 @@ static struct ip6t_match owner_match = {
79 .me = THIS_MODULE, 79 .me = THIS_MODULE,
80}; 80};
81 81
82static int __init init(void) 82static int __init ip6t_owner_init(void)
83{ 83{
84 return ip6t_register_match(&owner_match); 84 return ip6t_register_match(&owner_match);
85} 85}
86 86
87static void __exit fini(void) 87static void __exit ip6t_owner_fini(void)
88{ 88{
89 ip6t_unregister_match(&owner_match); 89 ip6t_unregister_match(&owner_match);
90} 90}
91 91
92module_init(init); 92module_init(ip6t_owner_init);
93module_exit(fini); 93module_exit(ip6t_owner_fini);
diff --git a/net/ipv6/netfilter/ip6t_rt.c b/net/ipv6/netfilter/ip6t_rt.c
index 4c6b55bb225b..fbb0184a41d8 100644
--- a/net/ipv6/netfilter/ip6t_rt.c
+++ b/net/ipv6/netfilter/ip6t_rt.c
@@ -225,15 +225,15 @@ static struct ip6t_match rt_match = {
225 .me = THIS_MODULE, 225 .me = THIS_MODULE,
226}; 226};
227 227
228static int __init init(void) 228static int __init ip6t_rt_init(void)
229{ 229{
230 return ip6t_register_match(&rt_match); 230 return ip6t_register_match(&rt_match);
231} 231}
232 232
233static void __exit cleanup(void) 233static void __exit ip6t_rt_fini(void)
234{ 234{
235 ip6t_unregister_match(&rt_match); 235 ip6t_unregister_match(&rt_match);
236} 236}
237 237
238module_init(init); 238module_init(ip6t_rt_init);
239module_exit(cleanup); 239module_exit(ip6t_rt_fini);
diff --git a/net/ipv6/netfilter/ip6table_filter.c b/net/ipv6/netfilter/ip6table_filter.c
index ce4a968e1f70..e5e724d9ee60 100644
--- a/net/ipv6/netfilter/ip6table_filter.c
+++ b/net/ipv6/netfilter/ip6table_filter.c
@@ -159,7 +159,7 @@ static struct nf_hook_ops ip6t_ops[] = {
159static int forward = NF_ACCEPT; 159static int forward = NF_ACCEPT;
160module_param(forward, bool, 0000); 160module_param(forward, bool, 0000);
161 161
162static int __init init(void) 162static int __init ip6table_filter_init(void)
163{ 163{
164 int ret; 164 int ret;
165 165
@@ -201,7 +201,7 @@ static int __init init(void)
201 return ret; 201 return ret;
202} 202}
203 203
204static void __exit fini(void) 204static void __exit ip6table_filter_fini(void)
205{ 205{
206 unsigned int i; 206 unsigned int i;
207 207
@@ -211,5 +211,5 @@ static void __exit fini(void)
211 ip6t_unregister_table(&packet_filter); 211 ip6t_unregister_table(&packet_filter);
212} 212}
213 213
214module_init(init); 214module_init(ip6table_filter_init);
215module_exit(fini); 215module_exit(ip6table_filter_fini);
diff --git a/net/ipv6/netfilter/ip6table_mangle.c b/net/ipv6/netfilter/ip6table_mangle.c
index 30a4627e000d..e1f0f6ae9841 100644
--- a/net/ipv6/netfilter/ip6table_mangle.c
+++ b/net/ipv6/netfilter/ip6table_mangle.c
@@ -228,7 +228,7 @@ static struct nf_hook_ops ip6t_ops[] = {
228 }, 228 },
229}; 229};
230 230
231static int __init init(void) 231static int __init ip6table_mangle_init(void)
232{ 232{
233 int ret; 233 int ret;
234 234
@@ -274,7 +274,7 @@ static int __init init(void)
274 return ret; 274 return ret;
275} 275}
276 276
277static void __exit fini(void) 277static void __exit ip6table_mangle_fini(void)
278{ 278{
279 unsigned int i; 279 unsigned int i;
280 280
@@ -284,5 +284,5 @@ static void __exit fini(void)
284 ip6t_unregister_table(&packet_mangler); 284 ip6t_unregister_table(&packet_mangler);
285} 285}
286 286
287module_init(init); 287module_init(ip6table_mangle_init);
288module_exit(fini); 288module_exit(ip6table_mangle_fini);
diff --git a/net/ipv6/netfilter/ip6table_raw.c b/net/ipv6/netfilter/ip6table_raw.c
index db28ba3855e2..54d1fffd62ba 100644
--- a/net/ipv6/netfilter/ip6table_raw.c
+++ b/net/ipv6/netfilter/ip6table_raw.c
@@ -142,7 +142,7 @@ static struct nf_hook_ops ip6t_ops[] = {
142 }, 142 },
143}; 143};
144 144
145static int __init init(void) 145static int __init ip6table_raw_init(void)
146{ 146{
147 int ret; 147 int ret;
148 148
@@ -170,7 +170,7 @@ static int __init init(void)
170 return ret; 170 return ret;
171} 171}
172 172
173static void __exit fini(void) 173static void __exit ip6table_raw_fini(void)
174{ 174{
175 unsigned int i; 175 unsigned int i;
176 176
@@ -180,6 +180,6 @@ static void __exit fini(void)
180 ip6t_unregister_table(&packet_raw); 180 ip6t_unregister_table(&packet_raw);
181} 181}
182 182
183module_init(init); 183module_init(ip6table_raw_init);
184module_exit(fini); 184module_exit(ip6table_raw_fini);
185MODULE_LICENSE("GPL"); 185MODULE_LICENSE("GPL");
diff --git a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
index c16f62934bd9..c8b5a96cbb0f 100644
--- a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
+++ b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
@@ -588,16 +588,16 @@ MODULE_ALIAS("nf_conntrack-" __stringify(AF_INET6));
588MODULE_LICENSE("GPL"); 588MODULE_LICENSE("GPL");
589MODULE_AUTHOR("Yasuyuki KOZAKAI @USAGI <yasuyuki.kozakai@toshiba.co.jp>"); 589MODULE_AUTHOR("Yasuyuki KOZAKAI @USAGI <yasuyuki.kozakai@toshiba.co.jp>");
590 590
591static int __init init(void) 591static int __init nf_conntrack_l3proto_ipv6_init(void)
592{ 592{
593 need_conntrack(); 593 need_conntrack();
594 return init_or_cleanup(1); 594 return init_or_cleanup(1);
595} 595}
596 596
597static void __exit fini(void) 597static void __exit nf_conntrack_l3proto_ipv6_fini(void)
598{ 598{
599 init_or_cleanup(0); 599 init_or_cleanup(0);
600} 600}
601 601
602module_init(init); 602module_init(nf_conntrack_l3proto_ipv6_init);
603module_exit(fini); 603module_exit(nf_conntrack_l3proto_ipv6_fini);
diff --git a/net/ipv6/tunnel6.c b/net/ipv6/tunnel6.c
new file mode 100644
index 000000000000..5659b52284bd
--- /dev/null
+++ b/net/ipv6/tunnel6.c
@@ -0,0 +1,131 @@
1/*
2 * Copyright (C)2003,2004 USAGI/WIDE Project
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 *
18 * Authors Mitsuru KANDA <mk@linux-ipv6.org>
19 * YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
20 */
21
22#include <linux/init.h>
23#include <linux/module.h>
24#include <linux/mutex.h>
25#include <linux/netdevice.h>
26#include <linux/skbuff.h>
27#include <net/protocol.h>
28#include <net/xfrm.h>
29
30static struct xfrm6_tunnel *tunnel6_handlers;
31static DEFINE_MUTEX(tunnel6_mutex);
32
33int xfrm6_tunnel_register(struct xfrm6_tunnel *handler)
34{
35 struct xfrm6_tunnel **pprev;
36 int ret = -EEXIST;
37 int priority = handler->priority;
38
39 mutex_lock(&tunnel6_mutex);
40
41 for (pprev = &tunnel6_handlers; *pprev; pprev = &(*pprev)->next) {
42 if ((*pprev)->priority > priority)
43 break;
44 if ((*pprev)->priority == priority)
45 goto err;
46 }
47
48 handler->next = *pprev;
49 *pprev = handler;
50
51 ret = 0;
52
53err:
54 mutex_unlock(&tunnel6_mutex);
55
56 return ret;
57}
58
59EXPORT_SYMBOL(xfrm6_tunnel_register);
60
61int xfrm6_tunnel_deregister(struct xfrm6_tunnel *handler)
62{
63 struct xfrm6_tunnel **pprev;
64 int ret = -ENOENT;
65
66 mutex_lock(&tunnel6_mutex);
67
68 for (pprev = &tunnel6_handlers; *pprev; pprev = &(*pprev)->next) {
69 if (*pprev == handler) {
70 *pprev = handler->next;
71 ret = 0;
72 break;
73 }
74 }
75
76 mutex_unlock(&tunnel6_mutex);
77
78 synchronize_net();
79
80 return ret;
81}
82
83EXPORT_SYMBOL(xfrm6_tunnel_deregister);
84
85static int tunnel6_rcv(struct sk_buff **pskb)
86{
87 struct sk_buff *skb = *pskb;
88 struct xfrm6_tunnel *handler;
89
90 for (handler = tunnel6_handlers; handler; handler = handler->next)
91 if (!handler->handler(skb))
92 return 0;
93
94 kfree_skb(skb);
95 return 0;
96}
97
98static void tunnel6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
99 int type, int code, int offset, __u32 info)
100{
101 struct xfrm6_tunnel *handler;
102
103 for (handler = tunnel6_handlers; handler; handler = handler->next)
104 if (!handler->err_handler(skb, opt, type, code, offset, info))
105 break;
106}
107
108static struct inet6_protocol tunnel6_protocol = {
109 .handler = tunnel6_rcv,
110 .err_handler = tunnel6_err,
111 .flags = INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
112};
113
114static int __init tunnel6_init(void)
115{
116 if (inet6_add_protocol(&tunnel6_protocol, IPPROTO_IPV6)) {
117 printk(KERN_ERR "tunnel6 init(): can't add protocol\n");
118 return -EAGAIN;
119 }
120 return 0;
121}
122
123static void __exit tunnel6_fini(void)
124{
125 if (inet6_del_protocol(&tunnel6_protocol, IPPROTO_IPV6))
126 printk(KERN_ERR "tunnel6 close: can't remove protocol\n");
127}
128
129module_init(tunnel6_init);
130module_exit(tunnel6_fini);
131MODULE_LICENSE("GPL");
diff --git a/net/ipv6/xfrm6_input.c b/net/ipv6/xfrm6_input.c
index 1ca2da68ef69..cccf8b76f046 100644
--- a/net/ipv6/xfrm6_input.c
+++ b/net/ipv6/xfrm6_input.c
@@ -28,9 +28,8 @@ static inline void ipip6_ecn_decapsulate(struct sk_buff *skb)
28 IP6_ECN_set_ce(inner_iph); 28 IP6_ECN_set_ce(inner_iph);
29} 29}
30 30
31int xfrm6_rcv_spi(struct sk_buff **pskb, u32 spi) 31int xfrm6_rcv_spi(struct sk_buff *skb, u32 spi)
32{ 32{
33 struct sk_buff *skb = *pskb;
34 int err; 33 int err;
35 u32 seq; 34 u32 seq;
36 struct sec_decap_state xfrm_vec[XFRM_MAX_DEPTH]; 35 struct sec_decap_state xfrm_vec[XFRM_MAX_DEPTH];
@@ -159,5 +158,5 @@ EXPORT_SYMBOL(xfrm6_rcv_spi);
159 158
160int xfrm6_rcv(struct sk_buff **pskb) 159int xfrm6_rcv(struct sk_buff **pskb)
161{ 160{
162 return xfrm6_rcv_spi(pskb, 0); 161 return xfrm6_rcv_spi(*pskb, 0);
163} 162}
diff --git a/net/ipv6/xfrm6_tunnel.c b/net/ipv6/xfrm6_tunnel.c
index 08f9abbdf1d7..a8f6776c518d 100644
--- a/net/ipv6/xfrm6_tunnel.c
+++ b/net/ipv6/xfrm6_tunnel.c
@@ -28,7 +28,6 @@
28#include <net/ip.h> 28#include <net/ip.h>
29#include <net/xfrm.h> 29#include <net/xfrm.h>
30#include <net/ipv6.h> 30#include <net/ipv6.h>
31#include <net/protocol.h>
32#include <linux/ipv6.h> 31#include <linux/ipv6.h>
33#include <linux/icmpv6.h> 32#include <linux/icmpv6.h>
34#include <linux/mutex.h> 33#include <linux/mutex.h>
@@ -357,71 +356,18 @@ static int xfrm6_tunnel_input(struct xfrm_state *x, struct xfrm_decap_state *dec
357 return 0; 356 return 0;
358} 357}
359 358
360static struct xfrm6_tunnel *xfrm6_tunnel_handler; 359static int xfrm6_tunnel_rcv(struct sk_buff *skb)
361static DEFINE_MUTEX(xfrm6_tunnel_mutex);
362
363int xfrm6_tunnel_register(struct xfrm6_tunnel *handler)
364{ 360{
365 int ret;
366
367 mutex_lock(&xfrm6_tunnel_mutex);
368 ret = 0;
369 if (xfrm6_tunnel_handler != NULL)
370 ret = -EINVAL;
371 if (!ret)
372 xfrm6_tunnel_handler = handler;
373 mutex_unlock(&xfrm6_tunnel_mutex);
374
375 return ret;
376}
377
378EXPORT_SYMBOL(xfrm6_tunnel_register);
379
380int xfrm6_tunnel_deregister(struct xfrm6_tunnel *handler)
381{
382 int ret;
383
384 mutex_lock(&xfrm6_tunnel_mutex);
385 ret = 0;
386 if (xfrm6_tunnel_handler != handler)
387 ret = -EINVAL;
388 if (!ret)
389 xfrm6_tunnel_handler = NULL;
390 mutex_unlock(&xfrm6_tunnel_mutex);
391
392 synchronize_net();
393
394 return ret;
395}
396
397EXPORT_SYMBOL(xfrm6_tunnel_deregister);
398
399static int xfrm6_tunnel_rcv(struct sk_buff **pskb)
400{
401 struct sk_buff *skb = *pskb;
402 struct xfrm6_tunnel *handler = xfrm6_tunnel_handler;
403 struct ipv6hdr *iph = skb->nh.ipv6h; 361 struct ipv6hdr *iph = skb->nh.ipv6h;
404 u32 spi; 362 u32 spi;
405 363
406 /* device-like_ip6ip6_handler() */
407 if (handler && handler->handler(pskb) == 0)
408 return 0;
409
410 spi = xfrm6_tunnel_spi_lookup((xfrm_address_t *)&iph->saddr); 364 spi = xfrm6_tunnel_spi_lookup((xfrm_address_t *)&iph->saddr);
411 return xfrm6_rcv_spi(pskb, spi); 365 return xfrm6_rcv_spi(skb, spi);
412} 366}
413 367
414static void xfrm6_tunnel_err(struct sk_buff *skb, struct inet6_skb_parm *opt, 368static int xfrm6_tunnel_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
415 int type, int code, int offset, __u32 info) 369 int type, int code, int offset, __u32 info)
416{ 370{
417 struct xfrm6_tunnel *handler = xfrm6_tunnel_handler;
418
419 /* call here first for device-like ip6ip6 err handling */
420 if (handler) {
421 handler->err_handler(skb, opt, type, code, offset, info);
422 return;
423 }
424
425 /* xfrm6_tunnel native err handling */ 371 /* xfrm6_tunnel native err handling */
426 switch (type) { 372 switch (type) {
427 case ICMPV6_DEST_UNREACH: 373 case ICMPV6_DEST_UNREACH:
@@ -462,7 +408,8 @@ static void xfrm6_tunnel_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
462 default: 408 default:
463 break; 409 break;
464 } 410 }
465 return; 411
412 return 0;
466} 413}
467 414
468static int xfrm6_tunnel_init_state(struct xfrm_state *x) 415static int xfrm6_tunnel_init_state(struct xfrm_state *x)
@@ -493,10 +440,10 @@ static struct xfrm_type xfrm6_tunnel_type = {
493 .output = xfrm6_tunnel_output, 440 .output = xfrm6_tunnel_output,
494}; 441};
495 442
496static struct inet6_protocol xfrm6_tunnel_protocol = { 443static struct xfrm6_tunnel xfrm6_tunnel_handler = {
497 .handler = xfrm6_tunnel_rcv, 444 .handler = xfrm6_tunnel_rcv,
498 .err_handler = xfrm6_tunnel_err, 445 .err_handler = xfrm6_tunnel_err,
499 .flags = INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL, 446 .priority = 2,
500}; 447};
501 448
502static int __init xfrm6_tunnel_init(void) 449static int __init xfrm6_tunnel_init(void)
@@ -508,16 +455,16 @@ static int __init xfrm6_tunnel_init(void)
508 "xfrm6_tunnel init: can't add xfrm type\n"); 455 "xfrm6_tunnel init: can't add xfrm type\n");
509 return -EAGAIN; 456 return -EAGAIN;
510 } 457 }
511 if (inet6_add_protocol(&xfrm6_tunnel_protocol, IPPROTO_IPV6) < 0) { 458 if (xfrm6_tunnel_register(&xfrm6_tunnel_handler)) {
512 X6TPRINTK1(KERN_ERR 459 X6TPRINTK1(KERN_ERR
513 "xfrm6_tunnel init(): can't add protocol\n"); 460 "xfrm6_tunnel init(): can't add handler\n");
514 xfrm_unregister_type(&xfrm6_tunnel_type, AF_INET6); 461 xfrm_unregister_type(&xfrm6_tunnel_type, AF_INET6);
515 return -EAGAIN; 462 return -EAGAIN;
516 } 463 }
517 if (xfrm6_tunnel_spi_init() < 0) { 464 if (xfrm6_tunnel_spi_init() < 0) {
518 X6TPRINTK1(KERN_ERR 465 X6TPRINTK1(KERN_ERR
519 "xfrm6_tunnel init: failed to initialize spi\n"); 466 "xfrm6_tunnel init: failed to initialize spi\n");
520 inet6_del_protocol(&xfrm6_tunnel_protocol, IPPROTO_IPV6); 467 xfrm6_tunnel_deregister(&xfrm6_tunnel_handler);
521 xfrm_unregister_type(&xfrm6_tunnel_type, AF_INET6); 468 xfrm_unregister_type(&xfrm6_tunnel_type, AF_INET6);
522 return -EAGAIN; 469 return -EAGAIN;
523 } 470 }
@@ -529,9 +476,9 @@ static void __exit xfrm6_tunnel_fini(void)
529 X6TPRINTK3(KERN_DEBUG "%s()\n", __FUNCTION__); 476 X6TPRINTK3(KERN_DEBUG "%s()\n", __FUNCTION__);
530 477
531 xfrm6_tunnel_spi_fini(); 478 xfrm6_tunnel_spi_fini();
532 if (inet6_del_protocol(&xfrm6_tunnel_protocol, IPPROTO_IPV6) < 0) 479 if (xfrm6_tunnel_deregister(&xfrm6_tunnel_handler))
533 X6TPRINTK1(KERN_ERR 480 X6TPRINTK1(KERN_ERR
534 "xfrm6_tunnel close: can't remove protocol\n"); 481 "xfrm6_tunnel close: can't remove handler\n");
535 if (xfrm_unregister_type(&xfrm6_tunnel_type, AF_INET6) < 0) 482 if (xfrm_unregister_type(&xfrm6_tunnel_type, AF_INET6) < 0)
536 X6TPRINTK1(KERN_ERR 483 X6TPRINTK1(KERN_ERR
537 "xfrm6_tunnel close: can't remove xfrm type\n"); 484 "xfrm6_tunnel close: can't remove xfrm type\n");
diff --git a/net/ipx/af_ipx.c b/net/ipx/af_ipx.c
index 0fb513a34d11..2dbf134d5266 100644
--- a/net/ipx/af_ipx.c
+++ b/net/ipx/af_ipx.c
@@ -1892,6 +1892,29 @@ static int ipx_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1892 return rc; 1892 return rc;
1893} 1893}
1894 1894
1895
1896#ifdef CONFIG_COMPAT
1897static int ipx_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1898{
1899 /*
1900 * These 4 commands use same structure on 32bit and 64bit. Rest of IPX
1901 * commands is handled by generic ioctl code. As these commands are
1902 * SIOCPROTOPRIVATE..SIOCPROTOPRIVATE+3, they cannot be handled by generic
1903 * code.
1904 */
1905 switch (cmd) {
1906 case SIOCAIPXITFCRT:
1907 case SIOCAIPXPRISLT:
1908 case SIOCIPXCFGDATA:
1909 case SIOCIPXNCPCONN:
1910 return ipx_ioctl(sock, cmd, arg);
1911 default:
1912 return -ENOIOCTLCMD;
1913 }
1914}
1915#endif
1916
1917
1895/* 1918/*
1896 * Socket family declarations 1919 * Socket family declarations
1897 */ 1920 */
@@ -1913,6 +1936,9 @@ static const struct proto_ops SOCKOPS_WRAPPED(ipx_dgram_ops) = {
1913 .getname = ipx_getname, 1936 .getname = ipx_getname,
1914 .poll = datagram_poll, 1937 .poll = datagram_poll,
1915 .ioctl = ipx_ioctl, 1938 .ioctl = ipx_ioctl,
1939#ifdef CONFIG_COMPAT
1940 .compat_ioctl = ipx_compat_ioctl,
1941#endif
1916 .listen = sock_no_listen, 1942 .listen = sock_no_listen,
1917 .shutdown = sock_no_shutdown, /* FIXME: support shutdown */ 1943 .shutdown = sock_no_shutdown, /* FIXME: support shutdown */
1918 .setsockopt = ipx_setsockopt, 1944 .setsockopt = ipx_setsockopt,
diff --git a/net/irda/af_irda.c b/net/irda/af_irda.c
index 627b11342233..2f37c9f35e27 100644
--- a/net/irda/af_irda.c
+++ b/net/irda/af_irda.c
@@ -1830,6 +1830,19 @@ static int irda_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1830 return 0; 1830 return 0;
1831} 1831}
1832 1832
1833#ifdef CONFIG_COMPAT
1834/*
1835 * Function irda_ioctl (sock, cmd, arg)
1836 */
1837static int irda_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1838{
1839 /*
1840 * All IRDA's ioctl are standard ones.
1841 */
1842 return -ENOIOCTLCMD;
1843}
1844#endif
1845
1833/* 1846/*
1834 * Function irda_setsockopt (sock, level, optname, optval, optlen) 1847 * Function irda_setsockopt (sock, level, optname, optval, optlen)
1835 * 1848 *
@@ -2476,6 +2489,9 @@ static const struct proto_ops SOCKOPS_WRAPPED(irda_stream_ops) = {
2476 .getname = irda_getname, 2489 .getname = irda_getname,
2477 .poll = irda_poll, 2490 .poll = irda_poll,
2478 .ioctl = irda_ioctl, 2491 .ioctl = irda_ioctl,
2492#ifdef CONFIG_COMPAT
2493 .compat_ioctl = irda_compat_ioctl,
2494#endif
2479 .listen = irda_listen, 2495 .listen = irda_listen,
2480 .shutdown = irda_shutdown, 2496 .shutdown = irda_shutdown,
2481 .setsockopt = irda_setsockopt, 2497 .setsockopt = irda_setsockopt,
@@ -2497,6 +2513,9 @@ static const struct proto_ops SOCKOPS_WRAPPED(irda_seqpacket_ops) = {
2497 .getname = irda_getname, 2513 .getname = irda_getname,
2498 .poll = datagram_poll, 2514 .poll = datagram_poll,
2499 .ioctl = irda_ioctl, 2515 .ioctl = irda_ioctl,
2516#ifdef CONFIG_COMPAT
2517 .compat_ioctl = irda_compat_ioctl,
2518#endif
2500 .listen = irda_listen, 2519 .listen = irda_listen,
2501 .shutdown = irda_shutdown, 2520 .shutdown = irda_shutdown,
2502 .setsockopt = irda_setsockopt, 2521 .setsockopt = irda_setsockopt,
@@ -2518,6 +2537,9 @@ static const struct proto_ops SOCKOPS_WRAPPED(irda_dgram_ops) = {
2518 .getname = irda_getname, 2537 .getname = irda_getname,
2519 .poll = datagram_poll, 2538 .poll = datagram_poll,
2520 .ioctl = irda_ioctl, 2539 .ioctl = irda_ioctl,
2540#ifdef CONFIG_COMPAT
2541 .compat_ioctl = irda_compat_ioctl,
2542#endif
2521 .listen = irda_listen, 2543 .listen = irda_listen,
2522 .shutdown = irda_shutdown, 2544 .shutdown = irda_shutdown,
2523 .setsockopt = irda_setsockopt, 2545 .setsockopt = irda_setsockopt,
@@ -2540,6 +2562,9 @@ static const struct proto_ops SOCKOPS_WRAPPED(irda_ultra_ops) = {
2540 .getname = irda_getname, 2562 .getname = irda_getname,
2541 .poll = datagram_poll, 2563 .poll = datagram_poll,
2542 .ioctl = irda_ioctl, 2564 .ioctl = irda_ioctl,
2565#ifdef CONFIG_COMPAT
2566 .compat_ioctl = irda_compat_ioctl,
2567#endif
2543 .listen = sock_no_listen, 2568 .listen = sock_no_listen,
2544 .shutdown = irda_shutdown, 2569 .shutdown = irda_shutdown,
2545 .setsockopt = irda_setsockopt, 2570 .setsockopt = irda_setsockopt,
diff --git a/net/netfilter/nf_conntrack_ftp.c b/net/netfilter/nf_conntrack_ftp.c
index cd191b0d4ac7..e38a4b5a3089 100644
--- a/net/netfilter/nf_conntrack_ftp.c
+++ b/net/netfilter/nf_conntrack_ftp.c
@@ -624,7 +624,7 @@ static struct nf_conntrack_helper ftp[MAX_PORTS][2];
624static char ftp_names[MAX_PORTS][2][sizeof("ftp-65535")]; 624static char ftp_names[MAX_PORTS][2][sizeof("ftp-65535")];
625 625
626/* don't make this __exit, since it's called from __init ! */ 626/* don't make this __exit, since it's called from __init ! */
627static void fini(void) 627static void nf_conntrack_ftp_fini(void)
628{ 628{
629 int i, j; 629 int i, j;
630 for (i = 0; i < ports_c; i++) { 630 for (i = 0; i < ports_c; i++) {
@@ -642,7 +642,7 @@ static void fini(void)
642 kfree(ftp_buffer); 642 kfree(ftp_buffer);
643} 643}
644 644
645static int __init init(void) 645static int __init nf_conntrack_ftp_init(void)
646{ 646{
647 int i, j = -1, ret = 0; 647 int i, j = -1, ret = 0;
648 char *tmpname; 648 char *tmpname;
@@ -683,7 +683,7 @@ static int __init init(void)
683 printk("nf_ct_ftp: failed to register helper " 683 printk("nf_ct_ftp: failed to register helper "
684 " for pf: %d port: %d\n", 684 " for pf: %d port: %d\n",
685 ftp[i][j].tuple.src.l3num, ports[i]); 685 ftp[i][j].tuple.src.l3num, ports[i]);
686 fini(); 686 nf_conntrack_ftp_fini();
687 return ret; 687 return ret;
688 } 688 }
689 } 689 }
@@ -692,5 +692,5 @@ static int __init init(void)
692 return 0; 692 return 0;
693} 693}
694 694
695module_init(init); 695module_init(nf_conntrack_ftp_init);
696module_exit(fini); 696module_exit(nf_conntrack_ftp_fini);
diff --git a/net/netfilter/nf_conntrack_proto_sctp.c b/net/netfilter/nf_conntrack_proto_sctp.c
index cf798e61e379..9cccc325b687 100644
--- a/net/netfilter/nf_conntrack_proto_sctp.c
+++ b/net/netfilter/nf_conntrack_proto_sctp.c
@@ -615,7 +615,7 @@ static ctl_table nf_ct_net_table[] = {
615static struct ctl_table_header *nf_ct_sysctl_header; 615static struct ctl_table_header *nf_ct_sysctl_header;
616#endif 616#endif
617 617
618int __init init(void) 618int __init nf_conntrack_proto_sctp_init(void)
619{ 619{
620 int ret; 620 int ret;
621 621
@@ -652,7 +652,7 @@ int __init init(void)
652 return ret; 652 return ret;
653} 653}
654 654
655void __exit fini(void) 655void __exit nf_conntrack_proto_sctp_fini(void)
656{ 656{
657 nf_conntrack_protocol_unregister(&nf_conntrack_protocol_sctp6); 657 nf_conntrack_protocol_unregister(&nf_conntrack_protocol_sctp6);
658 nf_conntrack_protocol_unregister(&nf_conntrack_protocol_sctp4); 658 nf_conntrack_protocol_unregister(&nf_conntrack_protocol_sctp4);
@@ -662,8 +662,8 @@ void __exit fini(void)
662 DEBUGP("SCTP conntrack module unloaded\n"); 662 DEBUGP("SCTP conntrack module unloaded\n");
663} 663}
664 664
665module_init(init); 665module_init(nf_conntrack_proto_sctp_init);
666module_exit(fini); 666module_exit(nf_conntrack_proto_sctp_fini);
667 667
668MODULE_LICENSE("GPL"); 668MODULE_LICENSE("GPL");
669MODULE_AUTHOR("Kiran Kumar Immidi"); 669MODULE_AUTHOR("Kiran Kumar Immidi");
diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c
index 75577e175b35..c72aa3cd22e4 100644
--- a/net/netfilter/nf_conntrack_standalone.c
+++ b/net/netfilter/nf_conntrack_standalone.c
@@ -806,18 +806,18 @@ void nf_conntrack_protocol_unregister(struct nf_conntrack_protocol *proto)
806 nf_ct_iterate_cleanup(kill_proto, proto); 806 nf_ct_iterate_cleanup(kill_proto, proto);
807} 807}
808 808
809static int __init init(void) 809static int __init nf_conntrack_standalone_init(void)
810{ 810{
811 return init_or_cleanup(1); 811 return init_or_cleanup(1);
812} 812}
813 813
814static void __exit fini(void) 814static void __exit nf_conntrack_standalone_fini(void)
815{ 815{
816 init_or_cleanup(0); 816 init_or_cleanup(0);
817} 817}
818 818
819module_init(init); 819module_init(nf_conntrack_standalone_init);
820module_exit(fini); 820module_exit(nf_conntrack_standalone_fini);
821 821
822/* Some modules need us, but don't depend directly on any symbol. 822/* Some modules need us, but don't depend directly on any symbol.
823 They should call this. */ 823 They should call this. */
diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c
index 54cbbaa712dc..3e3f5448bacb 100644
--- a/net/netfilter/nfnetlink_log.c
+++ b/net/netfilter/nfnetlink_log.c
@@ -1081,13 +1081,13 @@ cleanup_netlink_notifier:
1081 return status; 1081 return status;
1082} 1082}
1083 1083
1084static int __init init(void) 1084static int __init nfnetlink_log_init(void)
1085{ 1085{
1086 1086
1087 return init_or_cleanup(1); 1087 return init_or_cleanup(1);
1088} 1088}
1089 1089
1090static void __exit fini(void) 1090static void __exit nfnetlink_log_fini(void)
1091{ 1091{
1092 init_or_cleanup(0); 1092 init_or_cleanup(0);
1093} 1093}
@@ -1097,5 +1097,5 @@ MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
1097MODULE_LICENSE("GPL"); 1097MODULE_LICENSE("GPL");
1098MODULE_ALIAS_NFNL_SUBSYS(NFNL_SUBSYS_ULOG); 1098MODULE_ALIAS_NFNL_SUBSYS(NFNL_SUBSYS_ULOG);
1099 1099
1100module_init(init); 1100module_init(nfnetlink_log_init);
1101module_exit(fini); 1101module_exit(nfnetlink_log_fini);
diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c
index b5701662182e..d0e62f68139f 100644
--- a/net/netfilter/nfnetlink_queue.c
+++ b/net/netfilter/nfnetlink_queue.c
@@ -1117,13 +1117,13 @@ cleanup_netlink_notifier:
1117 return status; 1117 return status;
1118} 1118}
1119 1119
1120static int __init init(void) 1120static int __init nfnetlink_queue_init(void)
1121{ 1121{
1122 1122
1123 return init_or_cleanup(1); 1123 return init_or_cleanup(1);
1124} 1124}
1125 1125
1126static void __exit fini(void) 1126static void __exit nfnetlink_queue_fini(void)
1127{ 1127{
1128 init_or_cleanup(0); 1128 init_or_cleanup(0);
1129} 1129}
@@ -1133,5 +1133,5 @@ MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
1133MODULE_LICENSE("GPL"); 1133MODULE_LICENSE("GPL");
1134MODULE_ALIAS_NFNL_SUBSYS(NFNL_SUBSYS_QUEUE); 1134MODULE_ALIAS_NFNL_SUBSYS(NFNL_SUBSYS_QUEUE);
1135 1135
1136module_init(init); 1136module_init(nfnetlink_queue_init);
1137module_exit(fini); 1137module_exit(nfnetlink_queue_fini);
diff --git a/net/netfilter/xt_CLASSIFY.c b/net/netfilter/xt_CLASSIFY.c
index 3cd2ac90a25b..e54e57730012 100644
--- a/net/netfilter/xt_CLASSIFY.c
+++ b/net/netfilter/xt_CLASSIFY.c
@@ -62,7 +62,7 @@ static struct xt_target classify6_reg = {
62}; 62};
63 63
64 64
65static int __init init(void) 65static int __init xt_classify_init(void)
66{ 66{
67 int ret; 67 int ret;
68 68
@@ -77,11 +77,11 @@ static int __init init(void)
77 return ret; 77 return ret;
78} 78}
79 79
80static void __exit fini(void) 80static void __exit xt_classify_fini(void)
81{ 81{
82 xt_unregister_target(&classify_reg); 82 xt_unregister_target(&classify_reg);
83 xt_unregister_target(&classify6_reg); 83 xt_unregister_target(&classify6_reg);
84} 84}
85 85
86module_init(init); 86module_init(xt_classify_init);
87module_exit(fini); 87module_exit(xt_classify_fini);
diff --git a/net/netfilter/xt_CONNMARK.c b/net/netfilter/xt_CONNMARK.c
index 35448b8e6883..60c375d36f01 100644
--- a/net/netfilter/xt_CONNMARK.c
+++ b/net/netfilter/xt_CONNMARK.c
@@ -115,7 +115,7 @@ static struct xt_target connmark6_reg = {
115 .me = THIS_MODULE 115 .me = THIS_MODULE
116}; 116};
117 117
118static int __init init(void) 118static int __init xt_connmark_init(void)
119{ 119{
120 int ret; 120 int ret;
121 121
@@ -132,11 +132,11 @@ static int __init init(void)
132 return ret; 132 return ret;
133} 133}
134 134
135static void __exit fini(void) 135static void __exit xt_connmark_fini(void)
136{ 136{
137 xt_unregister_target(&connmark_reg); 137 xt_unregister_target(&connmark_reg);
138 xt_unregister_target(&connmark6_reg); 138 xt_unregister_target(&connmark6_reg);
139} 139}
140 140
141module_init(init); 141module_init(xt_connmark_init);
142module_exit(fini); 142module_exit(xt_connmark_fini);
diff --git a/net/netfilter/xt_MARK.c b/net/netfilter/xt_MARK.c
index 73bdd5c80e17..ee9c34edc76c 100644
--- a/net/netfilter/xt_MARK.c
+++ b/net/netfilter/xt_MARK.c
@@ -145,7 +145,7 @@ static struct xt_target ip6t_mark_reg_v0 = {
145 .revision = 0, 145 .revision = 0,
146}; 146};
147 147
148static int __init init(void) 148static int __init xt_mark_init(void)
149{ 149{
150 int err; 150 int err;
151 151
@@ -166,12 +166,12 @@ static int __init init(void)
166 return err; 166 return err;
167} 167}
168 168
169static void __exit fini(void) 169static void __exit xt_mark_fini(void)
170{ 170{
171 xt_unregister_target(&ipt_mark_reg_v0); 171 xt_unregister_target(&ipt_mark_reg_v0);
172 xt_unregister_target(&ipt_mark_reg_v1); 172 xt_unregister_target(&ipt_mark_reg_v1);
173 xt_unregister_target(&ip6t_mark_reg_v0); 173 xt_unregister_target(&ip6t_mark_reg_v0);
174} 174}
175 175
176module_init(init); 176module_init(xt_mark_init);
177module_exit(fini); 177module_exit(xt_mark_fini);
diff --git a/net/netfilter/xt_NFQUEUE.c b/net/netfilter/xt_NFQUEUE.c
index 2873e1c60f68..86ccceb61fdd 100644
--- a/net/netfilter/xt_NFQUEUE.c
+++ b/net/netfilter/xt_NFQUEUE.c
@@ -61,7 +61,7 @@ static struct xt_target arpt_NFQ_reg = {
61 .me = THIS_MODULE, 61 .me = THIS_MODULE,
62}; 62};
63 63
64static int __init init(void) 64static int __init xt_nfqueue_init(void)
65{ 65{
66 int ret; 66 int ret;
67 ret = xt_register_target(&ipt_NFQ_reg); 67 ret = xt_register_target(&ipt_NFQ_reg);
@@ -83,12 +83,12 @@ out_ip:
83 return ret; 83 return ret;
84} 84}
85 85
86static void __exit fini(void) 86static void __exit xt_nfqueue_fini(void)
87{ 87{
88 xt_unregister_target(&arpt_NFQ_reg); 88 xt_unregister_target(&arpt_NFQ_reg);
89 xt_unregister_target(&ip6t_NFQ_reg); 89 xt_unregister_target(&ip6t_NFQ_reg);
90 xt_unregister_target(&ipt_NFQ_reg); 90 xt_unregister_target(&ipt_NFQ_reg);
91} 91}
92 92
93module_init(init); 93module_init(xt_nfqueue_init);
94module_exit(fini); 94module_exit(xt_nfqueue_fini);
diff --git a/net/netfilter/xt_NOTRACK.c b/net/netfilter/xt_NOTRACK.c
index cf2ebd76fd6f..98f4b5363ce8 100644
--- a/net/netfilter/xt_NOTRACK.c
+++ b/net/netfilter/xt_NOTRACK.c
@@ -52,7 +52,7 @@ static struct xt_target notrack6_reg = {
52 .me = THIS_MODULE, 52 .me = THIS_MODULE,
53}; 53};
54 54
55static int __init init(void) 55static int __init xt_notrack_init(void)
56{ 56{
57 int ret; 57 int ret;
58 58
@@ -67,11 +67,11 @@ static int __init init(void)
67 return ret; 67 return ret;
68} 68}
69 69
70static void __exit fini(void) 70static void __exit xt_notrack_fini(void)
71{ 71{
72 xt_unregister_target(&notrack6_reg); 72 xt_unregister_target(&notrack6_reg);
73 xt_unregister_target(&notrack_reg); 73 xt_unregister_target(&notrack_reg);
74} 74}
75 75
76module_init(init); 76module_init(xt_notrack_init);
77module_exit(fini); 77module_exit(xt_notrack_fini);
diff --git a/net/netfilter/xt_comment.c b/net/netfilter/xt_comment.c
index 2637724b498d..197609cb06d7 100644
--- a/net/netfilter/xt_comment.c
+++ b/net/netfilter/xt_comment.c
@@ -45,7 +45,7 @@ static struct xt_match comment6_match = {
45 .me = THIS_MODULE 45 .me = THIS_MODULE
46}; 46};
47 47
48static int __init init(void) 48static int __init xt_comment_init(void)
49{ 49{
50 int ret; 50 int ret;
51 51
@@ -60,11 +60,11 @@ static int __init init(void)
60 return ret; 60 return ret;
61} 61}
62 62
63static void __exit fini(void) 63static void __exit xt_comment_fini(void)
64{ 64{
65 xt_unregister_match(&comment_match); 65 xt_unregister_match(&comment_match);
66 xt_unregister_match(&comment6_match); 66 xt_unregister_match(&comment6_match);
67} 67}
68 68
69module_init(init); 69module_init(xt_comment_init);
70module_exit(fini); 70module_exit(xt_comment_fini);
diff --git a/net/netfilter/xt_connbytes.c b/net/netfilter/xt_connbytes.c
index 4985f5ec58ca..1396fe2d07c1 100644
--- a/net/netfilter/xt_connbytes.c
+++ b/net/netfilter/xt_connbytes.c
@@ -160,7 +160,7 @@ static struct xt_match connbytes6_match = {
160 .me = THIS_MODULE 160 .me = THIS_MODULE
161}; 161};
162 162
163static int __init init(void) 163static int __init xt_connbytes_init(void)
164{ 164{
165 int ret; 165 int ret;
166 ret = xt_register_match(&connbytes_match); 166 ret = xt_register_match(&connbytes_match);
@@ -173,11 +173,11 @@ static int __init init(void)
173 return ret; 173 return ret;
174} 174}
175 175
176static void __exit fini(void) 176static void __exit xt_connbytes_fini(void)
177{ 177{
178 xt_unregister_match(&connbytes_match); 178 xt_unregister_match(&connbytes_match);
179 xt_unregister_match(&connbytes6_match); 179 xt_unregister_match(&connbytes6_match);
180} 180}
181 181
182module_init(init); 182module_init(xt_connbytes_init);
183module_exit(fini); 183module_exit(xt_connbytes_fini);
diff --git a/net/netfilter/xt_connmark.c b/net/netfilter/xt_connmark.c
index 7b16f1ee16b4..dc26a27cbcaf 100644
--- a/net/netfilter/xt_connmark.c
+++ b/net/netfilter/xt_connmark.c
@@ -102,7 +102,7 @@ static struct xt_match connmark6_match = {
102 .me = THIS_MODULE 102 .me = THIS_MODULE
103}; 103};
104 104
105static int __init init(void) 105static int __init xt_connmark_init(void)
106{ 106{
107 int ret; 107 int ret;
108 108
@@ -118,11 +118,11 @@ static int __init init(void)
118 return ret; 118 return ret;
119} 119}
120 120
121static void __exit fini(void) 121static void __exit xt_connmark_fini(void)
122{ 122{
123 xt_unregister_match(&connmark6_match); 123 xt_unregister_match(&connmark6_match);
124 xt_unregister_match(&connmark_match); 124 xt_unregister_match(&connmark_match);
125} 125}
126 126
127module_init(init); 127module_init(xt_connmark_init);
128module_exit(fini); 128module_exit(xt_connmark_fini);
diff --git a/net/netfilter/xt_conntrack.c b/net/netfilter/xt_conntrack.c
index 65a84809fd30..145489a4c3f2 100644
--- a/net/netfilter/xt_conntrack.c
+++ b/net/netfilter/xt_conntrack.c
@@ -239,7 +239,7 @@ static struct xt_match conntrack_match = {
239 .me = THIS_MODULE, 239 .me = THIS_MODULE,
240}; 240};
241 241
242static int __init init(void) 242static int __init xt_conntrack_init(void)
243{ 243{
244 int ret; 244 int ret;
245 need_conntrack(); 245 need_conntrack();
@@ -248,10 +248,10 @@ static int __init init(void)
248 return ret; 248 return ret;
249} 249}
250 250
251static void __exit fini(void) 251static void __exit xt_conntrack_fini(void)
252{ 252{
253 xt_unregister_match(&conntrack_match); 253 xt_unregister_match(&conntrack_match);
254} 254}
255 255
256module_init(init); 256module_init(xt_conntrack_init);
257module_exit(fini); 257module_exit(xt_conntrack_fini);
diff --git a/net/netfilter/xt_dccp.c b/net/netfilter/xt_dccp.c
index 2f331decd151..dfb10b648e57 100644
--- a/net/netfilter/xt_dccp.c
+++ b/net/netfilter/xt_dccp.c
@@ -164,7 +164,7 @@ static struct xt_match dccp6_match =
164}; 164};
165 165
166 166
167static int __init init(void) 167static int __init xt_dccp_init(void)
168{ 168{
169 int ret; 169 int ret;
170 170
@@ -191,12 +191,12 @@ out_kfree:
191 return ret; 191 return ret;
192} 192}
193 193
194static void __exit fini(void) 194static void __exit xt_dccp_fini(void)
195{ 195{
196 xt_unregister_match(&dccp6_match); 196 xt_unregister_match(&dccp6_match);
197 xt_unregister_match(&dccp_match); 197 xt_unregister_match(&dccp_match);
198 kfree(dccp_optbuf); 198 kfree(dccp_optbuf);
199} 199}
200 200
201module_init(init); 201module_init(xt_dccp_init);
202module_exit(fini); 202module_exit(xt_dccp_fini);
diff --git a/net/netfilter/xt_helper.c b/net/netfilter/xt_helper.c
index 101f0005e987..799c2a43e3b9 100644
--- a/net/netfilter/xt_helper.c
+++ b/net/netfilter/xt_helper.c
@@ -182,7 +182,7 @@ static struct xt_match helper6_match = {
182 .me = THIS_MODULE, 182 .me = THIS_MODULE,
183}; 183};
184 184
185static int __init init(void) 185static int __init xt_helper_init(void)
186{ 186{
187 int ret; 187 int ret;
188 need_conntrack(); 188 need_conntrack();
@@ -198,12 +198,12 @@ static int __init init(void)
198 return ret; 198 return ret;
199} 199}
200 200
201static void __exit fini(void) 201static void __exit xt_helper_fini(void)
202{ 202{
203 xt_unregister_match(&helper_match); 203 xt_unregister_match(&helper_match);
204 xt_unregister_match(&helper6_match); 204 xt_unregister_match(&helper6_match);
205} 205}
206 206
207module_init(init); 207module_init(xt_helper_init);
208module_exit(fini); 208module_exit(xt_helper_fini);
209 209
diff --git a/net/netfilter/xt_length.c b/net/netfilter/xt_length.c
index 38560caef757..109132c9a146 100644
--- a/net/netfilter/xt_length.c
+++ b/net/netfilter/xt_length.c
@@ -68,7 +68,7 @@ static struct xt_match length6_match = {
68 .me = THIS_MODULE, 68 .me = THIS_MODULE,
69}; 69};
70 70
71static int __init init(void) 71static int __init xt_length_init(void)
72{ 72{
73 int ret; 73 int ret;
74 ret = xt_register_match(&length_match); 74 ret = xt_register_match(&length_match);
@@ -81,11 +81,11 @@ static int __init init(void)
81 return ret; 81 return ret;
82} 82}
83 83
84static void __exit fini(void) 84static void __exit xt_length_fini(void)
85{ 85{
86 xt_unregister_match(&length_match); 86 xt_unregister_match(&length_match);
87 xt_unregister_match(&length6_match); 87 xt_unregister_match(&length6_match);
88} 88}
89 89
90module_init(init); 90module_init(xt_length_init);
91module_exit(fini); 91module_exit(xt_length_fini);
diff --git a/net/netfilter/xt_limit.c b/net/netfilter/xt_limit.c
index e91c1a444e77..ce7fdb7e4e07 100644
--- a/net/netfilter/xt_limit.c
+++ b/net/netfilter/xt_limit.c
@@ -153,7 +153,7 @@ static struct xt_match limit6_reg = {
153 .me = THIS_MODULE, 153 .me = THIS_MODULE,
154}; 154};
155 155
156static int __init init(void) 156static int __init xt_limit_init(void)
157{ 157{
158 int ret; 158 int ret;
159 159
@@ -168,11 +168,11 @@ static int __init init(void)
168 return ret; 168 return ret;
169} 169}
170 170
171static void __exit fini(void) 171static void __exit xt_limit_fini(void)
172{ 172{
173 xt_unregister_match(&ipt_limit_reg); 173 xt_unregister_match(&ipt_limit_reg);
174 xt_unregister_match(&limit6_reg); 174 xt_unregister_match(&limit6_reg);
175} 175}
176 176
177module_init(init); 177module_init(xt_limit_init);
178module_exit(fini); 178module_exit(xt_limit_fini);
diff --git a/net/netfilter/xt_mac.c b/net/netfilter/xt_mac.c
index f4defa28a6ec..356290ffe386 100644
--- a/net/netfilter/xt_mac.c
+++ b/net/netfilter/xt_mac.c
@@ -62,7 +62,7 @@ static struct xt_match mac6_match = {
62 .me = THIS_MODULE, 62 .me = THIS_MODULE,
63}; 63};
64 64
65static int __init init(void) 65static int __init xt_mac_init(void)
66{ 66{
67 int ret; 67 int ret;
68 ret = xt_register_match(&mac_match); 68 ret = xt_register_match(&mac_match);
@@ -76,11 +76,11 @@ static int __init init(void)
76 return ret; 76 return ret;
77} 77}
78 78
79static void __exit fini(void) 79static void __exit xt_mac_fini(void)
80{ 80{
81 xt_unregister_match(&mac_match); 81 xt_unregister_match(&mac_match);
82 xt_unregister_match(&mac6_match); 82 xt_unregister_match(&mac6_match);
83} 83}
84 84
85module_init(init); 85module_init(xt_mac_init);
86module_exit(fini); 86module_exit(xt_mac_fini);
diff --git a/net/netfilter/xt_mark.c b/net/netfilter/xt_mark.c
index ce0badfeef9a..8b385a34886d 100644
--- a/net/netfilter/xt_mark.c
+++ b/net/netfilter/xt_mark.c
@@ -69,7 +69,7 @@ static struct xt_match mark6_match = {
69 .me = THIS_MODULE, 69 .me = THIS_MODULE,
70}; 70};
71 71
72static int __init init(void) 72static int __init xt_mark_init(void)
73{ 73{
74 int ret; 74 int ret;
75 ret = xt_register_match(&mark_match); 75 ret = xt_register_match(&mark_match);
@@ -83,11 +83,11 @@ static int __init init(void)
83 return ret; 83 return ret;
84} 84}
85 85
86static void __exit fini(void) 86static void __exit xt_mark_fini(void)
87{ 87{
88 xt_unregister_match(&mark_match); 88 xt_unregister_match(&mark_match);
89 xt_unregister_match(&mark6_match); 89 xt_unregister_match(&mark6_match);
90} 90}
91 91
92module_init(init); 92module_init(xt_mark_init);
93module_exit(fini); 93module_exit(xt_mark_fini);
diff --git a/net/netfilter/xt_physdev.c b/net/netfilter/xt_physdev.c
index 089f4f7e8636..5fe4c9df17f5 100644
--- a/net/netfilter/xt_physdev.c
+++ b/net/netfilter/xt_physdev.c
@@ -134,7 +134,7 @@ static struct xt_match physdev6_match = {
134 .me = THIS_MODULE, 134 .me = THIS_MODULE,
135}; 135};
136 136
137static int __init init(void) 137static int __init xt_physdev_init(void)
138{ 138{
139 int ret; 139 int ret;
140 140
@@ -149,11 +149,11 @@ static int __init init(void)
149 return ret; 149 return ret;
150} 150}
151 151
152static void __exit fini(void) 152static void __exit xt_physdev_fini(void)
153{ 153{
154 xt_unregister_match(&physdev_match); 154 xt_unregister_match(&physdev_match);
155 xt_unregister_match(&physdev6_match); 155 xt_unregister_match(&physdev6_match);
156} 156}
157 157
158module_init(init); 158module_init(xt_physdev_init);
159module_exit(fini); 159module_exit(xt_physdev_fini);
diff --git a/net/netfilter/xt_pkttype.c b/net/netfilter/xt_pkttype.c
index 8b8bca988ac6..3ac703b5cb8f 100644
--- a/net/netfilter/xt_pkttype.c
+++ b/net/netfilter/xt_pkttype.c
@@ -49,7 +49,7 @@ static struct xt_match pkttype6_match = {
49 .me = THIS_MODULE, 49 .me = THIS_MODULE,
50}; 50};
51 51
52static int __init init(void) 52static int __init xt_pkttype_init(void)
53{ 53{
54 int ret; 54 int ret;
55 ret = xt_register_match(&pkttype_match); 55 ret = xt_register_match(&pkttype_match);
@@ -63,11 +63,11 @@ static int __init init(void)
63 return ret; 63 return ret;
64} 64}
65 65
66static void __exit fini(void) 66static void __exit xt_pkttype_fini(void)
67{ 67{
68 xt_unregister_match(&pkttype_match); 68 xt_unregister_match(&pkttype_match);
69 xt_unregister_match(&pkttype6_match); 69 xt_unregister_match(&pkttype6_match);
70} 70}
71 71
72module_init(init); 72module_init(xt_pkttype_init);
73module_exit(fini); 73module_exit(xt_pkttype_fini);
diff --git a/net/netfilter/xt_realm.c b/net/netfilter/xt_realm.c
index 5e31a4a835bf..a80b7d132b65 100644
--- a/net/netfilter/xt_realm.c
+++ b/net/netfilter/xt_realm.c
@@ -49,15 +49,15 @@ static struct xt_match realm_match = {
49 .me = THIS_MODULE 49 .me = THIS_MODULE
50}; 50};
51 51
52static int __init init(void) 52static int __init xt_realm_init(void)
53{ 53{
54 return xt_register_match(&realm_match); 54 return xt_register_match(&realm_match);
55} 55}
56 56
57static void __exit fini(void) 57static void __exit xt_realm_fini(void)
58{ 58{
59 xt_unregister_match(&realm_match); 59 xt_unregister_match(&realm_match);
60} 60}
61 61
62module_init(init); 62module_init(xt_realm_init);
63module_exit(fini); 63module_exit(xt_realm_fini);
diff --git a/net/netfilter/xt_sctp.c b/net/netfilter/xt_sctp.c
index c6eb24a2fe13..34bd87259a09 100644
--- a/net/netfilter/xt_sctp.c
+++ b/net/netfilter/xt_sctp.c
@@ -200,7 +200,7 @@ static struct xt_match sctp6_match = {
200 .me = THIS_MODULE 200 .me = THIS_MODULE
201}; 201};
202 202
203static int __init init(void) 203static int __init xt_sctp_init(void)
204{ 204{
205 int ret; 205 int ret;
206 ret = xt_register_match(&sctp_match); 206 ret = xt_register_match(&sctp_match);
@@ -214,11 +214,11 @@ static int __init init(void)
214 return ret; 214 return ret;
215} 215}
216 216
217static void __exit fini(void) 217static void __exit xt_sctp_fini(void)
218{ 218{
219 xt_unregister_match(&sctp6_match); 219 xt_unregister_match(&sctp6_match);
220 xt_unregister_match(&sctp_match); 220 xt_unregister_match(&sctp_match);
221} 221}
222 222
223module_init(init); 223module_init(xt_sctp_init);
224module_exit(fini); 224module_exit(xt_sctp_fini);
diff --git a/net/netfilter/xt_state.c b/net/netfilter/xt_state.c
index e6c0be9d94d2..f9e304dc4504 100644
--- a/net/netfilter/xt_state.c
+++ b/net/netfilter/xt_state.c
@@ -89,7 +89,7 @@ static struct xt_match state6_match = {
89 .me = THIS_MODULE, 89 .me = THIS_MODULE,
90}; 90};
91 91
92static int __init init(void) 92static int __init xt_state_init(void)
93{ 93{
94 int ret; 94 int ret;
95 95
@@ -106,11 +106,11 @@ static int __init init(void)
106 return ret; 106 return ret;
107} 107}
108 108
109static void __exit fini(void) 109static void __exit xt_state_fini(void)
110{ 110{
111 xt_unregister_match(&state_match); 111 xt_unregister_match(&state_match);
112 xt_unregister_match(&state6_match); 112 xt_unregister_match(&state6_match);
113} 113}
114 114
115module_init(init); 115module_init(xt_state_init);
116module_exit(fini); 116module_exit(xt_state_fini);
diff --git a/net/netfilter/xt_string.c b/net/netfilter/xt_string.c
index 703d80fccacf..79d9ea6964ba 100644
--- a/net/netfilter/xt_string.c
+++ b/net/netfilter/xt_string.c
@@ -91,7 +91,7 @@ static struct xt_match string6_match = {
91 .me = THIS_MODULE 91 .me = THIS_MODULE
92}; 92};
93 93
94static int __init init(void) 94static int __init xt_string_init(void)
95{ 95{
96 int ret; 96 int ret;
97 97
@@ -105,11 +105,11 @@ static int __init init(void)
105 return ret; 105 return ret;
106} 106}
107 107
108static void __exit fini(void) 108static void __exit xt_string_fini(void)
109{ 109{
110 xt_unregister_match(&string_match); 110 xt_unregister_match(&string_match);
111 xt_unregister_match(&string6_match); 111 xt_unregister_match(&string6_match);
112} 112}
113 113
114module_init(init); 114module_init(xt_string_init);
115module_exit(fini); 115module_exit(xt_string_fini);
diff --git a/net/netfilter/xt_tcpmss.c b/net/netfilter/xt_tcpmss.c
index 70a8858ae3f1..cf7d335cadcd 100644
--- a/net/netfilter/xt_tcpmss.c
+++ b/net/netfilter/xt_tcpmss.c
@@ -112,7 +112,7 @@ static struct xt_match tcpmss6_match = {
112}; 112};
113 113
114 114
115static int __init init(void) 115static int __init xt_tcpmss_init(void)
116{ 116{
117 int ret; 117 int ret;
118 ret = xt_register_match(&tcpmss_match); 118 ret = xt_register_match(&tcpmss_match);
@@ -126,11 +126,11 @@ static int __init init(void)
126 return ret; 126 return ret;
127} 127}
128 128
129static void __exit fini(void) 129static void __exit xt_tcpmss_fini(void)
130{ 130{
131 xt_unregister_match(&tcpmss6_match); 131 xt_unregister_match(&tcpmss6_match);
132 xt_unregister_match(&tcpmss_match); 132 xt_unregister_match(&tcpmss_match);
133} 133}
134 134
135module_init(init); 135module_init(xt_tcpmss_init);
136module_exit(fini); 136module_exit(xt_tcpmss_fini);
diff --git a/net/netfilter/xt_tcpudp.c b/net/netfilter/xt_tcpudp.c
index 14a990eb666a..1b61dac9c873 100644
--- a/net/netfilter/xt_tcpudp.c
+++ b/net/netfilter/xt_tcpudp.c
@@ -238,7 +238,7 @@ static struct xt_match udp6_matchstruct = {
238 .me = THIS_MODULE, 238 .me = THIS_MODULE,
239}; 239};
240 240
241static int __init init(void) 241static int __init xt_tcpudp_init(void)
242{ 242{
243 int ret; 243 int ret;
244 ret = xt_register_match(&tcp_matchstruct); 244 ret = xt_register_match(&tcp_matchstruct);
@@ -268,7 +268,7 @@ out_unreg_tcp:
268 return ret; 268 return ret;
269} 269}
270 270
271static void __exit fini(void) 271static void __exit xt_tcpudp_fini(void)
272{ 272{
273 xt_unregister_match(&udp6_matchstruct); 273 xt_unregister_match(&udp6_matchstruct);
274 xt_unregister_match(&udp_matchstruct); 274 xt_unregister_match(&udp_matchstruct);
@@ -276,5 +276,5 @@ static void __exit fini(void)
276 xt_unregister_match(&tcp_matchstruct); 276 xt_unregister_match(&tcp_matchstruct);
277} 277}
278 278
279module_init(init); 279module_init(xt_tcpudp_init);
280module_exit(fini); 280module_exit(xt_tcpudp_fini);