• Nikolay Aleksandrov's avatar
    bonding: modify the old and add new xmit hash policies · 32819dc1
    Nikolay Aleksandrov authored
    This patch adds two new hash policy modes which use skb_flow_dissect:
    3 - Encapsulated layer 2+3
    4 - Encapsulated layer 3+4
    There should be a good improvement for tunnel users in those modes.
    It also changes the old hash functions to:
    hash ^= (__force u32)flow.dst ^ (__force u32)flow.src;
    hash ^= (hash >> 16);
    hash ^= (hash >> 8);
    
    Where hash will be initialized either to L2 hash, that is
    SRCMAC[5] XOR DSTMAC[5], or to flow->ports which should be extracted
    from the upper layer. Flow's dst and src are also extracted based on the
    xmit policy either directly from the buffer or by using skb_flow_dissect,
    but in both cases if the protocol is IPv6 then dst and src are obtained by
    ipv6_addr_hash() on the real addresses. In case of a non-dissectable
    packet, the algorithms fall back to L2 hashing.
    The bond_set_mode_ops() function is now obsolete and thus deleted
    because it was used only to set the proper hash policy. Also we trim a
    pointer from struct bonding because we no longer need to keep the hash
    function, now there's only a single hash function - bond_xmit_hash that
    works based on bond->params.xmit_policy.
    
    The hash function and skb_flow_dissect were suggested by Eric Dumazet.
    The layer names were suggested by Andy Gospodarek, because I suck at
    semantics.
    Signed-off-by: default avatarNikolay Aleksandrov <nikolay@redhat.com>
    Acked-by: default avatarEric Dumazet <edumazet@google.com>
    Acked-by: default avatarVeaceslav Falico <vfalico@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    32819dc1
bonding.h 13.1 KB