• Vlad Buslov's avatar
    net/mlx5: Bridge, dynamic entry ageing · c636a0f0
    Vlad Buslov authored
    Dynamic FDB entries require capability to age out unused entries. Such
    entries are either aged out by kernel software bridge implementation or by
    hardware switch that offloaded them (and notified the kernel to mark them
    as SWITCHDEV_FDB_ADD_TO_BRIDGE). Leaving ageing to kernel bridge would
    result it deleting offloaded dynamic FDB entries every ageing_time period
    due to packets being processed by hardware and, consecutively, 'used'
    timestamp for FDB entry not being updated. However, since hardware doesn't
    support ageing, software solution inside the driver is required.
    
    In order to emulate hardware ageing in driver, extend bridge FDB ingress
    flows with counter and create delayed br_offloads->update_work task on
    bridge offloads workqueue. Run the task every second, update 'used'
    timestamp in software bridge dynamic entry by sending
    SWITCHDEV_FDB_ADD_TO_BRIDGE for the entry, if it flow hardware counter
    lastuse field was changed since last update. If lastuse wasn't changed for
    ageing_time period, then delete the FDB entry and notify kernel bridge by
    sending SWITCHDEV_FDB_DEL_TO_BRIDGE notification.
    
    Register blocking switchdev notifier callback and handle attribute set
    SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME event to allow user to dynamically
    configure bridge FDB entry ageing timeout. Save the value per-bridge in
    struct mlx5_esw_bridge. Silently ignore
    SWITCHDEV_ATTR_ID_PORT_{PRE_}BRIDGE_FLAGS switchdev event since mlx5 bridge
    implementation relies on software bridge for implementing necessary
    behavior for all of these flags.
    Signed-off-by: default avatarVlad Buslov <vladbu@nvidia.com>
    Reviewed-by: default avatarJianbo Liu <jianbol@nvidia.com>
    Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
    c636a0f0
bridge.c 9.2 KB