[ovs-dev] [PATCH] tc: Add SCTP support
Roi Dayan
roid at mellanox.com
Tue Jul 25 05:29:31 UTC 2017
From: Vlad Buslov <vladbu at mellanox.com>
Imlement 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>
---
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