xref: /dpdk/drivers/common/mlx5/linux/mlx5_nl.h (revision 54245a29b3eb28fd3fb106b5e4cafe95f5211872)
159513c3eSOphir Munk /* SPDX-License-Identifier: BSD-3-Clause
259513c3eSOphir Munk  * Copyright 2019 Mellanox Technologies, Ltd
359513c3eSOphir Munk  */
459513c3eSOphir Munk 
559513c3eSOphir Munk #ifndef RTE_PMD_MLX5_NL_H_
659513c3eSOphir Munk #define RTE_PMD_MLX5_NL_H_
759513c3eSOphir Munk 
859513c3eSOphir Munk #include <linux/netlink.h>
959513c3eSOphir Munk 
101094dd94SDavid Marchand #include <rte_compat.h>
1159513c3eSOphir Munk #include <rte_ether.h>
1259513c3eSOphir Munk 
1359513c3eSOphir Munk #include "mlx5_common.h"
1459513c3eSOphir Munk 
15be66461cSDmitry Kozlyuk typedef void (mlx5_nl_event_cb)(struct nlmsghdr *hdr, void *user_data);
1659513c3eSOphir Munk 
1759513c3eSOphir Munk /* VLAN netdev for VLAN workaround. */
1859513c3eSOphir Munk struct mlx5_nl_vlan_dev {
1959513c3eSOphir Munk 	uint32_t refcnt;
2059513c3eSOphir Munk 	uint32_t ifindex; /**< Own interface index. */
2159513c3eSOphir Munk };
2259513c3eSOphir Munk 
2359513c3eSOphir Munk /*
2459513c3eSOphir Munk  * Array of VLAN devices created on the base of VF
2559513c3eSOphir Munk  * used for workaround in virtual environments.
2659513c3eSOphir Munk  */
2759513c3eSOphir Munk struct mlx5_nl_vlan_vmwa_context {
2859513c3eSOphir Munk 	int nl_socket;
2959513c3eSOphir Munk 	uint32_t vf_ifindex;
30c6ca0582SSuanming Mou 	rte_spinlock_t sl;
3159513c3eSOphir Munk 	struct mlx5_nl_vlan_dev vlan_dev[4096];
3259513c3eSOphir Munk };
3359513c3eSOphir Munk 
3459513c3eSOphir Munk __rte_internal
35be66461cSDmitry Kozlyuk int mlx5_nl_init(int protocol, int groups);
3659513c3eSOphir Munk __rte_internal
3759513c3eSOphir Munk int mlx5_nl_mac_addr_add(int nlsk_fd, unsigned int iface_idx, uint64_t *mac_own,
3859513c3eSOphir Munk 			 struct rte_ether_addr *mac, uint32_t index);
3959513c3eSOphir Munk __rte_internal
4059513c3eSOphir Munk int mlx5_nl_mac_addr_remove(int nlsk_fd, unsigned int iface_idx,
4159513c3eSOphir Munk 			    uint64_t *mac_own, struct rte_ether_addr *mac,
4259513c3eSOphir Munk 			    uint32_t index);
4359513c3eSOphir Munk __rte_internal
4459513c3eSOphir Munk void mlx5_nl_mac_addr_sync(int nlsk_fd, unsigned int iface_idx,
4559513c3eSOphir Munk 			   struct rte_ether_addr *mac_addrs, int n);
4659513c3eSOphir Munk __rte_internal
4759513c3eSOphir Munk void mlx5_nl_mac_addr_flush(int nlsk_fd, unsigned int iface_idx,
4859513c3eSOphir Munk 			    struct rte_ether_addr *mac_addrs, int n,
4959513c3eSOphir Munk 			    uint64_t *mac_own);
5059513c3eSOphir Munk __rte_internal
5159513c3eSOphir Munk int mlx5_nl_promisc(int nlsk_fd, unsigned int iface_idx, int enable);
5259513c3eSOphir Munk __rte_internal
5359513c3eSOphir Munk int mlx5_nl_allmulti(int nlsk_fd, unsigned int iface_idx, int enable);
5459513c3eSOphir Munk __rte_internal
5559513c3eSOphir Munk unsigned int mlx5_nl_portnum(int nl, const char *name);
5659513c3eSOphir Munk __rte_internal
5759513c3eSOphir Munk unsigned int mlx5_nl_ifindex(int nl, const char *name, uint32_t pindex);
5859513c3eSOphir Munk __rte_internal
59227813f2SXueming Li int mlx5_nl_port_state(int nl, const char *name, uint32_t pindex);
60227813f2SXueming Li __rte_internal
6159513c3eSOphir Munk int mlx5_nl_vf_mac_addr_modify(int nlsk_fd, unsigned int iface_idx,
6259513c3eSOphir Munk 			       struct rte_ether_addr *mac, int vf_index);
6359513c3eSOphir Munk __rte_internal
6459513c3eSOphir Munk int mlx5_nl_switch_info(int nl, unsigned int ifindex,
6559513c3eSOphir Munk 			struct mlx5_switch_info *info);
6659513c3eSOphir Munk 
6759513c3eSOphir Munk __rte_internal
6859513c3eSOphir Munk void mlx5_nl_vlan_vmwa_delete(struct mlx5_nl_vlan_vmwa_context *vmwa,
6959513c3eSOphir Munk 			      uint32_t ifindex);
7059513c3eSOphir Munk __rte_internal
7159513c3eSOphir Munk uint32_t mlx5_nl_vlan_vmwa_create(struct mlx5_nl_vlan_vmwa_context *vmwa,
7259513c3eSOphir Munk 				  uint32_t ifindex, uint16_t tag);
73662d0dc6SMichael Baum 
74*54245a29SDariusz Sosnowski __rte_internal
7559513c3eSOphir Munk int mlx5_nl_devlink_family_id_get(int nlsk_fd);
7659513c3eSOphir Munk int mlx5_nl_enable_roce_get(int nlsk_fd, int family_id, const char *pci_addr,
7759513c3eSOphir Munk 			    int *enable);
7859513c3eSOphir Munk int mlx5_nl_enable_roce_set(int nlsk_fd, int family_id, const char *pci_addr,
7959513c3eSOphir Munk 			    int enable);
8059513c3eSOphir Munk 
81be66461cSDmitry Kozlyuk __rte_internal
82be66461cSDmitry Kozlyuk int mlx5_nl_read_events(int nlsk_fd, mlx5_nl_event_cb *cb, void *cb_arg);
83be66461cSDmitry Kozlyuk __rte_internal
84be66461cSDmitry Kozlyuk int mlx5_nl_parse_link_status_update(struct nlmsghdr *hdr, uint32_t *ifindex);
85be66461cSDmitry Kozlyuk 
86*54245a29SDariusz Sosnowski __rte_internal
87*54245a29SDariusz Sosnowski int mlx5_nl_devlink_esw_multiport_get(int nlsk_fd, int family_id,
88*54245a29SDariusz Sosnowski 				      const char *pci_addr, int *enable);
89*54245a29SDariusz Sosnowski 
9059513c3eSOphir Munk #endif /* RTE_PMD_MLX5_NL_H_ */
91