73
esxNumberOfInterfaces(virConnectPtr conn)
75
esxPrivate *priv = conn->interfacePrivateData;
76
esxVI_PhysicalNic *physicalNicList = NULL;
77
esxVI_PhysicalNic *physicalNic = NULL;
80
if (esxVI_EnsureSession(priv->primary) < 0 ||
81
esxVI_LookupPhysicalNicList(priv->primary, &physicalNicList) < 0) {
85
for (physicalNic = physicalNicList; physicalNic != NULL;
86
physicalNic = physicalNic->_next) {
90
esxVI_PhysicalNic_Free(&physicalNicList);
98
esxListInterfaces(virConnectPtr conn, char **const names, int maxnames)
100
bool success = false;
101
esxPrivate *priv = conn->interfacePrivateData;
102
esxVI_PhysicalNic *physicalNicList = NULL;
103
esxVI_PhysicalNic *physicalNic = NULL;
111
if (esxVI_EnsureSession(priv->primary) < 0 ||
112
esxVI_LookupPhysicalNicList(priv->primary, &physicalNicList) < 0) {
116
for (physicalNic = physicalNicList; physicalNic != NULL;
117
physicalNic = physicalNic->_next) {
118
names[count] = strdup(physicalNic->device);
120
if (names[count] == NULL) {
132
for (i = 0; i < count; ++i) {
139
esxVI_PhysicalNic_Free(&physicalNicList);
147
esxNumberOfDefinedInterfaces(virConnectPtr conn ATTRIBUTE_UNUSED)
149
/* ESX interfaces are always active */
156
esxListDefinedInterfaces(virConnectPtr conn ATTRIBUTE_UNUSED,
157
char **const names ATTRIBUTE_UNUSED,
158
int maxnames ATTRIBUTE_UNUSED)
160
/* ESX interfaces are always active */
166
static virInterfacePtr
167
esxInterfaceLookupByName(virConnectPtr conn, const char *name)
169
virInterfacePtr iface = NULL;
170
esxPrivate *priv = conn->interfacePrivateData;
171
esxVI_PhysicalNic *physicalNic = NULL;
173
if (esxVI_EnsureSession(priv->primary) < 0 ||
174
esxVI_LookupPhysicalNicByMACAddress(priv->primary, name, &physicalNic,
175
esxVI_Occurrence_RequiredItem) < 0) {
179
iface = virGetInterface(conn, physicalNic->device, physicalNic->mac);
181
esxVI_PhysicalNic_Free(&physicalNic);
188
static virInterfacePtr
189
esxInterfaceLookupByMACString(virConnectPtr conn, const char *mac)
191
virInterfacePtr iface = NULL;
192
esxPrivate *priv = conn->interfacePrivateData;
193
esxVI_PhysicalNic *physicalNic = NULL;
195
if (esxVI_EnsureSession(priv->primary) < 0 ||
196
esxVI_LookupPhysicalNicByMACAddress(priv->primary, mac, &physicalNic,
197
esxVI_Occurrence_RequiredItem) < 0) {
201
iface = virGetInterface(conn, physicalNic->device, physicalNic->mac);
203
esxVI_PhysicalNic_Free(&physicalNic);
211
esxInterfaceGetXMLDesc(virInterfacePtr iface, unsigned int flags)
214
esxPrivate *priv = iface->conn->interfacePrivateData;
215
esxVI_PhysicalNic *physicalNic = NULL;
217
bool hasAddress = false;
218
virInterfaceProtocolDefPtr protocols;
219
virInterfaceProtocolDef protocol;
220
virSocketAddr socketAddress;
221
virInterfaceIpDefPtr ips;
222
virInterfaceIpDef ip;
224
virCheckFlags(VIR_INTERFACE_XML_INACTIVE, NULL);
226
memset(&def, 0, sizeof(def));
227
memset(&protocol, 0, sizeof(protocol));
228
memset(&socketAddress, 0, sizeof(socketAddress));
229
memset(&ip, 0, sizeof(ip));
231
if (esxVI_EnsureSession(priv->primary) < 0 ||
232
esxVI_LookupPhysicalNicByMACAddress(priv->primary, iface->mac,
234
esxVI_Occurrence_RequiredItem) < 0) {
238
def.type = VIR_INTERFACE_TYPE_ETHERNET;
239
def.name = physicalNic->device;
240
def.mac = physicalNic->mac;
241
def.startmode = VIR_INTERFACE_START_ONBOOT;
243
/* FIXME: Add support for IPv6, requires to use vSphere API 4.0 */
244
if (physicalNic->spec->ip != NULL) {
245
protocol.family = (char *)"ipv4";
247
if (physicalNic->spec->ip->dhcp == esxVI_Boolean_True) {
251
if (physicalNic->spec->ip->ipAddress != NULL &&
252
physicalNic->spec->ip->subnetMask != NULL &&
253
strlen(physicalNic->spec->ip->ipAddress) > 0 &&
254
strlen(physicalNic->spec->ip->subnetMask) > 0) {
258
if (protocol.dhcp || hasAddress) {
259
protocols = &protocol;
261
def.protos = &protocols;
265
!(protocol.dhcp && (flags & VIR_INTERFACE_XML_INACTIVE))) {
270
if (virSocketAddrParseIPv4(&socketAddress,
271
physicalNic->spec->ip->subnetMask) < 0) {
275
ip.address = physicalNic->spec->ip->ipAddress;
276
ip.prefix = virSocketAddrGetNumNetmaskBits(&socketAddress);
280
xml = virInterfaceDefFormat(&def);
283
esxVI_PhysicalNic_Free(&physicalNic);
291
esxInterfaceIsActive(virInterfacePtr iface ATTRIBUTE_UNUSED)
293
/* ESX interfaces are always active */
70
299
static virInterfaceDriver esxInterfaceDriver = {
72
301
.open = esxInterfaceOpen, /* 0.7.6 */
73
302
.close = esxInterfaceClose, /* 0.7.6 */
303
.numOfInterfaces = esxNumberOfInterfaces, /* 0.10.0 */
304
.listInterfaces = esxListInterfaces, /* 0.10.0 */
305
.numOfDefinedInterfaces = esxNumberOfDefinedInterfaces, /* 0.10.0 */
306
.listDefinedInterfaces = esxListDefinedInterfaces, /* 0.10.0 */
307
.interfaceLookupByName = esxInterfaceLookupByName, /* 0.10.0 */
308
.interfaceLookupByMACString = esxInterfaceLookupByMACString, /* 0.10.0 */
309
.interfaceGetXMLDesc = esxInterfaceGetXMLDesc, /* 0.10.0 */
310
.interfaceIsActive = esxInterfaceIsActive, /* 0.10.0 */