mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 05:48:40 +00:00
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: (25 commits) [XFRM]: Allow packet drops during larval state resolution. [CASSINI]: Check pci_set_mwi() return value. [NET]: "wrong timeout value" in sk_wait_data() v2 [NETFILTER]: nf_nat_h323: call set_h225_addr instead of set_h225_addr_hook [NETFILTER]: nf_conntrack_h323: add missing T.120 address in OLCA [NETFILTER]: nf_conntrack_h323: remove unnecessary process of Information signal [NETFILTER]: nf_conntrack_h323: fix get_h225_addr() for IPv6 address access [NETFILTER]: nf_conntrack_h323: fix ASN.1 types [NETFILTER]: nf_conntrack_ftp: fix newline sequence number calculation [NETFILTER]: nf_conntrack_ftp: fix newline sequence number update [NET_SCHED]: sch_htb: fix event cache time calculation [DCCP]: Fix build warning when debugging is disabled. [TIPC]: Fixed erroneous introduction of for_each_netdev [RTNETLINK]: Fix sending netlink message when replace route. [TR]: Use menuconfig objects. [ARCNET]: Use menuconfig objects. [TIPC]: Use menuconfig objects. [SCTP]: Use menuconfig objects. [IPVS]: Use menuconfig objects. [DCCP]: Use menuconfig objects. ...
This commit is contained in:
commit
1c1ee4c3e7
40 changed files with 473 additions and 307 deletions
|
@ -47,7 +47,8 @@ static char const rcsid[] =
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
#include <linux/wait.h>
|
#include <linux/wait.h>
|
||||||
#include <linux/jiffies.h>
|
#include <linux/jiffies.h>
|
||||||
#include <asm/semaphore.h>
|
#include <linux/mutex.h>
|
||||||
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/atomic.h>
|
#include <asm/atomic.h>
|
||||||
|
@ -2435,7 +2436,7 @@ idt77252_open(struct atm_vcc *vcc)
|
||||||
|
|
||||||
set_bit(ATM_VF_ADDR, &vcc->flags);
|
set_bit(ATM_VF_ADDR, &vcc->flags);
|
||||||
|
|
||||||
down(&card->mutex);
|
mutex_lock(&card->mutex);
|
||||||
|
|
||||||
OPRINTK("%s: opening vpi.vci: %d.%d\n", card->name, vpi, vci);
|
OPRINTK("%s: opening vpi.vci: %d.%d\n", card->name, vpi, vci);
|
||||||
|
|
||||||
|
@ -2446,7 +2447,7 @@ idt77252_open(struct atm_vcc *vcc)
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printk("%s: Unsupported AAL: %d\n", card->name, vcc->qos.aal);
|
printk("%s: Unsupported AAL: %d\n", card->name, vcc->qos.aal);
|
||||||
up(&card->mutex);
|
mutex_unlock(&card->mutex);
|
||||||
return -EPROTONOSUPPORT;
|
return -EPROTONOSUPPORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2455,7 +2456,7 @@ idt77252_open(struct atm_vcc *vcc)
|
||||||
card->vcs[index] = kzalloc(sizeof(struct vc_map), GFP_KERNEL);
|
card->vcs[index] = kzalloc(sizeof(struct vc_map), GFP_KERNEL);
|
||||||
if (!card->vcs[index]) {
|
if (!card->vcs[index]) {
|
||||||
printk("%s: can't alloc vc in open()\n", card->name);
|
printk("%s: can't alloc vc in open()\n", card->name);
|
||||||
up(&card->mutex);
|
mutex_unlock(&card->mutex);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
card->vcs[index]->card = card;
|
card->vcs[index]->card = card;
|
||||||
|
@ -2484,14 +2485,14 @@ idt77252_open(struct atm_vcc *vcc)
|
||||||
if (inuse) {
|
if (inuse) {
|
||||||
printk("%s: %s vci already in use.\n", card->name,
|
printk("%s: %s vci already in use.\n", card->name,
|
||||||
inuse == 1 ? "tx" : inuse == 2 ? "rx" : "tx and rx");
|
inuse == 1 ? "tx" : inuse == 2 ? "rx" : "tx and rx");
|
||||||
up(&card->mutex);
|
mutex_unlock(&card->mutex);
|
||||||
return -EADDRINUSE;
|
return -EADDRINUSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vcc->qos.txtp.traffic_class != ATM_NONE) {
|
if (vcc->qos.txtp.traffic_class != ATM_NONE) {
|
||||||
error = idt77252_init_tx(card, vc, vcc, &vcc->qos);
|
error = idt77252_init_tx(card, vc, vcc, &vcc->qos);
|
||||||
if (error) {
|
if (error) {
|
||||||
up(&card->mutex);
|
mutex_unlock(&card->mutex);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2499,14 +2500,14 @@ idt77252_open(struct atm_vcc *vcc)
|
||||||
if (vcc->qos.rxtp.traffic_class != ATM_NONE) {
|
if (vcc->qos.rxtp.traffic_class != ATM_NONE) {
|
||||||
error = idt77252_init_rx(card, vc, vcc, &vcc->qos);
|
error = idt77252_init_rx(card, vc, vcc, &vcc->qos);
|
||||||
if (error) {
|
if (error) {
|
||||||
up(&card->mutex);
|
mutex_unlock(&card->mutex);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set_bit(ATM_VF_READY, &vcc->flags);
|
set_bit(ATM_VF_READY, &vcc->flags);
|
||||||
|
|
||||||
up(&card->mutex);
|
mutex_unlock(&card->mutex);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2520,7 +2521,7 @@ idt77252_close(struct atm_vcc *vcc)
|
||||||
unsigned long addr;
|
unsigned long addr;
|
||||||
unsigned long timeout;
|
unsigned long timeout;
|
||||||
|
|
||||||
down(&card->mutex);
|
mutex_lock(&card->mutex);
|
||||||
|
|
||||||
IPRINTK("%s: idt77252_close: vc = %d (%d.%d)\n",
|
IPRINTK("%s: idt77252_close: vc = %d (%d.%d)\n",
|
||||||
card->name, vc->index, vcc->vpi, vcc->vci);
|
card->name, vc->index, vcc->vpi, vcc->vci);
|
||||||
|
@ -2591,7 +2592,7 @@ idt77252_close(struct atm_vcc *vcc)
|
||||||
free_scq(card, vc->scq);
|
free_scq(card, vc->scq);
|
||||||
}
|
}
|
||||||
|
|
||||||
up(&card->mutex);
|
mutex_unlock(&card->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -2602,7 +2603,7 @@ idt77252_change_qos(struct atm_vcc *vcc, struct atm_qos *qos, int flags)
|
||||||
struct vc_map *vc = vcc->dev_data;
|
struct vc_map *vc = vcc->dev_data;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
|
||||||
down(&card->mutex);
|
mutex_lock(&card->mutex);
|
||||||
|
|
||||||
if (qos->txtp.traffic_class != ATM_NONE) {
|
if (qos->txtp.traffic_class != ATM_NONE) {
|
||||||
if (!test_bit(VCF_TX, &vc->flags)) {
|
if (!test_bit(VCF_TX, &vc->flags)) {
|
||||||
|
@ -2648,7 +2649,7 @@ idt77252_change_qos(struct atm_vcc *vcc, struct atm_qos *qos, int flags)
|
||||||
set_bit(ATM_VF_HASQOS, &vcc->flags);
|
set_bit(ATM_VF_HASQOS, &vcc->flags);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
up(&card->mutex);
|
mutex_unlock(&card->mutex);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3709,7 +3710,7 @@ idt77252_init_one(struct pci_dev *pcidev, const struct pci_device_id *id)
|
||||||
membase = pci_resource_start(pcidev, 1);
|
membase = pci_resource_start(pcidev, 1);
|
||||||
srambase = pci_resource_start(pcidev, 2);
|
srambase = pci_resource_start(pcidev, 2);
|
||||||
|
|
||||||
init_MUTEX(&card->mutex);
|
mutex_init(&card->mutex);
|
||||||
spin_lock_init(&card->cmd_lock);
|
spin_lock_init(&card->cmd_lock);
|
||||||
spin_lock_init(&card->tst_lock);
|
spin_lock_init(&card->tst_lock);
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
#include <linux/skbuff.h>
|
#include <linux/skbuff.h>
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
|
#include <linux/mutex.h>
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* */
|
/* */
|
||||||
|
@ -359,7 +359,7 @@ struct idt77252_dev
|
||||||
unsigned long srambase; /* SAR's sram base address */
|
unsigned long srambase; /* SAR's sram base address */
|
||||||
void __iomem *fbq[4]; /* FBQ fill addresses */
|
void __iomem *fbq[4]; /* FBQ fill addresses */
|
||||||
|
|
||||||
struct semaphore mutex;
|
struct mutex mutex;
|
||||||
spinlock_t cmd_lock; /* for r/w utility/sram */
|
spinlock_t cmd_lock; /* for r/w utility/sram */
|
||||||
|
|
||||||
unsigned long softstat;
|
unsigned long softstat;
|
||||||
|
|
|
@ -115,11 +115,11 @@ static struct usb_device_id blacklist_ids[] = {
|
||||||
{ USB_DEVICE(0x0a5c, 0x2009), .driver_info = HCI_BCM92035 },
|
{ USB_DEVICE(0x0a5c, 0x2009), .driver_info = HCI_BCM92035 },
|
||||||
|
|
||||||
/* Broadcom BCM2045 */
|
/* Broadcom BCM2045 */
|
||||||
{ USB_DEVICE(0x0a5c, 0x2101), .driver_info = HCI_WRONG_SCO_MTU },
|
{ USB_DEVICE(0x0a5c, 0x2101), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
|
||||||
|
|
||||||
/* IBM/Lenovo ThinkPad with Broadcom chip */
|
/* IBM/Lenovo ThinkPad with Broadcom chip */
|
||||||
{ USB_DEVICE(0x0a5c, 0x201e), .driver_info = HCI_WRONG_SCO_MTU },
|
{ USB_DEVICE(0x0a5c, 0x201e), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
|
||||||
{ USB_DEVICE(0x0a5c, 0x2110), .driver_info = HCI_WRONG_SCO_MTU },
|
{ USB_DEVICE(0x0a5c, 0x2110), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
|
||||||
|
|
||||||
/* Targus ACB10US */
|
/* Targus ACB10US */
|
||||||
{ USB_DEVICE(0x0a5c, 0x2100), .driver_info = HCI_RESET },
|
{ USB_DEVICE(0x0a5c, 0x2100), .driver_info = HCI_RESET },
|
||||||
|
@ -128,17 +128,17 @@ static struct usb_device_id blacklist_ids[] = {
|
||||||
{ USB_DEVICE(0x0a5c, 0x2111), .driver_info = HCI_RESET },
|
{ USB_DEVICE(0x0a5c, 0x2111), .driver_info = HCI_RESET },
|
||||||
|
|
||||||
/* HP laptop with Broadcom chip */
|
/* HP laptop with Broadcom chip */
|
||||||
{ USB_DEVICE(0x03f0, 0x171d), .driver_info = HCI_WRONG_SCO_MTU },
|
{ USB_DEVICE(0x03f0, 0x171d), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
|
||||||
|
|
||||||
/* Dell laptop with Broadcom chip */
|
/* Dell laptop with Broadcom chip */
|
||||||
{ USB_DEVICE(0x413c, 0x8126), .driver_info = HCI_WRONG_SCO_MTU },
|
{ USB_DEVICE(0x413c, 0x8126), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
|
||||||
|
|
||||||
/* Microsoft Wireless Transceiver for Bluetooth 2.0 */
|
/* Microsoft Wireless Transceiver for Bluetooth 2.0 */
|
||||||
{ USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET },
|
{ USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET },
|
||||||
|
|
||||||
/* Kensington Bluetooth USB adapter */
|
/* Kensington Bluetooth USB adapter */
|
||||||
{ USB_DEVICE(0x047d, 0x105d), .driver_info = HCI_RESET },
|
{ USB_DEVICE(0x047d, 0x105d), .driver_info = HCI_RESET },
|
||||||
{ USB_DEVICE(0x047d, 0x105e), .driver_info = HCI_WRONG_SCO_MTU },
|
{ USB_DEVICE(0x047d, 0x105e), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
|
||||||
|
|
||||||
/* ISSC Bluetooth Adapter v3.1 */
|
/* ISSC Bluetooth Adapter v3.1 */
|
||||||
{ USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET },
|
{ USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET },
|
||||||
|
@ -148,8 +148,8 @@ static struct usb_device_id blacklist_ids[] = {
|
||||||
{ USB_DEVICE(0x0400, 0x080a), .driver_info = HCI_BROKEN_ISOC },
|
{ USB_DEVICE(0x0400, 0x080a), .driver_info = HCI_BROKEN_ISOC },
|
||||||
|
|
||||||
/* Belkin F8T012 and F8T013 devices */
|
/* Belkin F8T012 and F8T013 devices */
|
||||||
{ USB_DEVICE(0x050d, 0x0012), .driver_info = HCI_WRONG_SCO_MTU },
|
{ USB_DEVICE(0x050d, 0x0012), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
|
||||||
{ USB_DEVICE(0x050d, 0x0013), .driver_info = HCI_WRONG_SCO_MTU },
|
{ USB_DEVICE(0x050d, 0x0013), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
|
||||||
|
|
||||||
/* Digianswer devices */
|
/* Digianswer devices */
|
||||||
{ USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
|
{ USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
|
||||||
|
|
|
@ -2,10 +2,8 @@
|
||||||
# Arcnet configuration
|
# Arcnet configuration
|
||||||
#
|
#
|
||||||
|
|
||||||
menu "ARCnet devices"
|
menuconfig ARCNET
|
||||||
depends on NETDEVICES && (ISA || PCI)
|
depends on NETDEVICES && (ISA || PCI)
|
||||||
|
|
||||||
config ARCNET
|
|
||||||
tristate "ARCnet support"
|
tristate "ARCnet support"
|
||||||
---help---
|
---help---
|
||||||
If you have a network card of this type, say Y and check out the
|
If you have a network card of this type, say Y and check out the
|
||||||
|
@ -25,9 +23,10 @@ config ARCNET
|
||||||
<file:Documentation/networking/net-modules.txt>. The module will
|
<file:Documentation/networking/net-modules.txt>. The module will
|
||||||
be called arcnet.
|
be called arcnet.
|
||||||
|
|
||||||
|
if ARCNET
|
||||||
|
|
||||||
config ARCNET_1201
|
config ARCNET_1201
|
||||||
tristate "Enable standard ARCNet packet format (RFC 1201)"
|
tristate "Enable standard ARCNet packet format (RFC 1201)"
|
||||||
depends on ARCNET
|
|
||||||
help
|
help
|
||||||
This allows you to use RFC1201 with your ARCnet card via the virtual
|
This allows you to use RFC1201 with your ARCnet card via the virtual
|
||||||
arc0 device. You need to say Y here to communicate with
|
arc0 device. You need to say Y here to communicate with
|
||||||
|
@ -38,7 +37,6 @@ config ARCNET_1201
|
||||||
|
|
||||||
config ARCNET_1051
|
config ARCNET_1051
|
||||||
tristate "Enable old ARCNet packet format (RFC 1051)"
|
tristate "Enable old ARCNet packet format (RFC 1051)"
|
||||||
depends on ARCNET
|
|
||||||
---help---
|
---help---
|
||||||
This allows you to use RFC1051 with your ARCnet card via the virtual
|
This allows you to use RFC1051 with your ARCnet card via the virtual
|
||||||
arc0s device. You only need arc0s if you want to talk to ARCnet
|
arc0s device. You only need arc0s if you want to talk to ARCnet
|
||||||
|
@ -53,7 +51,6 @@ config ARCNET_1051
|
||||||
|
|
||||||
config ARCNET_RAW
|
config ARCNET_RAW
|
||||||
tristate "Enable raw mode packet interface"
|
tristate "Enable raw mode packet interface"
|
||||||
depends on ARCNET
|
|
||||||
help
|
help
|
||||||
ARCnet "raw mode" packet encapsulation, no soft headers. Unlikely
|
ARCnet "raw mode" packet encapsulation, no soft headers. Unlikely
|
||||||
to work unless talking to a copy of the same Linux arcnet driver,
|
to work unless talking to a copy of the same Linux arcnet driver,
|
||||||
|
@ -61,7 +58,6 @@ config ARCNET_RAW
|
||||||
|
|
||||||
config ARCNET_CAP
|
config ARCNET_CAP
|
||||||
tristate "Enable CAP mode packet interface"
|
tristate "Enable CAP mode packet interface"
|
||||||
depends on ARCNET
|
|
||||||
help
|
help
|
||||||
ARCnet "cap mode" packet encapsulation. Used to get the hardware
|
ARCnet "cap mode" packet encapsulation. Used to get the hardware
|
||||||
acknowledge back to userspace. After the initial protocol byte every
|
acknowledge back to userspace. After the initial protocol byte every
|
||||||
|
@ -80,7 +76,6 @@ config ARCNET_CAP
|
||||||
|
|
||||||
config ARCNET_COM90xx
|
config ARCNET_COM90xx
|
||||||
tristate "ARCnet COM90xx (normal) chipset driver"
|
tristate "ARCnet COM90xx (normal) chipset driver"
|
||||||
depends on ARCNET
|
|
||||||
help
|
help
|
||||||
This is the chipset driver for the standard COM90xx cards. If you
|
This is the chipset driver for the standard COM90xx cards. If you
|
||||||
have always used the old ARCnet driver without knowing what type of
|
have always used the old ARCnet driver without knowing what type of
|
||||||
|
@ -92,7 +87,6 @@ config ARCNET_COM90xx
|
||||||
|
|
||||||
config ARCNET_COM90xxIO
|
config ARCNET_COM90xxIO
|
||||||
tristate "ARCnet COM90xx (IO mapped) chipset driver"
|
tristate "ARCnet COM90xx (IO mapped) chipset driver"
|
||||||
depends on ARCNET
|
|
||||||
---help---
|
---help---
|
||||||
This is the chipset driver for the COM90xx cards, using them in
|
This is the chipset driver for the COM90xx cards, using them in
|
||||||
IO-mapped mode instead of memory-mapped mode. This is slower than
|
IO-mapped mode instead of memory-mapped mode. This is slower than
|
||||||
|
@ -105,7 +99,6 @@ config ARCNET_COM90xxIO
|
||||||
|
|
||||||
config ARCNET_RIM_I
|
config ARCNET_RIM_I
|
||||||
tristate "ARCnet COM90xx (RIM I) chipset driver"
|
tristate "ARCnet COM90xx (RIM I) chipset driver"
|
||||||
depends on ARCNET
|
|
||||||
---help---
|
---help---
|
||||||
This is yet another chipset driver for the COM90xx cards, but this
|
This is yet another chipset driver for the COM90xx cards, but this
|
||||||
time only using memory-mapped mode, and no IO ports at all. This
|
time only using memory-mapped mode, and no IO ports at all. This
|
||||||
|
@ -118,7 +111,6 @@ config ARCNET_RIM_I
|
||||||
|
|
||||||
config ARCNET_COM20020
|
config ARCNET_COM20020
|
||||||
tristate "ARCnet COM20020 chipset driver"
|
tristate "ARCnet COM20020 chipset driver"
|
||||||
depends on ARCNET
|
|
||||||
help
|
help
|
||||||
This is the driver for the new COM20020 chipset. It supports such
|
This is the driver for the new COM20020 chipset. It supports such
|
||||||
things as promiscuous mode, so packet sniffing is possible, and
|
things as promiscuous mode, so packet sniffing is possible, and
|
||||||
|
@ -136,5 +128,4 @@ config ARCNET_COM20020_PCI
|
||||||
tristate "Support for COM20020 on PCI"
|
tristate "Support for COM20020 on PCI"
|
||||||
depends on ARCNET_COM20020 && PCI
|
depends on ARCNET_COM20020 && PCI
|
||||||
|
|
||||||
endmenu
|
endif # ARCNET
|
||||||
|
|
||||||
|
|
|
@ -4919,7 +4919,10 @@ static int __devinit cas_init_one(struct pci_dev *pdev,
|
||||||
pci_cmd &= ~PCI_COMMAND_SERR;
|
pci_cmd &= ~PCI_COMMAND_SERR;
|
||||||
pci_cmd |= PCI_COMMAND_PARITY;
|
pci_cmd |= PCI_COMMAND_PARITY;
|
||||||
pci_write_config_word(pdev, PCI_COMMAND, pci_cmd);
|
pci_write_config_word(pdev, PCI_COMMAND, pci_cmd);
|
||||||
pci_set_mwi(pdev);
|
if (pci_set_mwi(pdev))
|
||||||
|
printk(KERN_WARNING PFX "Could enable MWI for %s\n",
|
||||||
|
pci_name(pdev));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* On some architectures, the default cache line size set
|
* On some architectures, the default cache line size set
|
||||||
* by pci_set_mwi reduces perforamnce. We have to increase
|
* by pci_set_mwi reduces perforamnce. We have to increase
|
||||||
|
|
|
@ -2,12 +2,10 @@
|
||||||
# Token Ring driver configuration
|
# Token Ring driver configuration
|
||||||
#
|
#
|
||||||
|
|
||||||
menu "Token Ring devices"
|
|
||||||
depends on NETDEVICES && !UML
|
|
||||||
|
|
||||||
# So far, we only have PCI, ISA, and MCA token ring devices
|
# So far, we only have PCI, ISA, and MCA token ring devices
|
||||||
config TR
|
menuconfig TR
|
||||||
bool "Token Ring driver support"
|
bool "Token Ring driver support"
|
||||||
|
depends on NETDEVICES && !UML
|
||||||
depends on (PCI || ISA || MCA || CCW)
|
depends on (PCI || ISA || MCA || CCW)
|
||||||
select LLC
|
select LLC
|
||||||
help
|
help
|
||||||
|
@ -20,9 +18,11 @@ config TR
|
||||||
from <http://www.tldp.org/docs.html#howto>. Most people can
|
from <http://www.tldp.org/docs.html#howto>. Most people can
|
||||||
say N here.
|
say N here.
|
||||||
|
|
||||||
|
if TR
|
||||||
|
|
||||||
config IBMTR
|
config IBMTR
|
||||||
tristate "IBM Tropic chipset based adapter support"
|
tristate "IBM Tropic chipset based adapter support"
|
||||||
depends on TR && (ISA || MCA)
|
depends on ISA || MCA
|
||||||
---help---
|
---help---
|
||||||
This is support for all IBM Token Ring cards that don't use DMA. If
|
This is support for all IBM Token Ring cards that don't use DMA. If
|
||||||
you have such a beast, say Y and read the Token-Ring mini-HOWTO,
|
you have such a beast, say Y and read the Token-Ring mini-HOWTO,
|
||||||
|
@ -36,7 +36,7 @@ config IBMTR
|
||||||
|
|
||||||
config IBMOL
|
config IBMOL
|
||||||
tristate "IBM Olympic chipset PCI adapter support"
|
tristate "IBM Olympic chipset PCI adapter support"
|
||||||
depends on TR && PCI
|
depends on PCI
|
||||||
---help---
|
---help---
|
||||||
This is support for all non-Lanstreamer IBM PCI Token Ring Cards.
|
This is support for all non-Lanstreamer IBM PCI Token Ring Cards.
|
||||||
Specifically this is all IBM PCI, PCI Wake On Lan, PCI II, PCI II
|
Specifically this is all IBM PCI, PCI Wake On Lan, PCI II, PCI II
|
||||||
|
@ -54,7 +54,7 @@ config IBMOL
|
||||||
|
|
||||||
config IBMLS
|
config IBMLS
|
||||||
tristate "IBM Lanstreamer chipset PCI adapter support"
|
tristate "IBM Lanstreamer chipset PCI adapter support"
|
||||||
depends on TR && PCI && !64BIT
|
depends on PCI && !64BIT
|
||||||
help
|
help
|
||||||
This is support for IBM Lanstreamer PCI Token Ring Cards.
|
This is support for IBM Lanstreamer PCI Token Ring Cards.
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ config IBMLS
|
||||||
|
|
||||||
config 3C359
|
config 3C359
|
||||||
tristate "3Com 3C359 Token Link Velocity XL adapter support"
|
tristate "3Com 3C359 Token Link Velocity XL adapter support"
|
||||||
depends on TR && PCI
|
depends on PCI
|
||||||
---help---
|
---help---
|
||||||
This is support for the 3Com PCI Velocity XL cards, specifically
|
This is support for the 3Com PCI Velocity XL cards, specifically
|
||||||
the 3Com 3C359, please note this is not for the 3C339 cards, you
|
the 3Com 3C359, please note this is not for the 3C339 cards, you
|
||||||
|
@ -84,7 +84,7 @@ config 3C359
|
||||||
|
|
||||||
config TMS380TR
|
config TMS380TR
|
||||||
tristate "Generic TMS380 Token Ring ISA/PCI adapter support"
|
tristate "Generic TMS380 Token Ring ISA/PCI adapter support"
|
||||||
depends on TR && (PCI || ISA && ISA_DMA_API || MCA)
|
depends on PCI || ISA && ISA_DMA_API || MCA
|
||||||
select FW_LOADER
|
select FW_LOADER
|
||||||
---help---
|
---help---
|
||||||
This driver provides generic support for token ring adapters
|
This driver provides generic support for token ring adapters
|
||||||
|
@ -108,7 +108,7 @@ config TMS380TR
|
||||||
|
|
||||||
config TMSPCI
|
config TMSPCI
|
||||||
tristate "Generic TMS380 PCI support"
|
tristate "Generic TMS380 PCI support"
|
||||||
depends on TR && TMS380TR && PCI
|
depends on TMS380TR && PCI
|
||||||
---help---
|
---help---
|
||||||
This tms380 module supports generic TMS380-based PCI cards.
|
This tms380 module supports generic TMS380-based PCI cards.
|
||||||
|
|
||||||
|
@ -123,7 +123,7 @@ config TMSPCI
|
||||||
|
|
||||||
config SKISA
|
config SKISA
|
||||||
tristate "SysKonnect TR4/16 ISA support"
|
tristate "SysKonnect TR4/16 ISA support"
|
||||||
depends on TR && TMS380TR && ISA
|
depends on TMS380TR && ISA
|
||||||
help
|
help
|
||||||
This tms380 module supports SysKonnect TR4/16 ISA cards.
|
This tms380 module supports SysKonnect TR4/16 ISA cards.
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ config SKISA
|
||||||
|
|
||||||
config PROTEON
|
config PROTEON
|
||||||
tristate "Proteon ISA support"
|
tristate "Proteon ISA support"
|
||||||
depends on TR && TMS380TR && ISA
|
depends on TMS380TR && ISA
|
||||||
help
|
help
|
||||||
This tms380 module supports Proteon ISA cards.
|
This tms380 module supports Proteon ISA cards.
|
||||||
|
|
||||||
|
@ -148,7 +148,7 @@ config PROTEON
|
||||||
|
|
||||||
config ABYSS
|
config ABYSS
|
||||||
tristate "Madge Smart 16/4 PCI Mk2 support"
|
tristate "Madge Smart 16/4 PCI Mk2 support"
|
||||||
depends on TR && TMS380TR && PCI
|
depends on TMS380TR && PCI
|
||||||
help
|
help
|
||||||
This tms380 module supports the Madge Smart 16/4 PCI Mk2
|
This tms380 module supports the Madge Smart 16/4 PCI Mk2
|
||||||
cards (51-02).
|
cards (51-02).
|
||||||
|
@ -158,7 +158,7 @@ config ABYSS
|
||||||
|
|
||||||
config MADGEMC
|
config MADGEMC
|
||||||
tristate "Madge Smart 16/4 Ringnode MicroChannel"
|
tristate "Madge Smart 16/4 Ringnode MicroChannel"
|
||||||
depends on TR && TMS380TR && MCA
|
depends on TMS380TR && MCA
|
||||||
help
|
help
|
||||||
This tms380 module supports the Madge Smart 16/4 MC16 and MC32
|
This tms380 module supports the Madge Smart 16/4 MC16 and MC32
|
||||||
MicroChannel adapters.
|
MicroChannel adapters.
|
||||||
|
@ -168,7 +168,7 @@ config MADGEMC
|
||||||
|
|
||||||
config SMCTR
|
config SMCTR
|
||||||
tristate "SMC ISA/MCA adapter support"
|
tristate "SMC ISA/MCA adapter support"
|
||||||
depends on TR && (ISA || MCA_LEGACY) && (BROKEN || !64BIT)
|
depends on (ISA || MCA_LEGACY) && (BROKEN || !64BIT)
|
||||||
---help---
|
---help---
|
||||||
This is support for the ISA and MCA SMC Token Ring cards,
|
This is support for the ISA and MCA SMC Token Ring cards,
|
||||||
specifically SMC TokenCard Elite (8115T) and SMC TokenCard Elite/A
|
specifically SMC TokenCard Elite (8115T) and SMC TokenCard Elite/A
|
||||||
|
@ -182,5 +182,4 @@ config SMCTR
|
||||||
To compile this driver as a module, choose M here: the module will be
|
To compile this driver as a module, choose M here: the module will be
|
||||||
called smctr.
|
called smctr.
|
||||||
|
|
||||||
endmenu
|
endif # TR
|
||||||
|
|
||||||
|
|
|
@ -37,8 +37,7 @@ extern unsigned int (*nf_nat_ftp_hook)(struct sk_buff **pskb,
|
||||||
enum nf_ct_ftp_type type,
|
enum nf_ct_ftp_type type,
|
||||||
unsigned int matchoff,
|
unsigned int matchoff,
|
||||||
unsigned int matchlen,
|
unsigned int matchlen,
|
||||||
struct nf_conntrack_expect *exp,
|
struct nf_conntrack_expect *exp);
|
||||||
u32 *seq);
|
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
|
|
||||||
#endif /* _NF_CONNTRACK_FTP_H */
|
#endif /* _NF_CONNTRACK_FTP_H */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Generated by Jing Min Zhao's ASN.1 parser, Apr 20 2006
|
/* Generated by Jing Min Zhao's ASN.1 parser, May 16 2007
|
||||||
*
|
*
|
||||||
* Copyright (c) 2006 Jing Min Zhao <zhaojingmin@users.sourceforge.net>
|
* Copyright (c) 2006 Jing Min Zhao <zhaojingmin@users.sourceforge.net>
|
||||||
*
|
*
|
||||||
|
@ -12,7 +12,7 @@ typedef struct TransportAddress_ipAddress { /* SEQUENCE */
|
||||||
|
|
||||||
typedef struct TransportAddress_ip6Address { /* SEQUENCE */
|
typedef struct TransportAddress_ip6Address { /* SEQUENCE */
|
||||||
int options; /* No use */
|
int options; /* No use */
|
||||||
unsigned ip6;
|
unsigned ip;
|
||||||
} TransportAddress_ip6Address;
|
} TransportAddress_ip6Address;
|
||||||
|
|
||||||
typedef struct TransportAddress { /* CHOICE */
|
typedef struct TransportAddress { /* CHOICE */
|
||||||
|
@ -364,23 +364,6 @@ typedef struct Alerting_UUIE { /* SEQUENCE */
|
||||||
Alerting_UUIE_fastStart fastStart;
|
Alerting_UUIE_fastStart fastStart;
|
||||||
} Alerting_UUIE;
|
} Alerting_UUIE;
|
||||||
|
|
||||||
typedef struct Information_UUIE_fastStart { /* SEQUENCE OF */
|
|
||||||
int count;
|
|
||||||
OpenLogicalChannel item[30];
|
|
||||||
} Information_UUIE_fastStart;
|
|
||||||
|
|
||||||
typedef struct Information_UUIE { /* SEQUENCE */
|
|
||||||
enum {
|
|
||||||
eInformation_UUIE_callIdentifier = (1 << 31),
|
|
||||||
eInformation_UUIE_tokens = (1 << 30),
|
|
||||||
eInformation_UUIE_cryptoTokens = (1 << 29),
|
|
||||||
eInformation_UUIE_fastStart = (1 << 28),
|
|
||||||
eInformation_UUIE_fastConnectRefused = (1 << 27),
|
|
||||||
eInformation_UUIE_circuitInfo = (1 << 26),
|
|
||||||
} options;
|
|
||||||
Information_UUIE_fastStart fastStart;
|
|
||||||
} Information_UUIE;
|
|
||||||
|
|
||||||
typedef struct FacilityReason { /* CHOICE */
|
typedef struct FacilityReason { /* CHOICE */
|
||||||
enum {
|
enum {
|
||||||
eFacilityReason_routeCallToGatekeeper,
|
eFacilityReason_routeCallToGatekeeper,
|
||||||
|
@ -471,7 +454,6 @@ typedef struct H323_UU_PDU_h323_message_body { /* CHOICE */
|
||||||
CallProceeding_UUIE callProceeding;
|
CallProceeding_UUIE callProceeding;
|
||||||
Connect_UUIE connect;
|
Connect_UUIE connect;
|
||||||
Alerting_UUIE alerting;
|
Alerting_UUIE alerting;
|
||||||
Information_UUIE information;
|
|
||||||
Facility_UUIE facility;
|
Facility_UUIE facility;
|
||||||
Progress_UUIE progress;
|
Progress_UUIE progress;
|
||||||
};
|
};
|
||||||
|
@ -561,6 +543,7 @@ typedef struct OpenLogicalChannelAck { /* SEQUENCE */
|
||||||
} options;
|
} options;
|
||||||
OpenLogicalChannelAck_reverseLogicalChannelParameters
|
OpenLogicalChannelAck_reverseLogicalChannelParameters
|
||||||
reverseLogicalChannelParameters;
|
reverseLogicalChannelParameters;
|
||||||
|
NetworkAccessParameters separateStack;
|
||||||
OpenLogicalChannelAck_forwardMultiplexAckParameters
|
OpenLogicalChannelAck_forwardMultiplexAckParameters
|
||||||
forwardMultiplexAckParameters;
|
forwardMultiplexAckParameters;
|
||||||
} OpenLogicalChannelAck;
|
} OpenLogicalChannelAck;
|
||||||
|
|
|
@ -129,8 +129,10 @@ struct l2cap_conf_rsp {
|
||||||
__u8 data[0];
|
__u8 data[0];
|
||||||
} __attribute__ ((packed));
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
#define L2CAP_CONF_SUCCESS 0x00
|
#define L2CAP_CONF_SUCCESS 0x0000
|
||||||
#define L2CAP_CONF_UNACCEPT 0x01
|
#define L2CAP_CONF_UNACCEPT 0x0001
|
||||||
|
#define L2CAP_CONF_REJECT 0x0002
|
||||||
|
#define L2CAP_CONF_UNKNOWN 0x0003
|
||||||
|
|
||||||
struct l2cap_conf_opt {
|
struct l2cap_conf_opt {
|
||||||
__u8 type;
|
__u8 type;
|
||||||
|
@ -215,6 +217,8 @@ struct l2cap_pinfo {
|
||||||
|
|
||||||
__u32 link_mode;
|
__u32 link_mode;
|
||||||
|
|
||||||
|
__u8 conf_req[64];
|
||||||
|
__u8 conf_len;
|
||||||
__u8 conf_state;
|
__u8 conf_state;
|
||||||
__u8 conf_retry;
|
__u8 conf_retry;
|
||||||
__u16 conf_mtu;
|
__u16 conf_mtu;
|
||||||
|
|
|
@ -265,9 +265,16 @@ static inline int xfrm_lookup(struct dst_entry **dst_p, struct flowi *fl,
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
static inline int __xfrm_lookup(struct dst_entry **dst_p, struct flowi *fl,
|
||||||
|
struct sock *sk, int flags)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
extern int xfrm_lookup(struct dst_entry **dst_p, struct flowi *fl,
|
extern int xfrm_lookup(struct dst_entry **dst_p, struct flowi *fl,
|
||||||
struct sock *sk, int flags);
|
struct sock *sk, int flags);
|
||||||
|
extern int __xfrm_lookup(struct dst_entry **dst_p, struct flowi *fl,
|
||||||
|
struct sock *sk, int flags);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -469,6 +469,9 @@ extern void ip6_flush_pending_frames(struct sock *sk);
|
||||||
extern int ip6_dst_lookup(struct sock *sk,
|
extern int ip6_dst_lookup(struct sock *sk,
|
||||||
struct dst_entry **dst,
|
struct dst_entry **dst,
|
||||||
struct flowi *fl);
|
struct flowi *fl);
|
||||||
|
extern int ip6_dst_blackhole(struct sock *sk,
|
||||||
|
struct dst_entry **dst,
|
||||||
|
struct flowi *fl);
|
||||||
extern int ip6_sk_dst_lookup(struct sock *sk,
|
extern int ip6_sk_dst_lookup(struct sock *sk,
|
||||||
struct dst_entry **dst,
|
struct dst_entry **dst,
|
||||||
struct flowi *fl);
|
struct flowi *fl);
|
||||||
|
|
|
@ -507,6 +507,7 @@ static void l2cap_sock_init(struct sock *sk, struct sock *parent)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Default config options */
|
/* Default config options */
|
||||||
|
pi->conf_len = 0;
|
||||||
pi->conf_mtu = L2CAP_DEFAULT_MTU;
|
pi->conf_mtu = L2CAP_DEFAULT_MTU;
|
||||||
pi->flush_to = L2CAP_DEFAULT_FLUSH_TO;
|
pi->flush_to = L2CAP_DEFAULT_FLUSH_TO;
|
||||||
}
|
}
|
||||||
|
@ -1271,42 +1272,6 @@ static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen, unsigned
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void l2cap_parse_conf_req(struct sock *sk, void *data, int len)
|
|
||||||
{
|
|
||||||
int type, hint, olen;
|
|
||||||
unsigned long val;
|
|
||||||
void *ptr = data;
|
|
||||||
|
|
||||||
BT_DBG("sk %p len %d", sk, len);
|
|
||||||
|
|
||||||
while (len >= L2CAP_CONF_OPT_SIZE) {
|
|
||||||
len -= l2cap_get_conf_opt(&ptr, &type, &olen, &val);
|
|
||||||
|
|
||||||
hint = type & 0x80;
|
|
||||||
type &= 0x7f;
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case L2CAP_CONF_MTU:
|
|
||||||
l2cap_pi(sk)->conf_mtu = val;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case L2CAP_CONF_FLUSH_TO:
|
|
||||||
l2cap_pi(sk)->flush_to = val;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case L2CAP_CONF_QOS:
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
if (hint)
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* FIXME: Reject unknown option */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val)
|
static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val)
|
||||||
{
|
{
|
||||||
struct l2cap_conf_opt *opt = *ptr;
|
struct l2cap_conf_opt *opt = *ptr;
|
||||||
|
@ -1358,39 +1323,75 @@ static int l2cap_build_conf_req(struct sock *sk, void *data)
|
||||||
return ptr - data;
|
return ptr - data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int l2cap_conf_output(struct sock *sk, void **ptr)
|
static int l2cap_parse_conf_req(struct sock *sk, void *data)
|
||||||
{
|
{
|
||||||
struct l2cap_pinfo *pi = l2cap_pi(sk);
|
struct l2cap_pinfo *pi = l2cap_pi(sk);
|
||||||
int result = 0;
|
struct l2cap_conf_rsp *rsp = data;
|
||||||
|
void *ptr = rsp->data;
|
||||||
|
void *req = pi->conf_req;
|
||||||
|
int len = pi->conf_len;
|
||||||
|
int type, hint, olen;
|
||||||
|
unsigned long val;
|
||||||
|
u16 result = L2CAP_CONF_SUCCESS;
|
||||||
|
|
||||||
/* Configure output options and let the other side know
|
BT_DBG("sk %p", sk);
|
||||||
* which ones we don't like. */
|
|
||||||
if (pi->conf_mtu < pi->omtu)
|
|
||||||
result = L2CAP_CONF_UNACCEPT;
|
|
||||||
else
|
|
||||||
pi->omtu = pi->conf_mtu;
|
|
||||||
|
|
||||||
l2cap_add_conf_opt(ptr, L2CAP_CONF_MTU, 2, pi->omtu);
|
while (len >= L2CAP_CONF_OPT_SIZE) {
|
||||||
|
len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
|
||||||
|
|
||||||
BT_DBG("sk %p result %d", sk, result);
|
hint = type & 0x80;
|
||||||
return result;
|
type &= 0x7f;
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case L2CAP_CONF_MTU:
|
||||||
|
pi->conf_mtu = val;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case L2CAP_CONF_FLUSH_TO:
|
||||||
|
pi->flush_to = val;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case L2CAP_CONF_QOS:
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if (hint)
|
||||||
|
break;
|
||||||
|
|
||||||
|
result = L2CAP_CONF_UNKNOWN;
|
||||||
|
*((u8 *) ptr++) = type;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result == L2CAP_CONF_SUCCESS) {
|
||||||
|
/* Configure output options and let the other side know
|
||||||
|
* which ones we don't like. */
|
||||||
|
|
||||||
|
if (pi->conf_mtu < pi->omtu)
|
||||||
|
result = L2CAP_CONF_UNACCEPT;
|
||||||
|
else
|
||||||
|
pi->omtu = pi->conf_mtu;
|
||||||
|
|
||||||
|
l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->omtu);
|
||||||
|
}
|
||||||
|
|
||||||
|
rsp->scid = cpu_to_le16(pi->dcid);
|
||||||
|
rsp->result = cpu_to_le16(result);
|
||||||
|
rsp->flags = cpu_to_le16(0x0000);
|
||||||
|
|
||||||
|
return ptr - data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int l2cap_build_conf_rsp(struct sock *sk, void *data, int *result)
|
static int l2cap_build_conf_rsp(struct sock *sk, void *data, u16 result, u16 flags)
|
||||||
{
|
{
|
||||||
struct l2cap_conf_rsp *rsp = data;
|
struct l2cap_conf_rsp *rsp = data;
|
||||||
void *ptr = rsp->data;
|
void *ptr = rsp->data;
|
||||||
u16 flags = 0;
|
|
||||||
|
|
||||||
BT_DBG("sk %p complete %d", sk, result ? 1 : 0);
|
BT_DBG("sk %p", sk);
|
||||||
|
|
||||||
if (result)
|
|
||||||
*result = l2cap_conf_output(sk, &ptr);
|
|
||||||
else
|
|
||||||
flags = 0x0001;
|
|
||||||
|
|
||||||
rsp->scid = cpu_to_le16(l2cap_pi(sk)->dcid);
|
rsp->scid = cpu_to_le16(l2cap_pi(sk)->dcid);
|
||||||
rsp->result = cpu_to_le16(result ? *result : 0);
|
rsp->result = cpu_to_le16(result);
|
||||||
rsp->flags = cpu_to_le16(flags);
|
rsp->flags = cpu_to_le16(flags);
|
||||||
|
|
||||||
return ptr - data;
|
return ptr - data;
|
||||||
|
@ -1535,7 +1536,7 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr
|
||||||
u16 dcid, flags;
|
u16 dcid, flags;
|
||||||
u8 rsp[64];
|
u8 rsp[64];
|
||||||
struct sock *sk;
|
struct sock *sk;
|
||||||
int result;
|
int len;
|
||||||
|
|
||||||
dcid = __le16_to_cpu(req->dcid);
|
dcid = __le16_to_cpu(req->dcid);
|
||||||
flags = __le16_to_cpu(req->flags);
|
flags = __le16_to_cpu(req->flags);
|
||||||
|
@ -1548,25 +1549,40 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr
|
||||||
if (sk->sk_state == BT_DISCONN)
|
if (sk->sk_state == BT_DISCONN)
|
||||||
goto unlock;
|
goto unlock;
|
||||||
|
|
||||||
l2cap_parse_conf_req(sk, req->data, cmd->len - sizeof(*req));
|
/* Reject if config buffer is too small. */
|
||||||
|
len = cmd->len - sizeof(*req);
|
||||||
|
if (l2cap_pi(sk)->conf_len + len > sizeof(l2cap_pi(sk)->conf_req)) {
|
||||||
|
l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
|
||||||
|
l2cap_build_conf_rsp(sk, rsp,
|
||||||
|
L2CAP_CONF_REJECT, flags), rsp);
|
||||||
|
goto unlock;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Store config. */
|
||||||
|
memcpy(l2cap_pi(sk)->conf_req + l2cap_pi(sk)->conf_len, req->data, len);
|
||||||
|
l2cap_pi(sk)->conf_len += len;
|
||||||
|
|
||||||
if (flags & 0x0001) {
|
if (flags & 0x0001) {
|
||||||
/* Incomplete config. Send empty response. */
|
/* Incomplete config. Send empty response. */
|
||||||
l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
|
l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
|
||||||
l2cap_build_conf_rsp(sk, rsp, NULL), rsp);
|
l2cap_build_conf_rsp(sk, rsp,
|
||||||
|
L2CAP_CONF_SUCCESS, 0x0001), rsp);
|
||||||
goto unlock;
|
goto unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Complete config. */
|
/* Complete config. */
|
||||||
l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
|
len = l2cap_parse_conf_req(sk, rsp);
|
||||||
l2cap_build_conf_rsp(sk, rsp, &result), rsp);
|
if (len < 0)
|
||||||
|
|
||||||
if (result)
|
|
||||||
goto unlock;
|
goto unlock;
|
||||||
|
|
||||||
/* Output config done */
|
l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
|
||||||
|
|
||||||
|
/* Output config done. */
|
||||||
l2cap_pi(sk)->conf_state |= L2CAP_CONF_OUTPUT_DONE;
|
l2cap_pi(sk)->conf_state |= L2CAP_CONF_OUTPUT_DONE;
|
||||||
|
|
||||||
|
/* Reset config buffer. */
|
||||||
|
l2cap_pi(sk)->conf_len = 0;
|
||||||
|
|
||||||
if (l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE) {
|
if (l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE) {
|
||||||
sk->sk_state = BT_CONNECTED;
|
sk->sk_state = BT_CONNECTED;
|
||||||
l2cap_chan_ready(sk);
|
l2cap_chan_ready(sk);
|
||||||
|
|
|
@ -206,7 +206,19 @@ static int sock_set_timeout(long *timeo_p, char __user *optval, int optlen)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (copy_from_user(&tv, optval, sizeof(tv)))
|
if (copy_from_user(&tv, optval, sizeof(tv)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
if (tv.tv_usec < 0 || tv.tv_usec >= USEC_PER_SEC)
|
||||||
|
return -EDOM;
|
||||||
|
|
||||||
|
if (tv.tv_sec < 0) {
|
||||||
|
static int warned = 0;
|
||||||
|
*timeo_p = 0;
|
||||||
|
if (warned < 10 && net_ratelimit())
|
||||||
|
warned++;
|
||||||
|
printk(KERN_INFO "sock_set_timeout: `%s' (pid %d) "
|
||||||
|
"tries to set negative timeout\n",
|
||||||
|
current->comm, current->pid);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
*timeo_p = MAX_SCHEDULE_TIMEOUT;
|
*timeo_p = MAX_SCHEDULE_TIMEOUT;
|
||||||
if (tv.tv_sec == 0 && tv.tv_usec == 0)
|
if (tv.tv_sec == 0 && tv.tv_usec == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -24,6 +24,7 @@ extern int sysctl_core_destroy_delay;
|
||||||
#ifdef CONFIG_XFRM
|
#ifdef CONFIG_XFRM
|
||||||
extern u32 sysctl_xfrm_aevent_etime;
|
extern u32 sysctl_xfrm_aevent_etime;
|
||||||
extern u32 sysctl_xfrm_aevent_rseqth;
|
extern u32 sysctl_xfrm_aevent_rseqth;
|
||||||
|
extern int sysctl_xfrm_larval_drop;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ctl_table core_table[] = {
|
ctl_table core_table[] = {
|
||||||
|
@ -118,6 +119,14 @@ ctl_table core_table[] = {
|
||||||
.mode = 0644,
|
.mode = 0644,
|
||||||
.proc_handler = &proc_dointvec
|
.proc_handler = &proc_dointvec
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.ctl_name = CTL_UNNUMBERED,
|
||||||
|
.procname = "xfrm_larval_drop",
|
||||||
|
.data = &sysctl_xfrm_larval_drop,
|
||||||
|
.maxlen = sizeof(int),
|
||||||
|
.mode = 0644,
|
||||||
|
.proc_handler = &proc_dointvec
|
||||||
|
},
|
||||||
#endif /* CONFIG_XFRM */
|
#endif /* CONFIG_XFRM */
|
||||||
#endif /* CONFIG_NET */
|
#endif /* CONFIG_NET */
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
menu "DCCP Configuration (EXPERIMENTAL)"
|
menuconfig IP_DCCP
|
||||||
depends on INET && EXPERIMENTAL
|
|
||||||
|
|
||||||
config IP_DCCP
|
|
||||||
tristate "The DCCP Protocol (EXPERIMENTAL)"
|
tristate "The DCCP Protocol (EXPERIMENTAL)"
|
||||||
|
depends on INET && EXPERIMENTAL
|
||||||
---help---
|
---help---
|
||||||
Datagram Congestion Control Protocol (RFC 4340)
|
Datagram Congestion Control Protocol (RFC 4340)
|
||||||
|
|
||||||
|
@ -19,19 +17,20 @@ config IP_DCCP
|
||||||
|
|
||||||
If in doubt, say N.
|
If in doubt, say N.
|
||||||
|
|
||||||
|
if IP_DCCP
|
||||||
|
|
||||||
config INET_DCCP_DIAG
|
config INET_DCCP_DIAG
|
||||||
depends on IP_DCCP && INET_DIAG
|
depends on INET_DIAG
|
||||||
def_tristate y if (IP_DCCP = y && INET_DIAG = y)
|
def_tristate y if (IP_DCCP = y && INET_DIAG = y)
|
||||||
def_tristate m
|
def_tristate m
|
||||||
|
|
||||||
config IP_DCCP_ACKVEC
|
config IP_DCCP_ACKVEC
|
||||||
depends on IP_DCCP
|
|
||||||
bool
|
bool
|
||||||
|
|
||||||
source "net/dccp/ccids/Kconfig"
|
source "net/dccp/ccids/Kconfig"
|
||||||
|
|
||||||
menu "DCCP Kernel Hacking"
|
menu "DCCP Kernel Hacking"
|
||||||
depends on IP_DCCP && DEBUG_KERNEL=y
|
depends on DEBUG_KERNEL=y
|
||||||
|
|
||||||
config IP_DCCP_DEBUG
|
config IP_DCCP_DEBUG
|
||||||
bool "DCCP debug messages"
|
bool "DCCP debug messages"
|
||||||
|
@ -61,4 +60,4 @@ config NET_DCCPPROBE
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
endmenu
|
endif # IP_DDCP
|
||||||
|
|
|
@ -419,7 +419,6 @@ static void ccid3_hc_tx_packet_sent(struct sock *sk, int more,
|
||||||
|
|
||||||
static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
|
static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
const struct dccp_sock *dp = dccp_sk(sk);
|
|
||||||
struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk);
|
struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk);
|
||||||
struct ccid3_options_received *opt_recv;
|
struct ccid3_options_received *opt_recv;
|
||||||
struct dccp_tx_hist_entry *packet;
|
struct dccp_tx_hist_entry *packet;
|
||||||
|
@ -491,7 +490,7 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
|
||||||
ccid3_pr_debug("%s(%p), s=%u, MSS=%u, "
|
ccid3_pr_debug("%s(%p), s=%u, MSS=%u, "
|
||||||
"R_sample=%uus, X=%u\n", dccp_role(sk),
|
"R_sample=%uus, X=%u\n", dccp_role(sk),
|
||||||
sk, hctx->ccid3hctx_s,
|
sk, hctx->ccid3hctx_s,
|
||||||
dp->dccps_mss_cache, r_sample,
|
dccp_sk(sk)->dccps_mss_cache, r_sample,
|
||||||
(unsigned)(hctx->ccid3hctx_x >> 6));
|
(unsigned)(hctx->ccid3hctx_x >> 6));
|
||||||
|
|
||||||
ccid3_hc_tx_set_state(sk, TFRC_SSTATE_FBACK);
|
ccid3_hc_tx_set_state(sk, TFRC_SSTATE_FBACK);
|
||||||
|
|
|
@ -1043,9 +1043,13 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||||
if (final_p)
|
if (final_p)
|
||||||
ipv6_addr_copy(&fl.fl6_dst, final_p);
|
ipv6_addr_copy(&fl.fl6_dst, final_p);
|
||||||
|
|
||||||
err = xfrm_lookup(&dst, &fl, sk, 1);
|
err = __xfrm_lookup(&dst, &fl, sk, 1);
|
||||||
if (err < 0)
|
if (err < 0) {
|
||||||
goto failure;
|
if (err == -EREMOTE)
|
||||||
|
err = ip6_dst_blackhole(sk, &dst, &fl);
|
||||||
|
if (err < 0)
|
||||||
|
goto failure;
|
||||||
|
}
|
||||||
|
|
||||||
if (saddr == NULL) {
|
if (saddr == NULL) {
|
||||||
saddr = &fl.fl6_src;
|
saddr = &fl.fl6_src;
|
||||||
|
|
|
@ -456,6 +456,8 @@ static int fn_hash_insert(struct fib_table *tb, struct fib_config *cfg)
|
||||||
fib_release_info(fi_drop);
|
fib_release_info(fi_drop);
|
||||||
if (state & FA_S_ACCESSED)
|
if (state & FA_S_ACCESSED)
|
||||||
rt_cache_flush(-1);
|
rt_cache_flush(-1);
|
||||||
|
rtmsg_fib(RTM_NEWROUTE, key, fa, cfg->fc_dst_len, tb->tb_id,
|
||||||
|
&cfg->fc_nlinfo, NLM_F_REPLACE);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -523,7 +525,7 @@ static int fn_hash_insert(struct fib_table *tb, struct fib_config *cfg)
|
||||||
rt_cache_flush(-1);
|
rt_cache_flush(-1);
|
||||||
|
|
||||||
rtmsg_fib(RTM_NEWROUTE, key, new_fa, cfg->fc_dst_len, tb->tb_id,
|
rtmsg_fib(RTM_NEWROUTE, key, new_fa, cfg->fc_dst_len, tb->tb_id,
|
||||||
&cfg->fc_nlinfo);
|
&cfg->fc_nlinfo, 0);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_free_new_fa:
|
out_free_new_fa:
|
||||||
|
@ -589,7 +591,7 @@ static int fn_hash_delete(struct fib_table *tb, struct fib_config *cfg)
|
||||||
|
|
||||||
fa = fa_to_delete;
|
fa = fa_to_delete;
|
||||||
rtmsg_fib(RTM_DELROUTE, key, fa, cfg->fc_dst_len,
|
rtmsg_fib(RTM_DELROUTE, key, fa, cfg->fc_dst_len,
|
||||||
tb->tb_id, &cfg->fc_nlinfo);
|
tb->tb_id, &cfg->fc_nlinfo, 0);
|
||||||
|
|
||||||
kill_fn = 0;
|
kill_fn = 0;
|
||||||
write_lock_bh(&fib_hash_lock);
|
write_lock_bh(&fib_hash_lock);
|
||||||
|
|
|
@ -30,7 +30,8 @@ extern int fib_dump_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
|
||||||
int dst_len, u8 tos, struct fib_info *fi,
|
int dst_len, u8 tos, struct fib_info *fi,
|
||||||
unsigned int);
|
unsigned int);
|
||||||
extern void rtmsg_fib(int event, __be32 key, struct fib_alias *fa,
|
extern void rtmsg_fib(int event, __be32 key, struct fib_alias *fa,
|
||||||
int dst_len, u32 tb_id, struct nl_info *info);
|
int dst_len, u32 tb_id, struct nl_info *info,
|
||||||
|
unsigned int nlm_flags);
|
||||||
extern struct fib_alias *fib_find_alias(struct list_head *fah,
|
extern struct fib_alias *fib_find_alias(struct list_head *fah,
|
||||||
u8 tos, u32 prio);
|
u8 tos, u32 prio);
|
||||||
extern int fib_detect_death(struct fib_info *fi, int order,
|
extern int fib_detect_death(struct fib_info *fi, int order,
|
||||||
|
|
|
@ -301,7 +301,8 @@ static inline size_t fib_nlmsg_size(struct fib_info *fi)
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtmsg_fib(int event, __be32 key, struct fib_alias *fa,
|
void rtmsg_fib(int event, __be32 key, struct fib_alias *fa,
|
||||||
int dst_len, u32 tb_id, struct nl_info *info)
|
int dst_len, u32 tb_id, struct nl_info *info,
|
||||||
|
unsigned int nlm_flags)
|
||||||
{
|
{
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
u32 seq = info->nlh ? info->nlh->nlmsg_seq : 0;
|
u32 seq = info->nlh ? info->nlh->nlmsg_seq : 0;
|
||||||
|
@ -313,7 +314,7 @@ void rtmsg_fib(int event, __be32 key, struct fib_alias *fa,
|
||||||
|
|
||||||
err = fib_dump_info(skb, info->pid, seq, event, tb_id,
|
err = fib_dump_info(skb, info->pid, seq, event, tb_id,
|
||||||
fa->fa_type, fa->fa_scope, key, dst_len,
|
fa->fa_type, fa->fa_scope, key, dst_len,
|
||||||
fa->fa_tos, fa->fa_info, 0);
|
fa->fa_tos, fa->fa_info, nlm_flags);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
/* -EMSGSIZE implies BUG in fib_nlmsg_size() */
|
/* -EMSGSIZE implies BUG in fib_nlmsg_size() */
|
||||||
WARN_ON(err == -EMSGSIZE);
|
WARN_ON(err == -EMSGSIZE);
|
||||||
|
|
|
@ -1226,6 +1226,8 @@ static int fn_trie_insert(struct fib_table *tb, struct fib_config *cfg)
|
||||||
fib_release_info(fi_drop);
|
fib_release_info(fi_drop);
|
||||||
if (state & FA_S_ACCESSED)
|
if (state & FA_S_ACCESSED)
|
||||||
rt_cache_flush(-1);
|
rt_cache_flush(-1);
|
||||||
|
rtmsg_fib(RTM_NEWROUTE, htonl(key), new_fa, plen,
|
||||||
|
tb->tb_id, &cfg->fc_nlinfo, NLM_F_REPLACE);
|
||||||
|
|
||||||
goto succeeded;
|
goto succeeded;
|
||||||
}
|
}
|
||||||
|
@ -1278,7 +1280,7 @@ static int fn_trie_insert(struct fib_table *tb, struct fib_config *cfg)
|
||||||
|
|
||||||
rt_cache_flush(-1);
|
rt_cache_flush(-1);
|
||||||
rtmsg_fib(RTM_NEWROUTE, htonl(key), new_fa, plen, tb->tb_id,
|
rtmsg_fib(RTM_NEWROUTE, htonl(key), new_fa, plen, tb->tb_id,
|
||||||
&cfg->fc_nlinfo);
|
&cfg->fc_nlinfo, 0);
|
||||||
succeeded:
|
succeeded:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1624,7 +1626,7 @@ static int fn_trie_delete(struct fib_table *tb, struct fib_config *cfg)
|
||||||
|
|
||||||
fa = fa_to_delete;
|
fa = fa_to_delete;
|
||||||
rtmsg_fib(RTM_DELROUTE, htonl(key), fa, plen, tb->tb_id,
|
rtmsg_fib(RTM_DELROUTE, htonl(key), fa, plen, tb->tb_id,
|
||||||
&cfg->fc_nlinfo);
|
&cfg->fc_nlinfo, 0);
|
||||||
|
|
||||||
l = fib_find_node(t, key);
|
l = fib_find_node(t, key);
|
||||||
li = find_leaf_info(l, plen);
|
li = find_leaf_info(l, plen);
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
#
|
#
|
||||||
# IP Virtual Server configuration
|
# IP Virtual Server configuration
|
||||||
#
|
#
|
||||||
menu "IP: Virtual Server Configuration"
|
menuconfig IP_VS
|
||||||
depends on NETFILTER
|
|
||||||
|
|
||||||
config IP_VS
|
|
||||||
tristate "IP virtual server support (EXPERIMENTAL)"
|
tristate "IP virtual server support (EXPERIMENTAL)"
|
||||||
depends on NETFILTER
|
depends on NETFILTER
|
||||||
---help---
|
---help---
|
||||||
|
@ -25,9 +22,10 @@ config IP_VS
|
||||||
If you want to compile it in kernel, say Y. To compile it as a
|
If you want to compile it in kernel, say Y. To compile it as a
|
||||||
module, choose M here. If unsure, say N.
|
module, choose M here. If unsure, say N.
|
||||||
|
|
||||||
|
if IP_VS
|
||||||
|
|
||||||
config IP_VS_DEBUG
|
config IP_VS_DEBUG
|
||||||
bool "IP virtual server debugging"
|
bool "IP virtual server debugging"
|
||||||
depends on IP_VS
|
|
||||||
---help---
|
---help---
|
||||||
Say Y here if you want to get additional messages useful in
|
Say Y here if you want to get additional messages useful in
|
||||||
debugging the IP virtual server code. You can change the debug
|
debugging the IP virtual server code. You can change the debug
|
||||||
|
@ -35,7 +33,6 @@ config IP_VS_DEBUG
|
||||||
|
|
||||||
config IP_VS_TAB_BITS
|
config IP_VS_TAB_BITS
|
||||||
int "IPVS connection table size (the Nth power of 2)"
|
int "IPVS connection table size (the Nth power of 2)"
|
||||||
depends on IP_VS
|
|
||||||
default "12"
|
default "12"
|
||||||
---help---
|
---help---
|
||||||
The IPVS connection hash table uses the chaining scheme to handle
|
The IPVS connection hash table uses the chaining scheme to handle
|
||||||
|
@ -61,42 +58,35 @@ config IP_VS_TAB_BITS
|
||||||
needed for your box.
|
needed for your box.
|
||||||
|
|
||||||
comment "IPVS transport protocol load balancing support"
|
comment "IPVS transport protocol load balancing support"
|
||||||
depends on IP_VS
|
|
||||||
|
|
||||||
config IP_VS_PROTO_TCP
|
config IP_VS_PROTO_TCP
|
||||||
bool "TCP load balancing support"
|
bool "TCP load balancing support"
|
||||||
depends on IP_VS
|
|
||||||
---help---
|
---help---
|
||||||
This option enables support for load balancing TCP transport
|
This option enables support for load balancing TCP transport
|
||||||
protocol. Say Y if unsure.
|
protocol. Say Y if unsure.
|
||||||
|
|
||||||
config IP_VS_PROTO_UDP
|
config IP_VS_PROTO_UDP
|
||||||
bool "UDP load balancing support"
|
bool "UDP load balancing support"
|
||||||
depends on IP_VS
|
|
||||||
---help---
|
---help---
|
||||||
This option enables support for load balancing UDP transport
|
This option enables support for load balancing UDP transport
|
||||||
protocol. Say Y if unsure.
|
protocol. Say Y if unsure.
|
||||||
|
|
||||||
config IP_VS_PROTO_ESP
|
config IP_VS_PROTO_ESP
|
||||||
bool "ESP load balancing support"
|
bool "ESP load balancing support"
|
||||||
depends on IP_VS
|
|
||||||
---help---
|
---help---
|
||||||
This option enables support for load balancing ESP (Encapsulation
|
This option enables support for load balancing ESP (Encapsulation
|
||||||
Security Payload) transport protocol. Say Y if unsure.
|
Security Payload) transport protocol. Say Y if unsure.
|
||||||
|
|
||||||
config IP_VS_PROTO_AH
|
config IP_VS_PROTO_AH
|
||||||
bool "AH load balancing support"
|
bool "AH load balancing support"
|
||||||
depends on IP_VS
|
|
||||||
---help---
|
---help---
|
||||||
This option enables support for load balancing AH (Authentication
|
This option enables support for load balancing AH (Authentication
|
||||||
Header) transport protocol. Say Y if unsure.
|
Header) transport protocol. Say Y if unsure.
|
||||||
|
|
||||||
comment "IPVS scheduler"
|
comment "IPVS scheduler"
|
||||||
depends on IP_VS
|
|
||||||
|
|
||||||
config IP_VS_RR
|
config IP_VS_RR
|
||||||
tristate "round-robin scheduling"
|
tristate "round-robin scheduling"
|
||||||
depends on IP_VS
|
|
||||||
---help---
|
---help---
|
||||||
The robin-robin scheduling algorithm simply directs network
|
The robin-robin scheduling algorithm simply directs network
|
||||||
connections to different real servers in a round-robin manner.
|
connections to different real servers in a round-robin manner.
|
||||||
|
@ -106,7 +96,6 @@ config IP_VS_RR
|
||||||
|
|
||||||
config IP_VS_WRR
|
config IP_VS_WRR
|
||||||
tristate "weighted round-robin scheduling"
|
tristate "weighted round-robin scheduling"
|
||||||
depends on IP_VS
|
|
||||||
---help---
|
---help---
|
||||||
The weighted robin-robin scheduling algorithm directs network
|
The weighted robin-robin scheduling algorithm directs network
|
||||||
connections to different real servers based on server weights
|
connections to different real servers based on server weights
|
||||||
|
@ -120,7 +109,6 @@ config IP_VS_WRR
|
||||||
|
|
||||||
config IP_VS_LC
|
config IP_VS_LC
|
||||||
tristate "least-connection scheduling"
|
tristate "least-connection scheduling"
|
||||||
depends on IP_VS
|
|
||||||
---help---
|
---help---
|
||||||
The least-connection scheduling algorithm directs network
|
The least-connection scheduling algorithm directs network
|
||||||
connections to the server with the least number of active
|
connections to the server with the least number of active
|
||||||
|
@ -131,7 +119,6 @@ config IP_VS_LC
|
||||||
|
|
||||||
config IP_VS_WLC
|
config IP_VS_WLC
|
||||||
tristate "weighted least-connection scheduling"
|
tristate "weighted least-connection scheduling"
|
||||||
depends on IP_VS
|
|
||||||
---help---
|
---help---
|
||||||
The weighted least-connection scheduling algorithm directs network
|
The weighted least-connection scheduling algorithm directs network
|
||||||
connections to the server with the least active connections
|
connections to the server with the least active connections
|
||||||
|
@ -142,7 +129,6 @@ config IP_VS_WLC
|
||||||
|
|
||||||
config IP_VS_LBLC
|
config IP_VS_LBLC
|
||||||
tristate "locality-based least-connection scheduling"
|
tristate "locality-based least-connection scheduling"
|
||||||
depends on IP_VS
|
|
||||||
---help---
|
---help---
|
||||||
The locality-based least-connection scheduling algorithm is for
|
The locality-based least-connection scheduling algorithm is for
|
||||||
destination IP load balancing. It is usually used in cache cluster.
|
destination IP load balancing. It is usually used in cache cluster.
|
||||||
|
@ -157,7 +143,6 @@ config IP_VS_LBLC
|
||||||
|
|
||||||
config IP_VS_LBLCR
|
config IP_VS_LBLCR
|
||||||
tristate "locality-based least-connection with replication scheduling"
|
tristate "locality-based least-connection with replication scheduling"
|
||||||
depends on IP_VS
|
|
||||||
---help---
|
---help---
|
||||||
The locality-based least-connection with replication scheduling
|
The locality-based least-connection with replication scheduling
|
||||||
algorithm is also for destination IP load balancing. It is
|
algorithm is also for destination IP load balancing. It is
|
||||||
|
@ -176,7 +161,6 @@ config IP_VS_LBLCR
|
||||||
|
|
||||||
config IP_VS_DH
|
config IP_VS_DH
|
||||||
tristate "destination hashing scheduling"
|
tristate "destination hashing scheduling"
|
||||||
depends on IP_VS
|
|
||||||
---help---
|
---help---
|
||||||
The destination hashing scheduling algorithm assigns network
|
The destination hashing scheduling algorithm assigns network
|
||||||
connections to the servers through looking up a statically assigned
|
connections to the servers through looking up a statically assigned
|
||||||
|
@ -187,7 +171,6 @@ config IP_VS_DH
|
||||||
|
|
||||||
config IP_VS_SH
|
config IP_VS_SH
|
||||||
tristate "source hashing scheduling"
|
tristate "source hashing scheduling"
|
||||||
depends on IP_VS
|
|
||||||
---help---
|
---help---
|
||||||
The source hashing scheduling algorithm assigns network
|
The source hashing scheduling algorithm assigns network
|
||||||
connections to the servers through looking up a statically assigned
|
connections to the servers through looking up a statically assigned
|
||||||
|
@ -198,7 +181,6 @@ config IP_VS_SH
|
||||||
|
|
||||||
config IP_VS_SED
|
config IP_VS_SED
|
||||||
tristate "shortest expected delay scheduling"
|
tristate "shortest expected delay scheduling"
|
||||||
depends on IP_VS
|
|
||||||
---help---
|
---help---
|
||||||
The shortest expected delay scheduling algorithm assigns network
|
The shortest expected delay scheduling algorithm assigns network
|
||||||
connections to the server with the shortest expected delay. The
|
connections to the server with the shortest expected delay. The
|
||||||
|
@ -212,7 +194,6 @@ config IP_VS_SED
|
||||||
|
|
||||||
config IP_VS_NQ
|
config IP_VS_NQ
|
||||||
tristate "never queue scheduling"
|
tristate "never queue scheduling"
|
||||||
depends on IP_VS
|
|
||||||
---help---
|
---help---
|
||||||
The never queue scheduling algorithm adopts a two-speed model.
|
The never queue scheduling algorithm adopts a two-speed model.
|
||||||
When there is an idle server available, the job will be sent to
|
When there is an idle server available, the job will be sent to
|
||||||
|
@ -225,11 +206,10 @@ config IP_VS_NQ
|
||||||
module, choose M here. If unsure, say N.
|
module, choose M here. If unsure, say N.
|
||||||
|
|
||||||
comment 'IPVS application helper'
|
comment 'IPVS application helper'
|
||||||
depends on IP_VS
|
|
||||||
|
|
||||||
config IP_VS_FTP
|
config IP_VS_FTP
|
||||||
tristate "FTP protocol helper"
|
tristate "FTP protocol helper"
|
||||||
depends on IP_VS && IP_VS_PROTO_TCP
|
depends on IP_VS_PROTO_TCP
|
||||||
---help---
|
---help---
|
||||||
FTP is a protocol that transfers IP address and/or port number in
|
FTP is a protocol that transfers IP address and/or port number in
|
||||||
the payload. In the virtual server via Network Address Translation,
|
the payload. In the virtual server via Network Address Translation,
|
||||||
|
@ -241,4 +221,4 @@ config IP_VS_FTP
|
||||||
If you want to compile it in kernel, say Y. To compile it as a
|
If you want to compile it in kernel, say Y. To compile it as a
|
||||||
module, choose M here. If unsure, say N.
|
module, choose M here. If unsure, say N.
|
||||||
|
|
||||||
endmenu
|
endif # IP_VS
|
||||||
|
|
|
@ -40,8 +40,7 @@ mangle_rfc959_packet(struct sk_buff **pskb,
|
||||||
unsigned int matchoff,
|
unsigned int matchoff,
|
||||||
unsigned int matchlen,
|
unsigned int matchlen,
|
||||||
struct nf_conn *ct,
|
struct nf_conn *ct,
|
||||||
enum ip_conntrack_info ctinfo,
|
enum ip_conntrack_info ctinfo)
|
||||||
u32 *seq)
|
|
||||||
{
|
{
|
||||||
char buffer[sizeof("nnn,nnn,nnn,nnn,nnn,nnn")];
|
char buffer[sizeof("nnn,nnn,nnn,nnn,nnn,nnn")];
|
||||||
|
|
||||||
|
@ -50,7 +49,6 @@ mangle_rfc959_packet(struct sk_buff **pskb,
|
||||||
|
|
||||||
DEBUGP("calling nf_nat_mangle_tcp_packet\n");
|
DEBUGP("calling nf_nat_mangle_tcp_packet\n");
|
||||||
|
|
||||||
*seq += strlen(buffer) - matchlen;
|
|
||||||
return nf_nat_mangle_tcp_packet(pskb, ct, ctinfo, matchoff,
|
return nf_nat_mangle_tcp_packet(pskb, ct, ctinfo, matchoff,
|
||||||
matchlen, buffer, strlen(buffer));
|
matchlen, buffer, strlen(buffer));
|
||||||
}
|
}
|
||||||
|
@ -63,8 +61,7 @@ mangle_eprt_packet(struct sk_buff **pskb,
|
||||||
unsigned int matchoff,
|
unsigned int matchoff,
|
||||||
unsigned int matchlen,
|
unsigned int matchlen,
|
||||||
struct nf_conn *ct,
|
struct nf_conn *ct,
|
||||||
enum ip_conntrack_info ctinfo,
|
enum ip_conntrack_info ctinfo)
|
||||||
u32 *seq)
|
|
||||||
{
|
{
|
||||||
char buffer[sizeof("|1|255.255.255.255|65535|")];
|
char buffer[sizeof("|1|255.255.255.255|65535|")];
|
||||||
|
|
||||||
|
@ -72,7 +69,6 @@ mangle_eprt_packet(struct sk_buff **pskb,
|
||||||
|
|
||||||
DEBUGP("calling nf_nat_mangle_tcp_packet\n");
|
DEBUGP("calling nf_nat_mangle_tcp_packet\n");
|
||||||
|
|
||||||
*seq += strlen(buffer) - matchlen;
|
|
||||||
return nf_nat_mangle_tcp_packet(pskb, ct, ctinfo, matchoff,
|
return nf_nat_mangle_tcp_packet(pskb, ct, ctinfo, matchoff,
|
||||||
matchlen, buffer, strlen(buffer));
|
matchlen, buffer, strlen(buffer));
|
||||||
}
|
}
|
||||||
|
@ -85,8 +81,7 @@ mangle_epsv_packet(struct sk_buff **pskb,
|
||||||
unsigned int matchoff,
|
unsigned int matchoff,
|
||||||
unsigned int matchlen,
|
unsigned int matchlen,
|
||||||
struct nf_conn *ct,
|
struct nf_conn *ct,
|
||||||
enum ip_conntrack_info ctinfo,
|
enum ip_conntrack_info ctinfo)
|
||||||
u32 *seq)
|
|
||||||
{
|
{
|
||||||
char buffer[sizeof("|||65535|")];
|
char buffer[sizeof("|||65535|")];
|
||||||
|
|
||||||
|
@ -94,14 +89,13 @@ mangle_epsv_packet(struct sk_buff **pskb,
|
||||||
|
|
||||||
DEBUGP("calling nf_nat_mangle_tcp_packet\n");
|
DEBUGP("calling nf_nat_mangle_tcp_packet\n");
|
||||||
|
|
||||||
*seq += strlen(buffer) - matchlen;
|
|
||||||
return nf_nat_mangle_tcp_packet(pskb, ct, ctinfo, matchoff,
|
return nf_nat_mangle_tcp_packet(pskb, ct, ctinfo, matchoff,
|
||||||
matchlen, buffer, strlen(buffer));
|
matchlen, buffer, strlen(buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int (*mangle[])(struct sk_buff **, __be32, u_int16_t,
|
static int (*mangle[])(struct sk_buff **, __be32, u_int16_t,
|
||||||
unsigned int, unsigned int, struct nf_conn *,
|
unsigned int, unsigned int, struct nf_conn *,
|
||||||
enum ip_conntrack_info, u32 *seq)
|
enum ip_conntrack_info)
|
||||||
= {
|
= {
|
||||||
[NF_CT_FTP_PORT] = mangle_rfc959_packet,
|
[NF_CT_FTP_PORT] = mangle_rfc959_packet,
|
||||||
[NF_CT_FTP_PASV] = mangle_rfc959_packet,
|
[NF_CT_FTP_PASV] = mangle_rfc959_packet,
|
||||||
|
@ -116,8 +110,7 @@ static unsigned int nf_nat_ftp(struct sk_buff **pskb,
|
||||||
enum nf_ct_ftp_type type,
|
enum nf_ct_ftp_type type,
|
||||||
unsigned int matchoff,
|
unsigned int matchoff,
|
||||||
unsigned int matchlen,
|
unsigned int matchlen,
|
||||||
struct nf_conntrack_expect *exp,
|
struct nf_conntrack_expect *exp)
|
||||||
u32 *seq)
|
|
||||||
{
|
{
|
||||||
__be32 newip;
|
__be32 newip;
|
||||||
u_int16_t port;
|
u_int16_t port;
|
||||||
|
@ -145,8 +138,7 @@ static unsigned int nf_nat_ftp(struct sk_buff **pskb,
|
||||||
if (port == 0)
|
if (port == 0)
|
||||||
return NF_DROP;
|
return NF_DROP;
|
||||||
|
|
||||||
if (!mangle[type](pskb, newip, port, matchoff, matchlen, ct, ctinfo,
|
if (!mangle[type](pskb, newip, port, matchoff, matchlen, ct, ctinfo)) {
|
||||||
seq)) {
|
|
||||||
nf_conntrack_unexpect_related(exp);
|
nf_conntrack_unexpect_related(exp);
|
||||||
return NF_DROP;
|
return NF_DROP;
|
||||||
}
|
}
|
||||||
|
|
|
@ -455,9 +455,9 @@ static int nat_q931(struct sk_buff **pskb, struct nf_conn *ct,
|
||||||
if (idx > 0 &&
|
if (idx > 0 &&
|
||||||
get_h225_addr(ct, *data, &taddr[0], &addr, &port) &&
|
get_h225_addr(ct, *data, &taddr[0], &addr, &port) &&
|
||||||
(ntohl(addr.ip) & 0xff000000) == 0x7f000000) {
|
(ntohl(addr.ip) & 0xff000000) == 0x7f000000) {
|
||||||
set_h225_addr_hook(pskb, data, 0, &taddr[0],
|
set_h225_addr(pskb, data, 0, &taddr[0],
|
||||||
&ct->tuplehash[!dir].tuple.dst.u3,
|
&ct->tuplehash[!dir].tuple.dst.u3,
|
||||||
info->sig_port[!dir]);
|
info->sig_port[!dir]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
nf_conntrack_unexpect_related(exp);
|
nf_conntrack_unexpect_related(exp);
|
||||||
|
|
|
@ -2598,6 +2598,69 @@ int __ip_route_output_key(struct rtable **rp, const struct flowi *flp)
|
||||||
|
|
||||||
EXPORT_SYMBOL_GPL(__ip_route_output_key);
|
EXPORT_SYMBOL_GPL(__ip_route_output_key);
|
||||||
|
|
||||||
|
static void ipv4_rt_blackhole_update_pmtu(struct dst_entry *dst, u32 mtu)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct dst_ops ipv4_dst_blackhole_ops = {
|
||||||
|
.family = AF_INET,
|
||||||
|
.protocol = __constant_htons(ETH_P_IP),
|
||||||
|
.destroy = ipv4_dst_destroy,
|
||||||
|
.check = ipv4_dst_check,
|
||||||
|
.update_pmtu = ipv4_rt_blackhole_update_pmtu,
|
||||||
|
.entry_size = sizeof(struct rtable),
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static int ipv4_blackhole_output(struct sk_buff *skb)
|
||||||
|
{
|
||||||
|
kfree_skb(skb);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ipv4_dst_blackhole(struct rtable **rp, struct flowi *flp, struct sock *sk)
|
||||||
|
{
|
||||||
|
struct rtable *ort = *rp;
|
||||||
|
struct rtable *rt = (struct rtable *)
|
||||||
|
dst_alloc(&ipv4_dst_blackhole_ops);
|
||||||
|
|
||||||
|
if (rt) {
|
||||||
|
struct dst_entry *new = &rt->u.dst;
|
||||||
|
|
||||||
|
atomic_set(&new->__refcnt, 1);
|
||||||
|
new->__use = 1;
|
||||||
|
new->input = ipv4_blackhole_output;
|
||||||
|
new->output = ipv4_blackhole_output;
|
||||||
|
memcpy(new->metrics, ort->u.dst.metrics, RTAX_MAX*sizeof(u32));
|
||||||
|
|
||||||
|
new->dev = ort->u.dst.dev;
|
||||||
|
if (new->dev)
|
||||||
|
dev_hold(new->dev);
|
||||||
|
|
||||||
|
rt->fl = ort->fl;
|
||||||
|
|
||||||
|
rt->idev = ort->idev;
|
||||||
|
if (rt->idev)
|
||||||
|
in_dev_hold(rt->idev);
|
||||||
|
rt->rt_flags = ort->rt_flags;
|
||||||
|
rt->rt_type = ort->rt_type;
|
||||||
|
rt->rt_dst = ort->rt_dst;
|
||||||
|
rt->rt_src = ort->rt_src;
|
||||||
|
rt->rt_iif = ort->rt_iif;
|
||||||
|
rt->rt_gateway = ort->rt_gateway;
|
||||||
|
rt->rt_spec_dst = ort->rt_spec_dst;
|
||||||
|
rt->peer = ort->peer;
|
||||||
|
if (rt->peer)
|
||||||
|
atomic_inc(&rt->peer->refcnt);
|
||||||
|
|
||||||
|
dst_free(new);
|
||||||
|
}
|
||||||
|
|
||||||
|
dst_release(&(*rp)->u.dst);
|
||||||
|
*rp = rt;
|
||||||
|
return (rt ? 0 : -ENOMEM);
|
||||||
|
}
|
||||||
|
|
||||||
int ip_route_output_flow(struct rtable **rp, struct flowi *flp, struct sock *sk, int flags)
|
int ip_route_output_flow(struct rtable **rp, struct flowi *flp, struct sock *sk, int flags)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
@ -2610,7 +2673,11 @@ int ip_route_output_flow(struct rtable **rp, struct flowi *flp, struct sock *sk,
|
||||||
flp->fl4_src = (*rp)->rt_src;
|
flp->fl4_src = (*rp)->rt_src;
|
||||||
if (!flp->fl4_dst)
|
if (!flp->fl4_dst)
|
||||||
flp->fl4_dst = (*rp)->rt_dst;
|
flp->fl4_dst = (*rp)->rt_dst;
|
||||||
return xfrm_lookup((struct dst_entry **)rp, flp, sk, flags);
|
err = __xfrm_lookup((struct dst_entry **)rp, flp, sk, flags);
|
||||||
|
if (err == -EREMOTE)
|
||||||
|
err = ipv4_dst_blackhole(rp, flp, sk);
|
||||||
|
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -3139,6 +3206,8 @@ int __init ip_rt_init(void)
|
||||||
kmem_cache_create("ip_dst_cache", sizeof(struct rtable), 0,
|
kmem_cache_create("ip_dst_cache", sizeof(struct rtable), 0,
|
||||||
SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL);
|
SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL);
|
||||||
|
|
||||||
|
ipv4_dst_blackhole_ops.kmem_cachep = ipv4_dst_ops.kmem_cachep;
|
||||||
|
|
||||||
rt_hash_table = (struct rt_hash_bucket *)
|
rt_hash_table = (struct rt_hash_bucket *)
|
||||||
alloc_large_system_hash("IP route cache",
|
alloc_large_system_hash("IP route cache",
|
||||||
sizeof(struct rt_hash_bucket),
|
sizeof(struct rt_hash_bucket),
|
||||||
|
|
|
@ -2154,15 +2154,6 @@ static void addrconf_dev_config(struct net_device *dev)
|
||||||
|
|
||||||
ASSERT_RTNL();
|
ASSERT_RTNL();
|
||||||
|
|
||||||
if ((dev->type != ARPHRD_ETHER) &&
|
|
||||||
(dev->type != ARPHRD_FDDI) &&
|
|
||||||
(dev->type != ARPHRD_IEEE802_TR) &&
|
|
||||||
(dev->type != ARPHRD_ARCNET) &&
|
|
||||||
(dev->type != ARPHRD_INFINIBAND)) {
|
|
||||||
/* Alas, we support only Ethernet autoconfiguration. */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
idev = addrconf_add_dev(dev);
|
idev = addrconf_add_dev(dev);
|
||||||
if (idev == NULL)
|
if (idev == NULL)
|
||||||
return;
|
return;
|
||||||
|
@ -2250,13 +2241,33 @@ static void addrconf_ip6_tnl_config(struct net_device *dev)
|
||||||
ip6_tnl_add_linklocal(idev);
|
ip6_tnl_add_linklocal(idev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ipv6_hwtype(struct net_device *dev)
|
||||||
|
{
|
||||||
|
if ((dev->type == ARPHRD_ETHER) ||
|
||||||
|
(dev->type == ARPHRD_LOOPBACK) ||
|
||||||
|
(dev->type == ARPHRD_SIT) ||
|
||||||
|
(dev->type == ARPHRD_TUNNEL6) ||
|
||||||
|
(dev->type == ARPHRD_FDDI) ||
|
||||||
|
(dev->type == ARPHRD_IEEE802_TR) ||
|
||||||
|
(dev->type == ARPHRD_ARCNET) ||
|
||||||
|
(dev->type == ARPHRD_INFINIBAND))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int addrconf_notify(struct notifier_block *this, unsigned long event,
|
static int addrconf_notify(struct notifier_block *this, unsigned long event,
|
||||||
void * data)
|
void * data)
|
||||||
{
|
{
|
||||||
struct net_device *dev = (struct net_device *) data;
|
struct net_device *dev = (struct net_device *) data;
|
||||||
struct inet6_dev *idev = __in6_dev_get(dev);
|
struct inet6_dev *idev;
|
||||||
int run_pending = 0;
|
int run_pending = 0;
|
||||||
|
|
||||||
|
if (!ipv6_hwtype(dev))
|
||||||
|
return NOTIFY_OK;
|
||||||
|
|
||||||
|
idev = __in6_dev_get(dev);
|
||||||
|
|
||||||
switch(event) {
|
switch(event) {
|
||||||
case NETDEV_REGISTER:
|
case NETDEV_REGISTER:
|
||||||
if (!idev) {
|
if (!idev) {
|
||||||
|
|
|
@ -177,8 +177,12 @@ int ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||||
if (final_p)
|
if (final_p)
|
||||||
ipv6_addr_copy(&fl.fl6_dst, final_p);
|
ipv6_addr_copy(&fl.fl6_dst, final_p);
|
||||||
|
|
||||||
if ((err = xfrm_lookup(&dst, &fl, sk, 1)) < 0)
|
if ((err = __xfrm_lookup(&dst, &fl, sk, 1)) < 0) {
|
||||||
goto out;
|
if (err == -EREMOTE)
|
||||||
|
err = ip6_dst_blackhole(sk, &dst, &fl);
|
||||||
|
if (err < 0)
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/* source address lookup done in ip6_dst_lookup */
|
/* source address lookup done in ip6_dst_lookup */
|
||||||
|
|
||||||
|
|
|
@ -818,8 +818,12 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk,
|
||||||
if (final_p)
|
if (final_p)
|
||||||
ipv6_addr_copy(&fl.fl6_dst, final_p);
|
ipv6_addr_copy(&fl.fl6_dst, final_p);
|
||||||
|
|
||||||
if ((err = xfrm_lookup(&dst, &fl, sk, 1)) < 0)
|
if ((err = __xfrm_lookup(&dst, &fl, sk, 1)) < 0) {
|
||||||
goto out;
|
if (err == -EREMOTE)
|
||||||
|
err = ip6_dst_blackhole(sk, &dst, &fl);
|
||||||
|
if (err < 0)
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (hlimit < 0) {
|
if (hlimit < 0) {
|
||||||
if (ipv6_addr_is_multicast(&fl.fl6_dst))
|
if (ipv6_addr_is_multicast(&fl.fl6_dst))
|
||||||
|
|
|
@ -119,6 +119,19 @@ static struct dst_ops ip6_dst_ops = {
|
||||||
.entry_size = sizeof(struct rt6_info),
|
.entry_size = sizeof(struct rt6_info),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void ip6_rt_blackhole_update_pmtu(struct dst_entry *dst, u32 mtu)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct dst_ops ip6_dst_blackhole_ops = {
|
||||||
|
.family = AF_INET6,
|
||||||
|
.protocol = __constant_htons(ETH_P_IPV6),
|
||||||
|
.destroy = ip6_dst_destroy,
|
||||||
|
.check = ip6_dst_check,
|
||||||
|
.update_pmtu = ip6_rt_blackhole_update_pmtu,
|
||||||
|
.entry_size = sizeof(struct rt6_info),
|
||||||
|
};
|
||||||
|
|
||||||
struct rt6_info ip6_null_entry = {
|
struct rt6_info ip6_null_entry = {
|
||||||
.u = {
|
.u = {
|
||||||
.dst = {
|
.dst = {
|
||||||
|
@ -833,6 +846,54 @@ struct dst_entry * ip6_route_output(struct sock *sk, struct flowi *fl)
|
||||||
|
|
||||||
EXPORT_SYMBOL(ip6_route_output);
|
EXPORT_SYMBOL(ip6_route_output);
|
||||||
|
|
||||||
|
static int ip6_blackhole_output(struct sk_buff *skb)
|
||||||
|
{
|
||||||
|
kfree_skb(skb);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ip6_dst_blackhole(struct sock *sk, struct dst_entry **dstp, struct flowi *fl)
|
||||||
|
{
|
||||||
|
struct rt6_info *ort = (struct rt6_info *) *dstp;
|
||||||
|
struct rt6_info *rt = (struct rt6_info *)
|
||||||
|
dst_alloc(&ip6_dst_blackhole_ops);
|
||||||
|
struct dst_entry *new = NULL;
|
||||||
|
|
||||||
|
if (rt) {
|
||||||
|
new = &rt->u.dst;
|
||||||
|
|
||||||
|
atomic_set(&new->__refcnt, 1);
|
||||||
|
new->__use = 1;
|
||||||
|
new->input = ip6_blackhole_output;
|
||||||
|
new->output = ip6_blackhole_output;
|
||||||
|
|
||||||
|
memcpy(new->metrics, ort->u.dst.metrics, RTAX_MAX*sizeof(u32));
|
||||||
|
new->dev = ort->u.dst.dev;
|
||||||
|
if (new->dev)
|
||||||
|
dev_hold(new->dev);
|
||||||
|
rt->rt6i_idev = ort->rt6i_idev;
|
||||||
|
if (rt->rt6i_idev)
|
||||||
|
in6_dev_hold(rt->rt6i_idev);
|
||||||
|
rt->rt6i_expires = 0;
|
||||||
|
|
||||||
|
ipv6_addr_copy(&rt->rt6i_gateway, &ort->rt6i_gateway);
|
||||||
|
rt->rt6i_flags = ort->rt6i_flags & ~RTF_EXPIRES;
|
||||||
|
rt->rt6i_metric = 0;
|
||||||
|
|
||||||
|
memcpy(&rt->rt6i_dst, &ort->rt6i_dst, sizeof(struct rt6key));
|
||||||
|
#ifdef CONFIG_IPV6_SUBTREES
|
||||||
|
memcpy(&rt->rt6i_src, &ort->rt6i_src, sizeof(struct rt6key));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
dst_free(new);
|
||||||
|
}
|
||||||
|
|
||||||
|
dst_release(*dstp);
|
||||||
|
*dstp = new;
|
||||||
|
return (new ? 0 : -ENOMEM);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(ip6_dst_blackhole);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Destination cache support functions
|
* Destination cache support functions
|
||||||
*/
|
*/
|
||||||
|
@ -2495,6 +2556,8 @@ void __init ip6_route_init(void)
|
||||||
ip6_dst_ops.kmem_cachep =
|
ip6_dst_ops.kmem_cachep =
|
||||||
kmem_cache_create("ip6_dst_cache", sizeof(struct rt6_info), 0,
|
kmem_cache_create("ip6_dst_cache", sizeof(struct rt6_info), 0,
|
||||||
SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL);
|
SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL);
|
||||||
|
ip6_dst_blackhole_ops.kmem_cachep = ip6_dst_ops.kmem_cachep;
|
||||||
|
|
||||||
fib6_init();
|
fib6_init();
|
||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_PROC_FS
|
||||||
p = proc_net_create("ipv6_route", 0, rt6_proc_info);
|
p = proc_net_create("ipv6_route", 0, rt6_proc_info);
|
||||||
|
|
|
@ -265,8 +265,12 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||||
if (final_p)
|
if (final_p)
|
||||||
ipv6_addr_copy(&fl.fl6_dst, final_p);
|
ipv6_addr_copy(&fl.fl6_dst, final_p);
|
||||||
|
|
||||||
if ((err = xfrm_lookup(&dst, &fl, sk, 1)) < 0)
|
if ((err = __xfrm_lookup(&dst, &fl, sk, 1)) < 0) {
|
||||||
goto failure;
|
if (err == -EREMOTE)
|
||||||
|
err = ip6_dst_blackhole(sk, &dst, &fl);
|
||||||
|
if (err < 0)
|
||||||
|
goto failure;
|
||||||
|
}
|
||||||
|
|
||||||
if (saddr == NULL) {
|
if (saddr == NULL) {
|
||||||
saddr = &fl.fl6_src;
|
saddr = &fl.fl6_src;
|
||||||
|
|
|
@ -767,8 +767,12 @@ int udpv6_sendmsg(struct kiocb *iocb, struct sock *sk,
|
||||||
if (final_p)
|
if (final_p)
|
||||||
ipv6_addr_copy(&fl.fl6_dst, final_p);
|
ipv6_addr_copy(&fl.fl6_dst, final_p);
|
||||||
|
|
||||||
if ((err = xfrm_lookup(&dst, &fl, sk, 1)) < 0)
|
if ((err = __xfrm_lookup(&dst, &fl, sk, 1)) < 0) {
|
||||||
goto out;
|
if (err == -EREMOTE)
|
||||||
|
err = ip6_dst_blackhole(sk, &dst, &fl);
|
||||||
|
if (err < 0)
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (hlimit < 0) {
|
if (hlimit < 0) {
|
||||||
if (ipv6_addr_is_multicast(&fl.fl6_dst))
|
if (ipv6_addr_is_multicast(&fl.fl6_dst))
|
||||||
|
|
|
@ -48,8 +48,7 @@ unsigned int (*nf_nat_ftp_hook)(struct sk_buff **pskb,
|
||||||
enum nf_ct_ftp_type type,
|
enum nf_ct_ftp_type type,
|
||||||
unsigned int matchoff,
|
unsigned int matchoff,
|
||||||
unsigned int matchlen,
|
unsigned int matchlen,
|
||||||
struct nf_conntrack_expect *exp,
|
struct nf_conntrack_expect *exp);
|
||||||
u32 *seq);
|
|
||||||
EXPORT_SYMBOL_GPL(nf_nat_ftp_hook);
|
EXPORT_SYMBOL_GPL(nf_nat_ftp_hook);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -335,15 +334,17 @@ static void update_nl_seq(u32 nl_seq, struct nf_ct_ftp_master *info, int dir,
|
||||||
if (info->seq_aft_nl[dir][i] == nl_seq)
|
if (info->seq_aft_nl[dir][i] == nl_seq)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (oldest == info->seq_aft_nl_num[dir]
|
if (oldest == info->seq_aft_nl_num[dir] ||
|
||||||
|| before(info->seq_aft_nl[dir][i], oldest))
|
before(info->seq_aft_nl[dir][i],
|
||||||
|
info->seq_aft_nl[dir][oldest]))
|
||||||
oldest = i;
|
oldest = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info->seq_aft_nl_num[dir] < NUM_SEQ_TO_REMEMBER) {
|
if (info->seq_aft_nl_num[dir] < NUM_SEQ_TO_REMEMBER) {
|
||||||
info->seq_aft_nl[dir][info->seq_aft_nl_num[dir]++] = nl_seq;
|
info->seq_aft_nl[dir][info->seq_aft_nl_num[dir]++] = nl_seq;
|
||||||
nf_conntrack_event_cache(IPCT_HELPINFO_VOLATILE, skb);
|
nf_conntrack_event_cache(IPCT_HELPINFO_VOLATILE, skb);
|
||||||
} else if (oldest != NUM_SEQ_TO_REMEMBER) {
|
} else if (oldest != NUM_SEQ_TO_REMEMBER &&
|
||||||
|
after(nl_seq, info->seq_aft_nl[dir][oldest])) {
|
||||||
info->seq_aft_nl[dir][oldest] = nl_seq;
|
info->seq_aft_nl[dir][oldest] = nl_seq;
|
||||||
nf_conntrack_event_cache(IPCT_HELPINFO_VOLATILE, skb);
|
nf_conntrack_event_cache(IPCT_HELPINFO_VOLATILE, skb);
|
||||||
}
|
}
|
||||||
|
@ -519,7 +520,7 @@ static int help(struct sk_buff **pskb,
|
||||||
nf_nat_ftp = rcu_dereference(nf_nat_ftp_hook);
|
nf_nat_ftp = rcu_dereference(nf_nat_ftp_hook);
|
||||||
if (nf_nat_ftp && ct->status & IPS_NAT_MASK)
|
if (nf_nat_ftp && ct->status & IPS_NAT_MASK)
|
||||||
ret = nf_nat_ftp(pskb, ctinfo, search[dir][i].ftptype,
|
ret = nf_nat_ftp(pskb, ctinfo, search[dir][i].ftptype,
|
||||||
matchoff, matchlen, exp, &seq);
|
matchoff, matchlen, exp);
|
||||||
else {
|
else {
|
||||||
/* Can't expect this? Best to drop packet now. */
|
/* Can't expect this? Best to drop packet now. */
|
||||||
if (nf_conntrack_expect_related(exp) != 0)
|
if (nf_conntrack_expect_related(exp) != 0)
|
||||||
|
|
|
@ -520,6 +520,16 @@ static int process_olca(struct sk_buff **pskb, struct nf_conn *ct,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((olca->options & eOpenLogicalChannelAck_separateStack) &&
|
||||||
|
olca->separateStack.networkAddress.choice ==
|
||||||
|
eNetworkAccessParameters_networkAddress_localAreaAddress) {
|
||||||
|
ret = expect_t120(pskb, ct, ctinfo, data, dataoff,
|
||||||
|
&olca->separateStack.networkAddress.
|
||||||
|
localAreaAddress);
|
||||||
|
if (ret < 0)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -640,7 +650,7 @@ int get_h225_addr(struct nf_conn *ct, unsigned char *data,
|
||||||
case eTransportAddress_ip6Address:
|
case eTransportAddress_ip6Address:
|
||||||
if (family != AF_INET6)
|
if (family != AF_INET6)
|
||||||
return 0;
|
return 0;
|
||||||
p = data + taddr->ip6Address.ip6;
|
p = data + taddr->ip6Address.ip;
|
||||||
len = 16;
|
len = 16;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -976,30 +986,6 @@ static int process_alerting(struct sk_buff **pskb, struct nf_conn *ct,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
static int process_information(struct sk_buff **pskb,
|
|
||||||
struct nf_conn *ct,
|
|
||||||
enum ip_conntrack_info ctinfo,
|
|
||||||
unsigned char **data, int dataoff,
|
|
||||||
Information_UUIE *info)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
DEBUGP("nf_ct_q931: Information\n");
|
|
||||||
|
|
||||||
if (info->options & eInformation_UUIE_fastStart) {
|
|
||||||
for (i = 0; i < info->fastStart.count; i++) {
|
|
||||||
ret = process_olc(pskb, ct, ctinfo, data, dataoff,
|
|
||||||
&info->fastStart.item[i]);
|
|
||||||
if (ret < 0)
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
static int process_facility(struct sk_buff **pskb, struct nf_conn *ct,
|
static int process_facility(struct sk_buff **pskb, struct nf_conn *ct,
|
||||||
enum ip_conntrack_info ctinfo,
|
enum ip_conntrack_info ctinfo,
|
||||||
|
@ -1096,11 +1082,6 @@ static int process_q931(struct sk_buff **pskb, struct nf_conn *ct,
|
||||||
ret = process_alerting(pskb, ct, ctinfo, data, dataoff,
|
ret = process_alerting(pskb, ct, ctinfo, data, dataoff,
|
||||||
&pdu->h323_message_body.alerting);
|
&pdu->h323_message_body.alerting);
|
||||||
break;
|
break;
|
||||||
case eH323_UU_PDU_h323_message_body_information:
|
|
||||||
ret = process_information(pskb, ct, ctinfo, data, dataoff,
|
|
||||||
&pdu->h323_message_body.
|
|
||||||
information);
|
|
||||||
break;
|
|
||||||
case eH323_UU_PDU_h323_message_body_facility:
|
case eH323_UU_PDU_h323_message_body_facility:
|
||||||
ret = process_facility(pskb, ct, ctinfo, data, dataoff,
|
ret = process_facility(pskb, ct, ctinfo, data, dataoff,
|
||||||
&pdu->h323_message_body.facility);
|
&pdu->h323_message_body.facility);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Generated by Jing Min Zhao's ASN.1 parser, Apr 20 2006
|
/* Generated by Jing Min Zhao's ASN.1 parser, May 16 2007
|
||||||
*
|
*
|
||||||
* Copyright (c) 2006 Jing Min Zhao <zhaojingmin@users.sourceforge.net>
|
* Copyright (c) 2006 Jing Min Zhao <zhaojingmin@users.sourceforge.net>
|
||||||
*
|
*
|
||||||
|
@ -37,7 +37,7 @@ static field_t _TransportAddress_ipxAddress[] = { /* SEQUENCE */
|
||||||
|
|
||||||
static field_t _TransportAddress_ip6Address[] = { /* SEQUENCE */
|
static field_t _TransportAddress_ip6Address[] = { /* SEQUENCE */
|
||||||
{FNAME("ip") OCTSTR, FIXD, 16, 0, DECODE,
|
{FNAME("ip") OCTSTR, FIXD, 16, 0, DECODE,
|
||||||
offsetof(TransportAddress_ip6Address, ip6), NULL},
|
offsetof(TransportAddress_ip6Address, ip), NULL},
|
||||||
{FNAME("port") INT, WORD, 0, 0, SKIP, 0, NULL},
|
{FNAME("port") INT, WORD, 0, 0, SKIP, 0, NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -67,7 +67,8 @@ static field_t _TransportAddress[] = { /* CHOICE */
|
||||||
{FNAME("ipxAddress") SEQ, 0, 3, 3, SKIP, 0,
|
{FNAME("ipxAddress") SEQ, 0, 3, 3, SKIP, 0,
|
||||||
_TransportAddress_ipxAddress},
|
_TransportAddress_ipxAddress},
|
||||||
{FNAME("ip6Address") SEQ, 0, 2, 2, DECODE | EXT,
|
{FNAME("ip6Address") SEQ, 0, 2, 2, DECODE | EXT,
|
||||||
offsetof(TransportAddress, ip6Address), _TransportAddress_ip6Address},
|
offsetof(TransportAddress, ip6Address),
|
||||||
|
_TransportAddress_ip6Address},
|
||||||
{FNAME("netBios") OCTSTR, FIXD, 16, 0, SKIP, 0, NULL},
|
{FNAME("netBios") OCTSTR, FIXD, 16, 0, SKIP, 0, NULL},
|
||||||
{FNAME("nsap") OCTSTR, 5, 1, 0, SKIP, 0, NULL},
|
{FNAME("nsap") OCTSTR, 5, 1, 0, SKIP, 0, NULL},
|
||||||
{FNAME("nonStandardAddress") SEQ, 0, 2, 2, SKIP, 0,
|
{FNAME("nonStandardAddress") SEQ, 0, 2, 2, SKIP, 0,
|
||||||
|
@ -638,7 +639,8 @@ static field_t _UnicastAddress_iPXAddress[] = { /* SEQUENCE */
|
||||||
};
|
};
|
||||||
|
|
||||||
static field_t _UnicastAddress_iP6Address[] = { /* SEQUENCE */
|
static field_t _UnicastAddress_iP6Address[] = { /* SEQUENCE */
|
||||||
{FNAME("network") OCTSTR, FIXD, 16, 0, SKIP, 0, NULL},
|
{FNAME("network") OCTSTR, FIXD, 16, 0, DECODE,
|
||||||
|
offsetof(UnicastAddress_iP6Address, network), NULL},
|
||||||
{FNAME("tsapIdentifier") INT, WORD, 0, 0, SKIP, 0, NULL},
|
{FNAME("tsapIdentifier") INT, WORD, 0, 0, SKIP, 0, NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -665,8 +667,8 @@ static field_t _UnicastAddress[] = { /* CHOICE */
|
||||||
offsetof(UnicastAddress, iPAddress), _UnicastAddress_iPAddress},
|
offsetof(UnicastAddress, iPAddress), _UnicastAddress_iPAddress},
|
||||||
{FNAME("iPXAddress") SEQ, 0, 3, 3, SKIP | EXT, 0,
|
{FNAME("iPXAddress") SEQ, 0, 3, 3, SKIP | EXT, 0,
|
||||||
_UnicastAddress_iPXAddress},
|
_UnicastAddress_iPXAddress},
|
||||||
{FNAME("iP6Address") SEQ, 0, 2, 2, SKIP | EXT, 0,
|
{FNAME("iP6Address") SEQ, 0, 2, 2, DECODE | EXT,
|
||||||
_UnicastAddress_iP6Address},
|
offsetof(UnicastAddress, iP6Address), _UnicastAddress_iP6Address},
|
||||||
{FNAME("netBios") OCTSTR, FIXD, 16, 0, SKIP, 0, NULL},
|
{FNAME("netBios") OCTSTR, FIXD, 16, 0, SKIP, 0, NULL},
|
||||||
{FNAME("iPSourceRouteAddress") SEQ, 0, 4, 4, SKIP | EXT, 0,
|
{FNAME("iPSourceRouteAddress") SEQ, 0, 4, 4, SKIP | EXT, 0,
|
||||||
_UnicastAddress_iPSourceRouteAddress},
|
_UnicastAddress_iPSourceRouteAddress},
|
||||||
|
@ -984,19 +986,12 @@ static field_t _Alerting_UUIE[] = { /* SEQUENCE */
|
||||||
{FNAME("featureSet") SEQ, 3, 4, 4, SKIP | EXT | OPT, 0, NULL},
|
{FNAME("featureSet") SEQ, 3, 4, 4, SKIP | EXT | OPT, 0, NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
static field_t _Information_UUIE_fastStart[] = { /* SEQUENCE OF */
|
|
||||||
{FNAME("item") SEQ, 1, 3, 5, DECODE | OPEN | EXT,
|
|
||||||
sizeof(OpenLogicalChannel), _OpenLogicalChannel}
|
|
||||||
,
|
|
||||||
};
|
|
||||||
|
|
||||||
static field_t _Information_UUIE[] = { /* SEQUENCE */
|
static field_t _Information_UUIE[] = { /* SEQUENCE */
|
||||||
{FNAME("protocolIdentifier") OID, BYTE, 0, 0, SKIP, 0, NULL},
|
{FNAME("protocolIdentifier") OID, BYTE, 0, 0, SKIP, 0, NULL},
|
||||||
{FNAME("callIdentifier") SEQ, 0, 1, 1, SKIP | EXT, 0, NULL},
|
{FNAME("callIdentifier") SEQ, 0, 1, 1, SKIP | EXT, 0, NULL},
|
||||||
{FNAME("tokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
|
{FNAME("tokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
|
||||||
{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
|
{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
|
||||||
{FNAME("fastStart") SEQOF, SEMI, 0, 30, DECODE | OPT,
|
{FNAME("fastStart") SEQOF, SEMI, 0, 30, SKIP | OPT, 0, NULL},
|
||||||
offsetof(Information_UUIE, fastStart), _Information_UUIE_fastStart},
|
|
||||||
{FNAME("fastConnectRefused") NUL, FIXD, 0, 0, SKIP | OPT, 0, NULL},
|
{FNAME("fastConnectRefused") NUL, FIXD, 0, 0, SKIP | OPT, 0, NULL},
|
||||||
{FNAME("circuitInfo") SEQ, 3, 3, 3, SKIP | EXT | OPT, 0, NULL},
|
{FNAME("circuitInfo") SEQ, 3, 3, 3, SKIP | EXT | OPT, 0, NULL},
|
||||||
};
|
};
|
||||||
|
@ -1343,9 +1338,7 @@ static field_t _H323_UU_PDU_h323_message_body[] = { /* CHOICE */
|
||||||
offsetof(H323_UU_PDU_h323_message_body, connect), _Connect_UUIE},
|
offsetof(H323_UU_PDU_h323_message_body, connect), _Connect_UUIE},
|
||||||
{FNAME("alerting") SEQ, 1, 3, 17, DECODE | EXT,
|
{FNAME("alerting") SEQ, 1, 3, 17, DECODE | EXT,
|
||||||
offsetof(H323_UU_PDU_h323_message_body, alerting), _Alerting_UUIE},
|
offsetof(H323_UU_PDU_h323_message_body, alerting), _Alerting_UUIE},
|
||||||
{FNAME("information") SEQ, 0, 1, 7, DECODE | EXT,
|
{FNAME("information") SEQ, 0, 1, 7, SKIP | EXT, 0, _Information_UUIE},
|
||||||
offsetof(H323_UU_PDU_h323_message_body, information),
|
|
||||||
_Information_UUIE},
|
|
||||||
{FNAME("releaseComplete") SEQ, 1, 2, 11, SKIP | EXT, 0,
|
{FNAME("releaseComplete") SEQ, 1, 2, 11, SKIP | EXT, 0,
|
||||||
_ReleaseComplete_UUIE},
|
_ReleaseComplete_UUIE},
|
||||||
{FNAME("facility") SEQ, 3, 5, 21, DECODE | EXT,
|
{FNAME("facility") SEQ, 3, 5, 21, DECODE | EXT,
|
||||||
|
@ -1430,7 +1423,9 @@ static field_t _OpenLogicalChannelAck[] = { /* SEQUENCE */
|
||||||
DECODE | EXT | OPT, offsetof(OpenLogicalChannelAck,
|
DECODE | EXT | OPT, offsetof(OpenLogicalChannelAck,
|
||||||
reverseLogicalChannelParameters),
|
reverseLogicalChannelParameters),
|
||||||
_OpenLogicalChannelAck_reverseLogicalChannelParameters},
|
_OpenLogicalChannelAck_reverseLogicalChannelParameters},
|
||||||
{FNAME("separateStack") SEQ, 2, 4, 5, SKIP | EXT | OPT, 0, NULL},
|
{FNAME("separateStack") SEQ, 2, 4, 5, DECODE | EXT | OPT,
|
||||||
|
offsetof(OpenLogicalChannelAck, separateStack),
|
||||||
|
_NetworkAccessParameters},
|
||||||
{FNAME("forwardMultiplexAckParameters") CHOICE, 0, 1, 1,
|
{FNAME("forwardMultiplexAckParameters") CHOICE, 0, 1, 1,
|
||||||
DECODE | EXT | OPT, offsetof(OpenLogicalChannelAck,
|
DECODE | EXT | OPT, offsetof(OpenLogicalChannelAck,
|
||||||
forwardMultiplexAckParameters),
|
forwardMultiplexAckParameters),
|
||||||
|
|
|
@ -169,8 +169,8 @@ static inline int qdisc_restart(struct net_device *dev)
|
||||||
else
|
else
|
||||||
q->ops->requeue(skb, q);
|
q->ops->requeue(skb, q);
|
||||||
netif_schedule(dev);
|
netif_schedule(dev);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
BUG_ON((int) q->q.qlen < 0);
|
BUG_ON((int) q->q.qlen < 0);
|
||||||
|
|
|
@ -976,8 +976,9 @@ static struct sk_buff *htb_dequeue(struct Qdisc *sch)
|
||||||
|
|
||||||
if (q->now >= q->near_ev_cache[level]) {
|
if (q->now >= q->near_ev_cache[level]) {
|
||||||
event = htb_do_events(q, level);
|
event = htb_do_events(q, level);
|
||||||
q->near_ev_cache[level] = event ? event :
|
if (!event)
|
||||||
PSCHED_TICKS_PER_SEC;
|
event = q->now + PSCHED_TICKS_PER_SEC;
|
||||||
|
q->near_ev_cache[level] = event;
|
||||||
} else
|
} else
|
||||||
event = q->near_ev_cache[level];
|
event = q->near_ev_cache[level];
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,9 @@
|
||||||
# SCTP configuration
|
# SCTP configuration
|
||||||
#
|
#
|
||||||
|
|
||||||
menu "SCTP Configuration (EXPERIMENTAL)"
|
menuconfig IP_SCTP
|
||||||
depends on INET && EXPERIMENTAL
|
|
||||||
|
|
||||||
config IP_SCTP
|
|
||||||
tristate "The SCTP Protocol (EXPERIMENTAL)"
|
tristate "The SCTP Protocol (EXPERIMENTAL)"
|
||||||
|
depends on INET && EXPERIMENTAL
|
||||||
depends on IPV6 || IPV6=n
|
depends on IPV6 || IPV6=n
|
||||||
select CRYPTO if SCTP_HMAC_SHA1 || SCTP_HMAC_MD5
|
select CRYPTO if SCTP_HMAC_SHA1 || SCTP_HMAC_MD5
|
||||||
select CRYPTO_HMAC if SCTP_HMAC_SHA1 || SCTP_HMAC_MD5
|
select CRYPTO_HMAC if SCTP_HMAC_SHA1 || SCTP_HMAC_MD5
|
||||||
|
@ -36,9 +34,10 @@ config IP_SCTP
|
||||||
|
|
||||||
If in doubt, say N.
|
If in doubt, say N.
|
||||||
|
|
||||||
|
if IP_SCTP
|
||||||
|
|
||||||
config SCTP_DBG_MSG
|
config SCTP_DBG_MSG
|
||||||
bool "SCTP: Debug messages"
|
bool "SCTP: Debug messages"
|
||||||
depends on IP_SCTP
|
|
||||||
help
|
help
|
||||||
If you say Y, this will enable verbose debugging messages.
|
If you say Y, this will enable verbose debugging messages.
|
||||||
|
|
||||||
|
@ -47,7 +46,6 @@ config SCTP_DBG_MSG
|
||||||
|
|
||||||
config SCTP_DBG_OBJCNT
|
config SCTP_DBG_OBJCNT
|
||||||
bool "SCTP: Debug object counts"
|
bool "SCTP: Debug object counts"
|
||||||
depends on IP_SCTP
|
|
||||||
help
|
help
|
||||||
If you say Y, this will enable debugging support for counting the
|
If you say Y, this will enable debugging support for counting the
|
||||||
type of objects that are currently allocated. This is useful for
|
type of objects that are currently allocated. This is useful for
|
||||||
|
@ -59,7 +57,6 @@ config SCTP_DBG_OBJCNT
|
||||||
|
|
||||||
choice
|
choice
|
||||||
prompt "SCTP: Cookie HMAC Algorithm"
|
prompt "SCTP: Cookie HMAC Algorithm"
|
||||||
depends on IP_SCTP
|
|
||||||
default SCTP_HMAC_MD5
|
default SCTP_HMAC_MD5
|
||||||
help
|
help
|
||||||
HMAC algorithm to be used during association initialization. It
|
HMAC algorithm to be used during association initialization. It
|
||||||
|
@ -86,4 +83,5 @@ config SCTP_HMAC_MD5
|
||||||
advised to use either HMAC-MD5 or HMAC-SHA1.
|
advised to use either HMAC-MD5 or HMAC-SHA1.
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
endmenu
|
|
||||||
|
endif # IP_SCTP
|
||||||
|
|
|
@ -2,11 +2,9 @@
|
||||||
# TIPC configuration
|
# TIPC configuration
|
||||||
#
|
#
|
||||||
|
|
||||||
menu "TIPC Configuration (EXPERIMENTAL)"
|
menuconfig TIPC
|
||||||
depends on INET && EXPERIMENTAL
|
|
||||||
|
|
||||||
config TIPC
|
|
||||||
tristate "The TIPC Protocol (EXPERIMENTAL)"
|
tristate "The TIPC Protocol (EXPERIMENTAL)"
|
||||||
|
depends on INET && EXPERIMENTAL
|
||||||
---help---
|
---help---
|
||||||
The Transparent Inter Process Communication (TIPC) protocol is
|
The Transparent Inter Process Communication (TIPC) protocol is
|
||||||
specially designed for intra cluster communication. This protocol
|
specially designed for intra cluster communication. This protocol
|
||||||
|
@ -22,9 +20,10 @@ config TIPC
|
||||||
|
|
||||||
If in doubt, say N.
|
If in doubt, say N.
|
||||||
|
|
||||||
|
if TIPC
|
||||||
|
|
||||||
config TIPC_ADVANCED
|
config TIPC_ADVANCED
|
||||||
bool "TIPC: Advanced configuration"
|
bool "TIPC: Advanced configuration"
|
||||||
depends on TIPC
|
|
||||||
default n
|
default n
|
||||||
help
|
help
|
||||||
Saying Y here will open some advanced configuration
|
Saying Y here will open some advanced configuration
|
||||||
|
@ -33,7 +32,7 @@ config TIPC_ADVANCED
|
||||||
|
|
||||||
config TIPC_ZONES
|
config TIPC_ZONES
|
||||||
int "Maximum number of zones in network"
|
int "Maximum number of zones in network"
|
||||||
depends on TIPC && TIPC_ADVANCED
|
depends on TIPC_ADVANCED
|
||||||
default "3"
|
default "3"
|
||||||
help
|
help
|
||||||
Max number of zones inside TIPC network. Max supported value
|
Max number of zones inside TIPC network. Max supported value
|
||||||
|
@ -44,7 +43,7 @@ config TIPC_ZONES
|
||||||
|
|
||||||
config TIPC_CLUSTERS
|
config TIPC_CLUSTERS
|
||||||
int "Maximum number of clusters in a zone"
|
int "Maximum number of clusters in a zone"
|
||||||
depends on TIPC && TIPC_ADVANCED
|
depends on TIPC_ADVANCED
|
||||||
default "1"
|
default "1"
|
||||||
help
|
help
|
||||||
***Only 1 (one cluster in a zone) is supported by current code.
|
***Only 1 (one cluster in a zone) is supported by current code.
|
||||||
|
@ -59,7 +58,7 @@ config TIPC_CLUSTERS
|
||||||
|
|
||||||
config TIPC_NODES
|
config TIPC_NODES
|
||||||
int "Maximum number of nodes in cluster"
|
int "Maximum number of nodes in cluster"
|
||||||
depends on TIPC && TIPC_ADVANCED
|
depends on TIPC_ADVANCED
|
||||||
default "255"
|
default "255"
|
||||||
help
|
help
|
||||||
Maximum number of nodes inside a TIPC cluster. Maximum
|
Maximum number of nodes inside a TIPC cluster. Maximum
|
||||||
|
@ -70,7 +69,7 @@ config TIPC_NODES
|
||||||
|
|
||||||
config TIPC_SLAVE_NODES
|
config TIPC_SLAVE_NODES
|
||||||
int "Maximum number of slave nodes in cluster"
|
int "Maximum number of slave nodes in cluster"
|
||||||
depends on TIPC && TIPC_ADVANCED
|
depends on TIPC_ADVANCED
|
||||||
default "0"
|
default "0"
|
||||||
help
|
help
|
||||||
***This capability is not supported by current code.***
|
***This capability is not supported by current code.***
|
||||||
|
@ -83,7 +82,7 @@ config TIPC_SLAVE_NODES
|
||||||
|
|
||||||
config TIPC_PORTS
|
config TIPC_PORTS
|
||||||
int "Maximum number of ports in a node"
|
int "Maximum number of ports in a node"
|
||||||
depends on TIPC && TIPC_ADVANCED
|
depends on TIPC_ADVANCED
|
||||||
default "8191"
|
default "8191"
|
||||||
help
|
help
|
||||||
Maximum number of ports within a node. Maximum
|
Maximum number of ports within a node. Maximum
|
||||||
|
@ -94,7 +93,7 @@ config TIPC_PORTS
|
||||||
|
|
||||||
config TIPC_LOG
|
config TIPC_LOG
|
||||||
int "Size of log buffer"
|
int "Size of log buffer"
|
||||||
depends on TIPC && TIPC_ADVANCED
|
depends on TIPC_ADVANCED
|
||||||
default 0
|
default 0
|
||||||
help
|
help
|
||||||
Size (in bytes) of TIPC's internal log buffer, which records the
|
Size (in bytes) of TIPC's internal log buffer, which records the
|
||||||
|
@ -106,7 +105,6 @@ config TIPC_LOG
|
||||||
|
|
||||||
config TIPC_DEBUG
|
config TIPC_DEBUG
|
||||||
bool "Enable debugging support"
|
bool "Enable debugging support"
|
||||||
depends on TIPC
|
|
||||||
default n
|
default n
|
||||||
help
|
help
|
||||||
This will enable debugging of TIPC.
|
This will enable debugging of TIPC.
|
||||||
|
@ -114,4 +112,4 @@ config TIPC_DEBUG
|
||||||
Only say Y here if you are having trouble with TIPC. It will
|
Only say Y here if you are having trouble with TIPC. It will
|
||||||
enable the display of detailed information about what is going on.
|
enable the display of detailed information about what is going on.
|
||||||
|
|
||||||
endmenu
|
endif # TIPC
|
||||||
|
|
|
@ -120,18 +120,20 @@ static int recv_msg(struct sk_buff *buf, struct net_device *dev,
|
||||||
|
|
||||||
static int enable_bearer(struct tipc_bearer *tb_ptr)
|
static int enable_bearer(struct tipc_bearer *tb_ptr)
|
||||||
{
|
{
|
||||||
struct net_device *dev, *pdev;
|
struct net_device *dev = NULL;
|
||||||
|
struct net_device *pdev = NULL;
|
||||||
struct eth_bearer *eb_ptr = ð_bearers[0];
|
struct eth_bearer *eb_ptr = ð_bearers[0];
|
||||||
struct eth_bearer *stop = ð_bearers[MAX_ETH_BEARERS];
|
struct eth_bearer *stop = ð_bearers[MAX_ETH_BEARERS];
|
||||||
char *driver_name = strchr((const char *)tb_ptr->name, ':') + 1;
|
char *driver_name = strchr((const char *)tb_ptr->name, ':') + 1;
|
||||||
|
|
||||||
/* Find device with specified name */
|
/* Find device with specified name */
|
||||||
dev = NULL;
|
|
||||||
for_each_netdev(pdev)
|
for_each_netdev(pdev){
|
||||||
if (!strncmp(dev->name, driver_name, IFNAMSIZ)) {
|
if (!strncmp(pdev->name, driver_name, IFNAMSIZ)) {
|
||||||
dev = pdev;
|
dev = pdev;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,8 @@
|
||||||
|
|
||||||
#include "xfrm_hash.h"
|
#include "xfrm_hash.h"
|
||||||
|
|
||||||
|
int sysctl_xfrm_larval_drop;
|
||||||
|
|
||||||
DEFINE_MUTEX(xfrm_cfg_mutex);
|
DEFINE_MUTEX(xfrm_cfg_mutex);
|
||||||
EXPORT_SYMBOL(xfrm_cfg_mutex);
|
EXPORT_SYMBOL(xfrm_cfg_mutex);
|
||||||
|
|
||||||
|
@ -1390,8 +1392,8 @@ static int stale_bundle(struct dst_entry *dst);
|
||||||
* At the moment we eat a raw IP route. Mostly to speed up lookups
|
* At the moment we eat a raw IP route. Mostly to speed up lookups
|
||||||
* on interfaces with disabled IPsec.
|
* on interfaces with disabled IPsec.
|
||||||
*/
|
*/
|
||||||
int xfrm_lookup(struct dst_entry **dst_p, struct flowi *fl,
|
int __xfrm_lookup(struct dst_entry **dst_p, struct flowi *fl,
|
||||||
struct sock *sk, int flags)
|
struct sock *sk, int flags)
|
||||||
{
|
{
|
||||||
struct xfrm_policy *policy;
|
struct xfrm_policy *policy;
|
||||||
struct xfrm_policy *pols[XFRM_POLICY_TYPE_MAX];
|
struct xfrm_policy *pols[XFRM_POLICY_TYPE_MAX];
|
||||||
|
@ -1509,6 +1511,13 @@ int xfrm_lookup(struct dst_entry **dst_p, struct flowi *fl,
|
||||||
|
|
||||||
if (unlikely(nx<0)) {
|
if (unlikely(nx<0)) {
|
||||||
err = nx;
|
err = nx;
|
||||||
|
if (err == -EAGAIN && sysctl_xfrm_larval_drop) {
|
||||||
|
/* EREMOTE tells the caller to generate
|
||||||
|
* a one-shot blackhole route.
|
||||||
|
*/
|
||||||
|
xfrm_pol_put(policy);
|
||||||
|
return -EREMOTE;
|
||||||
|
}
|
||||||
if (err == -EAGAIN && flags) {
|
if (err == -EAGAIN && flags) {
|
||||||
DECLARE_WAITQUEUE(wait, current);
|
DECLARE_WAITQUEUE(wait, current);
|
||||||
|
|
||||||
|
@ -1598,6 +1607,21 @@ int xfrm_lookup(struct dst_entry **dst_p, struct flowi *fl,
|
||||||
*dst_p = NULL;
|
*dst_p = NULL;
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(__xfrm_lookup);
|
||||||
|
|
||||||
|
int xfrm_lookup(struct dst_entry **dst_p, struct flowi *fl,
|
||||||
|
struct sock *sk, int flags)
|
||||||
|
{
|
||||||
|
int err = __xfrm_lookup(dst_p, fl, sk, flags);
|
||||||
|
|
||||||
|
if (err == -EREMOTE) {
|
||||||
|
dst_release(*dst_p);
|
||||||
|
*dst_p = NULL;
|
||||||
|
err = -EAGAIN;
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
EXPORT_SYMBOL(xfrm_lookup);
|
EXPORT_SYMBOL(xfrm_lookup);
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
|
|
Loading…
Reference in a new issue