.. | .. |
---|
38 | 38 | #define __long_aligned __attribute__((aligned((sizeof(long))))) |
---|
39 | 39 | #endif |
---|
40 | 40 | |
---|
| 41 | +#define slave_info(bond_dev, slave_dev, fmt, ...) \ |
---|
| 42 | + netdev_info(bond_dev, "(slave %s): " fmt, (slave_dev)->name, ##__VA_ARGS__) |
---|
| 43 | +#define slave_warn(bond_dev, slave_dev, fmt, ...) \ |
---|
| 44 | + netdev_warn(bond_dev, "(slave %s): " fmt, (slave_dev)->name, ##__VA_ARGS__) |
---|
| 45 | +#define slave_dbg(bond_dev, slave_dev, fmt, ...) \ |
---|
| 46 | + netdev_dbg(bond_dev, "(slave %s): " fmt, (slave_dev)->name, ##__VA_ARGS__) |
---|
| 47 | +#define slave_err(bond_dev, slave_dev, fmt, ...) \ |
---|
| 48 | + netdev_err(bond_dev, "(slave %s): " fmt, (slave_dev)->name, ##__VA_ARGS__) |
---|
| 49 | + |
---|
41 | 50 | #define BOND_MODE(bond) ((bond)->params.mode) |
---|
42 | 51 | |
---|
43 | 52 | /* slave list primitives */ |
---|
.. | .. |
---|
77 | 86 | #define bond_for_each_slave_rcu(bond, pos, iter) \ |
---|
78 | 87 | netdev_for_each_lower_private_rcu((bond)->dev, pos, iter) |
---|
79 | 88 | |
---|
| 89 | +#define BOND_XFRM_FEATURES (NETIF_F_HW_ESP | NETIF_F_HW_ESP_TX_CSUM | \ |
---|
| 90 | + NETIF_F_GSO_ESP) |
---|
| 91 | + |
---|
80 | 92 | #ifdef CONFIG_NET_POLL_CONTROLLER |
---|
81 | 93 | extern atomic_t netpoll_block_tx; |
---|
82 | 94 | |
---|
.. | .. |
---|
114 | 126 | int fail_over_mac; |
---|
115 | 127 | int updelay; |
---|
116 | 128 | int downdelay; |
---|
| 129 | + int peer_notif_delay; |
---|
117 | 130 | int lacp_fast; |
---|
118 | 131 | unsigned int min_links; |
---|
119 | 132 | int ad_select; |
---|
.. | .. |
---|
178 | 191 | struct bond_up_slave { |
---|
179 | 192 | unsigned int count; |
---|
180 | 193 | struct rcu_head rcu; |
---|
181 | | - struct slave *arr[0]; |
---|
| 194 | + struct slave *arr[]; |
---|
182 | 195 | }; |
---|
183 | 196 | |
---|
184 | 197 | /* |
---|
185 | 198 | * Link pseudo-state only used internally by monitors |
---|
186 | 199 | */ |
---|
187 | 200 | #define BOND_LINK_NOCHANGE -1 |
---|
| 201 | + |
---|
| 202 | +struct bond_ipsec { |
---|
| 203 | + struct list_head list; |
---|
| 204 | + struct xfrm_state *xs; |
---|
| 205 | +}; |
---|
188 | 206 | |
---|
189 | 207 | /* |
---|
190 | 208 | * Here are the locking policies for the two bonding locks: |
---|
.. | .. |
---|
195 | 213 | struct slave __rcu *curr_active_slave; |
---|
196 | 214 | struct slave __rcu *current_arp_slave; |
---|
197 | 215 | struct slave __rcu *primary_slave; |
---|
198 | | - struct bond_up_slave __rcu *slave_arr; /* Array of usable slaves */ |
---|
| 216 | + struct bond_up_slave __rcu *usable_slaves; |
---|
| 217 | + struct bond_up_slave __rcu *all_slaves; |
---|
199 | 218 | bool force_primary; |
---|
200 | | - u32 nest_level; |
---|
201 | 219 | s32 slave_cnt; /* never change this value outside the attach/detach wrappers */ |
---|
202 | 220 | int (*recv_probe)(const struct sk_buff *, struct bonding *, |
---|
203 | 221 | struct slave *); |
---|
.. | .. |
---|
233 | 251 | struct dentry *debug_dir; |
---|
234 | 252 | #endif /* CONFIG_DEBUG_FS */ |
---|
235 | 253 | struct rtnl_link_stats64 bond_stats; |
---|
| 254 | +#ifdef CONFIG_XFRM_OFFLOAD |
---|
| 255 | + struct list_head ipsec_list; |
---|
| 256 | + /* protecting ipsec_list */ |
---|
| 257 | + spinlock_t ipsec_lock; |
---|
| 258 | +#endif /* CONFIG_XFRM_OFFLOAD */ |
---|
236 | 259 | }; |
---|
237 | 260 | |
---|
238 | 261 | #define bond_slave_get_rcu(dev) \ |
---|
.. | .. |
---|
500 | 523 | } |
---|
501 | 524 | |
---|
502 | 525 | #ifdef CONFIG_NET_POLL_CONTROLLER |
---|
503 | | -static inline void bond_netpoll_send_skb(const struct slave *slave, |
---|
| 526 | +static inline netdev_tx_t bond_netpoll_send_skb(const struct slave *slave, |
---|
504 | 527 | struct sk_buff *skb) |
---|
505 | 528 | { |
---|
506 | | - struct netpoll *np = slave->np; |
---|
507 | | - |
---|
508 | | - if (np) |
---|
509 | | - netpoll_send_skb(np, skb); |
---|
| 529 | + return netpoll_send_skb(slave->np, skb); |
---|
510 | 530 | } |
---|
511 | 531 | #else |
---|
512 | | -static inline void bond_netpoll_send_skb(const struct slave *slave, |
---|
| 532 | +static inline netdev_tx_t bond_netpoll_send_skb(const struct slave *slave, |
---|
513 | 533 | struct sk_buff *skb) |
---|
514 | 534 | { |
---|
| 535 | + BUG(); |
---|
| 536 | + return NETDEV_TX_OK; |
---|
515 | 537 | } |
---|
516 | 538 | #endif |
---|
517 | 539 | |
---|
.. | .. |
---|
605 | 627 | }; |
---|
606 | 628 | |
---|
607 | 629 | int bond_arp_rcv(const struct sk_buff *skb, struct bonding *bond, struct slave *slave); |
---|
608 | | -void bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev); |
---|
| 630 | +netdev_tx_t bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev); |
---|
609 | 631 | int bond_create(struct net *net, const char *name); |
---|
610 | 632 | int bond_create_sysfs(struct bond_net *net); |
---|
611 | 633 | void bond_destroy_sysfs(struct bond_net *net); |
---|
.. | .. |
---|
741 | 763 | /* exported from bond_sysfs_slave.c */ |
---|
742 | 764 | extern const struct sysfs_ops slave_sysfs_ops; |
---|
743 | 765 | |
---|
744 | | -static inline void bond_tx_drop(struct net_device *dev, struct sk_buff *skb) |
---|
| 766 | +/* exported from bond_3ad.c */ |
---|
| 767 | +extern const u8 lacpdu_mcast_addr[]; |
---|
| 768 | + |
---|
| 769 | +static inline netdev_tx_t bond_tx_drop(struct net_device *dev, struct sk_buff *skb) |
---|
745 | 770 | { |
---|
746 | 771 | atomic_long_inc(&dev->tx_dropped); |
---|
747 | 772 | dev_kfree_skb_any(skb); |
---|
| 773 | + return NET_XMIT_DROP; |
---|
748 | 774 | } |
---|
749 | 775 | |
---|
750 | 776 | #endif /* _NET_BONDING_H */ |
---|