network_conf.h 6.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
/*
 * network_conf.h: network XML handling
 *
 * Copyright (C) 2006-2008 Red Hat, Inc.
 * Copyright (C) 2006-2008 Daniel P. Berrange
 *
 * 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
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
 *
 * Author: Daniel P. Berrange <berrange@redhat.com>
 */

#ifndef __NETWORK_CONF_H__
#define __NETWORK_CONF_H__

27 28 29 30
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <libxml/xpath.h>

31
#include "internal.h"
32
#include "threads.h"
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

/* 2 possible types of forwarding */
enum virNetworkForwardType {
    VIR_NETWORK_FORWARD_NONE   = 0,
    VIR_NETWORK_FORWARD_NAT,
    VIR_NETWORK_FORWARD_ROUTE,

    VIR_NETWORK_FORWARD_LAST,
};

typedef struct _virNetworkDHCPRangeDef virNetworkDHCPRangeDef;
typedef virNetworkDHCPRangeDef *virNetworkDHCPRangeDefPtr;
struct _virNetworkDHCPRangeDef {
    char *start;
    char *end;
};

50 51 52 53 54 55 56 57
typedef struct _virNetworkDHCPHostDef virNetworkDHCPHostDef;
typedef virNetworkDHCPHostDef *virNetworkDHCPHostDefPtr;
struct _virNetworkDHCPHostDef {
    char *mac;
    char *name;
    char *ip;
};

58 59 60 61 62 63 64
typedef struct _virNetworkDef virNetworkDef;
typedef virNetworkDef *virNetworkDefPtr;
struct _virNetworkDef {
    unsigned char uuid[VIR_UUID_BUFLEN];
    char *name;

    char *bridge;       /* Name of bridge device */
65
    char *domain;
66 67 68 69 70 71 72 73 74 75 76 77
    unsigned long delay;   /* Bridge forward delay (ms) */
    int stp : 1; /* Spanning tree protocol */

    int forwardType;    /* One of virNetworkForwardType constants */
    char *forwardDev;   /* Destination device for forwarding */

    char *ipAddress;    /* Bridge IP address */
    char *netmask;
    char *network;

    unsigned int nranges;        /* Zero or more dhcp ranges */
    virNetworkDHCPRangeDefPtr ranges;
78 79 80

    unsigned int nhosts;         /* Zero or more dhcp hosts */
    virNetworkDHCPHostDefPtr hosts;
81 82 83

    char *tftproot;
    char *bootfile;
84
    char *bootserver;
85 86 87 88 89
};

typedef struct _virNetworkObj virNetworkObj;
typedef virNetworkObj *virNetworkObjPtr;
struct _virNetworkObj {
90
    virMutex lock;
91

92 93 94 95 96 97 98
    pid_t dnsmasqPid;
    unsigned int active : 1;
    unsigned int autostart : 1;
    unsigned int persistent : 1;

    virNetworkDefPtr def; /* The current definition */
    virNetworkDefPtr newDef; /* New definition to activate at shutdown */
99
};
100

101 102 103 104 105
typedef struct _virNetworkObjList virNetworkObjList;
typedef virNetworkObjList *virNetworkObjListPtr;
struct _virNetworkObjList {
    unsigned int count;
    virNetworkObjPtr *objs;
106 107 108 109 110 111 112 113
};

static inline int
virNetworkIsActive(const virNetworkObjPtr net)
{
    return net->active;
}

114 115 116 117
#define networkReportError(conn, dom, net, code, fmt...)                \
    virReportErrorHelper(conn, VIR_FROM_QEMU, code, __FILE__,         \
                           __FUNCTION__, __LINE__, fmt)

118

119
virNetworkObjPtr virNetworkFindByUUID(const virNetworkObjListPtr nets,
120
                                      const unsigned char *uuid);
121
virNetworkObjPtr virNetworkFindByName(const virNetworkObjListPtr nets,
122 123 124 125 126
                                      const char *name);


void virNetworkDefFree(virNetworkDefPtr def);
void virNetworkObjFree(virNetworkObjPtr net);
127
void virNetworkObjListFree(virNetworkObjListPtr vms);
128 129

virNetworkObjPtr virNetworkAssignDef(virConnectPtr conn,
130
                                     virNetworkObjListPtr nets,
131
                                     const virNetworkDefPtr def);
132
void virNetworkRemoveInactive(virNetworkObjListPtr nets,
133 134 135 136 137 138 139 140 141 142 143 144 145 146
                              const virNetworkObjPtr net);

virNetworkDefPtr virNetworkDefParseString(virConnectPtr conn,
                                          const char *xmlStr);
virNetworkDefPtr virNetworkDefParseFile(virConnectPtr conn,
                                        const char *filename);
virNetworkDefPtr virNetworkDefParseNode(virConnectPtr conn,
                                        xmlDocPtr xml,
                                        xmlNodePtr root);

char *virNetworkDefFormat(virConnectPtr conn,
                          const virNetworkDefPtr def);


147 148 149 150 151
int virNetworkSaveXML(virConnectPtr conn,
                      const char *configDir,
                      virNetworkDefPtr def,
                      const char *xml);

152 153
int virNetworkSaveConfig(virConnectPtr conn,
                         const char *configDir,
154
                         virNetworkDefPtr def);
155 156

virNetworkObjPtr virNetworkLoadConfig(virConnectPtr conn,
157
                                      virNetworkObjListPtr nets,
158 159 160 161 162
                                      const char *configDir,
                                      const char *autostartDir,
                                      const char *file);

int virNetworkLoadAllConfigs(virConnectPtr conn,
163
                             virNetworkObjListPtr nets,
164 165 166 167
                             const char *configDir,
                             const char *autostartDir);

int virNetworkDeleteConfig(virConnectPtr conn,
168 169
                           const char *configDir,
                           const char *autostartDir,
170 171
                           virNetworkObjPtr net);

172 173 174 175
char *virNetworkConfigFile(virConnectPtr conn,
                           const char *dir,
                           const char *name);

176 177 178 179 180
int virNetworkBridgeInUse(const virNetworkObjListPtr nets,
                          const char *bridge,
                          const char *skipname);

char *virNetworkAllocateBridge(virConnectPtr conn,
181 182
                               const virNetworkObjListPtr nets,
                               const char *template);
183 184 185

int virNetworkSetBridgeName(virConnectPtr conn,
                            const virNetworkObjListPtr nets,
186 187
                            virNetworkDefPtr def,
                            int check_collision);
188

D
Daniel P. Berrange 已提交
189 190 191
void virNetworkObjLock(virNetworkObjPtr obj);
void virNetworkObjUnlock(virNetworkObjPtr obj);

192
#endif /* __NETWORK_CONF_H__ */