net: include hash policy in LAG changeupper info
authorJohn Hurley <john.hurley@netronome.com>
Thu, 24 May 2018 02:22:52 +0000 (19:22 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 25 May 2018 03:10:57 +0000 (23:10 -0400)
LAG upper event notifiers contain the tx type used by the LAG device.
Extend this to also include the hash policy used for tx types that
utilize hashing.

Signed-off-by: John Hurley <john.hurley@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/bonding/bond_main.c
drivers/net/team/team.c
include/linux/netdevice.h

index fea17b9..bd53a71 100644 (file)
@@ -1218,12 +1218,37 @@ static enum netdev_lag_tx_type bond_lag_tx_type(struct bonding *bond)
        }
 }
 
+static enum netdev_lag_hash bond_lag_hash_type(struct bonding *bond,
+                                              enum netdev_lag_tx_type type)
+{
+       if (type != NETDEV_LAG_TX_TYPE_HASH)
+               return NETDEV_LAG_HASH_NONE;
+
+       switch (bond->params.xmit_policy) {
+       case BOND_XMIT_POLICY_LAYER2:
+               return NETDEV_LAG_HASH_L2;
+       case BOND_XMIT_POLICY_LAYER34:
+               return NETDEV_LAG_HASH_L34;
+       case BOND_XMIT_POLICY_LAYER23:
+               return NETDEV_LAG_HASH_L23;
+       case BOND_XMIT_POLICY_ENCAP23:
+               return NETDEV_LAG_HASH_E23;
+       case BOND_XMIT_POLICY_ENCAP34:
+               return NETDEV_LAG_HASH_E34;
+       default:
+               return NETDEV_LAG_HASH_UNKNOWN;
+       }
+}
+
 static int bond_master_upper_dev_link(struct bonding *bond, struct slave *slave,
                                      struct netlink_ext_ack *extack)
 {
        struct netdev_lag_upper_info lag_upper_info;
+       enum netdev_lag_tx_type type;
 
-       lag_upper_info.tx_type = bond_lag_tx_type(bond);
+       type = bond_lag_tx_type(bond);
+       lag_upper_info.tx_type = type;
+       lag_upper_info.hash_type = bond_lag_hash_type(bond, type);
 
        return netdev_master_upper_dev_link(slave->dev, bond->dev, slave,
                                            &lag_upper_info, extack);
index d6ff881..e6730a0 100644 (file)
@@ -1129,6 +1129,7 @@ static int team_upper_dev_link(struct team *team, struct team_port *port,
        int err;
 
        lag_upper_info.tx_type = team->mode->lag_tx_type;
+       lag_upper_info.hash_type = NETDEV_LAG_HASH_UNKNOWN;
        err = netdev_master_upper_dev_link(port->dev, team->dev, NULL,
                                           &lag_upper_info, extack);
        if (err)
index debdb62..8452f72 100644 (file)
@@ -2332,8 +2332,19 @@ enum netdev_lag_tx_type {
        NETDEV_LAG_TX_TYPE_HASH,
 };
 
+enum netdev_lag_hash {
+       NETDEV_LAG_HASH_NONE,
+       NETDEV_LAG_HASH_L2,
+       NETDEV_LAG_HASH_L34,
+       NETDEV_LAG_HASH_L23,
+       NETDEV_LAG_HASH_E23,
+       NETDEV_LAG_HASH_E34,
+       NETDEV_LAG_HASH_UNKNOWN,
+};
+
 struct netdev_lag_upper_info {
        enum netdev_lag_tx_type tx_type;
+       enum netdev_lag_hash hash_type;
 };
 
 struct netdev_lag_lower_state_info {