On Mon, Sep 18, 2017 at 07:16:04AM +0300, Roi Dayan wrote: > From: Paul Blakey <pa...@mellanox.com> > > Implement support for offloading ovs action set using > tc header rewrite action. > > Signed-off-by: Paul Blakey <pa...@mellanox.com> > Reviewed-by: Roi Dayan <r...@mellanox.com> > --- > lib/netdev-tc-offloads.c | 201 > +++++++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 195 insertions(+), 6 deletions(-) > > diff --git a/lib/netdev-tc-offloads.c b/lib/netdev-tc-offloads.c > index 3c145c2..4044a77 100644 > --- a/lib/netdev-tc-offloads.c > +++ b/lib/netdev-tc-offloads.c > @@ -27,11 +27,13 @@ > #include "openvswitch/ofpbuf.h" > #include "openvswitch/thread.h" > #include "openvswitch/types.h" > +#include "openvswitch/util.h" > #include "openvswitch/vlog.h" > #include "netdev-linux.h" > #include "netlink.h" > #include "netlink-socket.h" > #include "odp-netlink.h" > +#include "odp-util.h" > #include "tc.h" > #include "unaligned.h" > #include "util.h" > @@ -41,6 +43,76 @@ VLOG_DEFINE_THIS_MODULE(netdev_tc_offloads); > static struct vlog_rate_limit error_rl = VLOG_RATE_LIMIT_INIT(60, 5); > > static struct hmap ufid_tc = HMAP_INITIALIZER(&ufid_tc); > + > +struct netlink_field { > + int offset; > + int flower_offset; > + int size; > +}; > + > +static struct netlink_field set_flower_map[][3] = { > + [OVS_KEY_ATTR_IPV4] = { > + { offsetof(struct ovs_key_ipv4, ipv4_src), > + offsetof(struct tc_flower_key, ipv4.ipv4_src), > + MEMBER_SIZEOF(struct tc_flower_key, ipv4.ipv4_src) > + }, > + { offsetof(struct ovs_key_ipv4, ipv4_dst), > + offsetof(struct tc_flower_key, ipv4.ipv4_dst), > + MEMBER_SIZEOF(struct tc_flower_key, ipv4.ipv4_dst) > + }, > + { offsetof(struct ovs_key_ipv4, ipv4_ttl), > + offsetof(struct tc_flower_key, ipv4.rewrite_ttl), > + MEMBER_SIZEOF(struct tc_flower_key, ipv4.rewrite_ttl) > + }, > + }, > + [OVS_KEY_ATTR_IPV6] = { > + { offsetof(struct ovs_key_ipv6, ipv6_src), > + offsetof(struct tc_flower_key, ipv6.ipv6_src), > + MEMBER_SIZEOF(struct tc_flower_key, ipv6.ipv6_src) > + }, > + { offsetof(struct ovs_key_ipv6, ipv6_dst), > + offsetof(struct tc_flower_key, ipv6.ipv6_dst), > + MEMBER_SIZEOF(struct tc_flower_key, ipv6.ipv6_dst) > + }, > + }, > + [OVS_KEY_ATTR_ETHERNET] = { > + { offsetof(struct ovs_key_ethernet, eth_src), > + offsetof(struct tc_flower_key, src_mac), > + MEMBER_SIZEOF(struct tc_flower_key, src_mac) > + }, > + { offsetof(struct ovs_key_ethernet, eth_dst), > + offsetof(struct tc_flower_key, dst_mac), > + MEMBER_SIZEOF(struct tc_flower_key, dst_mac) > + }, > + }, > + [OVS_KEY_ATTR_ETHERTYPE] = { > + { 0, > + offsetof(struct tc_flower_key, eth_type), > + MEMBER_SIZEOF(struct tc_flower_key, eth_type) > + }, > + }, > + [OVS_KEY_ATTR_TCP] = { > + { offsetof(struct ovs_key_tcp, tcp_src), > + offsetof(struct tc_flower_key, tcp_src), > + MEMBER_SIZEOF(struct tc_flower_key, tcp_src) > + }, > + { offsetof(struct ovs_key_tcp, tcp_dst), > + offsetof(struct tc_flower_key, tcp_dst), > + MEMBER_SIZEOF(struct tc_flower_key, tcp_dst) > + }, > + }, > + [OVS_KEY_ATTR_UDP] = { > + { offsetof(struct ovs_key_udp, udp_src), > + offsetof(struct tc_flower_key, udp_src), > + MEMBER_SIZEOF(struct tc_flower_key, udp_src) > + }, > + { offsetof(struct ovs_key_udp, udp_dst), > + offsetof(struct tc_flower_key, udp_dst), > + MEMBER_SIZEOF(struct tc_flower_key, udp_dst) > + }, > + }, > +};
Do you have any plans to add the following? OVS_KEY_ATTR_ICMP OVS_KEY_ATTR_ICMPV6 OVS_KEY_ATTR_ARP OVS_KEY_ATTR_ND OVS_KEY_ATTR_SCTP OVS_KEY_ATTR_TCP_FLAGS ... _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev