1*4dc78e53SAndroid Build Coastguard Worker /* SPDX-License-Identifier: LGPL-2.1-only */ 2*4dc78e53SAndroid Build Coastguard Worker /* 3*4dc78e53SAndroid Build Coastguard Worker * Copyright (c) 2016 Intel Corp. All rights reserved. 4*4dc78e53SAndroid Build Coastguard Worker * Copyright (c) 2016 Jef Oliver <[email protected]> 5*4dc78e53SAndroid Build Coastguard Worker */ 6*4dc78e53SAndroid Build Coastguard Worker 7*4dc78e53SAndroid Build Coastguard Worker #ifndef NETLINK_LINK_SRIOV_H_ 8*4dc78e53SAndroid Build Coastguard Worker #define NETLINK_LINK_SRIOV_H_ 9*4dc78e53SAndroid Build Coastguard Worker 10*4dc78e53SAndroid Build Coastguard Worker #include <netlink/netlink.h> 11*4dc78e53SAndroid Build Coastguard Worker #include <netlink/route/link.h> 12*4dc78e53SAndroid Build Coastguard Worker 13*4dc78e53SAndroid Build Coastguard Worker #ifdef __cplusplus 14*4dc78e53SAndroid Build Coastguard Worker extern "C" { 15*4dc78e53SAndroid Build Coastguard Worker #endif 16*4dc78e53SAndroid Build Coastguard Worker 17*4dc78e53SAndroid Build Coastguard Worker #define RTNL_VF_GUID_STR_LEN 23 18*4dc78e53SAndroid Build Coastguard Worker 19*4dc78e53SAndroid Build Coastguard Worker /** 20*4dc78e53SAndroid Build Coastguard Worker * @ingroup sriov 21*4dc78e53SAndroid Build Coastguard Worker */ 22*4dc78e53SAndroid Build Coastguard Worker typedef enum { 23*4dc78e53SAndroid Build Coastguard Worker RTNL_LINK_VF_RATE_API_UNSPEC, /*!< Unspecified API type */ 24*4dc78e53SAndroid Build Coastguard Worker RTNL_LINK_VF_RATE_API_OLD, /*!< Old Rate setting API */ 25*4dc78e53SAndroid Build Coastguard Worker RTNL_LINK_VF_RATE_API_NEW, /*!< New Rate setting API */ 26*4dc78e53SAndroid Build Coastguard Worker __RTNL_LINK_VF_RATE_API_MAX, 27*4dc78e53SAndroid Build Coastguard Worker } rtnl_link_rate_api_t; 28*4dc78e53SAndroid Build Coastguard Worker 29*4dc78e53SAndroid Build Coastguard Worker #define RTNL_LINK_VF_RATE_API_MAX (__RTNL_LINK_VF_RATE_API_MAX - 1) 30*4dc78e53SAndroid Build Coastguard Worker 31*4dc78e53SAndroid Build Coastguard Worker /** 32*4dc78e53SAndroid Build Coastguard Worker * @ingroup sriov 33*4dc78e53SAndroid Build Coastguard Worker */ 34*4dc78e53SAndroid Build Coastguard Worker typedef enum { 35*4dc78e53SAndroid Build Coastguard Worker RTNL_LINK_VF_STATS_RX_PACKETS, /*!< Packets Received */ 36*4dc78e53SAndroid Build Coastguard Worker RTNL_LINK_VF_STATS_TX_PACKETS, /*!< Packets Sent */ 37*4dc78e53SAndroid Build Coastguard Worker RTNL_LINK_VF_STATS_RX_BYTES, /*!< Bytes Recieved */ 38*4dc78e53SAndroid Build Coastguard Worker RTNL_LINK_VF_STATS_TX_BYTES, /*!< Bytes Sent */ 39*4dc78e53SAndroid Build Coastguard Worker RTNL_LINK_VF_STATS_BROADCAST, /*!< Broadcast packets received */ 40*4dc78e53SAndroid Build Coastguard Worker RTNL_LINK_VF_STATS_MULTICAST, /*!< Multicast packets received */ 41*4dc78e53SAndroid Build Coastguard Worker __RTNL_LINK_VF_STATS_MAX, 42*4dc78e53SAndroid Build Coastguard Worker } rtnl_link_vf_stats_t; 43*4dc78e53SAndroid Build Coastguard Worker 44*4dc78e53SAndroid Build Coastguard Worker #define RTNL_LINK_VF_STATS_MAX (__RTNL_LINK_VF_STATS_MAX - 1) 45*4dc78e53SAndroid Build Coastguard Worker 46*4dc78e53SAndroid Build Coastguard Worker /** 47*4dc78e53SAndroid Build Coastguard Worker * @struct rtnl_link_vf sriov.h "netlink/route/link/sriov.h" 48*4dc78e53SAndroid Build Coastguard Worker * @brief SRIOV VF object 49*4dc78e53SAndroid Build Coastguard Worker * @ingroup sriov 50*4dc78e53SAndroid Build Coastguard Worker * 51*4dc78e53SAndroid Build Coastguard Worker * @copydoc private_struct 52*4dc78e53SAndroid Build Coastguard Worker */ 53*4dc78e53SAndroid Build Coastguard Worker struct rtnl_link_vf; 54*4dc78e53SAndroid Build Coastguard Worker 55*4dc78e53SAndroid Build Coastguard Worker /** 56*4dc78e53SAndroid Build Coastguard Worker * @brief SRIOV VF VFLAN settings 57*4dc78e53SAndroid Build Coastguard Worker * @ingroup sriov 58*4dc78e53SAndroid Build Coastguard Worker */ 59*4dc78e53SAndroid Build Coastguard Worker typedef struct nl_vf_vlan_info { 60*4dc78e53SAndroid Build Coastguard Worker uint32_t vf_vlan; /*!< VLAN number */ 61*4dc78e53SAndroid Build Coastguard Worker uint32_t vf_vlan_qos; /*!< VLAN QOS value */ 62*4dc78e53SAndroid Build Coastguard Worker uint16_t vf_vlan_proto; /*!< VLAN protocol */ 63*4dc78e53SAndroid Build Coastguard Worker } nl_vf_vlan_info_t; 64*4dc78e53SAndroid Build Coastguard Worker 65*4dc78e53SAndroid Build Coastguard Worker /** 66*4dc78e53SAndroid Build Coastguard Worker * @brief SRIOV VF VLANs information 67*4dc78e53SAndroid Build Coastguard Worker * @ingroup sriov 68*4dc78e53SAndroid Build Coastguard Worker */ 69*4dc78e53SAndroid Build Coastguard Worker typedef struct nl_vf_vlans { 70*4dc78e53SAndroid Build Coastguard Worker int ce_refcnt; /*!< Reference counter. Don't change this value */ 71*4dc78e53SAndroid Build Coastguard Worker int size; /*!< Number of VLANs on the SRIOV VF */ 72*4dc78e53SAndroid Build Coastguard Worker nl_vf_vlan_info_t * vlans; /*!< nl_vf_vlan_info_t array of SRIOV VF VLANs */ 73*4dc78e53SAndroid Build Coastguard Worker } nl_vf_vlans_t; 74*4dc78e53SAndroid Build Coastguard Worker 75*4dc78e53SAndroid Build Coastguard Worker /** 76*4dc78e53SAndroid Build Coastguard Worker * @brief VF Rate information structure 77*4dc78e53SAndroid Build Coastguard Worker * @ingroup sriov 78*4dc78e53SAndroid Build Coastguard Worker */ 79*4dc78e53SAndroid Build Coastguard Worker struct nl_vf_rate { 80*4dc78e53SAndroid Build Coastguard Worker int api; /*!< rtnl_link_rate_api_t API Version to use */ 81*4dc78e53SAndroid Build Coastguard Worker uint32_t rate; /*!< Old API Max Rate in Mbps */ 82*4dc78e53SAndroid Build Coastguard Worker uint32_t max_tx_rate; /*!< New API Max Rate in Mbps */ 83*4dc78e53SAndroid Build Coastguard Worker uint32_t min_tx_rate; /*!< New API Mix Rate in Mbps */ 84*4dc78e53SAndroid Build Coastguard Worker }; 85*4dc78e53SAndroid Build Coastguard Worker 86*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_link_vf_add(struct rtnl_link *, struct rtnl_link_vf *); 87*4dc78e53SAndroid Build Coastguard Worker extern struct rtnl_link_vf *rtnl_link_vf_alloc(void); 88*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_link_vf_free(struct rtnl_link_vf *); 89*4dc78e53SAndroid Build Coastguard Worker extern struct rtnl_link_vf *rtnl_link_vf_get(struct rtnl_link *, uint32_t); 90*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_link_vf_put(struct rtnl_link_vf *); 91*4dc78e53SAndroid Build Coastguard Worker 92*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_link_vf_get_addr(struct rtnl_link_vf *, struct nl_addr **); 93*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_link_vf_set_addr(struct rtnl_link_vf *, struct nl_addr *); 94*4dc78e53SAndroid Build Coastguard Worker 95*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_link_vf_set_ib_node_guid(struct rtnl_link_vf *, uint64_t); 96*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_link_vf_set_ib_port_guid(struct rtnl_link_vf *, uint64_t); 97*4dc78e53SAndroid Build Coastguard Worker 98*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_link_vf_get_index(struct rtnl_link_vf *, uint32_t *); 99*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_link_vf_set_index(struct rtnl_link_vf *, uint32_t); 100*4dc78e53SAndroid Build Coastguard Worker 101*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_link_vf_get_linkstate(struct rtnl_link_vf *, uint32_t *); 102*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_link_vf_set_linkstate(struct rtnl_link_vf *, uint32_t); 103*4dc78e53SAndroid Build Coastguard Worker 104*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_link_vf_get_rate(struct rtnl_link_vf *, struct nl_vf_rate *); 105*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_link_vf_set_rate(struct rtnl_link_vf *, struct nl_vf_rate *); 106*4dc78e53SAndroid Build Coastguard Worker 107*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_link_vf_get_rss_query_en(struct rtnl_link_vf *, uint32_t *); 108*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_link_vf_set_rss_query_en(struct rtnl_link_vf *, uint32_t); 109*4dc78e53SAndroid Build Coastguard Worker 110*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_link_vf_get_spoofchk(struct rtnl_link_vf *, uint32_t *); 111*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_link_vf_set_spoofchk(struct rtnl_link_vf *, uint32_t); 112*4dc78e53SAndroid Build Coastguard Worker 113*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_link_vf_get_stat(struct rtnl_link_vf *, rtnl_link_vf_stats_t, 114*4dc78e53SAndroid Build Coastguard Worker uint64_t *); 115*4dc78e53SAndroid Build Coastguard Worker 116*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_link_vf_get_trust(struct rtnl_link_vf *, uint32_t *); 117*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_link_vf_set_trust(struct rtnl_link_vf *, uint32_t); 118*4dc78e53SAndroid Build Coastguard Worker 119*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_link_vf_get_vlans(struct rtnl_link_vf *, nl_vf_vlans_t **); 120*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_link_vf_set_vlans(struct rtnl_link_vf *, nl_vf_vlans_t *); 121*4dc78e53SAndroid Build Coastguard Worker 122*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_link_vf_vlan_alloc(nl_vf_vlans_t **, int); 123*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_link_vf_vlan_free(nl_vf_vlans_t *vf_vlans); 124*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_link_vf_vlan_put(nl_vf_vlans_t *); 125*4dc78e53SAndroid Build Coastguard Worker 126*4dc78e53SAndroid Build Coastguard Worker /* Utility functions */ 127*4dc78e53SAndroid Build Coastguard Worker extern char *rtnl_link_vf_linkstate2str(uint32_t, char *, size_t); 128*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_link_vf_str2linkstate(const char *); 129*4dc78e53SAndroid Build Coastguard Worker 130*4dc78e53SAndroid Build Coastguard Worker extern char *rtnl_link_vf_vlanproto2str(uint16_t, char *, size_t); 131*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_link_vf_str2vlanproto(const char *); 132*4dc78e53SAndroid Build Coastguard Worker 133*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_link_vf_str2guid(uint64_t *, const char *); 134*4dc78e53SAndroid Build Coastguard Worker 135*4dc78e53SAndroid Build Coastguard Worker #ifdef __cplusplus 136*4dc78e53SAndroid Build Coastguard Worker } 137*4dc78e53SAndroid Build Coastguard Worker #endif 138*4dc78e53SAndroid Build Coastguard Worker 139*4dc78e53SAndroid Build Coastguard Worker #endif 140