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
038403f6
Commit
038403f6
authored
Jul 13, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/home/davem/BK/net-2.5
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
1fcab22d
282d9b16
Changes
11
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
275 additions
and
596 deletions
+275
-596
drivers/net/bonding.c
drivers/net/bonding.c
+107
-18
drivers/net/sunhme.c
drivers/net/sunhme.c
+1
-1
drivers/net/tg3.c
drivers/net/tg3.c
+111
-506
drivers/net/tg3.h
drivers/net/tg3.h
+1
-42
include/linux/if_vlan.h
include/linux/if_vlan.h
+18
-4
include/linux/netlink.h
include/linux/netlink.h
+8
-0
include/linux/notifier.h
include/linux/notifier.h
+2
-0
include/net/dsfield.h
include/net/dsfield.h
+0
-25
net/core/dst.c
net/core/dst.c
+6
-0
net/netlink/af_netlink.c
net/netlink/af_netlink.c
+19
-0
net/netsyms.c
net/netsyms.c
+2
-0
No files found.
drivers/net/bonding.c
View file @
038403f6
...
...
@@ -176,6 +176,16 @@
* Steve Mead <steve.mead at comdev dot cc>
* - Port Gleb Natapov's multicast support patchs from 2.4.12
* to 2.4.18 adding support for multicast.
*
* 2002/06/17 - Tony Cureington <tony.cureington * hp_com>
* - corrected uninitialized pointer (ifr.ifr_data) in bond_check_dev_link;
* actually changed function to use ETHTOOL, then MIIPHY, and finally
* MIIREG to determine the link status
* - fixed bad ifr_data pointer assignments in bond_ioctl
* - corrected mode 1 being reported as active-backup in bond_get_info;
* also added text to distinguish type of load balancing (rr or xor)
* - change arp_ip_target module param from "1-12s" (array of 12 ptrs)
* to "s" (a single ptr)
*/
#include <linux/config.h>
...
...
@@ -210,6 +220,9 @@
#include <linux/smp.h>
#include <linux/if_ether.h>
#include <linux/if_arp.h>
#include <linux/mii.h>
#include <linux/ethtool.h>
/* monitor all links that often (in milliseconds). <=0 disables monitoring */
#ifndef BOND_LINK_MON_INTERV
...
...
@@ -253,7 +266,7 @@ MODULE_PARM_DESC(miimon, "Link check interval in milliseconds");
MODULE_PARM
(
mode
,
"i"
);
MODULE_PARM
(
arp_interval
,
"i"
);
MODULE_PARM_DESC
(
arp_interval
,
"arp interval in milliseconds"
);
MODULE_PARM
(
arp_ip_target
,
"
1-12
s"
);
MODULE_PARM
(
arp_ip_target
,
"s"
);
MODULE_PARM_DESC
(
arp_ip_target
,
"arp target in n.n.n.n form"
);
MODULE_PARM_DESC
(
mode
,
"Mode of operation : 0 for round robin, 1 for active-backup, 2 for xor"
);
MODULE_PARM
(
updelay
,
"i"
);
...
...
@@ -386,21 +399,51 @@ static u16 bond_check_dev_link(struct net_device *dev)
{
static
int
(
*
ioctl
)(
struct
net_device
*
,
struct
ifreq
*
,
int
);
struct
ifreq
ifr
;
u16
*
data
=
(
u16
*
)
&
ifr
.
ifr_data
;
/* data[0] automagically filled by the ioctl */
data
[
1
]
=
1
;
/* MII location 1 reports Link Status */
struct
mii_ioctl_data
mii
;
struct
ethtool_value
etool
;
if
((
ioctl
=
dev
->
do_ioctl
)
!=
NULL
)
{
/* ioctl to access MII */
/* TODO: set pointer to correct ioctl on a per team member */
/* bases to make this more efficient. that is, once */
/* we determine the correct ioctl, we will always */
/* call it and not the others for that team */
/* member. */
/* try SOICETHTOOL ioctl, some drivers cache ETHTOOL_GLINK */
/* for a period of time; we need to encourage link status */
/* be reported by network drivers in real time; if the */
/* value is cached, the mmimon module parm may have no */
/* effect... */
etool
.
cmd
=
ETHTOOL_GLINK
;
ifr
.
ifr_data
=
(
char
*
)
&
etool
;
if
(
ioctl
(
dev
,
&
ifr
,
SIOCETHTOOL
)
==
0
)
{
if
(
etool
.
data
==
1
)
{
return
(
MII_LINK_READY
);
}
else
{
return
(
0
);
}
}
if
(((
ioctl
=
dev
->
do_ioctl
)
!=
NULL
)
&&
/* ioctl to access MII */
(
ioctl
(
dev
,
&
ifr
,
SIOCGMIIPHY
)
==
0
))
{
/* now, data[3] contains info about link status :
- data[3] & 0x04 means link up
- data[3] & 0x20 means end of auto-negociation
ifr
.
ifr_data
=
(
char
*
)
&
mii
;
/* try MIIPHY first then, if that doesn't work, try MIIREG */
if
(
ioctl
(
dev
,
&
ifr
,
SIOCGMIIPHY
)
==
0
)
{
/* now, mii.phy_id contains info about link status :
- mii.phy_id & 0x04 means link up
- mii.phy_id & 0x20 means end of auto-negociation
*/
return
data
[
3
];
}
else
{
return
MII_LINK_READY
;
/* spoof link up ( we can't check it) */
return
mii
.
phy_id
;
}
mii
.
reg_num
=
1
;
/* the MII register we want to read */
if
(
ioctl
(
dev
,
&
ifr
,
SIOCGMIIREG
)
==
0
)
{
/* mii.val_out contians the same link info as phy_id */
/* above */
return
mii
.
val_out
;
}
}
return
MII_LINK_READY
;
/* spoof link up ( we can't check it) */
}
static
u16
bond_check_mii_link
(
bonding_t
*
bond
)
...
...
@@ -1707,7 +1750,7 @@ static int bond_ioctl(struct net_device *master_dev, struct ifreq *ifr, int cmd)
switch
(
cmd
)
{
case
SIOCGMIIPHY
:
data
=
(
u16
*
)
&
ifr
->
ifr_data
;
data
=
(
u16
*
)
ifr
->
ifr_data
;
if
(
data
==
NULL
)
{
return
-
EINVAL
;
}
...
...
@@ -1718,7 +1761,7 @@ static int bond_ioctl(struct net_device *master_dev, struct ifreq *ifr, int cmd)
* We do this again just in case we were called by SIOCGMIIREG
* instead of SIOCGMIIPHY.
*/
data
=
(
u16
*
)
&
ifr
->
ifr_data
;
data
=
(
u16
*
)
ifr
->
ifr_data
;
if
(
data
==
NULL
)
{
return
-
EINVAL
;
}
...
...
@@ -2035,7 +2078,28 @@ static int bond_get_info(char *buf, char **start, off_t offset, int length)
link
=
bond_check_mii_link
(
bond
);
len
+=
sprintf
(
buf
+
len
,
"Bonding Mode: "
);
len
+=
sprintf
(
buf
+
len
,
"%s
\n
"
,
mode
?
"active-backup"
:
"load balancing"
);
switch
(
mode
)
{
case
BOND_MODE_ACTIVEBACKUP
:
len
+=
sprintf
(
buf
+
len
,
"%s
\n
"
,
"active-backup"
);
break
;
case
BOND_MODE_ROUNDROBIN
:
len
+=
sprintf
(
buf
+
len
,
"%s
\n
"
,
"load balancing (round-robin)"
);
break
;
case
BOND_MODE_XOR
:
len
+=
sprintf
(
buf
+
len
,
"%s
\n
"
,
"load balancing (xor)"
);
break
;
default:
len
+=
sprintf
(
buf
+
len
,
"%s
\n
"
,
"unknown"
);
break
;
}
if
(
mode
==
BOND_MODE_ACTIVEBACKUP
)
{
read_lock_irqsave
(
&
bond
->
lock
,
flags
);
...
...
@@ -2282,7 +2346,32 @@ static int __init bonding_init(void)
}
memset
(
dev_bonds
,
0
,
max_bonds
*
sizeof
(
struct
net_device
));
if
(
updelay
<
0
)
{
printk
(
KERN_WARNING
"bonding_init(): updelay module parameter (%d), "
"not in range 0-%d, so it was reset to 0
\n
"
,
updelay
,
INT_MAX
);
updelay
=
0
;
}
if
(
downdelay
<
0
)
{
printk
(
KERN_WARNING
"bonding_init(): downdelay module parameter (%d), "
"not in range 0-%d, so it was reset to 0
\n
"
,
downdelay
,
INT_MAX
);
downdelay
=
0
;
}
if
(
arp_interval
<
0
)
{
printk
(
KERN_WARNING
"bonding_init(): arp_interval module parameter (%d), "
"not in range 0-%d, so it was reset to %d
\n
"
,
arp_interval
,
INT_MAX
,
BOND_LINK_ARP_INTERV
);
arp_interval
=
BOND_LINK_ARP_INTERV
;
}
if
(
arp_ip_target
)
{
/* TODO: check and log bad ip address */
if
(
my_inet_aton
(
arp_ip_target
,
&
arp_target
)
==
0
)
{
arp_interval
=
0
;
}
...
...
drivers/net/sunhme.c
View file @
038403f6
...
...
@@ -2201,7 +2201,7 @@ static int happy_meal_open(struct net_device *dev)
*/
if
((
hp
->
happy_flags
&
(
HFLAG_QUATTRO
|
HFLAG_PCI
))
!=
HFLAG_QUATTRO
)
{
if
(
request_irq
(
dev
->
irq
,
&
happy_meal_interrupt
,
SA_SHIRQ
,
"HAPPY MEAL"
,
(
void
*
)
dev
))
{
SA_SHIRQ
,
dev
->
name
,
(
void
*
)
dev
))
{
HMD
((
"EAGAIN
\n
"
));
#ifdef __sparc__
printk
(
KERN_ERR
"happy_meal(SBUS): Can't order irq %s to go.
\n
"
,
...
...
drivers/net/tg3.c
View file @
038403f6
This diff is collapsed.
Click to expand it.
drivers/net/tg3.h
View file @
038403f6
...
...
@@ -1687,45 +1687,6 @@ struct tg3_link_config {
u8
orig_autoneg
;
};
struct
tg3_coalesce_config
{
/* Current settings. */
u32
rx_coalesce_ticks
;
u32
rx_max_coalesced_frames
;
u32
rx_coalesce_ticks_during_int
;
u32
rx_max_coalesced_frames_during_int
;
u32
tx_coalesce_ticks
;
u32
tx_max_coalesced_frames
;
u32
tx_coalesce_ticks_during_int
;
u32
tx_max_coalesced_frames_during_int
;
u32
stats_coalesce_ticks
;
/* Default settings. */
u32
rx_coalesce_ticks_def
;
u32
rx_max_coalesced_frames_def
;
u32
rx_coalesce_ticks_during_int_def
;
u32
rx_max_coalesced_frames_during_int_def
;
u32
tx_coalesce_ticks_def
;
u32
tx_max_coalesced_frames_def
;
u32
tx_coalesce_ticks_during_int_def
;
u32
tx_max_coalesced_frames_during_int_def
;
u32
stats_coalesce_ticks_def
;
/* Adaptive RX/TX coalescing parameters. */
u32
rate_sample_jiffies
;
u32
pkt_rate_low
;
u32
pkt_rate_high
;
u32
rx_coalesce_ticks_low
;
u32
rx_max_coalesced_frames_low
;
u32
tx_coalesce_ticks_low
;
u32
tx_max_coalesced_frames_low
;
u32
rx_coalesce_ticks_high
;
u32
rx_max_coalesced_frames_high
;
u32
tx_coalesce_ticks_high
;
u32
tx_max_coalesced_frames_high
;
};
struct
tg3_bufmgr_config
{
u32
mbuf_read_dma_low_water
;
u32
mbuf_mac_rx_low_water
;
...
...
@@ -1772,8 +1733,7 @@ struct tg3 {
#define TG3_FLAG_POLL_SERDES 0x00000080
#define TG3_FLAG_PHY_RESET_ON_INIT 0x00000100
#define TG3_FLAG_PCIX_TARGET_HWBUG 0x00000200
#define TG3_FLAG_TAGGED_IRQ_STATUS 0x00000400
#define TG3_FLAG_WOL_SPEED_100MB 0x00000800
#define TG3_FLAG_WOL_SPEED_100MB 0x00000400
#define TG3_FLAG_WOL_ENABLE 0x00001000
#define TG3_FLAG_NVRAM 0x00002000
#define TG3_FLAG_NVRAM_BUFFERED 0x00004000
...
...
@@ -1802,7 +1762,6 @@ struct tg3 {
u32
timer_offset
;
struct
tg3_link_config
link_config
;
struct
tg3_coalesce_config
coalesce_config
;
struct
tg3_bufmgr_config
bufmgr_config
;
u32
rx_pending
;
...
...
include/linux/if_vlan.h
View file @
038403f6
...
...
@@ -141,9 +141,10 @@ struct vlan_skb_tx_cookie {
(VLAN_TX_SKB_CB(__skb)->magic == VLAN_TX_COOKIE_MAGIC)
#define vlan_tx_tag_get(__skb) (VLAN_TX_SKB_CB(__skb)->vlan_tag)
/* VLAN rx hw acceleration helper. This acts like netif_rx(). */
static
inline
int
vlan_hwaccel_rx
(
struct
sk_buff
*
skb
,
struct
vlan_group
*
grp
,
unsigned
short
vlan_tag
)
/* VLAN rx hw acceleration helper. This acts like netif_{rx,receive_skb}(). */
static
inline
int
__vlan_hwaccel_rx
(
struct
sk_buff
*
skb
,
struct
vlan_group
*
grp
,
unsigned
short
vlan_tag
,
int
polling
)
{
struct
net_device_stats
*
stats
;
...
...
@@ -182,9 +183,22 @@ static inline int vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,
break
;
};
return
netif_rx
(
skb
);
return
(
polling
?
netif_receive_skb
(
skb
)
:
netif_rx
(
skb
));
}
static
inline
int
vlan_hwaccel_rx
(
struct
sk_buff
*
skb
,
struct
vlan_group
*
grp
,
unsigned
short
vlan_tag
)
{
return
__vlan_hwaccel_rx
(
skb
,
grp
,
vlan_tag
,
0
);
}
static
inline
int
vlan_hwaccel_receive_skb
(
struct
sk_buff
*
skb
,
struct
vlan_group
*
grp
,
unsigned
short
vlan_tag
)
{
return
__vlan_hwaccel_rx
(
skb
,
grp
,
vlan_tag
,
1
);
}
#endif
/* __KERNEL__ */
/* VLAN IOCTLs are found in sockios.h */
...
...
include/linux/netlink.h
View file @
038403f6
...
...
@@ -110,6 +110,8 @@ extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int
extern
void
netlink_broadcast
(
struct
sock
*
ssk
,
struct
sk_buff
*
skb
,
__u32
pid
,
__u32
group
,
int
allocation
);
extern
void
netlink_set_err
(
struct
sock
*
ssk
,
__u32
pid
,
__u32
group
,
int
code
);
extern
int
netlink_register_notifier
(
struct
notifier_block
*
nb
);
extern
int
netlink_unregister_notifier
(
struct
notifier_block
*
nb
);
/*
* skb should fit one page. This choice is good for headerless malloc.
...
...
@@ -129,6 +131,12 @@ struct netlink_callback
long
args
[
4
];
};
struct
netlink_notify
{
int
pid
;
int
protocol
;
};
static
__inline__
struct
nlmsghdr
*
__nlmsg_put
(
struct
sk_buff
*
skb
,
u32
pid
,
u32
seq
,
int
type
,
int
len
)
{
...
...
include/linux/notifier.h
View file @
038403f6
...
...
@@ -58,5 +58,7 @@ extern int notifier_call_chain(struct notifier_block **n, unsigned long val, voi
#define SYS_HALT 0x0002
/* Notify of system halt */
#define SYS_POWER_OFF 0x0003
/* Notify of system power off */
#define NETLINK_URELEASE 0x0001
/* Unicast netlink socket released */
#endif
/* __KERNEL__ */
#endif
/* _LINUX_NOTIFIER_H */
include/net/dsfield.h
View file @
038403f6
...
...
@@ -51,29 +51,4 @@ static inline void ipv6_change_dsfield(struct ipv6hdr *ipv6h,__u8 mask,
}
#if 0 /* put this later into asm-i386 or such ... */
static inline void ip_change_dsfield(struct iphdr *iph,__u16 dsfield)
{
__u16 check;
__asm__ __volatile__("
movw 10(%1),%0
xchg %b0,%h0
addb 1(%1),%b0
adcb $0,%h0
adcw $1,%0
cmc
sbbw %2,%0
sbbw $0,%0
movb %b2,1(%1)
xchg %b0,%h0
movw %0,10(%1)"
: "=&r" (check)
: "r" (iph), "r" (dsfield)
: "cc");
}
#endif
#endif
net/core/dst.c
View file @
038403f6
...
...
@@ -29,7 +29,9 @@
* 4) All operations modify state, so a spinlock is used.
*/
static
struct
dst_entry
*
dst_garbage_list
;
#if RT_CACHE_DEBUG >= 2
static
atomic_t
dst_total
=
ATOMIC_INIT
(
0
);
#endif
static
spinlock_t
dst_lock
=
SPIN_LOCK_UNLOCKED
;
static
unsigned
long
dst_gc_timer_expires
;
...
...
@@ -108,7 +110,9 @@ void * dst_alloc(struct dst_ops * ops)
dst
->
lastuse
=
jiffies
;
dst
->
input
=
dst_discard
;
dst
->
output
=
dst_blackhole
;
#if RT_CACHE_DEBUG >= 2
atomic_inc
(
&
dst_total
);
#endif
atomic_inc
(
&
ops
->
entries
);
return
dst
;
}
...
...
@@ -158,7 +162,9 @@ void dst_destroy(struct dst_entry * dst)
dst
->
ops
->
destroy
(
dst
);
if
(
dst
->
dev
)
dev_put
(
dst
->
dev
);
#if RT_CACHE_DEBUG >= 2
atomic_dec
(
&
dst_total
);
#endif
kmem_cache_free
(
dst
->
ops
->
kmem_cachep
,
dst
);
}
...
...
net/netlink/af_netlink.c
View file @
038403f6
...
...
@@ -41,6 +41,7 @@
#include <linux/rtnetlink.h>
#include <linux/proc_fs.h>
#include <linux/smp_lock.h>
#include <linux/notifier.h>
#include <net/sock.h>
#include <net/scm.h>
...
...
@@ -81,6 +82,8 @@ atomic_t netlink_sock_nr;
static
rwlock_t
nl_table_lock
=
RW_LOCK_UNLOCKED
;
static
atomic_t
nl_table_users
=
ATOMIC_INIT
(
0
);
static
struct
notifier_block
*
netlink_chain
;
static
void
netlink_sock_destruct
(
struct
sock
*
sk
)
{
skb_queue_purge
(
&
sk
->
receive_queue
);
...
...
@@ -276,6 +279,12 @@ static int netlink_release(struct socket *sock)
skb_queue_purge
(
&
sk
->
write_queue
);
if
(
nlk
->
pid
&&
!
nlk
->
groups
)
{
struct
netlink_notify
n
=
{
protocol
:
sk
->
protocol
,
pid:
nlk
->
pid
};
notifier_call_chain
(
&
netlink_chain
,
NETLINK_URELEASE
,
&
n
);
}
sock_put
(
sk
);
return
0
;
}
...
...
@@ -967,6 +976,16 @@ static int netlink_read_proc(char *buffer, char **start, off_t offset,
}
#endif
int
netlink_register_notifier
(
struct
notifier_block
*
nb
)
{
return
notifier_chain_register
(
&
netlink_chain
,
nb
);
}
int
netlink_unregister_notifier
(
struct
notifier_block
*
nb
)
{
return
notifier_chain_unregister
(
&
netlink_chain
,
nb
);
}
struct
proto_ops
netlink_ops
=
{
family:
PF_NETLINK
,
...
...
net/netsyms.c
View file @
038403f6
...
...
@@ -402,6 +402,8 @@ EXPORT_SYMBOL(netlink_unicast);
EXPORT_SYMBOL
(
netlink_kernel_create
);
EXPORT_SYMBOL
(
netlink_dump_start
);
EXPORT_SYMBOL
(
netlink_ack
);
EXPORT_SYMBOL
(
netlink_register_notifier
);
EXPORT_SYMBOL
(
netlink_unregister_notifier
);
#if defined(CONFIG_NETLINK_DEV) || defined(CONFIG_NETLINK_DEV_MODULE)
EXPORT_SYMBOL
(
netlink_attach
);
EXPORT_SYMBOL
(
netlink_detach
);
...
...
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