|
@@ -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);
|