Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
1780a902
Commit
1780a902
authored
Jun 19, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
http://linux-acpi.bkbits.net/linux-acpi
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
d7374b3f
13cb21df
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
84 additions
and
173 deletions
+84
-173
drivers/net/amd8111e.c
drivers/net/amd8111e.c
+7
-5
drivers/net/bonding/bond_main.c
drivers/net/bonding/bond_main.c
+7
-81
drivers/net/ixgb/ixgb_ethtool.c
drivers/net/ixgb/ixgb_ethtool.c
+0
-1
drivers/net/pcmcia/xirc2ps_cs.c
drivers/net/pcmcia/xirc2ps_cs.c
+37
-52
drivers/net/pcnet32.c
drivers/net/pcnet32.c
+1
-1
drivers/net/ppp_async.c
drivers/net/ppp_async.c
+1
-3
drivers/net/sis900.c
drivers/net/sis900.c
+1
-0
drivers/net/tulip/Kconfig
drivers/net/tulip/Kconfig
+1
-1
net/core/flow.c
net/core/flow.c
+8
-5
net/ipv4/arp.c
net/ipv4/arp.c
+9
-8
net/ipv4/netfilter/arp_tables.c
net/ipv4/netfilter/arp_tables.c
+6
-3
net/ipv6/icmp.c
net/ipv6/icmp.c
+0
-6
net/ipv6/ndisc.c
net/ipv6/ndisc.c
+6
-7
No files found.
drivers/net/amd8111e.c
View file @
1780a902
...
...
@@ -53,6 +53,8 @@ Revision History:
2. Bug fix: Fixed VLAN support failure.
3. Bug fix: Fixed receive interrupt coalescing bug.
4. Dynamic IPG support is disabled by default.
3.0.3 06/05/2003
1. Bug fix: Fixed failure to close the interface if SMP is enabled.
*/
...
...
@@ -89,9 +91,9 @@ Revision History:
#include "amd8111e.h"
#define MODULE_NAME "amd8111e"
#define MODULE_VERSION "3.0.
2
"
#define MODULE_VERSION "3.0.
3
"
MODULE_AUTHOR
(
"Advanced Micro Devices, Inc."
);
MODULE_DESCRIPTION
(
"AMD8111 based 10/100 Ethernet Controller. Driver Version 3.0.
2
"
);
MODULE_DESCRIPTION
(
"AMD8111 based 10/100 Ethernet Controller. Driver Version 3.0.
3
"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_PARM
(
speed_duplex
,
"1-"
__MODULE_STRING
(
MAX_UNITS
)
"i"
);
MODULE_PARM_DESC
(
speed_duplex
,
"Set device speed and duplex modes, 0: Auto Negotitate, 1: 10Mbps Half Duplex, 2: 10Mbps Full Duplex, 3: 100Mbps Half Duplex, 4: 100Mbps Full Duplex"
);
...
...
@@ -1171,11 +1173,11 @@ static int amd8111e_close(struct net_device * dev)
if
(
lp
->
options
&
OPTION_DYN_IPG_ENABLE
)
del_timer_sync
(
&
lp
->
ipg_data
.
ipg_timer
);
/* Update the statistics before closing */
amd8111e_get_stats
(
dev
);
spin_unlock_irq
(
&
lp
->
lock
);
free_irq
(
dev
->
irq
,
dev
);
/* Update the statistics before closing */
amd8111e_get_stats
(
dev
);
lp
->
opened
=
0
;
return
0
;
}
...
...
drivers/net/bonding/bond_main.c
View file @
1780a902
...
...
@@ -390,6 +390,7 @@
#include <linux/timer.h>
#include <linux/socket.h>
#include <linux/ctype.h>
#include <linux/inet.h>
#include <asm/system.h>
#include <asm/bitops.h>
#include <asm/io.h>
...
...
@@ -2792,84 +2793,6 @@ static void activebackup_arp_monitor(struct net_device *master)
mod_timer
(
&
bond
->
arp_timer
,
next_timer
);
}
typedef
uint32_t
in_addr_t
;
int
my_inet_aton
(
char
*
cp
,
unsigned
long
*
the_addr
)
{
static
const
in_addr_t
max
[
4
]
=
{
0xffffffff
,
0xffffff
,
0xffff
,
0xff
};
in_addr_t
val
;
char
c
;
union
iaddr
{
uint8_t
bytes
[
4
];
uint32_t
word
;
}
res
;
uint8_t
*
pp
=
res
.
bytes
;
int
digit
,
base
;
res
.
word
=
0
;
c
=
*
cp
;
for
(;;)
{
/*
* Collect number up to ``.''.
* Values are specified as for C:
* 0x=hex, 0=octal, isdigit=decimal.
*/
if
(
!
isdigit
(
c
))
goto
ret_0
;
val
=
0
;
base
=
10
;
digit
=
0
;
for
(;;)
{
if
(
isdigit
(
c
))
{
val
=
(
val
*
base
)
+
(
c
-
'0'
);
c
=
*++
cp
;
digit
=
1
;
}
else
{
break
;
}
}
if
(
c
==
'.'
)
{
/*
* Internet format:
* a.b.c.d
* a.b.c (with c treated as 16 bits)
* a.b (with b treated as 24 bits)
*/
if
(
pp
>
res
.
bytes
+
2
||
val
>
0xff
)
{
goto
ret_0
;
}
*
pp
++
=
val
;
c
=
*++
cp
;
}
else
break
;
}
/*
* Check for trailing characters.
*/
if
(
c
!=
'\0'
&&
(
!
isascii
(
c
)
||
!
isspace
(
c
)))
{
goto
ret_0
;
}
/*
* Did we get a valid digit?
*/
if
(
!
digit
)
{
goto
ret_0
;
}
/* Check whether the last part is in its limits depending on
the number of parts in total. */
if
(
val
>
max
[
pp
-
res
.
bytes
])
{
goto
ret_0
;
}
if
(
the_addr
!=
NULL
)
{
*
the_addr
=
res
.
word
|
htonl
(
val
);
}
return
(
1
);
ret_0:
return
(
0
);
}
static
int
bond_sethwaddr
(
struct
net_device
*
master
,
struct
net_device
*
slave
)
{
#ifdef BONDING_DEBUG
...
...
@@ -3877,15 +3800,18 @@ static int __init bonding_init(void)
for
(
arp_ip_count
=
0
;
(
arp_ip_count
<
MAX_ARP_IP_TARGETS
)
&&
arp_ip_target
[
arp_ip_count
];
arp_ip_count
++
)
{
/* TODO: check and log bad ip address */
if
(
my_inet_aton
(
arp_ip_target
[
arp_ip_count
],
&
arp_target
[
arp_ip_count
])
==
0
)
{
/* not complete check, but should be good enough to
catch mistakes */
if
(
!
isdigit
(
arp_ip_target
[
arp_ip_count
][
0
]))
{
printk
(
KERN_WARNING
"bonding_init(): bad arp_ip_target module "
"parameter (%s), ARP monitoring will not be "
"performed
\n
"
,
arp_ip_target
[
arp_ip_count
]);
arp_interval
=
0
;
}
else
{
u32
ip
=
in_aton
(
arp_ip_target
[
arp_ip_count
]);
*
(
u32
*
)(
arp_ip_target
[
arp_ip_count
])
=
ip
;
}
}
...
...
drivers/net/ixgb/ixgb_ethtool.c
View file @
1780a902
...
...
@@ -50,7 +50,6 @@ ixgb_eeprom_size(struct ixgb_hw *hw)
return
(
IXGB_EEPROM_SIZE
<<
1
);
}
#define SUPPORTED_10000baseT_Full (1 << 11)
#define SPEED_10000 10000
static
void
...
...
drivers/net/pcmcia/xirc2ps_cs.c
View file @
1780a902
...
...
@@ -358,7 +358,6 @@ static dev_link_t *dev_list;
typedef
struct
local_info_t
{
dev_link_t
link
;
struct
net_device
dev
;
dev_node_t
node
;
struct
net_device_stats
stats
;
int
card_type
;
...
...
@@ -432,22 +431,10 @@ get_tuple(int fn, client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
#define PutByte(reg,value) outb((value), ioaddr+(reg))
#define PutWord(reg,value) outw((value), ioaddr+(reg))
static
void
busy_loop
(
u_long
len
)
{
if
(
in_interrupt
())
{
u_long
timeout
=
jiffies
+
len
;
u_long
flags
;
save_flags
(
flags
);
sti
();
while
(
time_before_eq
(
jiffies
,
timeout
))
;
restore_flags
(
flags
);
}
else
{
__set_current_state
(
TASK_UNINTERRUPTIBLE
);
schedule_timeout
(
len
);
}
}
#define Wait(n) do { \
set_current_state(TASK_UNINTERRUPTIBLE); \
schedule_timeout(n); \
} while (0)
/*====== Functions used for debugging =================================*/
#if defined(PCMCIA_DEBUG) && 0
/* reading regs may change system status */
...
...
@@ -619,11 +606,12 @@ xirc2ps_attach(void)
flush_stale_links
();
/* Allocate the device structure */
local
=
kmalloc
(
sizeof
(
*
local
),
GFP_KERNEL
);
if
(
!
local
)
return
NULL
;
memset
(
local
,
0
,
sizeof
(
*
local
));
link
=
&
local
->
link
;
dev
=
&
local
->
dev
;
link
->
priv
=
dev
->
priv
=
local
;
dev
=
alloc_etherdev
(
sizeof
(
local_info_t
));
if
(
!
dev
)
return
NULL
;
local
=
dev
->
priv
;
link
=
&
local
->
link
;
link
->
priv
=
dev
;
init_timer
(
&
link
->
release
);
link
->
release
.
function
=
&
xirc2ps_release
;
...
...
@@ -645,7 +633,6 @@ xirc2ps_attach(void)
dev
->
get_stats
=
&
do_get_stats
;
dev
->
do_ioctl
=
&
do_ioctl
;
dev
->
set_multicast_list
=
&
set_multicast_list
;
ether_setup
(
dev
);
dev
->
open
=
&
do_open
;
dev
->
stop
=
&
do_stop
;
#ifdef HAVE_TX_TIMEOUT
...
...
@@ -684,7 +671,7 @@ xirc2ps_attach(void)
static
void
xirc2ps_detach
(
dev_link_t
*
link
)
{
local_info_t
*
local
=
link
->
priv
;
struct
net_device
*
dev
=
link
->
priv
;
dev_link_t
**
linkp
;
DEBUG
(
0
,
"detach(0x%p)
\n
"
,
link
);
...
...
@@ -706,11 +693,12 @@ xirc2ps_detach(dev_link_t * link)
*/
del_timer
(
&
link
->
release
);
if
(
link
->
state
&
DEV_CONFIG
)
{
DEBUG
(
0
,
"detach postponed, '%s' still locked
\n
"
,
link
->
dev
->
dev_name
);
xirc2ps_release
((
unsigned
long
)
link
);
if
(
link
->
state
&
DEV_STALE_CONFIG
)
{
link
->
state
|=
DEV_STALE_LINK
;
return
;
}
}
/* Break the link with Card Services */
if
(
link
->
handle
)
...
...
@@ -719,8 +707,8 @@ xirc2ps_detach(dev_link_t * link)
/* Unlink device structure, free it */
*
linkp
=
link
->
next
;
if
(
link
->
dev
)
unregister_netdev
(
&
local
->
dev
);
kfree
(
local
);
unregister_netdev
(
dev
);
kfree
(
dev
);
}
/* xirc2ps_detach */
...
...
@@ -745,7 +733,8 @@ xirc2ps_detach(dev_link_t * link)
static
int
set_card_type
(
dev_link_t
*
link
,
const
void
*
s
)
{
local_info_t
*
local
=
link
->
priv
;
struct
net_device
*
dev
=
link
->
priv
;
local_info_t
*
local
=
dev
->
priv
;
#ifdef PCMCIA_DEBUG
unsigned
cisrev
=
((
const
unsigned
char
*
)
s
)[
2
];
#endif
...
...
@@ -839,8 +828,8 @@ static void
xirc2ps_config
(
dev_link_t
*
link
)
{
client_handle_t
handle
=
link
->
handle
;
local_info_t
*
local
=
link
->
priv
;
struct
net_device
*
dev
=
&
local
->
de
v
;
struct
net_device
*
dev
=
link
->
priv
;
local_info_t
*
local
=
dev
->
pri
v
;
tuple_t
tuple
;
cisparse_t
parse
;
ioaddr_t
ioaddr
;
...
...
@@ -1195,11 +1184,10 @@ static void
xirc2ps_release
(
u_long
arg
)
{
dev_link_t
*
link
=
(
dev_link_t
*
)
arg
;
local_info_t
*
local
=
link
->
priv
;
struct
net_device
*
dev
=
&
local
->
dev
;
DEBUG
(
0
,
"release(0x%p)
\n
"
,
link
);
#if 0
/*
* If the device is currently in use, we won't release until it
* is actually closed.
...
...
@@ -1210,8 +1198,10 @@ xirc2ps_release(u_long arg)
link->state |= DEV_STALE_CONFIG;
return;
}
#endif
if
(
link
->
win
)
{
struct
net_device
*
dev
=
link
->
priv
;
local_info_t
*
local
=
dev
->
priv
;
if
(
local
->
dingo
)
iounmap
(
local
->
dingo_ccr
-
0x0800
);
...
...
@@ -1243,8 +1233,7 @@ xirc2ps_event(event_t event, int priority,
event_callback_args_t
*
args
)
{
dev_link_t
*
link
=
args
->
client_data
;
local_info_t
*
lp
=
link
->
priv
;
struct
net_device
*
dev
=
&
lp
->
dev
;
struct
net_device
*
dev
=
link
->
priv
;
DEBUG
(
0
,
"event(%d)
\n
"
,
(
int
)
event
);
...
...
@@ -1779,12 +1768,12 @@ hardreset(struct net_device *dev)
SelectPage
(
4
);
udelay
(
1
);
PutByte
(
XIRCREG4_GPR1
,
0
);
/* clear bit 0: power down */
busy_loop
(
HZ
/
25
);
/* wait 40 msec */
Wait
(
HZ
/
25
);
/* wait 40 msec */
if
(
local
->
mohawk
)
PutByte
(
XIRCREG4_GPR1
,
1
);
/* set bit 0: power up */
else
PutByte
(
XIRCREG4_GPR1
,
1
|
4
);
/* set bit 0: power up, bit 2: AIC */
busy_loop
(
HZ
/
50
);
/* wait 20 msec */
Wait
(
HZ
/
50
);
/* wait 20 msec */
}
static
void
...
...
@@ -1798,9 +1787,9 @@ do_reset(struct net_device *dev, int full)
hardreset
(
dev
);
PutByte
(
XIRCREG_CR
,
SoftReset
);
/* set */
busy_loop
(
HZ
/
50
);
/* wait 20 msec */
Wait
(
HZ
/
50
);
/* wait 20 msec */
PutByte
(
XIRCREG_CR
,
0
);
/* clear */
busy_loop
(
HZ
/
25
);
/* wait 40 msec */
Wait
(
HZ
/
25
);
/* wait 40 msec */
if
(
local
->
mohawk
)
{
SelectPage
(
4
);
/* set pin GP1 and GP2 to output (0x0c)
...
...
@@ -1811,7 +1800,7 @@ do_reset(struct net_device *dev, int full)
}
/* give the circuits some time to power up */
busy_loop
(
HZ
/
2
);
/* about 500ms */
Wait
(
HZ
/
2
);
/* about 500ms */
local
->
last_ptr_value
=
0
;
local
->
silicon
=
local
->
mohawk
?
(
GetByte
(
XIRCREG4_BOV
)
&
0x70
)
>>
4
...
...
@@ -1830,7 +1819,7 @@ do_reset(struct net_device *dev, int full)
SelectPage
(
0x42
);
PutByte
(
XIRCREG42_SWC1
,
0x80
);
}
busy_loop
(
HZ
/
25
);
/* wait 40 msec to let it complete */
Wait
(
HZ
/
25
);
/* wait 40 msec to let it complete */
#ifdef PCMCIA_DEBUG
if
(
pc_debug
)
{
...
...
@@ -1889,7 +1878,7 @@ do_reset(struct net_device *dev, int full)
printk
(
KERN_INFO
"%s: MII selected
\n
"
,
dev
->
name
);
SelectPage
(
2
);
PutByte
(
XIRCREG2_MSR
,
GetByte
(
XIRCREG2_MSR
)
|
0x08
);
busy_loop
(
HZ
/
50
);
Wait
(
HZ
/
50
);
}
else
{
printk
(
KERN_INFO
"%s: MII detected; using 10mbs
\n
"
,
dev
->
name
);
...
...
@@ -1898,7 +1887,7 @@ do_reset(struct net_device *dev, int full)
PutByte
(
XIRCREG42_SWC1
,
0xC0
);
else
/* enable 10BaseT */
PutByte
(
XIRCREG42_SWC1
,
0x80
);
busy_loop
(
HZ
/
25
);
/* wait 40 msec to let it complete */
Wait
(
HZ
/
25
);
/* wait 40 msec to let it complete */
}
if
(
full_duplex
)
PutByte
(
XIRCREG1_ECR
,
GetByte
(
XIRCREG1_ECR
|
FullDuplex
));
...
...
@@ -1991,7 +1980,7 @@ init_mii(struct net_device *dev)
* Fixme: Better to use a timer here!
*/
for
(
i
=
0
;
i
<
35
;
i
++
)
{
busy_loop
(
HZ
/
10
);
/* wait 100 msec */
Wait
(
HZ
/
10
);
/* wait 100 msec */
status
=
mii_rd
(
ioaddr
,
0
,
1
);
if
((
status
&
0x0020
)
&&
(
status
&
0x0004
))
break
;
...
...
@@ -2083,12 +2072,8 @@ exit_xirc2ps_cs(void)
{
pcmcia_unregister_driver
(
&
xirc2ps_cs_driver
);
while
(
dev_list
)
{
if
(
dev_list
->
state
&
DEV_CONFIG
)
xirc2ps_release
((
u_long
)
dev_list
);
if
(
dev_list
)
/* xirc2ps_release() might already have detached... */
while
(
dev_list
)
xirc2ps_detach
(
dev_list
);
}
}
module_init
(
init_xirc2ps_cs
);
...
...
drivers/net/pcnet32.c
View file @
1780a902
...
...
@@ -1003,7 +1003,7 @@ pcnet32_init_ring(struct net_device *dev)
skb_reserve
(
rx_skbuff
,
2
);
}
if
(
lp
->
rx_dma_addr
[
i
]
==
NULL
)
if
(
lp
->
rx_dma_addr
[
i
]
==
0
)
lp
->
rx_dma_addr
[
i
]
=
pci_map_single
(
lp
->
pci_dev
,
rx_skbuff
->
tail
,
rx_skbuff
->
len
,
PCI_DMA_FROMDEVICE
);
lp
->
rx_ring
[
i
].
base
=
(
u32
)
le32_to_cpu
(
lp
->
rx_dma_addr
[
i
]);
lp
->
rx_ring
[
i
].
buf_length
=
le16_to_cpu
(
-
PKT_BUF_SZ
);
...
...
drivers/net/ppp_async.c
View file @
1780a902
...
...
@@ -147,7 +147,6 @@ ppp_asynctty_open(struct tty_struct *tty)
struct
asyncppp
*
ap
;
int
err
;
MOD_INC_USE_COUNT
;
err
=
-
ENOMEM
;
ap
=
kmalloc
(
sizeof
(
*
ap
),
GFP_KERNEL
);
if
(
ap
==
0
)
...
...
@@ -183,7 +182,6 @@ ppp_asynctty_open(struct tty_struct *tty)
out_free:
kfree
(
ap
);
out:
MOD_DEC_USE_COUNT
;
return
err
;
}
...
...
@@ -223,7 +221,6 @@ ppp_asynctty_close(struct tty_struct *tty)
if
(
ap
->
tpkt
!=
0
)
kfree_skb
(
ap
->
tpkt
);
kfree
(
ap
);
MOD_DEC_USE_COUNT
;
}
/*
...
...
@@ -351,6 +348,7 @@ ppp_asynctty_wakeup(struct tty_struct *tty)
static
struct
tty_ldisc
ppp_ldisc
=
{
.
owner
=
THIS_MODULE
,
.
magic
=
TTY_LDISC_MAGIC
,
.
name
=
"ppp"
,
.
open
=
ppp_asynctty_open
,
...
...
drivers/net/sis900.c
View file @
1780a902
...
...
@@ -124,6 +124,7 @@ static struct mii_chip_info {
{
"ICS LAN PHY"
,
0x0015
,
0xF440
,
LAN
},
{
"NS 83851 PHY"
,
0x2000
,
0x5C20
,
MIX
},
{
"Realtek RTL8201 PHY"
,
0x0000
,
0x8200
,
LAN
},
{
"VIA 6103 PHY"
,
0x0101
,
0x8f20
,
LAN
},
{
0
,},
};
...
...
drivers/net/tulip/Kconfig
View file @
1780a902
...
...
@@ -37,7 +37,7 @@ config TULIP
---help---
This driver is developed for the SMC EtherPower series Ethernet
cards and also works with cards based on the DECchip
21
040/21041/21
140 (Tulip series) chips. Some LinkSys PCI cards are
21140 (Tulip series) chips. Some LinkSys PCI cards are
of this type. (If your card is NOT SMC EtherPower 10/100 PCI
(smc9332dst), you can also try the driver for "Generic DECchip"
cards, above. However, most people with a network card of this type
...
...
net/core/flow.c
View file @
1780a902
...
...
@@ -388,10 +388,13 @@ static int __init flow_cache_init(void)
add_timer
(
&
flow_hash_rnd_timer
);
register_cpu_notifier
(
&
flow_cache_cpu_nb
);
for
(
i
=
0
;
i
<
NR_CPUS
;
i
++
)
if
(
cpu_online
(
i
))
{
flow_cache_cpu_prepare
(
i
);
flow_cache_cpu_online
(
i
);
for
(
i
=
0
;
i
<
NR_CPUS
;
i
++
)
{
if
(
!
cpu_online
(
i
))
continue
;
if
(
flow_cache_cpu_prepare
(
i
)
==
NOTIFY_OK
&&
flow_cache_cpu_online
(
i
)
==
NOTIFY_OK
)
continue
;
panic
(
"NET: failed to initialise flow cache hash table
\n
"
);
}
return
0
;
...
...
net/ipv4/arp.c
View file @
1780a902
...
...
@@ -623,15 +623,20 @@ int arp_process(struct sk_buff *skb)
int
addr_type
;
struct
neighbour
*
n
;
/* arp_rcv below verifies the ARP header
,
verifies the device
* is ARP'able
, and linearizes the SKB (if needed)
.
/* arp_rcv below verifies the ARP header
and
verifies the device
* is ARP'able.
*/
if
(
in_dev
==
NULL
)
goto
out
;
/* ARP header, plus 2 device addresses, plus 2 IP addresses. */
if
(
!
pskb_may_pull
(
skb
,
(
sizeof
(
struct
arphdr
)
+
(
2
*
dev
->
addr_len
)
+
(
2
*
sizeof
(
u32
)))))
goto
out
;
arp
=
skb
->
nh
.
arph
;
arp_ptr
=
(
unsigned
char
*
)(
arp
+
1
);
switch
(
dev_type
)
{
default:
...
...
@@ -693,6 +698,7 @@ int arp_process(struct sk_buff *skb)
/*
* Extract fields
*/
arp_ptr
=
(
unsigned
char
*
)(
arp
+
1
);
sha
=
arp_ptr
;
arp_ptr
+=
dev
->
addr_len
;
memcpy
(
&
sip
,
arp_ptr
,
4
);
...
...
@@ -841,11 +847,6 @@ int arp_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
if
((
skb
=
skb_share_check
(
skb
,
GFP_ATOMIC
))
==
NULL
)
goto
out_of_mem
;
if
(
skb_is_nonlinear
(
skb
))
{
if
(
skb_linearize
(
skb
,
GFP_ATOMIC
)
!=
0
)
goto
freeskb
;
}
return
NF_HOOK
(
NF_ARP
,
NF_ARP_IN
,
skb
,
dev
,
NULL
,
arp_process
);
freeskb:
...
...
net/ipv4/netfilter/arp_tables.c
View file @
1780a902
...
...
@@ -247,14 +247,16 @@ unsigned int arpt_do_table(struct sk_buff **pskb,
{
static
const
char
nulldevname
[
IFNAMSIZ
]
=
{
0
};
unsigned
int
verdict
=
NF_DROP
;
struct
arphdr
*
arp
=
(
*
pskb
)
->
nh
.
arph
;
struct
arphdr
*
arp
;
int
hotdrop
=
0
;
struct
arpt_entry
*
e
,
*
back
;
const
char
*
indev
,
*
outdev
;
void
*
table_base
;
/* FIXME: Push down to extensions --RR */
if
(
skb_is_nonlinear
(
*
pskb
)
&&
skb_linearize
(
*
pskb
,
GFP_ATOMIC
)
!=
0
)
/* ARP header, plus 2 device addresses, plus 2 IP addresses. */
if
(
!
pskb_may_pull
((
*
pskb
),
(
sizeof
(
struct
arphdr
)
+
(
2
*
(
*
pskb
)
->
dev
->
addr_len
)
+
(
2
*
sizeof
(
u32
)))))
return
NF_DROP
;
indev
=
in
?
in
->
name
:
nulldevname
;
...
...
@@ -267,6 +269,7 @@ unsigned int arpt_do_table(struct sk_buff **pskb,
e
=
get_entry
(
table_base
,
table
->
private
->
hook_entry
[
hook
]);
back
=
get_entry
(
table_base
,
table
->
private
->
underflow
[
hook
]);
arp
=
(
*
pskb
)
->
nh
.
arph
;
do
{
if
(
arp_packet_match
(
arp
,
(
*
pskb
)
->
dev
,
indev
,
outdev
,
&
e
->
arp
))
{
struct
arpt_entry_target
*
t
;
...
...
net/ipv6/icmp.c
View file @
1780a902
...
...
@@ -613,12 +613,6 @@ static int icmpv6_rcv(struct sk_buff **pskb, unsigned int *nhoffp)
case
NDISC_NEIGHBOUR_SOLICITATION
:
case
NDISC_NEIGHBOUR_ADVERTISEMENT
:
case
NDISC_REDIRECT
:
if
(
skb_is_nonlinear
(
skb
)
&&
skb_linearize
(
skb
,
GFP_ATOMIC
)
!=
0
)
{
kfree_skb
(
skb
);
return
0
;
}
ndisc_rcv
(
skb
);
break
;
...
...
net/ipv6/ndisc.c
View file @
1780a902
...
...
@@ -714,12 +714,6 @@ void ndisc_recv_ns(struct sk_buff *skb)
struct
inet6_ifaddr
*
ifp
;
struct
neighbour
*
neigh
;
if
(
skb
->
len
<
sizeof
(
struct
nd_msg
))
{
if
(
net_ratelimit
())
printk
(
KERN_WARNING
"ICMP NS: packet too short
\n
"
);
return
;
}
if
(
ipv6_addr_type
(
&
msg
->
target
)
&
IPV6_ADDR_MULTICAST
)
{
if
(
net_ratelimit
())
printk
(
KERN_WARNING
"ICMP NS: target address is multicast
\n
"
);
...
...
@@ -1410,7 +1404,12 @@ static void pndisc_redo(struct sk_buff *skb)
int
ndisc_rcv
(
struct
sk_buff
*
skb
)
{
struct
nd_msg
*
msg
=
(
struct
nd_msg
*
)
skb
->
h
.
raw
;
struct
nd_msg
*
msg
;
if
(
!
pskb_may_pull
(
skb
,
skb
->
len
))
return
0
;
msg
=
(
struct
nd_msg
*
)
skb
->
h
.
raw
;
__skb_push
(
skb
,
skb
->
data
-
skb
->
h
.
raw
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment