[ovs-dev] [PATCH 1/4] lib/tc: Handle ttl for ipv6 too

Simon Horman simon.horman at netronome.com
Thu Jul 26 14:41:35 UTC 2018


Hi Or,

On Wed, Jul 25, 2018 at 09:20:06PM +0300, Or Gerlitz wrote:
> TTL can and should be used to match on IPv6's hop-limit, fix that.
> 
> Fixes: ab7ecf266b0a ('netdev-tc-offloads: Add nw_ttl matching using flower')
> Fixes: 0b4b5203d12e ('tc: Add ip layer ttl matching')
> Signed-off-by: Or Gerlitz <ogerlitz at mellanox.com>
> Reviewed-by: Roi Dayan <roid at mellanox.com>
> ---
>  lib/netdev-tc-offloads.c | 4 ++--
>  lib/tc.c                 | 3 ++-
>  2 files changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/netdev-tc-offloads.c b/lib/netdev-tc-offloads.c
> index 04548c7..2a6dd6d 100644
> --- a/lib/netdev-tc-offloads.c
> +++ b/lib/netdev-tc-offloads.c
> @@ -1025,8 +1025,10 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match,
>      if (is_ip_any(key)) {
>          flower.key.ip_proto = key->nw_proto;
>          flower.mask.ip_proto = mask->nw_proto;
> +        mask->nw_proto = 0;
>          flower.key.ip_ttl = key->nw_ttl;
>          flower.mask.ip_ttl = mask->nw_ttl;
> +        mask->nw_ttl = 0;
>  
>          if (mask->nw_frag & FLOW_NW_FRAG_ANY) {
>              flower.mask.flags |= TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT;
> @@ -1073,8 +1075,6 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match,
>          }
>  
>          mask->nw_tos = 0;
> -        mask->nw_proto = 0;
> -        mask->nw_ttl = 0;

I'm not sure that I understand the purpose of the changes above.
They seem to shuffle setting two mask values from one place to another.
But what is the effect of this?

>  
>          if (key->dl_type == htons(ETH_P_IP)) {
>              flower.key.ipv4.ipv4_src = key->nw_src;
> diff --git a/lib/tc.c b/lib/tc.c
> index 2157135..f3fb59c 100644
> --- a/lib/tc.c
> +++ b/lib/tc.c
> @@ -1625,6 +1625,8 @@ nl_msg_put_flower_options(struct ofpbuf *request, struct tc_flower *flower)
>      FLOWER_PUT_MASKED_VALUE(src_mac, TCA_FLOWER_KEY_ETH_SRC);
>  
>      if (host_eth_type == ETH_P_IP || host_eth_type == ETH_P_IPV6) {
> +        FLOWER_PUT_MASKED_VALUE(ip_ttl, TCA_FLOWER_KEY_IP_TTL);
> +
>          if (flower->mask.ip_proto && flower->key.ip_proto) {
>              nl_msg_put_u8(request, TCA_FLOWER_KEY_IP_PROTO,
>                            flower->key.ip_proto);
> @@ -1653,7 +1655,6 @@ nl_msg_put_flower_options(struct ofpbuf *request, struct tc_flower *flower)
>      if (host_eth_type == ETH_P_IP) {
>              FLOWER_PUT_MASKED_VALUE(ipv4.ipv4_src, TCA_FLOWER_KEY_IPV4_SRC);
>              FLOWER_PUT_MASKED_VALUE(ipv4.ipv4_dst, TCA_FLOWER_KEY_IPV4_DST);
> -            FLOWER_PUT_MASKED_VALUE(ip_ttl, TCA_FLOWER_KEY_IP_TTL);
>      } else if (host_eth_type == ETH_P_IPV6) {
>              FLOWER_PUT_MASKED_VALUE(ipv6.ipv6_src, TCA_FLOWER_KEY_IPV6_SRC);
>              FLOWER_PUT_MASKED_VALUE(ipv6.ipv6_dst, TCA_FLOWER_KEY_IPV6_DST);
> -- 
> 2.5.5
> 


More information about the dev mailing list