1
2
3
4 #ifndef __MLX5_EN_TC_TUNNEL_H__
5 #define __MLX5_EN_TC_TUNNEL_H__
6
7 #include <linux/netdevice.h>
8 #include <linux/mlx5/fs.h>
9 #include <net/pkt_cls.h>
10 #include <linux/netlink.h>
11 #include "en.h"
12 #include "en_rep.h"
13
14 enum {
15 MLX5E_TC_TUNNEL_TYPE_UNKNOWN,
16 MLX5E_TC_TUNNEL_TYPE_VXLAN,
17 MLX5E_TC_TUNNEL_TYPE_GENEVE,
18 MLX5E_TC_TUNNEL_TYPE_GRETAP,
19 };
20
21 struct mlx5e_tc_tunnel {
22 int tunnel_type;
23 enum mlx5_flow_match_level match_level;
24
25 bool (*can_offload)(struct mlx5e_priv *priv);
26 int (*calc_hlen)(struct mlx5e_encap_entry *e);
27 int (*init_encap_attr)(struct net_device *tunnel_dev,
28 struct mlx5e_priv *priv,
29 struct mlx5e_encap_entry *e,
30 struct netlink_ext_ack *extack);
31 int (*generate_ip_tun_hdr)(char buf[],
32 __u8 *ip_proto,
33 struct mlx5e_encap_entry *e);
34 int (*parse_udp_ports)(struct mlx5e_priv *priv,
35 struct mlx5_flow_spec *spec,
36 struct flow_cls_offload *f,
37 void *headers_c,
38 void *headers_v);
39 int (*parse_tunnel)(struct mlx5e_priv *priv,
40 struct mlx5_flow_spec *spec,
41 struct flow_cls_offload *f,
42 void *headers_c,
43 void *headers_v);
44 };
45
46 extern struct mlx5e_tc_tunnel vxlan_tunnel;
47 extern struct mlx5e_tc_tunnel geneve_tunnel;
48 extern struct mlx5e_tc_tunnel gre_tunnel;
49
50 struct mlx5e_tc_tunnel *mlx5e_get_tc_tun(struct net_device *tunnel_dev);
51
52 int mlx5e_tc_tun_init_encap_attr(struct net_device *tunnel_dev,
53 struct mlx5e_priv *priv,
54 struct mlx5e_encap_entry *e,
55 struct netlink_ext_ack *extack);
56
57 int mlx5e_tc_tun_create_header_ipv4(struct mlx5e_priv *priv,
58 struct net_device *mirred_dev,
59 struct mlx5e_encap_entry *e);
60
61 int mlx5e_tc_tun_create_header_ipv6(struct mlx5e_priv *priv,
62 struct net_device *mirred_dev,
63 struct mlx5e_encap_entry *e);
64
65 bool mlx5e_tc_tun_device_to_offload(struct mlx5e_priv *priv,
66 struct net_device *netdev);
67
68 int mlx5e_tc_tun_parse(struct net_device *filter_dev,
69 struct mlx5e_priv *priv,
70 struct mlx5_flow_spec *spec,
71 struct flow_cls_offload *f,
72 void *headers_c,
73 void *headers_v, u8 *match_level);
74
75 int mlx5e_tc_tun_parse_udp_ports(struct mlx5e_priv *priv,
76 struct mlx5_flow_spec *spec,
77 struct flow_cls_offload *f,
78 void *headers_c,
79 void *headers_v);
80
81 #endif