• Thomas Graf's avatar
    [PKT_SCHED]: tc filter extension API · 2a221988
    Thomas Graf authored
    The tcf_exts API abstracts extensions such as actions/policers
    into a generic layer and reduces the knowledge inside classifiers
    to the minimum required. It isolates the validation code into
    its own function to allow classifiers to validate all input
    data before making changes and thus avoids the need to undo changes
    if a extension configuration request cannot be fullfilled.
    
    Adds missing locking when adding a action/police extension to an
    already existing filter. Acquiring  dev->queue_lock makes sure we
    don't change the action/police in the middle of a classification.
    Noted by Patrick McHardy.
    
    As a nice side effect, using this API removes the existing
    ifdef clutter.
    
    Usage:
      The classifier holds struct tcf_exts which may be empty if no
      extensions are compiled in. It then calls tcf_exts_validate
      when a new change request was received and provides a temporary
      tcf_exts copy to store the change requests. Given it succeeded
      the classifier may change its own parameters and at the end
      call tcf_exts_change to commit the changes and replace the
      existing extension configuration with the new one. The classifier
      is responsible to destroy his temporary copy if any of its own
      validation checks fail.
    
      The classifier specific TLV types must be exported to the extensions
      API via tcf_ext_map.
    
      Destroying the extensions is as easy as calling tcf_exts_destroy.
    
      The extensions are executed by the classifier by calling tcf_exts_exec
      which must be done as the last thing after making sure the
      filter matches. Note: A classifier might take further actions after
      the execution to tcf_exts_exec such as correcting its own cache to
      avoid caching results which could have been influenced by the extensions.
    
      tcf_exts_exec returns a negative error code if the filter must be
      considered unmatched, 0 on normal execution or a positive classifier
      return code (TC_ACT_*) which must be returned to the underlying layer
      as-is.
    Signed-off-by: default avatarThomas Graf <tgraf@suug.ch>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    2a221988
cls_api.c 14.2 KB