• Antoine Tenart's avatar
    net: macsec: hardware offloading infrastructure · 3cf3227a
    Antoine Tenart authored
    This patch introduces the MACsec hardware offloading infrastructure.
    
    The main idea here is to re-use the logic and data structures of the
    software MACsec implementation. This allows not to duplicate definitions
    and structure storing the same kind of information. It also allows to
    use a unified genlink interface for both MACsec implementations (so that
    the same userspace tool, `ip macsec`, is used with the same arguments).
    The MACsec offloading support cannot be disabled if an interface
    supports it at the moment.
    
    The MACsec configuration is passed to device drivers supporting it
    through macsec_ops which are called from the MACsec genl helpers. Those
    functions call the macsec ops of PHY and Ethernet drivers in two steps:
    a preparation one, and a commit one. The first step is allowed to fail
    and should be used to check if a provided configuration is compatible
    with the features provided by a MACsec engine, while the second step is
    not allowed to fail and should only be used to enable a given MACsec
    configuration. Two extra calls are made: when a virtual MACsec interface
    is created and when it is deleted, so that the hardware driver can stay
    in sync.
    
    The Rx and TX handlers are modified to take in account the special case
    were the MACsec transformation happens in the hardware, whether in a PHY
    or in a MAC, as the packets seen by the networking stack on both the
    physical and MACsec virtual interface are exactly the same. This leads
    to some limitations: the hardware and software implementations can't be
    used on the same physical interface, as the policies would be impossible
    to fulfill (such as strict validation of the frames). Also only a single
    virtual MACsec interface can be offloaded to a physical port supporting
    hardware offloading as it would be impossible to guess onto which
    interface a given packet should go (for ingress traffic).
    
    Another limitation as of now is that the counters and statistics are not
    reported back from the hardware to the software MACsec implementation.
    This isn't an issue when using offloaded MACsec transformations, but it
    should be added in the future so that the MACsec state can be reported
    to the user (which would also improve the debug).
    Signed-off-by: default avatarAntoine Tenart <antoine.tenart@bootlin.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3cf3227a
macsec.c 91.5 KB