network_conf.h 7.5 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
/*
 * 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__
25
# define __NETWORK_CONF_H__
26

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

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

/* 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 {
48 49
    virSocketAddr start;
    virSocketAddr end;
50 51
};

52 53 54 55 56
typedef struct _virNetworkDHCPHostDef virNetworkDHCPHostDef;
typedef virNetworkDHCPHostDef *virNetworkDHCPHostDefPtr;
struct _virNetworkDHCPHostDef {
    char *mac;
    char *name;
57
    virSocketAddr ip;
58 59
};

60 61 62 63 64 65 66
typedef struct _virNetworkDNSTxtRecordsDef virNetworkDNSTxtRecordsDef;
typedef virNetworkDNSTxtRecordsDef *virNetworkDNSTxtRecordsDefPtr;
struct _virNetworkDNSTxtRecordsDef {
    char *name;
    char *value;
};

67
struct _virNetworkDNSHostsDef {
68 69 70
    virSocketAddr ip;
    int nnames;
    char **names;
71
};
72

73
typedef struct _virNetworkDNSHostsDef *virNetworkDNSHostsDefPtr;
74

75
struct _virNetworkDNSDef {
76 77
    unsigned int ntxtrecords;
    virNetworkDNSTxtRecordsDefPtr txtrecords;
78 79
    unsigned int nhosts;
    virNetworkDNSHostsDefPtr hosts;
80
};
81

82
typedef struct _virNetworkDNSDef *virNetworkDNSDefPtr;
83

84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
typedef struct _virNetworkIpDef virNetworkIpDef;
typedef virNetworkIpDef *virNetworkIpDefPtr;
struct _virNetworkIpDef {
    char *family;               /* ipv4 or ipv6 - default is ipv4 */
    virSocketAddr address;      /* Bridge IP address */

    /* One or the other of the following two will be used for a given
     * IP address, but never both. The parser guarantees this.
     * Use virNetworkIpDefPrefix/virNetworkIpDefNetmask rather
     * than accessing the data directly - these utility functions
     * will convert one into the other as necessary.
     */
    unsigned int prefix;        /* ipv6 - only prefix allowed */
    virSocketAddr netmask;      /* ipv4 - either netmask or prefix specified */

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

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

    char *tftproot;
    char *bootfile;
    virSocketAddr bootserver;
   };

110 111 112 113 114 115 116
typedef struct _virNetworkDef virNetworkDef;
typedef virNetworkDef *virNetworkDefPtr;
struct _virNetworkDef {
    unsigned char uuid[VIR_UUID_BUFLEN];
    char *name;

    char *bridge;       /* Name of bridge device */
117
    char *domain;
118
    unsigned long delay;   /* Bridge forward delay (ms) */
119
    unsigned int stp :1; /* Spanning tree protocol */
120 121
    unsigned char mac[VIR_MAC_BUFLEN]; /* mac address of bridge device */
    bool mac_specified;
122 123 124 125

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

126 127
    size_t nips;
    virNetworkIpDefPtr ips; /* ptr to array of IP addresses on this network */
128 129

    virNetworkDNSDefPtr dns; /* ptr to dns related configuration */
130 131 132 133 134
};

typedef struct _virNetworkObj virNetworkObj;
typedef virNetworkObj *virNetworkObjPtr;
struct _virNetworkObj {
135
    virMutex lock;
136

137
    pid_t dnsmasqPid;
138
    pid_t radvdPid;
139 140 141 142 143 144
    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 */
145
};
146

147 148 149 150 151
typedef struct _virNetworkObjList virNetworkObjList;
typedef virNetworkObjList *virNetworkObjListPtr;
struct _virNetworkObjList {
    unsigned int count;
    virNetworkObjPtr *objs;
152 153 154
};

static inline int
D
Daniel P. Berrange 已提交
155
virNetworkObjIsActive(const virNetworkObjPtr net)
156 157 158 159
{
    return net->active;
}

160
virNetworkObjPtr virNetworkFindByUUID(const virNetworkObjListPtr nets,
161
                                      const unsigned char *uuid);
162
virNetworkObjPtr virNetworkFindByName(const virNetworkObjListPtr nets,
163 164 165 166 167
                                      const char *name);


void virNetworkDefFree(virNetworkDefPtr def);
void virNetworkObjFree(virNetworkObjPtr net);
168
void virNetworkObjListFree(virNetworkObjListPtr vms);
169

170
virNetworkObjPtr virNetworkAssignDef(virNetworkObjListPtr nets,
171
                                     const virNetworkDefPtr def);
172
void virNetworkRemoveInactive(virNetworkObjListPtr nets,
173 174
                              const virNetworkObjPtr net);

175 176 177
virNetworkDefPtr virNetworkDefParseString(const char *xmlStr);
virNetworkDefPtr virNetworkDefParseFile(const char *filename);
virNetworkDefPtr virNetworkDefParseNode(xmlDocPtr xml,
178 179
                                        xmlNodePtr root);

180
char *virNetworkDefFormat(const virNetworkDefPtr def);
181

182 183 184 185 186 187
virNetworkIpDefPtr
virNetworkDefGetIpByIndex(const virNetworkDefPtr def,
                          int family, size_t n);
int virNetworkIpDefPrefix(const virNetworkIpDefPtr def);
int virNetworkIpDefNetmask(const virNetworkIpDefPtr def,
                           virSocketAddrPtr netmask);
188

189
int virNetworkSaveXML(const char *configDir,
190 191 192
                      virNetworkDefPtr def,
                      const char *xml);

193
int virNetworkSaveConfig(const char *configDir,
194
                         virNetworkDefPtr def);
195

196
virNetworkObjPtr virNetworkLoadConfig(virNetworkObjListPtr nets,
197 198 199 200
                                      const char *configDir,
                                      const char *autostartDir,
                                      const char *file);

201
int virNetworkLoadAllConfigs(virNetworkObjListPtr nets,
202 203 204
                             const char *configDir,
                             const char *autostartDir);

205
int virNetworkDeleteConfig(const char *configDir,
206
                           const char *autostartDir,
207 208
                           virNetworkObjPtr net);

209
char *virNetworkConfigFile(const char *dir,
210 211
                           const char *name);

212 213 214 215
int virNetworkBridgeInUse(const virNetworkObjListPtr nets,
                          const char *bridge,
                          const char *skipname);

216
char *virNetworkAllocateBridge(const virNetworkObjListPtr nets,
217
                               const char *template);
218

219
int virNetworkSetBridgeName(const virNetworkObjListPtr nets,
220 221
                            virNetworkDefPtr def,
                            int check_collision);
222

223 224
void virNetworkSetBridgeMacAddr(virNetworkDefPtr def);

225 226 227 228
int virNetworkObjIsDuplicate(virNetworkObjListPtr doms,
                             virNetworkDefPtr def,
                             unsigned int check_active);

D
Daniel P. Berrange 已提交
229 230 231
void virNetworkObjLock(virNetworkObjPtr obj);
void virNetworkObjUnlock(virNetworkObjPtr obj);

232
#endif /* __NETWORK_CONF_H__ */