Intel® Ethernet Controller E810 Application Device Queues (ADQ)

Configuration Guide

ID 609008
Date 04/03/2023
Version 2.8
Document Table of Contents

TC Filtering Requirements

Currently the resources of the Intel® Ethernet 800 Series Network Controllers support a deterministic number of TC filter types per packet profile, determined by the size of the fields used in the filter types.

For most implementations, filter requirements are not a restriction on implementation.

Note:Every filter automatically includes the destination MAC Address (3 words) even if is not explicitly specified, which does count towards the total number of matched words used by each recipe. Note:Resources are per E810 device, not per port.
Resource Type Available per E810 Device per Profile Required Resources per Number of Matched Words in Filter Type
Chain

Depends on profile

(see table below)

  • If (Number of matched words) <= 4:

    0

  • If (Number of matched words) > 4:

    Floor[(Number of matched words - 1) / 4] + 1

Recipe 54 # chain resources + 1

Profiles

Packet processing profiles are defined by a set of protocols (for example, IPv4 outer IP + TCP port or IPv4 Outer IP, IP tunnel, IPV6 Inner IP). Each profile has a specific number of chain resources available globally per device (see table). Rules can be associated with more than one profile, but a rule must contain all the requested protocols in the profile to be associated. Therefore, having more specific rules narrows which profiles are associated. If any of the associated profiles do not have enough chain resources, the entire rule cannot be added.

For example, if you create a rule that looks only at outer IPv4 source address, every profile that has an outer IPV4 source field must contain enough chain resources, or the rule is not added.

The E810 supports the following packet processing profiles, with chain resources per profile per device in the following table.

No Tunnel UDP Tunnel (VXLAN), IPv4 Inner IP Tunnel (GRE), IPv4 inner UDP Tunnel (VXLAN), IPv6 Inner IP Tunnel (GRE), IPv6 Inner
IPv4 Outer

TCP

UDP

Other

26

26

28

TCP

UDP

Other

11

11

13

TCP

UDP

Other

11

11

13

TCP

UDP

Other

5

5

7

TCP

UDP

Other

5

5

7

IPv6 Outer

TCP

UDP

Other

14

14

16

TCP

UDP

Other

17

17

19

TCP

UDP

Other

17

17

19

TCP

UDP

Other

5

5

7

TCP

UDP

Other

5

5

7

TC Filter Resource Examples

A recipe is determined by the filter protocol fields, not the values of those fields. Multiple filters can be created with the same recipe, just varying values of the components.

Thus, multiple filters can be added on the same device that uses the same recipe (and requires no additional recipe resources), either on the same interface or on different interfaces on the device. Each filter uses the same fields for matching, but can have different match values.

Example: IPv4 Profile

Recipes = 54

Chain resources for TCP profile = 26

  • "${pathtotc}/tc filter add dev $iface protocol ip ingress prio 1 \ flower ip_​proto tcp dst_​port $app_​port skip_​sw hw_​tc 1
    Dest MAC ... ... TCP Dest Port

    Dest MAC (3 Words) + TCP Port (1 word) = 4 words (1 standard recipe slot)

    # chain resources = 0

    # recipes = 1

    Recipes remaining = 53

    Chain resources = 26

  • "${pathtotc}/tc filter add dev $iface protocol ip ingress prio 1 \ flower ip_​proto tcp src_​port $app_​port skip_​sw hw_​tc 1
    Dest MAC ... ... TCP Src Port

    Dest MAC (3 Words) + TCP Port (1 word) = 4 words (1 standard recipe slot)

    # chain resources = 0

    # recipes = 1

    Recipes remaining = 52

    Chain resources = 26

  • "${pathtotc}/tc filter add dev $iface protocol ip ingress prio 1 \ flower dst_​ip $ipaddr/32 ip_​proto tcp dst_​port $app_​port skip_​sw hw_​tc 1
    Dest MAC ... ... TCP Dest Port IPv4 Dest IP ...

    Dest MAC (3 Words) + TCP Port (1 word) + IPv4 IP (2 words) = 6 words

    # chain resources = floor[(6-1)/4]+1= 2

    # recipes = 3

    Recipes remaining = 49

    Chain resources = 24

If you try to add another IPv4 profile filter recipe, such as:

${pathtotc}/tc filter add dev $iface protocol ip ingress prio 1 \ flower src_​ip $ipaddr/32 ip_​proto tcp src_​port $app_​port skip_​sw hw_​tc 1

Dest MAC ... ... TCP Src Port IPv4 Src IP ...

Dest MAC (3 Words) + TCP Port (1 word) + IPv4 IP (2 words) = 6 words

# chain resources = floor[(6-1)/4]+1= 2

# recipes = 3

Recipes remaining = 46

Chain resources remaining = 22

Result: As expected, there are enough resources for all desired filter combinations.