]> git.proxmox.com Git - mirror_ovs.git/commitdiff
tc: Add matching on tcp flags
authorPaul Blakey <paulb@mellanox.com>
Mon, 7 Aug 2017 15:19:10 +0000 (18:19 +0300)
committerJoe Stringer <joe@ovn.org>
Fri, 11 Aug 2017 18:43:40 +0000 (11:43 -0700)
To be used later for offloading rules matching on tcp_flags.

Signed-off-by: Paul Blakey <paulb@mellanox.com>
Reviewed-by: Roi Dayan <roid@mellanox.com>
Acked-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: Joe Stringer <joe@ovn.org>
lib/tc.c
lib/tc.h

index 5a3a82af5c9b229eba22b0c2c119bf38310dc65f..c9cada249de3b7c07b8412661c869bf1f14e6abd 100644 (file)
--- a/lib/tc.c
+++ b/lib/tc.c
@@ -200,6 +200,10 @@ static const struct nl_policy tca_flower_policy[] = {
                                 .optional = true, },
     [TCA_FLOWER_KEY_IP_TTL_MASK] = { .type = NL_A_U8,
                                      .optional = true, },
+    [TCA_FLOWER_KEY_TCP_FLAGS] = { .type = NL_A_U16,
+                                   .optional = true, },
+    [TCA_FLOWER_KEY_TCP_FLAGS_MASK] = { .type = NL_A_U16,
+                                        .optional = true, },
 };
 
 static void
@@ -325,6 +329,12 @@ nl_parse_flower_ip(struct nlattr **attrs, struct tc_flower *flower) {
             mask->tcp_dst =
                 nl_attr_get_be16(attrs[TCA_FLOWER_KEY_TCP_DST_MASK]);
         }
+        if (attrs[TCA_FLOWER_KEY_TCP_FLAGS_MASK]) {
+            key->tcp_flags =
+                nl_attr_get_be16(attrs[TCA_FLOWER_KEY_TCP_FLAGS]);
+            mask->tcp_flags =
+                nl_attr_get_be16(attrs[TCA_FLOWER_KEY_TCP_FLAGS_MASK]);
+        }
     } else if (ip_proto == IPPROTO_UDP) {
         if (attrs[TCA_FLOWER_KEY_UDP_SRC_MASK]) {
             key->udp_src = nl_attr_get_be16(attrs[TCA_FLOWER_KEY_UDP_SRC]);
@@ -1036,6 +1046,7 @@ nl_msg_put_flower_options(struct ofpbuf *request, struct tc_flower *flower)
         } else if (flower->key.ip_proto == IPPROTO_TCP) {
             FLOWER_PUT_MASKED_VALUE(tcp_src, TCA_FLOWER_KEY_TCP_SRC);
             FLOWER_PUT_MASKED_VALUE(tcp_dst, TCA_FLOWER_KEY_TCP_DST);
+            FLOWER_PUT_MASKED_VALUE(tcp_flags, TCA_FLOWER_KEY_TCP_FLAGS);
         } else if (flower->key.ip_proto == IPPROTO_SCTP) {
             FLOWER_PUT_MASKED_VALUE(sctp_src, TCA_FLOWER_KEY_SCTP_SRC);
             FLOWER_PUT_MASKED_VALUE(sctp_dst, TCA_FLOWER_KEY_SCTP_DST);
index 362e751251b1fb906aa18c08a617f5e3bdc38ea4..6c69b79055996e85abe2b0616e1399e6a352add1 100644 (file)
--- a/lib/tc.h
+++ b/lib/tc.h
@@ -78,6 +78,7 @@ struct tc_flower_key {
 
     ovs_be16 tcp_src;
     ovs_be16 tcp_dst;
+    ovs_be16 tcp_flags;
 
     ovs_be16 udp_src;
     ovs_be16 udp_dst;