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
nexedi
linux
Commits
83cbd33a
Commit
83cbd33a
authored
Nov 15, 2005
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'bonding-sysfs' of
git://git.tuxdriver.com/git/netdev-jwl
parents
06d61cbf
691b73b1
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1735 additions
and
182 deletions
+1735
-182
drivers/net/bonding/Makefile
drivers/net/bonding/Makefile
+1
-1
drivers/net/bonding/bond_3ad.c
drivers/net/bonding/bond_3ad.c
+47
-27
drivers/net/bonding/bond_alb.c
drivers/net/bonding/bond_alb.c
+32
-24
drivers/net/bonding/bond_main.c
drivers/net/bonding/bond_main.c
+219
-124
drivers/net/bonding/bond_sysfs.c
drivers/net/bonding/bond_sysfs.c
+1399
-0
drivers/net/bonding/bonding.h
drivers/net/bonding/bonding.h
+33
-4
include/linux/netdevice.h
include/linux/netdevice.h
+1
-0
net/core/dev.c
net/core/dev.c
+2
-1
net/core/utils.c
net/core/utils.c
+1
-1
No files found.
drivers/net/bonding/Makefile
View file @
83cbd33a
...
...
@@ -4,5 +4,5 @@
obj-$(CONFIG_BONDING)
+=
bonding.o
bonding-objs
:=
bond_main.o bond_3ad.o bond_alb.o
bonding-objs
:=
bond_main.o bond_3ad.o bond_alb.o
bond_sysfs.o
drivers/net/bonding/bond_3ad.c
View file @
83cbd33a
...
...
@@ -1198,10 +1198,10 @@ static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port)
// detect loopback situation
if
(
!
MAC_ADDRESS_COMPARE
(
&
(
lacpdu
->
actor_system
),
&
(
port
->
actor_system
)))
{
// INFO_RECEIVED_LOOPBACK_FRAMES
printk
(
KERN_ERR
DRV_NAME
":
An illegal loopback occurred on adapter (%s)
\n
"
,
port
->
slave
->
dev
->
name
);
printk
(
KERN_ERR
"Check the configuration to verify that all Adapters "
"are connected to 802.3ad compliant switch ports
\n
"
);
printk
(
KERN_ERR
DRV_NAME
":
%s: An illegal loopback occurred on "
"adapter (%s). Check the configuration to verify that all "
"Adapters are connected to 802.3ad compliant switch ports
\n
"
,
port
->
slave
->
dev
->
master
->
name
,
port
->
slave
->
dev
->
name
);
__release_rx_machine_lock
(
port
);
return
;
}
...
...
@@ -1378,8 +1378,9 @@ static void ad_port_selection_logic(struct port *port)
}
}
if
(
!
curr_port
)
{
// meaning: the port was related to an aggregator but was not on the aggregator port list
printk
(
KERN_WARNING
DRV_NAME
": Warning: Port %d (on %s) was "
printk
(
KERN_WARNING
DRV_NAME
":
%s:
Warning: Port %d (on %s) was "
"related to aggregator %d but was not on its port list
\n
"
,
port
->
slave
->
dev
->
master
->
name
,
port
->
actor_port_number
,
port
->
slave
->
dev
->
name
,
port
->
aggregator
->
aggregator_identifier
);
}
...
...
@@ -1450,7 +1451,8 @@ static void ad_port_selection_logic(struct port *port)
dprintk
(
"Port %d joined LAG %d(new LAG)
\n
"
,
port
->
actor_port_number
,
port
->
aggregator
->
aggregator_identifier
);
}
else
{
printk
(
KERN_ERR
DRV_NAME
": Port %d (on %s) did not find a suitable aggregator
\n
"
,
printk
(
KERN_ERR
DRV_NAME
": %s: Port %d (on %s) did not find a suitable aggregator
\n
"
,
port
->
slave
->
dev
->
master
->
name
,
port
->
actor_port_number
,
port
->
slave
->
dev
->
name
);
}
}
...
...
@@ -1582,8 +1584,9 @@ static void ad_agg_selection_logic(struct aggregator *aggregator)
// check if any partner replys
if
(
best_aggregator
->
is_individual
)
{
printk
(
KERN_WARNING
DRV_NAME
": Warning: No 802.3ad response from the link partner "
"for any adapters in the bond
\n
"
);
printk
(
KERN_WARNING
DRV_NAME
": %s: Warning: No 802.3ad response from "
"the link partner for any adapters in the bond
\n
"
,
best_aggregator
->
slave
->
dev
->
master
->
name
);
}
// check if there are more than one aggregator
...
...
@@ -1915,7 +1918,8 @@ int bond_3ad_bind_slave(struct slave *slave)
struct
aggregator
*
aggregator
;
if
(
bond
==
NULL
)
{
printk
(
KERN_ERR
"The slave %s is not attached to its bond
\n
"
,
slave
->
dev
->
name
);
printk
(
KERN_ERR
DRV_NAME
": %s: The slave %s is not attached to its bond
\n
"
,
slave
->
dev
->
master
->
name
,
slave
->
dev
->
name
);
return
-
1
;
}
...
...
@@ -1990,7 +1994,9 @@ void bond_3ad_unbind_slave(struct slave *slave)
// if slave is null, the whole port is not initialized
if
(
!
port
->
slave
)
{
printk
(
KERN_WARNING
DRV_NAME
": Trying to unbind an uninitialized port on %s
\n
"
,
slave
->
dev
->
name
);
printk
(
KERN_WARNING
DRV_NAME
": Warning: %s: Trying to "
"unbind an uninitialized port on %s
\n
"
,
slave
->
dev
->
master
->
name
,
slave
->
dev
->
name
);
return
;
}
...
...
@@ -2021,7 +2027,8 @@ void bond_3ad_unbind_slave(struct slave *slave)
dprintk
(
"Some port(s) related to LAG %d - replaceing with LAG %d
\n
"
,
aggregator
->
aggregator_identifier
,
new_aggregator
->
aggregator_identifier
);
if
((
new_aggregator
->
lag_ports
==
port
)
&&
new_aggregator
->
is_active
)
{
printk
(
KERN_INFO
DRV_NAME
": Removing an active aggregator
\n
"
);
printk
(
KERN_INFO
DRV_NAME
": %s: Removing an active aggregator
\n
"
,
aggregator
->
slave
->
dev
->
master
->
name
);
// select new active aggregator
select_new_active_agg
=
1
;
}
...
...
@@ -2051,15 +2058,17 @@ void bond_3ad_unbind_slave(struct slave *slave)
ad_agg_selection_logic
(
__get_first_agg
(
port
));
}
}
else
{
printk
(
KERN_WARNING
DRV_NAME
": Warning: unbinding aggregator, "
"and could not find a new aggregator for its ports
\n
"
);
printk
(
KERN_WARNING
DRV_NAME
": %s: Warning: unbinding aggregator, "
"and could not find a new aggregator for its ports
\n
"
,
slave
->
dev
->
master
->
name
);
}
}
else
{
// in case that the only port related to this aggregator is the one we want to remove
select_new_active_agg
=
aggregator
->
is_active
;
// clear the aggregator
ad_clear_agg
(
aggregator
);
if
(
select_new_active_agg
)
{
printk
(
KERN_INFO
"Removing an active aggregator
\n
"
);
printk
(
KERN_INFO
DRV_NAME
": %s: Removing an active aggregator
\n
"
,
slave
->
dev
->
master
->
name
);
// select new active aggregator
ad_agg_selection_logic
(
__get_first_agg
(
port
));
}
...
...
@@ -2085,7 +2094,8 @@ void bond_3ad_unbind_slave(struct slave *slave)
// clear the aggregator
ad_clear_agg
(
temp_aggregator
);
if
(
select_new_active_agg
)
{
printk
(
KERN_INFO
"Removing an active aggregator
\n
"
);
printk
(
KERN_INFO
DRV_NAME
": %s: Removing an active aggregator
\n
"
,
slave
->
dev
->
master
->
name
);
// select new active aggregator
ad_agg_selection_logic
(
__get_first_agg
(
port
));
}
...
...
@@ -2131,7 +2141,8 @@ void bond_3ad_state_machine_handler(struct bonding *bond)
// select the active aggregator for the bond
if
((
port
=
__get_first_port
(
bond
)))
{
if
(
!
port
->
slave
)
{
printk
(
KERN_WARNING
DRV_NAME
": Warning: bond's first port is uninitialized
\n
"
);
printk
(
KERN_WARNING
DRV_NAME
": %s: Warning: bond's first port is "
"uninitialized
\n
"
,
bond
->
dev
->
name
);
goto
re_arm
;
}
...
...
@@ -2143,7 +2154,8 @@ void bond_3ad_state_machine_handler(struct bonding *bond)
// for each port run the state machines
for
(
port
=
__get_first_port
(
bond
);
port
;
port
=
__get_next_port
(
port
))
{
if
(
!
port
->
slave
)
{
printk
(
KERN_WARNING
DRV_NAME
": Warning: Found an uninitialized port
\n
"
);
printk
(
KERN_WARNING
DRV_NAME
": %s: Warning: Found an uninitialized "
"port
\n
"
,
bond
->
dev
->
name
);
goto
re_arm
;
}
...
...
@@ -2184,7 +2196,8 @@ static void bond_3ad_rx_indication(struct lacpdu *lacpdu, struct slave *slave, u
port
=
&
(
SLAVE_AD_INFO
(
slave
).
port
);
if
(
!
port
->
slave
)
{
printk
(
KERN_WARNING
DRV_NAME
": Warning: port of slave %s is uninitialized
\n
"
,
slave
->
dev
->
name
);
printk
(
KERN_WARNING
DRV_NAME
": %s: Warning: port of slave %s is "
"uninitialized
\n
"
,
slave
->
dev
->
name
,
slave
->
dev
->
master
->
name
);
return
;
}
...
...
@@ -2230,8 +2243,9 @@ void bond_3ad_adapter_speed_changed(struct slave *slave)
// if slave is null, the whole port is not initialized
if
(
!
port
->
slave
)
{
printk
(
KERN_WARNING
DRV_NAME
": Warning: speed changed for uninitialized port on %s
\n
"
,
slave
->
dev
->
name
);
printk
(
KERN_WARNING
DRV_NAME
": Warning: %s: speed "
"changed for uninitialized port on %s
\n
"
,
slave
->
dev
->
master
->
name
,
slave
->
dev
->
name
);
return
;
}
...
...
@@ -2257,8 +2271,9 @@ void bond_3ad_adapter_duplex_changed(struct slave *slave)
// if slave is null, the whole port is not initialized
if
(
!
port
->
slave
)
{
printk
(
KERN_WARNING
DRV_NAME
": Warning: duplex changed for uninitialized port on %s
\n
"
,
slave
->
dev
->
name
);
printk
(
KERN_WARNING
DRV_NAME
": %s: Warning: duplex changed "
"for uninitialized port on %s
\n
"
,
slave
->
dev
->
master
->
name
,
slave
->
dev
->
name
);
return
;
}
...
...
@@ -2285,8 +2300,9 @@ void bond_3ad_handle_link_change(struct slave *slave, char link)
// if slave is null, the whole port is not initialized
if
(
!
port
->
slave
)
{
printk
(
KERN_WARNING
DRV_NAME
": Warning: link status changed for uninitialized port on %s
\n
"
,
slave
->
dev
->
name
);
printk
(
KERN_WARNING
DRV_NAME
": Warning: %s: link status changed for "
"uninitialized port on %s
\n
"
,
slave
->
dev
->
master
->
name
,
slave
->
dev
->
name
);
return
;
}
...
...
@@ -2363,7 +2379,8 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
}
if
(
bond_3ad_get_active_agg_info
(
bond
,
&
ad_info
))
{
printk
(
KERN_DEBUG
"ERROR: bond_3ad_get_active_agg_info failed
\n
"
);
printk
(
KERN_DEBUG
DRV_NAME
": %s: Error: "
"bond_3ad_get_active_agg_info failed
\n
"
,
dev
->
name
);
goto
out
;
}
...
...
@@ -2372,7 +2389,9 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
if
(
slaves_in_agg
==
0
)
{
/*the aggregator is empty*/
printk
(
KERN_DEBUG
"ERROR: active aggregator is empty
\n
"
);
printk
(
KERN_DEBUG
DRV_NAME
": %s: Error: active "
"aggregator is empty
\n
"
,
dev
->
name
);
goto
out
;
}
...
...
@@ -2390,7 +2409,8 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
}
if
(
slave_agg_no
>=
0
)
{
printk
(
KERN_ERR
DRV_NAME
": Error: Couldn't find a slave to tx on for aggregator ID %d
\n
"
,
agg_id
);
printk
(
KERN_ERR
DRV_NAME
": %s: Error: Couldn't find a slave to tx on "
"for aggregator ID %d
\n
"
,
dev
->
name
,
agg_id
);
goto
out
;
}
...
...
drivers/net/bonding/bond_alb.c
View file @
83cbd33a
...
...
@@ -198,20 +198,21 @@ static int tlb_initialize(struct bonding *bond)
{
struct
alb_bond_info
*
bond_info
=
&
(
BOND_ALB_INFO
(
bond
));
int
size
=
TLB_HASH_TABLE_SIZE
*
sizeof
(
struct
tlb_client_info
);
struct
tlb_client_info
*
new_hashtbl
;
int
i
;
spin_lock_init
(
&
(
bond_info
->
tx_hashtbl_lock
));
_lock_tx_hashtbl
(
bond
);
bond_info
->
tx_hashtbl
=
kmalloc
(
size
,
GFP_KERNEL
);
if
(
!
bond_info
->
tx_hashtbl
)
{
new_hashtbl
=
kmalloc
(
size
,
GFP_KERNEL
);
if
(
!
new_hashtbl
)
{
printk
(
KERN_ERR
DRV_NAME
":
Error: %s
: Failed to allocate TLB hash table
\n
"
,
":
%s: Error
: Failed to allocate TLB hash table
\n
"
,
bond
->
dev
->
name
);
_unlock_tx_hashtbl
(
bond
);
return
-
1
;
}
_lock_tx_hashtbl
(
bond
);
bond_info
->
tx_hashtbl
=
new_hashtbl
;
memset
(
bond_info
->
tx_hashtbl
,
0
,
size
);
...
...
@@ -513,7 +514,8 @@ static void rlb_update_client(struct rlb_client_info *client_info)
client_info
->
mac_dst
);
if
(
!
skb
)
{
printk
(
KERN_ERR
DRV_NAME
": Error: failed to create an ARP packet
\n
"
);
": %s: Error: failed to create an ARP packet
\n
"
,
client_info
->
slave
->
dev
->
master
->
name
);
continue
;
}
...
...
@@ -523,7 +525,8 @@ static void rlb_update_client(struct rlb_client_info *client_info)
skb
=
vlan_put_tag
(
skb
,
client_info
->
vlan_id
);
if
(
!
skb
)
{
printk
(
KERN_ERR
DRV_NAME
": Error: failed to insert VLAN tag
\n
"
);
": %s: Error: failed to insert VLAN tag
\n
"
,
client_info
->
slave
->
dev
->
master
->
name
);
continue
;
}
}
...
...
@@ -606,8 +609,9 @@ static void rlb_req_update_subnet_clients(struct bonding *bond, u32 src_ip)
if
(
!
client_info
->
slave
)
{
printk
(
KERN_ERR
DRV_NAME
": Error: found a client with no channel in "
"the client's hash table
\n
"
);
": %s: Error: found a client with no channel in "
"the client's hash table
\n
"
,
bond
->
dev
->
name
);
continue
;
}
/*update all clients using this src_ip, that are not assigned
...
...
@@ -797,21 +801,22 @@ static int rlb_initialize(struct bonding *bond)
{
struct
alb_bond_info
*
bond_info
=
&
(
BOND_ALB_INFO
(
bond
));
struct
packet_type
*
pk_type
=
&
(
BOND_ALB_INFO
(
bond
).
rlb_pkt_type
);
struct
rlb_client_info
*
new_hashtbl
;
int
size
=
RLB_HASH_TABLE_SIZE
*
sizeof
(
struct
rlb_client_info
);
int
i
;
spin_lock_init
(
&
(
bond_info
->
rx_hashtbl_lock
));
_lock_rx_hashtbl
(
bond
);
bond_info
->
rx_hashtbl
=
kmalloc
(
size
,
GFP_KERNEL
);
if
(
!
bond_info
->
rx_hashtbl
)
{
new_hashtbl
=
kmalloc
(
size
,
GFP_KERNEL
);
if
(
!
new_hashtbl
)
{
printk
(
KERN_ERR
DRV_NAME
":
Error: %s
: Failed to allocate RLB hash table
\n
"
,
":
%s: Error
: Failed to allocate RLB hash table
\n
"
,
bond
->
dev
->
name
);
_unlock_rx_hashtbl
(
bond
);
return
-
1
;
}
_lock_rx_hashtbl
(
bond
);
bond_info
->
rx_hashtbl
=
new_hashtbl
;
bond_info
->
rx_hashtbl_head
=
RLB_NULL_INDEX
;
...
...
@@ -927,7 +932,8 @@ static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[])
skb
=
vlan_put_tag
(
skb
,
vlan
->
vlan_id
);
if
(
!
skb
)
{
printk
(
KERN_ERR
DRV_NAME
": Error: failed to insert VLAN tag
\n
"
);
": %s: Error: failed to insert VLAN tag
\n
"
,
bond
->
dev
->
name
);
continue
;
}
}
...
...
@@ -956,11 +962,11 @@ static int alb_set_slave_mac_addr(struct slave *slave, u8 addr[], int hw)
s_addr
.
sa_family
=
dev
->
type
;
if
(
dev_set_mac_address
(
dev
,
&
s_addr
))
{
printk
(
KERN_ERR
DRV_NAME
": Error: dev_set_mac_address of dev %s failed! ALB "
":
%s:
Error: dev_set_mac_address of dev %s failed! ALB "
"mode requires that the base driver support setting "
"the hw address also when the network device's "
"interface is open
\n
"
,
dev
->
name
);
dev
->
master
->
name
,
dev
->
name
);
return
-
EOPNOTSUPP
;
}
return
0
;
...
...
@@ -1153,16 +1159,16 @@ static int alb_handle_addr_collision_on_attach(struct bonding *bond, struct slav
bond
->
alb_info
.
rlb_enabled
);
printk
(
KERN_WARNING
DRV_NAME
": Warning: the hw address of slave %s is in use by "
":
%s:
Warning: the hw address of slave %s is in use by "
"the bond; giving it the hw address of %s
\n
"
,
slave
->
dev
->
name
,
free_mac_slave
->
dev
->
name
);
bond
->
dev
->
name
,
slave
->
dev
->
name
,
free_mac_slave
->
dev
->
name
);
}
else
if
(
has_bond_addr
)
{
printk
(
KERN_ERR
DRV_NAME
": Error: the hw address of slave %s is in use by the "
":
%s:
Error: the hw address of slave %s is in use by the "
"bond; couldn't find a slave with a free hw address to "
"give it (this should not have happened)
\n
"
,
slave
->
dev
->
name
);
bond
->
dev
->
name
,
slave
->
dev
->
name
);
return
-
EFAULT
;
}
...
...
@@ -1250,6 +1256,8 @@ int bond_alb_initialize(struct bonding *bond, int rlb_enabled)
tlb_deinitialize
(
bond
);
return
res
;
}
}
else
{
bond
->
alb_info
.
rlb_enabled
=
0
;
}
return
0
;
...
...
@@ -1409,7 +1417,7 @@ void bond_alb_monitor(struct bonding *bond)
read_lock
(
&
bond
->
curr_slave_lock
);
bond_for_each_slave
(
bond
,
slave
,
i
)
{
alb_send_learning_packets
(
slave
,
slave
->
dev
->
dev_addr
);
alb_send_learning_packets
(
slave
,
slave
->
dev
->
dev_addr
);
}
read_unlock
(
&
bond
->
curr_slave_lock
);
...
...
drivers/net/bonding/bond_main.c
View file @
83cbd33a
This diff is collapsed.
Click to expand it.
drivers/net/bonding/bond_sysfs.c
0 → 100644
View file @
83cbd33a
This diff is collapsed.
Click to expand it.
drivers/net/bonding/bonding.h
View file @
83cbd33a
...
...
@@ -29,6 +29,10 @@
* 2005/05/05 - Jason Gabler <jygabler at lbl dot gov>
* - added "xmit_policy" kernel parameter for alternate hashing policy
* support for mode 2
*
* 2005/09/27 - Mitch Williams <mitch.a.williams at intel dot com>
* Radheka Godse <radheka.godse at intel dot com>
* - Added bonding sysfs interface
*/
#ifndef _LINUX_BONDING_H
...
...
@@ -37,11 +41,12 @@
#include <linux/timer.h>
#include <linux/proc_fs.h>
#include <linux/if_bonding.h>
#include <linux/kobject.h>
#include "bond_3ad.h"
#include "bond_alb.h"
#define DRV_VERSION "
2.6.5
"
#define DRV_RELDATE "November
4
, 2005"
#define DRV_VERSION "
3.0.0
"
#define DRV_RELDATE "November
8
, 2005"
#define DRV_NAME "bonding"
#define DRV_DESCRIPTION "Ethernet Channel Bonding Driver"
...
...
@@ -152,6 +157,11 @@ struct bond_params {
u32
arp_targets
[
BOND_MAX_ARP_TARGETS
];
};
struct
bond_parm_tbl
{
char
*
modename
;
int
mode
;
};
struct
vlan_entry
{
struct
list_head
vlan_list
;
u32
vlan_ip
;
...
...
@@ -159,7 +169,7 @@ struct vlan_entry {
};
struct
slave
{
struct
net_device
*
dev
;
/* first - useful
l
for panic debug */
struct
net_device
*
dev
;
/* first - useful for panic debug */
struct
slave
*
next
;
struct
slave
*
prev
;
s16
delay
;
...
...
@@ -185,7 +195,7 @@ struct slave {
* beforehand.
*/
struct
bonding
{
struct
net_device
*
dev
;
/* first - useful
l
for panic debug */
struct
net_device
*
dev
;
/* first - useful for panic debug */
struct
slave
*
first_slave
;
struct
slave
*
curr_active_slave
;
struct
slave
*
current_arp_slave
;
...
...
@@ -255,6 +265,25 @@ extern inline void bond_set_slave_active_flags(struct slave *slave)
struct
vlan_entry
*
bond_next_vlan
(
struct
bonding
*
bond
,
struct
vlan_entry
*
curr
);
int
bond_dev_queue_xmit
(
struct
bonding
*
bond
,
struct
sk_buff
*
skb
,
struct
net_device
*
slave_dev
);
int
bond_create
(
char
*
name
,
struct
bond_params
*
params
,
struct
bonding
**
newbond
);
void
bond_deinit
(
struct
net_device
*
bond_dev
);
int
bond_create_sysfs
(
void
);
void
bond_destroy_sysfs
(
void
);
void
bond_destroy_sysfs_entry
(
struct
bonding
*
bond
);
int
bond_create_sysfs_entry
(
struct
bonding
*
bond
);
int
bond_create_slave_symlinks
(
struct
net_device
*
master
,
struct
net_device
*
slave
);
void
bond_destroy_slave_symlinks
(
struct
net_device
*
master
,
struct
net_device
*
slave
);
int
bond_enslave
(
struct
net_device
*
bond_dev
,
struct
net_device
*
slave_dev
);
int
bond_release
(
struct
net_device
*
bond_dev
,
struct
net_device
*
slave_dev
);
int
bond_sethwaddr
(
struct
net_device
*
bond_dev
,
struct
net_device
*
slave_dev
);
void
bond_mii_monitor
(
struct
net_device
*
bond_dev
);
void
bond_loadbalance_arp_mon
(
struct
net_device
*
bond_dev
);
void
bond_activebackup_arp_mon
(
struct
net_device
*
bond_dev
);
void
bond_set_mode_ops
(
struct
bonding
*
bond
,
int
mode
);
int
bond_parse_parm
(
char
*
mode_arg
,
struct
bond_parm_tbl
*
tbl
);
const
char
*
bond_mode_name
(
int
mode
);
void
bond_select_active_slave
(
struct
bonding
*
bond
);
void
bond_change_active_slave
(
struct
bonding
*
bond
,
struct
slave
*
new_active
);
#endif
/* _LINUX_BONDING_H */
include/linux/netdevice.h
View file @
83cbd33a
...
...
@@ -684,6 +684,7 @@ extern int netif_rx(struct sk_buff *skb);
extern
int
netif_rx_ni
(
struct
sk_buff
*
skb
);
#define HAVE_NETIF_RECEIVE_SKB 1
extern
int
netif_receive_skb
(
struct
sk_buff
*
skb
);
extern
int
dev_valid_name
(
const
char
*
name
);
extern
int
dev_ioctl
(
unsigned
int
cmd
,
void
__user
*
);
extern
int
dev_ethtool
(
struct
ifreq
*
);
extern
unsigned
dev_get_flags
(
const
struct
net_device
*
);
...
...
net/core/dev.c
View file @
83cbd33a
...
...
@@ -626,7 +626,7 @@ struct net_device * dev_get_by_flags(unsigned short if_flags, unsigned short mas
* Network device names need to be valid file names to
* to allow sysfs to work
*/
static
int
dev_valid_name
(
const
char
*
name
)
int
dev_valid_name
(
const
char
*
name
)
{
return
!
(
*
name
==
'\0'
||
!
strcmp
(
name
,
"."
)
...
...
@@ -3269,6 +3269,7 @@ EXPORT_SYMBOL(__dev_get_by_index);
EXPORT_SYMBOL
(
__dev_get_by_name
);
EXPORT_SYMBOL
(
__dev_remove_pack
);
EXPORT_SYMBOL
(
__skb_linearize
);
EXPORT_SYMBOL
(
dev_valid_name
);
EXPORT_SYMBOL
(
dev_add_pack
);
EXPORT_SYMBOL
(
dev_alloc_name
);
EXPORT_SYMBOL
(
dev_close
);
...
...
net/core/utils.c
View file @
83cbd33a
...
...
@@ -175,7 +175,7 @@ __u32 in_aton(const char *str)
if
(
*
str
!=
'\0'
)
{
val
=
0
;
while
(
*
str
!=
'\0'
&&
*
str
!=
'.'
)
while
(
*
str
!=
'\0'
&&
*
str
!=
'.'
&&
*
str
!=
'\n'
)
{
val
*=
10
;
val
+=
*
str
-
'0'
;
...
...
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