From: Vlad Buslov <[email protected]> Imlement SCTP source and destination ports support for flower
Signed-off-by: Vlad Buslov <[email protected]> Reviewed-by: Paul Blakey <[email protected]> Acked-by: Roi Dayan <[email protected]> --- 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 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
