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