virnetdev.h 10.7 KB
Newer Older
1
/*
2
 * Copyright (C) 2007-2016 Red Hat, Inc.
3 4 5 6 7 8 9 10 11 12 13 14
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
15
 * License along with this library.  If not, see
O
Osier Yang 已提交
16
 * <http://www.gnu.org/licenses/>.
17 18 19 20 21 22 23 24 25
 *
 * Authors:
 *     Mark McLoughlin <markmc@redhat.com>
 *     Daniel P. Berrange <berrange@redhat.com>
 */

#ifndef __VIR_NETDEV_H__
# define __VIR_NETDEV_H__

26 27
# include <net/if.h>

28
# include "virbitmap.h"
29
# include "virsocketaddr.h"
30
# include "virmacaddr.h"
31
# include "virpci.h"
32
# include "virnetdevvlan.h"
33

34 35 36 37 38 39
# ifdef HAVE_STRUCT_IFREQ
typedef struct ifreq virIfreq;
# else
typedef void virIfreq;
# endif

40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
typedef enum {
   VIR_NETDEV_RX_FILTER_MODE_NONE = 0,
   VIR_NETDEV_RX_FILTER_MODE_NORMAL,
   VIR_NETDEV_RX_FILTER_MODE_ALL,

   VIR_NETDEV_RX_FILTER_MODE_LAST
} virNetDevRxFilterMode;
VIR_ENUM_DECL(virNetDevRxFilterMode)

typedef struct _virNetDevRxFilter virNetDevRxFilter;
typedef virNetDevRxFilter *virNetDevRxFilterPtr;
struct _virNetDevRxFilter {
    char *name; /* the alias used by qemu, *not* name used by guest */
    virMacAddr mac;
    bool promiscuous;
    bool broadcastAllowed;

    struct {
        int mode; /* enum virNetDevRxFilterMode */
        bool overflow;
        virMacAddrPtr table;
        size_t nTable;
    } unicast;
    struct {
        int mode; /* enum virNetDevRxFilterMode */
        bool overflow;
        virMacAddrPtr table;
        size_t nTable;
    } multicast;
    struct {
        int mode; /* enum virNetDevRxFilterMode */
        unsigned int *table;
        size_t nTable;
    } vlan;
};

76 77 78 79 80 81 82 83 84 85 86 87 88
typedef enum {
    VIR_NETDEV_IF_STATE_UNKNOWN = 1,
    VIR_NETDEV_IF_STATE_NOT_PRESENT,
    VIR_NETDEV_IF_STATE_DOWN,
    VIR_NETDEV_IF_STATE_LOWER_LAYER_DOWN,
    VIR_NETDEV_IF_STATE_TESTING,
    VIR_NETDEV_IF_STATE_DORMANT,
    VIR_NETDEV_IF_STATE_UP,
    VIR_NETDEV_IF_STATE_LAST
} virNetDevIfState;

VIR_ENUM_DECL(virNetDevIfState)

89 90 91
typedef struct _virNetDevIfLink virNetDevIfLink;
typedef virNetDevIfLink *virNetDevIfLinkPtr;
struct _virNetDevIfLink {
92 93
    virNetDevIfState state; /* link state */
    unsigned int speed;      /* link speed in Mbits per second */
94
};
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114

typedef enum {
    VIR_NET_DEV_FEAT_GRXCSUM,
    VIR_NET_DEV_FEAT_GTXCSUM,
    VIR_NET_DEV_FEAT_GSG,
    VIR_NET_DEV_FEAT_GTSO,
    VIR_NET_DEV_FEAT_GGSO,
    VIR_NET_DEV_FEAT_GGRO,
    VIR_NET_DEV_FEAT_LRO,
    VIR_NET_DEV_FEAT_RXVLAN,
    VIR_NET_DEV_FEAT_TXVLAN,
    VIR_NET_DEV_FEAT_NTUPLE,
    VIR_NET_DEV_FEAT_RXHASH,
    VIR_NET_DEV_FEAT_RDMA,
    VIR_NET_DEV_FEAT_TXUDPTNL,
    VIR_NET_DEV_FEAT_LAST
} virNetDevFeature;

VIR_ENUM_DECL(virNetDevFeature)

115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
/* Modeled after struct ethtool_coalesce, see linux/ethtool.h for explanations
 * of particular fields */
typedef struct _virNetDevCoalesce virNetDevCoalesce;
typedef virNetDevCoalesce *virNetDevCoalescePtr;
struct _virNetDevCoalesce {
    uint32_t rx_coalesce_usecs;
    uint32_t rx_max_coalesced_frames;
    uint32_t rx_coalesce_usecs_irq;
    uint32_t rx_max_coalesced_frames_irq;
    uint32_t tx_coalesce_usecs;
    uint32_t tx_max_coalesced_frames;
    uint32_t tx_coalesce_usecs_irq;
    uint32_t tx_max_coalesced_frames_irq;
    uint32_t stats_block_coalesce_usecs;
    uint32_t use_adaptive_rx_coalesce;
    uint32_t use_adaptive_tx_coalesce;
    uint32_t pkt_rate_low;
    uint32_t rx_coalesce_usecs_low;
    uint32_t rx_max_coalesced_frames_low;
    uint32_t tx_coalesce_usecs_low;
    uint32_t tx_max_coalesced_frames_low;
    uint32_t pkt_rate_high;
    uint32_t rx_coalesce_usecs_high;
    uint32_t rx_max_coalesced_frames_high;
    uint32_t tx_coalesce_usecs_high;
    uint32_t tx_max_coalesced_frames_high;
    uint32_t rate_sample_interval;
};


145 146
int virNetDevSetupControl(const char *ifname,
                          virIfreq *ifr)
147
    ATTRIBUTE_RETURN_CHECK;
