[ovs-dev] [PATCH 1/1] netdev-tc-offloads: Support match on priority tags

Simon Horman simon.horman at netronome.com
Fri May 31 12:45:25 UTC 2019


Sorry Eli,

I had missed this but I have it now.

On Fri, 31 May 2019 at 09:35, Eli Britstein <elibr at mellanox.com> wrote:

> Ping
> ------------------------------
> *From:* Eli Britstein <elibr at mellanox.com>
> *Sent:* Tuesday, May 21, 2019 3:11:51 PM
> *To:* dev at openvswitch.org; Simon Horman
> *Cc:* Roi Dayan; Paul Blakey; Eli Cohen; Eli Britstein
> *Subject:* [PATCH 1/1] netdev-tc-offloads: Support match on priority tags
>
> The logic by which a TC rule has a VLAN match is by the VLAN TCI field,
> either the VID, PCP or CFI are non-zero. For priority-tag packets
> there is a VLAN tag header with a zero VLAN TCI. Match on existence of
> VLAN header (TPID) regardless of TCI matching.
>
> Signed-off-by: Eli Britstein <elibr at mellanox.com>
> Reviewed-by: Roi Dayan <roid at mellanox.com>
> ---
>  lib/netdev-tc-offloads.c | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/lib/netdev-tc-offloads.c b/lib/netdev-tc-offloads.c
> index d5c66acc1..ef9ee0786 100644
> --- a/lib/netdev-tc-offloads.c
> +++ b/lib/netdev-tc-offloads.c
> @@ -1146,6 +1146,10 @@ netdev_tc_flow_put(struct netdev *netdev, struct
> match *match,
>      }
>      mask->mpls_lse[0] = 0;
>
> +    if (eth_type_vlan(key->vlans[0].tpid)) {
> +        flower.key.encap_eth_type[0] = flower.key.eth_type;
> +        flower.key.eth_type = key->vlans[0].tpid;
> +    }
>      if (mask->vlans[0].tci) {
>          ovs_be16 vid_mask = mask->vlans[0].tci & htons(VLAN_VID_MASK);
>          ovs_be16 pcp_mask = mask->vlans[0].tci & htons(VLAN_PCP_MASK);
> @@ -1166,8 +1170,6 @@ netdev_tc_flow_put(struct netdev *netdev, struct
> match *match,
>                  VLOG_DBG_RL(&rl, "vlan_prio[0]: %d\n",
>                              flower.key.vlan_prio[0]);
>              }
> -            flower.key.encap_eth_type[0] = flower.key.eth_type;
> -            flower.key.eth_type = key->vlans[0].tpid;
>          } else if (mask->vlans[0].tci == htons(0xffff) &&
>                     ntohs(key->vlans[0].tci) == 0) {
>              /* exact && no vlan */
> @@ -1177,6 +1179,10 @@ netdev_tc_flow_put(struct netdev *netdev, struct
> match *match,
>          }
>      }
>
> +    if (eth_type_vlan(key->vlans[1].tpid)) {
> +        flower.key.encap_eth_type[1] = flower.key.encap_eth_type[0];
> +        flower.key.encap_eth_type[0] = key->vlans[1].tpid;
> +    }
>      if (mask->vlans[1].tci) {
>          ovs_be16 vid_mask = mask->vlans[1].tci & htons(VLAN_VID_MASK);
>          ovs_be16 pcp_mask = mask->vlans[1].tci & htons(VLAN_PCP_MASK);
> @@ -1196,8 +1202,6 @@ netdev_tc_flow_put(struct netdev *netdev, struct
> match *match,
>                  flower.mask.vlan_prio[1] =
> vlan_tci_to_pcp(mask->vlans[1].tci);
>                  VLOG_DBG_RL(&rl, "vlan_prio[1]: %d",
> flower.key.vlan_prio[1]);
>              }
> -            flower.key.encap_eth_type[1] = flower.key.encap_eth_type[0];
> -            flower.key.encap_eth_type[0] = key->vlans[1].tpid;
>          } else if (mask->vlans[1].tci == htons(0xffff) &&
>                     ntohs(key->vlans[1].tci) == 0) {
>              /* exact && no vlan */
> --
> 2.17.2
>
>


More information about the dev mailing list