xref: /dpdk/drivers/common/mlx5/linux/mlx5_nl.h (revision 0d09cbc7)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2019 Mellanox Technologies, Ltd
3  */
4 
5 #ifndef RTE_PMD_MLX5_NL_H_
6 #define RTE_PMD_MLX5_NL_H_
7 
8 #include <linux/netlink.h>
9 
10 #include <rte_ether.h>
11 
12 #include "mlx5_common.h"
13 
14 
15 /* VLAN netdev for VLAN workaround. */
16 struct mlx5_nl_vlan_dev {
17 	uint32_t refcnt;
18 	uint32_t ifindex; /**< Own interface index. */
19 };
20 
21 /*
22  * Array of VLAN devices created on the base of VF
23  * used for workaround in virtual environments.
24  */
25 struct mlx5_nl_vlan_vmwa_context {
26 	int nl_socket;
27 	uint32_t vf_ifindex;
28 	struct mlx5_nl_vlan_dev vlan_dev[4096];
29 };
30 
31 __rte_internal
32 int mlx5_nl_init(int protocol);
33 __rte_internal
34 int mlx5_nl_mac_addr_add(int nlsk_fd, unsigned int iface_idx, uint64_t *mac_own,
35 			 struct rte_ether_addr *mac, uint32_t index);
36 __rte_internal
37 int mlx5_nl_mac_addr_remove(int nlsk_fd, unsigned int iface_idx,
38 			    uint64_t *mac_own, struct rte_ether_addr *mac,
39 			    uint32_t index);
40 __rte_internal
41 void mlx5_nl_mac_addr_sync(int nlsk_fd, unsigned int iface_idx,
42 			   struct rte_ether_addr *mac_addrs, int n);
43 __rte_internal
44 void mlx5_nl_mac_addr_flush(int nlsk_fd, unsigned int iface_idx,
45 			    struct rte_ether_addr *mac_addrs, int n,
46 			    uint64_t *mac_own);
47 __rte_internal
48 int mlx5_nl_promisc(int nlsk_fd, unsigned int iface_idx, int enable);
49 __rte_internal
50 int mlx5_nl_allmulti(int nlsk_fd, unsigned int iface_idx, int enable);
51 __rte_internal
52 unsigned int mlx5_nl_portnum(int nl, const char *name);
53 __rte_internal
54 unsigned int mlx5_nl_ifindex(int nl, const char *name, uint32_t pindex);
55 __rte_internal
56 int mlx5_nl_vf_mac_addr_modify(int nlsk_fd, unsigned int iface_idx,
57 			       struct rte_ether_addr *mac, int vf_index);
58 __rte_internal
59 int mlx5_nl_switch_info(int nl, unsigned int ifindex,
60 			struct mlx5_switch_info *info);
61 
62 __rte_internal
63 void mlx5_nl_vlan_vmwa_delete(struct mlx5_nl_vlan_vmwa_context *vmwa,
64 			      uint32_t ifindex);
65 __rte_internal
66 uint32_t mlx5_nl_vlan_vmwa_create(struct mlx5_nl_vlan_vmwa_context *vmwa,
67 				  uint32_t ifindex, uint16_t tag);
68 __rte_internal
69 int mlx5_nl_devlink_family_id_get(int nlsk_fd);
70 __rte_internal
71 int mlx5_nl_enable_roce_get(int nlsk_fd, int family_id, const char *pci_addr,
72 			    int *enable);
73 __rte_internal
74 int mlx5_nl_driver_reload(int nlsk_fd, int family_id, const char *pci_addr);
75 __rte_internal
76 int mlx5_nl_enable_roce_set(int nlsk_fd, int family_id, const char *pci_addr,
77 			    int enable);
78 
79 #endif /* RTE_PMD_MLX5_NL_H_ */
80