148

149 150 151 152 153
int virNetDevExists(const char *brname)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;

int virNetDevSetOnline(const char *ifname,
                       bool online)
154
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK ATTRIBUTE_NOINLINE;
155
int virNetDevGetOnline(const char *ifname,
156 157 158 159 160
                      bool *online)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;


int virNetDevSetMAC(const char *ifname,
161
                    const virMacAddr *macaddr)
162
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK ATTRIBUTE_NOINLINE;
163
int virNetDevGetMAC(const char *ifname,
164
                    virMacAddrPtr macaddr)
165
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
166

167 168 169 170 171 172 173 174 175 176
int virNetDevReplaceMacAddress(const char *linkdev,
                               const virMacAddr *macaddress,
                               const char *stateDir)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
    ATTRIBUTE_RETURN_CHECK;

int virNetDevRestoreMacAddress(const char *linkdev,
                               const char *stateDir)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;

177 178 179 180
int virNetDevSetCoalesce(const char *ifname,
                         virNetDevCoalescePtr coalesce)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;

181 182 183 184 185 186 187 188
int virNetDevSetMTU(const char *ifname,
                    int mtu)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
int virNetDevSetMTUFromDevice(const char *ifname,
                              const char *otherifname)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
int virNetDevGetMTU(const char *ifname)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
189
int virNetDevSetNamespace(const char *ifname, pid_t pidInNs)
190 191 192
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
int virNetDevSetName(const char *ifname, const char *newifname)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
193

194
char *virNetDevGetName(int ifindex)
195
    ATTRIBUTE_RETURN_CHECK;
196 197 198 199 200 201
int virNetDevGetIndex(const char *ifname, int *ifindex)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;

int virNetDevGetVLanID(const char *ifname, int *vlanid)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;

202 203 204
int virNetDevGetMaster(const char *ifname, char **master)
   ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;

205
int virNetDevValidateConfig(const char *ifname,
206
                            const virMacAddr *macaddr, int ifindex)
207 208
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;

209 210 211 212 213 214 215 216 217 218
int virNetDevIsVirtualFunction(const char *ifname)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;

int virNetDevGetVirtualFunctionIndex(const char *pfname, const char *vfname,
                                     int *vf_index)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
    ATTRIBUTE_RETURN_CHECK;

int virNetDevGetPhysicalFunction(const char *ifname, char **pfname)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
219

220 221 222
int virNetDevPFGetVF(const char *pfname, int vf, char **vfname)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;

223 224
int virNetDevGetVirtualFunctions(const char *pfname,
                                 char ***vfname,
225
                                 virPCIDeviceAddressPtr **virt_fns,
226 227
                                 size_t *n_vfname,
                                 unsigned int *max_vfs)
228
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
229
    ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(5) ATTRIBUTE_RETURN_CHECK;
230

231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252
int virNetDevSaveNetConfig(const char *linkdev, int vf,
                           const char *stateDir,
                           bool saveVlan)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;

int
virNetDevReadNetConfig(const char *linkdev, int vf,
                       const char *stateDir,
                       virMacAddrPtr *adminMAC,
                       virNetDevVlanPtr *vlan,
                       virMacAddrPtr *MAC)
   ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4)
   ATTRIBUTE_NONNULL(5) ATTRIBUTE_NONNULL(6) ATTRIBUTE_RETURN_CHECK;

int
virNetDevSetNetConfig(const char *linkdev, int vf,
                      const virMacAddr *adminMAC,
                      virNetDevVlanPtr vlan,
                      const virMacAddr *MAC,
                      bool setVLan)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;

253 254 255 256
int virNetDevGetVirtualFunctionInfo(const char *vfname, char **pfname,
                                    int *vf)
    ATTRIBUTE_NONNULL(1);

257 258 259 260
int virNetDevGetFeatures(const char *ifname,
                         virBitmapPtr *out)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;

261
int virNetDevGetLinkInfo(const char *ifname,
262
                         virNetDevIfLinkPtr lnk)
263 264
    ATTRIBUTE_NONNULL(1);

265 266 267
virNetDevRxFilterPtr virNetDevRxFilterNew(void)
   ATTRIBUTE_RETURN_CHECK;
void virNetDevRxFilterFree(virNetDevRxFilterPtr filter);
268 269 270 271 272 273 274 275 276 277
int virNetDevGetRxFilter(const char *ifname,
                         virNetDevRxFilterPtr *filter)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;

int virNetDevAddMulti(const char *ifname,
                      virMacAddrPtr macaddr)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
int virNetDevDelMulti(const char *ifname,
                      virMacAddrPtr macaddr)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
278

279
int virNetDevSetPromiscuous(const char *ifname, bool promiscuous)
280
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
281 282 283 284
int virNetDevGetPromiscuous(const char *ifname, bool *promiscuous)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;

int virNetDevSetRcvMulti(const char *ifname, bool receive)
285
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
286 287 288 289
int virNetDevGetRcvMulti(const char *ifname, bool *receive)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;

int virNetDevSetRcvAllMulti(const char *ifname, bool receive)
290
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
291 292
int virNetDevGetRcvAllMulti(const char *ifname, bool *receive)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
293 294

# define SYSFS_NET_DIR "/sys/class/net/"
295
# define SYSFS_INFINIBAND_DIR "/sys/class/infiniband/"
M
Michal Privoznik 已提交
296 297 298 299
int virNetDevSysfsFile(char **pf_sysfs_device_link,
                       const char *ifname,
                       const char *file)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
300
    ATTRIBUTE_RETURN_CHECK ATTRIBUTE_NOINLINE;
301

302 303
int virNetDevRunEthernetScript(const char *ifname, const char *script)
    ATTRIBUTE_NOINLINE;
304
#endif /* __VIR_NETDEV_H__ */