• Vlad Buslov's avatar
    net/sched: act_ct: offload UDP NEW connections · 6a9bad00
    Vlad Buslov authored
    Modify the offload algorithm of UDP connections to the following:
    
    - Offload NEW connection as unidirectional.
    
    - When connection state changes to ESTABLISHED also update the hardware
    flow. However, in order to prevent act_ct from spamming offload add wq for
    every packet coming in reply direction in this state verify whether
    connection has already been updated to ESTABLISHED in the drivers. If that
    it the case, then skip flow_table and let conntrack handle such packets
    which will also allow conntrack to potentially promote the connection to
    ASSURED.
    
    - When connection state changes to ASSURED set the flow_table flow
    NF_FLOW_HW_BIDIRECTIONAL flag which will cause refresh mechanism to offload
    the reply direction.
    
    All other protocols have their offload algorithm preserved and are always
    offloaded as bidirectional.
    
    Note that this change tries to minimize the load on flow_table add
    workqueue. First, it tracks the last ctinfo that was offloaded by using new
    flow 'NF_FLOW_HW_ESTABLISHED' flag and doesn't schedule the refresh for
    reply direction packets when the offloads have already been updated with
    current ctinfo. Second, when 'add' task executes on workqueue it always
    update the offload with current flow state (by checking 'bidirectional'
    flow flag and obtaining actual ctinfo/cookie through meta action instead of
    caching any of these from the moment of scheduling the 'add' work)
    preventing the need from scheduling more updates if state changed
    concurrently while the 'add' work was pending on workqueue.
    Signed-off-by: default avatarVlad Buslov <vladbu@nvidia.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    6a9bad00
act_ct.c 40.6 KB