From: Paul Blakey <pa...@mellanox.com> Split dst/src_port and ipv4/ipv6 union so we can distingush them easily for later features.
Signed-off-by: Paul Blakey <pa...@mellanox.com> Reviewed-by: Roi Dayan <r...@mellanox.com> --- lib/netdev-tc-offloads.c | 29 +++++++++++++++++++++-------- lib/tc.c | 24 ++++++++++++------------ lib/tc.h | 25 +++++++++++++------------ 3 files changed, 46 insertions(+), 32 deletions(-) diff --git a/lib/netdev-tc-offloads.c b/lib/netdev-tc-offloads.c index 6214023..e2aea60 100644 --- a/lib/netdev-tc-offloads.c +++ b/lib/netdev-tc-offloads.c @@ -319,8 +319,15 @@ parse_tc_flower_to_match(struct tc_flower *flower, match_set_ipv6_dst_masked(match, &key->ipv6.ipv6_dst, &mask->ipv6.ipv6_dst); - match_set_tp_dst_masked(match, key->dst_port, mask->dst_port); - match_set_tp_src_masked(match, key->src_port, mask->src_port); + if (is_ip_any(&match->flow)) { + if (key->ip_proto == IPPROTO_TCP) { + match_set_tp_dst_masked(match, key->tcp_dst, mask->tcp_dst); + match_set_tp_src_masked(match, key->tcp_src, mask->tcp_src); + } else if (key->ip_proto == IPPROTO_UDP) { + match_set_tp_dst_masked(match, key->udp_dst, mask->udp_dst); + match_set_tp_src_masked(match, key->udp_src, mask->udp_src); + } + } if (flower->tunnel.tunnel) { match_set_tun_id(match, flower->tunnel.id); @@ -747,12 +754,18 @@ 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; - - if (key->nw_proto == IPPROTO_TCP || key->nw_proto == IPPROTO_UDP) { - flower.key.dst_port = key->tp_dst; - flower.mask.dst_port = mask->tp_dst; - flower.key.src_port = key->tp_src; - flower.mask.src_port = mask->tp_src; + if (key->nw_proto == IPPROTO_TCP) { + flower.key.tcp_dst = key->tp_dst; + flower.mask.tcp_dst = mask->tp_dst; + flower.key.tcp_src = key->tp_src; + flower.mask.tcp_src = mask->tp_src; + mask->tp_src = 0; + mask->tp_dst = 0; + } else if (key->nw_proto == IPPROTO_UDP) { + flower.key.udp_dst = key->tp_dst; + flower.mask.udp_dst = mask->tp_dst; + flower.key.udp_src = key->tp_src; + flower.mask.udp_src = mask->tp_src; mask->tp_src = 0; mask->tp_dst = 0; } diff --git a/lib/tc.c b/lib/tc.c index 563aba4..d724d8a 100644 --- a/lib/tc.c +++ b/lib/tc.c @@ -305,26 +305,26 @@ nl_parse_flower_ip(struct nlattr **attrs, struct tc_flower *flower) { if (ip_proto == IPPROTO_TCP) { if (attrs[TCA_FLOWER_KEY_TCP_SRC_MASK]) { - key->src_port = + key->tcp_src = nl_attr_get_be16(attrs[TCA_FLOWER_KEY_TCP_SRC]); - mask->src_port = + mask->tcp_src = nl_attr_get_be16(attrs[TCA_FLOWER_KEY_TCP_SRC_MASK]); } if (attrs[TCA_FLOWER_KEY_TCP_DST_MASK]) { - key->dst_port = + key->tcp_dst = nl_attr_get_be16(attrs[TCA_FLOWER_KEY_TCP_DST]); - mask->dst_port = + mask->tcp_dst = nl_attr_get_be16(attrs[TCA_FLOWER_KEY_TCP_DST_MASK]); } } else if (ip_proto == IPPROTO_UDP) { if (attrs[TCA_FLOWER_KEY_UDP_SRC_MASK]) { - key->src_port = nl_attr_get_be16(attrs[TCA_FLOWER_KEY_UDP_SRC]); - mask->src_port = + key->udp_src = nl_attr_get_be16(attrs[TCA_FLOWER_KEY_UDP_SRC]); + mask->udp_src = nl_attr_get_be16(attrs[TCA_FLOWER_KEY_UDP_SRC_MASK]); } if (attrs[TCA_FLOWER_KEY_UDP_DST_MASK]) { - key->dst_port = nl_attr_get_be16(attrs[TCA_FLOWER_KEY_UDP_DST]); - mask->dst_port = + key->udp_dst = nl_attr_get_be16(attrs[TCA_FLOWER_KEY_UDP_DST]); + mask->udp_dst = nl_attr_get_be16(attrs[TCA_FLOWER_KEY_UDP_DST_MASK]); } } @@ -994,11 +994,11 @@ nl_msg_put_flower_options(struct ofpbuf *request, struct tc_flower *flower) } if (flower->key.ip_proto == IPPROTO_UDP) { - FLOWER_PUT_MASKED_VALUE(src_port, TCA_FLOWER_KEY_UDP_SRC); - FLOWER_PUT_MASKED_VALUE(dst_port, TCA_FLOWER_KEY_UDP_DST); + FLOWER_PUT_MASKED_VALUE(udp_src, TCA_FLOWER_KEY_UDP_SRC); + FLOWER_PUT_MASKED_VALUE(udp_dst, TCA_FLOWER_KEY_UDP_DST); } else if (flower->key.ip_proto == IPPROTO_TCP) { - FLOWER_PUT_MASKED_VALUE(src_port, TCA_FLOWER_KEY_TCP_SRC); - FLOWER_PUT_MASKED_VALUE(dst_port, TCA_FLOWER_KEY_TCP_DST); + FLOWER_PUT_MASKED_VALUE(tcp_src, TCA_FLOWER_KEY_TCP_SRC); + FLOWER_PUT_MASKED_VALUE(tcp_dst, TCA_FLOWER_KEY_TCP_DST); } } diff --git a/lib/tc.h b/lib/tc.h index 1cc7362..571ec9f 100644 --- a/lib/tc.h +++ b/lib/tc.h @@ -76,24 +76,25 @@ struct tc_flower_key { struct eth_addr dst_mac; struct eth_addr src_mac; - ovs_be16 src_port; - ovs_be16 dst_port; + ovs_be16 tcp_src; + ovs_be16 tcp_dst; + + ovs_be16 udp_src; + ovs_be16 udp_dst; uint16_t vlan_id; uint8_t vlan_prio; ovs_be16 encap_eth_type; - union { - struct { - ovs_be32 ipv4_src; - ovs_be32 ipv4_dst; - } ipv4; - struct { - struct in6_addr ipv6_src; - struct in6_addr ipv6_dst; - } ipv6; - }; + struct { + ovs_be32 ipv4_src; + ovs_be32 ipv4_dst; + } ipv4; + struct { + struct in6_addr ipv6_src; + struct in6_addr ipv6_dst; + } ipv6; }; struct tc_flower { -- 2.7.4 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev