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