/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ /* Copyright (C) 2017-2018 Netronome Systems, Inc. */ #ifndef NFP_FLOWER_CMSG_H #define NFP_FLOWER_CMSG_H #include <linux/bitfield.h> #include <linux/skbuff.h> #include <linux/types.h> #include <net/geneve.h> #include <net/gre.h> #include <net/vxlan.h> #include "../nfp_app.h" #include "../nfpcore/nfp_cpp.h" #define NFP_FLOWER_LAYER_EXT_META … #define NFP_FLOWER_LAYER_PORT … #define NFP_FLOWER_LAYER_MAC … #define NFP_FLOWER_LAYER_TP … #define NFP_FLOWER_LAYER_IPV4 … #define NFP_FLOWER_LAYER_IPV6 … #define NFP_FLOWER_LAYER_CT … #define NFP_FLOWER_LAYER_VXLAN … #define NFP_FLOWER_LAYER2_GRE … #define NFP_FLOWER_LAYER2_QINQ … #define NFP_FLOWER_LAYER2_GENEVE … #define NFP_FLOWER_LAYER2_GENEVE_OP … #define NFP_FLOWER_LAYER2_TUN_IPV6 … #define NFP_FLOWER_MASK_VLAN_PRIO … #define NFP_FLOWER_MASK_VLAN_PRESENT … #define NFP_FLOWER_MASK_VLAN_VID … #define NFP_FLOWER_MASK_MPLS_LB … #define NFP_FLOWER_MASK_MPLS_TC … #define NFP_FLOWER_MASK_MPLS_BOS … #define NFP_FLOWER_MASK_MPLS_Q … #define NFP_FL_IP_FRAG_FIRST … #define NFP_FL_IP_FRAGMENTED … /* GRE Tunnel flags */ #define NFP_FL_GRE_FLAG_KEY … /* Compressed HW representation of TCP Flags */ #define NFP_FL_TCP_FLAG_URG … #define NFP_FL_TCP_FLAG_PSH … #define NFP_FL_TCP_FLAG_RST … #define NFP_FL_TCP_FLAG_SYN … #define NFP_FL_TCP_FLAG_FIN … #define NFP_FL_SC_ACT_DROP … #define NFP_FL_SC_ACT_USER … #define NFP_FL_SC_ACT_POPV … #define NFP_FL_SC_ACT_NULL … /* The maximum action list size (in bytes) supported by the NFP. */ #define NFP_FL_MAX_A_SIZ … #define NFP_FL_LW_SIZ … /* Maximum allowed geneve options */ #define NFP_FL_MAX_GENEVE_OPT_ACT … #define NFP_FL_MAX_GENEVE_OPT_CNT … #define NFP_FL_MAX_GENEVE_OPT_KEY … #define NFP_FL_MAX_GENEVE_OPT_KEY_V6 … /* Action opcodes */ #define NFP_FL_ACTION_OPCODE_OUTPUT … #define NFP_FL_ACTION_OPCODE_PUSH_VLAN … #define NFP_FL_ACTION_OPCODE_POP_VLAN … #define NFP_FL_ACTION_OPCODE_PUSH_MPLS … #define NFP_FL_ACTION_OPCODE_POP_MPLS … #define NFP_FL_ACTION_OPCODE_SET_TUNNEL … #define NFP_FL_ACTION_OPCODE_SET_ETHERNET … #define NFP_FL_ACTION_OPCODE_SET_MPLS … #define NFP_FL_ACTION_OPCODE_SET_IPV4_ADDRS … #define NFP_FL_ACTION_OPCODE_SET_IPV4_TTL_TOS … #define NFP_FL_ACTION_OPCODE_SET_IPV6_SRC … #define NFP_FL_ACTION_OPCODE_SET_IPV6_DST … #define NFP_FL_ACTION_OPCODE_SET_IPV6_TC_HL_FL … #define NFP_FL_ACTION_OPCODE_SET_UDP … #define NFP_FL_ACTION_OPCODE_SET_TCP … #define NFP_FL_ACTION_OPCODE_PRE_LAG … #define NFP_FL_ACTION_OPCODE_PRE_TUNNEL … #define NFP_FL_ACTION_OPCODE_METER … #define NFP_FL_ACTION_OPCODE_PUSH_GENEVE … #define NFP_FL_ACTION_OPCODE_NUM … #define NFP_FL_OUT_FLAGS_LAST … #define NFP_FL_OUT_FLAGS_USE_TUN … #define NFP_FL_OUT_FLAGS_TYPE_IDX … #define NFP_FL_PUSH_VLAN_PRIO … #define NFP_FL_PUSH_VLAN_VID … /* LAG ports */ #define NFP_FL_LAG_OUT … /* Tunnel ports */ #define NFP_FL_PORT_TYPE_TUN … #define NFP_FL_TUNNEL_TYPE … #define NFP_FL_PRE_TUN_INDEX … #define NFP_FLOWER_WORKQ_MAX_SKBS … /* Cmesg reply (empirical) timeout*/ #define NFP_FL_REPLY_TIMEOUT … #define nfp_flower_cmsg_warn(app, fmt, args...) … enum nfp_flower_tun_type { … }; struct nfp_fl_act_head { … }; struct nfp_fl_set_eth { … }; struct nfp_fl_set_ip4_addrs { … }; struct nfp_fl_set_ip4_ttl_tos { … }; struct nfp_fl_set_ipv6_tc_hl_fl { … }; struct nfp_fl_set_ipv6_addr { … }; struct nfp_fl_set_tport { … }; struct nfp_fl_output { … }; struct nfp_fl_push_vlan { … }; struct nfp_fl_pop_vlan { … }; struct nfp_fl_pre_lag { … }; #define NFP_FL_PRE_LAG_VER_OFF … struct nfp_fl_pre_tunnel { … }; #define NFP_FL_PRE_TUN_IPV6 … struct nfp_fl_set_tun { … }; struct nfp_fl_push_geneve { … }; struct nfp_fl_push_mpls { … }; struct nfp_fl_pop_mpls { … }; struct nfp_fl_set_mpls { … }; struct nfp_fl_meter { … }; /* Metadata with L2 (1W/4B) * ---------------------------------------------------------------- * 3 2 1 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | key_type | mask_id | PCP |p| vlan outermost VID | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * ^ ^ * NOTE: | TCI | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ struct nfp_flower_meta_tci { … }; /* Extended metadata for additional key_layers (1W/4B) * ---------------------------------------------------------------- * 3 2 1 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | nfp_flow_key_layer2 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ struct nfp_flower_ext_meta { … }; /* Port details (1W/4B) * ---------------------------------------------------------------- * 3 2 1 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | port_ingress | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ struct nfp_flower_in_port { … }; /* L2 details (4W/16B) * 3 2 1 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | mac_addr_dst, 31 - 0 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | mac_addr_dst, 47 - 32 | mac_addr_src, 15 - 0 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | mac_addr_src, 47 - 16 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | mpls outermost label | TC |B| reserved |q| * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ struct nfp_flower_mac_mpls { … }; /* VLAN details (2W/8B) * 3 2 1 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | outer_tpid | outer_tci | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | inner_tpid | inner_tci | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ struct nfp_flower_vlan { … }; /* L4 ports (for UDP, TCP, SCTP) (1W/4B) * 3 2 1 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | port_src | port_dst | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ struct nfp_flower_tp_ports { … }; struct nfp_flower_ip_ext { … }; /* L3 IPv4 details (3W/12B) * 3 2 1 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | DSCP |ECN| protocol | ttl | flags | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv4_addr_src | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv4_addr_dst | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ struct nfp_flower_ipv4 { … }; /* L3 IPv6 details (10W/40B) * 3 2 1 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | DSCP |ECN| protocol | ttl | flags | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_exthdr | res | ipv6_flow_label | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_src, 31 - 0 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_src, 63 - 32 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_src, 95 - 64 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_src, 127 - 96 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_dst, 31 - 0 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_dst, 63 - 32 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_dst, 95 - 64 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_dst, 127 - 96 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ struct nfp_flower_ipv6 { … }; struct nfp_flower_tun_ipv4 { … }; struct nfp_flower_tun_ipv6 { … }; struct nfp_flower_tun_ip_ext { … }; /* Flow Frame IPv4 UDP TUNNEL --> Tunnel details (4W/16B) * ----------------------------------------------------------------- * 3 2 1 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv4_addr_src | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv4_addr_dst | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Reserved | tos | ttl | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Reserved | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | VNI | Reserved | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ struct nfp_flower_ipv4_udp_tun { … }; /* Flow Frame IPv6 UDP TUNNEL --> Tunnel details (11W/44B) * ----------------------------------------------------------------- * 3 2 1 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_src, 31 - 0 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_src, 63 - 32 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_src, 95 - 64 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_src, 127 - 96 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_dst, 31 - 0 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_dst, 63 - 32 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_dst, 95 - 64 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_dst, 127 - 96 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Reserved | tos | ttl | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Reserved | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | VNI | Reserved | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ struct nfp_flower_ipv6_udp_tun { … }; /* Flow Frame GRE TUNNEL --> Tunnel details (6W/24B) * ----------------------------------------------------------------- * 3 2 1 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv4_addr_src | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv4_addr_dst | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | tun_flags | tos | ttl | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Reserved | Ethertype | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Key | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Reserved | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ struct nfp_flower_ipv4_gre_tun { … }; /* Flow Frame GRE TUNNEL V6 --> Tunnel details (12W/48B) * ----------------------------------------------------------------- * 3 2 1 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_src, 31 - 0 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_src, 63 - 32 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_src, 95 - 64 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_src, 127 - 96 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_dst, 31 - 0 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_dst, 63 - 32 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_dst, 95 - 64 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ipv6_addr_dst, 127 - 96 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | tun_flags | tos | ttl | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Reserved | Ethertype | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Key | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Reserved | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ struct nfp_flower_ipv6_gre_tun { … }; struct nfp_flower_geneve_options { … }; #define NFP_FL_TUN_VNI_OFFSET … /* The base header for a control message packet. * Defines an 8-bit version, and an 8-bit type, padded * to a 32-bit word. Rest of the packet is type-specific. */ struct nfp_flower_cmsg_hdr { … }; #define NFP_FLOWER_CMSG_HLEN … #define NFP_FLOWER_CMSG_VER1 … /* Types defined for port related control messages */ enum nfp_flower_cmsg_type_port { … }; /* NFP_FLOWER_CMSG_TYPE_MAC_REPR */ struct nfp_flower_cmsg_mac_repr { … }; #define NFP_FLOWER_CMSG_MAC_REPR_NBI … /* NFP_FLOWER_CMSG_TYPE_PORT_MOD */ struct nfp_flower_cmsg_portmod { … }; #define NFP_FLOWER_CMSG_PORTMOD_INFO_LINK … #define NFP_FLOWER_CMSG_PORTMOD_MTU_CHANGE_ONLY … /* NFP_FLOWER_CMSG_TYPE_PORT_REIFY */ struct nfp_flower_cmsg_portreify { … }; #define NFP_FLOWER_CMSG_PORTREIFY_INFO_EXIST … /* NFP_FLOWER_CMSG_TYPE_FLOW_MERGE_HINT */ struct nfp_flower_cmsg_merge_hint { … }; enum nfp_flower_cmsg_port_type { … }; enum nfp_flower_cmsg_port_vnic_type { … }; #define NFP_FLOWER_CMSG_PORT_TYPE … #define NFP_FLOWER_CMSG_PORT_SYS_ID … #define NFP_FLOWER_CMSG_PORT_NFP_ID … #define NFP_FLOWER_CMSG_PORT_PCI … #define NFP_FLOWER_CMSG_PORT_VNIC_TYPE … #define NFP_FLOWER_CMSG_PORT_VNIC … #define NFP_FLOWER_CMSG_PORT_PCIE_Q … #define NFP_FLOWER_CMSG_PORT_PHYS_PORT_NUM … static inline u32 nfp_flower_internal_port_get_port_id(u8 internal_port) { … } static inline u32 nfp_flower_cmsg_phys_port(u8 phys_port) { … } static inline u32 nfp_flower_cmsg_pcie_port(u8 nfp_pcie, enum nfp_flower_cmsg_port_vnic_type type, u8 vnic, u8 q) { … } static inline void *nfp_flower_cmsg_get_data(struct sk_buff *skb) { … } static inline int nfp_flower_cmsg_get_data_len(struct sk_buff *skb) { … } static inline bool nfp_fl_netdev_is_tunnel_type(struct net_device *netdev, enum nfp_flower_tun_type tun_type) { … } static inline bool nfp_fl_is_netdev_to_offload(struct net_device *netdev) { … } struct sk_buff * nfp_flower_cmsg_mac_repr_start(struct nfp_app *app, unsigned int num_ports); void nfp_flower_cmsg_mac_repr_add(struct sk_buff *skb, unsigned int idx, unsigned int nbi, unsigned int nbi_port, unsigned int phys_port); int nfp_flower_cmsg_portmod(struct nfp_repr *repr, bool carrier_ok, unsigned int mtu, bool mtu_only); int nfp_flower_cmsg_portreify(struct nfp_repr *repr, bool exists); void nfp_flower_cmsg_process_rx(struct work_struct *work); void nfp_flower_cmsg_rx(struct nfp_app *app, struct sk_buff *skb); struct sk_buff * nfp_flower_cmsg_alloc(struct nfp_app *app, unsigned int size, enum nfp_flower_cmsg_type_port type, gfp_t flag); #endif