[ovs-dev] [PATCH V2] tc: Add SCTP support

Roi Dayan roid at mellanox.com
Tue Jul 25 11:39:51 UTC 2017


From: Vlad Buslov <vladbu at mellanox.com>

Implement SCTP source and destination ports support for flower.

Signed-off-by: Vlad Buslov <vladbu at mellanox.com>
Reviewed-by: Paul Blakey <paulb at mellanox.com>
Acked-by: Roi Dayan <roid at mellanox.com>
---

V1->V2
    - Fix typo in commit message.


 lib/netdev-tc-offloads.c |  4 +++-
 lib/tc.c                 | 26 ++++++++++++++++++++++++++
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/lib/netdev-tc-offloads.c b/lib/netdev-tc-offloads.c
index c98c259..318e030 100644
--- a/lib/netdev-tc-offloads.c
+++ b/lib/netdev-tc-offloads.c
@@ -748,7 +748,9 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match,
         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) {
+        if (key->nw_proto == IPPROTO_TCP
+            || key->nw_proto == IPPROTO_UDP
+            || key->nw_proto == IPPROTO_SCTP) {
             flower.key.dst_port = key->tp_dst;
             flower.mask.dst_port = mask->tp_dst;
             flower.key.src_port = key->tp_src;
diff --git a/lib/tc.c b/lib/tc.c
index 401690e..82c5ee7 100644
--- a/lib/tc.c
+++ b/lib/tc.c
@@ -167,6 +167,10 @@ static const struct nl_policy tca_flower_policy[] = {
     [TCA_FLOWER_KEY_UDP_DST] = { .type = NL_A_U16, .optional = true, },
     [TCA_FLOWER_KEY_UDP_SRC_MASK] = { .type = NL_A_U16, .optional = true, },
     [TCA_FLOWER_KEY_UDP_DST_MASK] = { .type = NL_A_U16, .optional = true, },
+    [TCA_FLOWER_KEY_SCTP_SRC] = { .type = NL_A_U16, .optional = true, },
+    [TCA_FLOWER_KEY_SCTP_DST] = { .type = NL_A_U16, .optional = true, },
+    [TCA_FLOWER_KEY_SCTP_SRC_MASK] = { .type = NL_A_U16, .optional = true, },
+    [TCA_FLOWER_KEY_SCTP_DST_MASK] = { .type = NL_A_U16, .optional = true, },
     [TCA_FLOWER_KEY_VLAN_ID] = { .type = NL_A_U16, .optional = true, },
     [TCA_FLOWER_KEY_VLAN_PRIO] = { .type = NL_A_U8, .optional = true, },
     [TCA_FLOWER_KEY_VLAN_ETH_TYPE] = { .type = NL_A_U16, .optional = true, },
@@ -327,6 +331,17 @@ nl_parse_flower_ip(struct nlattr **attrs, struct tc_flower *flower) {
             mask->dst_port =
                 nl_attr_get_be16(attrs[TCA_FLOWER_KEY_UDP_DST_MASK]);
         }
+    } else if (ip_proto == IPPROTO_SCTP) {
+        if (attrs[TCA_FLOWER_KEY_SCTP_SRC_MASK]) {
+            key->src_port = nl_attr_get_be16(attrs[TCA_FLOWER_KEY_SCTP_SRC]);
+            mask->src_port =
+                nl_attr_get_be16(attrs[TCA_FLOWER_KEY_SCTP_SRC_MASK]);
+        }
+        if (attrs[TCA_FLOWER_KEY_SCTP_DST_MASK]) {
+            key->dst_port = nl_attr_get_be16(attrs[TCA_FLOWER_KEY_SCTP_DST]);
+            mask->dst_port =
+                nl_attr_get_be16(attrs[TCA_FLOWER_KEY_SCTP_DST_MASK]);
+        }
     }
 }
 
@@ -1020,6 +1035,17 @@ nl_msg_put_flower_options(struct ofpbuf *request, struct tc_flower *flower)
                                     TCA_FLOWER_KEY_TCP_DST_MASK,
                                     &flower->key.dst_port,
                                     &flower->mask.dst_port, 2);
+        } else if (flower->key.ip_proto == IPPROTO_SCTP) {
+            nl_msg_put_masked_value(request,
+                                    TCA_FLOWER_KEY_SCTP_SRC,
+                                    TCA_FLOWER_KEY_SCTP_SRC_MASK,
+                                    &flower->key.src_port,
+                                    &flower->mask.src_port, 2);
+            nl_msg_put_masked_value(request,
+                                    TCA_FLOWER_KEY_SCTP_DST,
+                                    TCA_FLOWER_KEY_SCTP_DST_MASK,
+                                    &flower->key.dst_port,
+                                    &flower->mask.dst_port, 2);
         }
     }
 
-- 
2.7.4



More information about the dev mailing list