Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
[pandora-kernel.git] / drivers / net / bonding / bonding.h
index 90736cb..43526a2 100644 (file)
@@ -24,8 +24,8 @@
 #include "bond_3ad.h"
 #include "bond_alb.h"
 
-#define DRV_VERSION    "3.7.0"
-#define DRV_RELDATE    "June 2, 2010"
+#define DRV_VERSION    "3.7.1"
+#define DRV_RELDATE    "April 27, 2011"
 #define DRV_NAME       "bonding"
 #define DRV_DESCRIPTION        "Ethernet Channel Bonding Driver"
 
               netif_running(dev)                       && \
               netif_carrier_ok(dev))
 
-/*
- * Checks whether bond is ready for transmit.
- *
- * Caller must hold bond->lock
- */
-#define BOND_IS_OK(bond)                            \
-                  (((bond)->dev->flags & IFF_UP) && \
-                   netif_running((bond)->dev)    && \
-                   ((bond)->slave_cnt > 0))
-
 /*
  * Checks whether slave is ready for transmit.
  */
@@ -149,8 +139,7 @@ struct bond_params {
        int mode;
        int xmit_policy;
        int miimon;
-       int num_grat_arp;
-       int num_unsol_na;
+       u8 num_peer_notif;
        int arp_interval;
        int arp_validate;
        int use_carrier;
@@ -158,6 +147,7 @@ struct bond_params {
        int updelay;
        int downdelay;
        int lacp_fast;
+       unsigned int min_links;
        int ad_select;
        char primary[IFNAMSIZ];
        int primary_reselect;
@@ -178,9 +168,6 @@ struct vlan_entry {
        struct list_head vlan_list;
        __be32 vlan_ip;
        unsigned short vlan_id;
-#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-       struct in6_addr vlan_ipv6;
-#endif
 };
 
 struct slave {
@@ -196,12 +183,12 @@ struct slave {
        u8     backup:1,   /* indicates backup slave. Value corresponds with
                              BOND_STATE_ACTIVE and BOND_STATE_BACKUP */
               inactive:1; /* indicates inactive slave */
+       u8     duplex;
        u32    original_mtu;
        u32    link_failure_count;
-       u8     perm_hwaddr[ETH_ALEN];
-       u16    speed;
-       u8     duplex;
+       u32    speed;
        u16    queue_id;
+       u8     perm_hwaddr[ETH_ALEN];
        struct ad_slave_info ad_info; /* HUGE - better to dynamically alloc */
        struct tlb_slave_info tlb_info;
 #ifdef CONFIG_NET_POLL_CONTROLLER
@@ -231,11 +218,12 @@ struct bonding {
        struct   slave *primary_slave;
        bool     force_primary;
        s32      slave_cnt; /* never change this value outside the attach/detach wrappers */
+       void     (*recv_probe)(struct sk_buff *, struct bonding *,
+                              struct slave *);
        rwlock_t lock;
        rwlock_t curr_slave_lock;
        s8       kill_timers;
-       s8       send_grat_arp;
-       s8       send_unsol_na;
+       u8       send_peer_notif;
        s8       setup_by_slave;
        s8       igmp_retrans;
 #ifdef CONFIG_PROC_FS
@@ -252,23 +240,23 @@ struct bonding {
        struct   alb_bond_info alb_info;
        struct   bond_params params;
        struct   list_head vlan_list;
-       struct   vlan_group *vlgrp;
-       struct   packet_type arp_mon_pt;
        struct   workqueue_struct *wq;
        struct   delayed_work mii_work;
        struct   delayed_work arp_work;
        struct   delayed_work alb_work;
        struct   delayed_work ad_work;
        struct   delayed_work mcast_work;
-#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-       struct   in6_addr master_ipv6;
-#endif
 #ifdef CONFIG_DEBUG_FS
        /* debugging suport via debugfs */
        struct   dentry *debug_dir;
 #endif /* CONFIG_DEBUG_FS */
 };
 
+static inline bool bond_vlan_used(struct bonding *bond)
+{
+       return !list_empty(&bond->vlan_list);
+}
+
 #define bond_slave_get_rcu(dev) \
        ((struct slave *) rcu_dereference(dev->rx_handler_data))
 
@@ -409,13 +397,12 @@ void bond_set_mode_ops(struct bonding *bond, int mode);
 int bond_parse_parm(const char *mode_arg, const struct bond_parm_tbl *tbl);
 void bond_select_active_slave(struct bonding *bond);
 void bond_change_active_slave(struct bonding *bond, struct slave *new_active);
-void bond_register_arp(struct bonding *);
-void bond_unregister_arp(struct bonding *);
 void bond_create_debugfs(void);
 void bond_destroy_debugfs(void);
 void bond_debug_register(struct bonding *bond);
 void bond_debug_unregister(struct bonding *bond);
 void bond_debug_reregister(struct bonding *bond);
+const char *bond_mode_name(int mode);
 
 struct bond_net {
        struct net *            net;    /* Associated network namespace */
@@ -459,23 +446,4 @@ extern const struct bond_parm_tbl fail_over_mac_tbl[];
 extern const struct bond_parm_tbl pri_reselect_tbl[];
 extern struct bond_parm_tbl ad_select_tbl[];
 
-#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-void bond_send_unsolicited_na(struct bonding *bond);
-void bond_register_ipv6_notifier(void);
-void bond_unregister_ipv6_notifier(void);
-#else
-static inline void bond_send_unsolicited_na(struct bonding *bond)
-{
-       return;
-}
-static inline void bond_register_ipv6_notifier(void)
-{
-       return;
-}
-static inline void bond_unregister_ipv6_notifier(void)
-{
-       return;
-}
-#endif
-
 #endif /* _LINUX_BONDING_H */