• Scott Feldman's avatar
    rocker: implement IPv4 fib offloading · c1beeef7
    Scott Feldman authored
    The driver implements ndo_switch_fib_ipv4_add/del ops to add/del/mod IPv4
    routes to/from switchdev device.  Once a route is added to the device, and the
    route's nexthops are resolved to neighbor MAC address, the device will forward
    matching pkts rather than the kernel.  This offloads the L3 forwarding path
    from the kernel to the device.  Note that control and management planes are
    still mananged by Linux; only the data plane is offloaded.  Standard routing
    control protocols such as OSPF and BGP run on Linux and manage the kernel's FIB
    via standard rtm netlink msgs...nothing changes here.
    
    A new hash table is added to rocker to track neighbors.  The driver listens for
    neighbor updates events using netevent notifier NETEVENT_NEIGH_UPDATE.  Any ARP
    table updates for ports on this device are recorded in this table.  Routes
    installed to the device with nexthops that reference neighbors in this table
    are "qualified".  In the case of a route with nexthops not resolved in the
    table, the kernel is asked to resolve the nexthop.
    
    The driver uses fib_info->fib_priority for the priority field in rocker's
    unicast routing table.
    
    The device can only forward to pkts matching route dst to resolved nexthops.
    Currently, the device only supports single-path routes (i.e. routes with one
    nexthop).  Equal Cost Multipath (ECMP) route support will be added in followup
    patches.
    
    This patch is driver support for unicast IPv4 routing only.  Followup patches
    will add driver and infrastructure for IPv6 routing and multicast routing.
    Signed-off-by: default avatarScott Feldman <sfeldma@gmail.com>
    Signed-off-by: default avatarJiri Pirko <jiri@resnulli.us>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    c1beeef7
rocker.c 131 KB