Revert "conf: support host-side IP/route information in <interface>"

This reverts commit fe6a77898a.

This feature was accidentally pushed in the feature freeze.
This commit is contained in:
Ján Tomko 2016-06-27 11:56:17 +02:00
parent cba06aea8d
commit d658456530
6 changed files with 23 additions and 155 deletions

View File

@ -5012,32 +5012,6 @@ qemu-kvm -net nic,model=? /dev/null
definitions</a>. This is used by the LXC driver. definitions</a>. This is used by the LXC driver.
</p> </p>
<pre>
...
&lt;devices&gt;
&lt;interface type='ethernet'&gt;
<b>&lt;source/&gt;</b>
<b>&lt;ip address='192.168.123.1' prefix='24'/&gt;</b>
<b>&lt;ip address='10.0.0.10' prefix='24' peer='192.168.122.5'/&gt;</b>
<b>&lt;route family='ipv4' address='192.168.42.0' prefix='24' gateway='192.168.123.4'/&gt;</b>
<b>&lt;source/&gt;</b>
...
&lt;/interface&gt;
...
&lt;/devices&gt;
...
</pre>
<p>
<span class="since">Since 2.0.0</span> network devices of type
"ethernet" can optionally be provided one or more IP addresses
and one or more routes to set on the <b>host</b> side of the
network device. These are configured as subelements of
the <code>&lt;source&gt;</code> element of the interface, and
have the same attributes as the similarly named elements used to
configure the guest side of the interface (described above).
</p>
<h5><a name="elementVhostuser">vhost-user interface</a></h5> <h5><a name="elementVhostuser">vhost-user interface</a></h5>
<p> <p>

View File

@ -2142,7 +2142,7 @@
<interleave> <interleave>
<optional> <optional>
<element name="source"> <element name="source">
<ref name="interface-ip-info"/> <empty/>
</element> </element>
</optional> </optional>
<ref name="interface-options"/> <ref name="interface-options"/>
@ -2392,6 +2392,7 @@
<attribute name="dev"> <attribute name="dev">
<ref name="deviceName"/> <ref name="deviceName"/>
</attribute> </attribute>
<empty/>
</element> </element>
</optional> </optional>
<optional> <optional>

View File

@ -1798,7 +1798,6 @@ virDomainNetDefClear(virDomainNetDefPtr def)
VIR_FREE(def->ifname_guest_actual); VIR_FREE(def->ifname_guest_actual);
virNetDevIPInfoClear(&def->guestIP); virNetDevIPInfoClear(&def->guestIP);
virNetDevIPInfoClear(&def->hostIP);
virDomainDeviceInfoClear(&def->info); virDomainDeviceInfoClear(&def->info);
VIR_FREE(def->filter); VIR_FREE(def->filter);
@ -4608,23 +4607,6 @@ virDomainRedirdevDefValidate(const virDomainDef *def,
} }
static int
virDomainNetDefValidate(const virDomainNetDef *net)
{
if ((net->hostIP.nroutes || net->hostIP.nips) &&
net->type != VIR_DOMAIN_NET_TYPE_ETHERNET) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Invalid attempt to set network interface "
"host-side IP route and/or address info on "
"interface of type '%s'. This is only supported "
"on interfaces of type 'ethernet'"),
virDomainNetTypeToString(net->type));
return -1;
}
return 0;
}
static int static int
virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev, virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev,
const virDomainDef *def) const virDomainDef *def)
@ -4636,11 +4618,9 @@ virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev,
case VIR_DOMAIN_DEVICE_REDIRDEV: case VIR_DOMAIN_DEVICE_REDIRDEV:
return virDomainRedirdevDefValidate(def, dev->data.redirdev); return virDomainRedirdevDefValidate(def, dev->data.redirdev);
case VIR_DOMAIN_DEVICE_NET:
return virDomainNetDefValidate(dev->data.net);
case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_LEASE:
case VIR_DOMAIN_DEVICE_FS: case VIR_DOMAIN_DEVICE_FS:
case VIR_DOMAIN_DEVICE_NET:
case VIR_DOMAIN_DEVICE_INPUT: case VIR_DOMAIN_DEVICE_INPUT:
case VIR_DOMAIN_DEVICE_SOUND: case VIR_DOMAIN_DEVICE_SOUND:
case VIR_DOMAIN_DEVICE_VIDEO: case VIR_DOMAIN_DEVICE_VIDEO:
@ -9009,15 +8989,6 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
cur = node->children; cur = node->children;
while (cur != NULL) { while (cur != NULL) {
if (cur->type == XML_ELEMENT_NODE) { if (cur->type == XML_ELEMENT_NODE) {
if (xmlStrEqual(cur->name, BAD_CAST "source")) {
xmlNodePtr tmpnode = ctxt->node;
ctxt->node = cur;
if (virDomainNetIPInfoParseXML(_("interface host IP"),
ctxt, &def->hostIP) < 0)
goto error;
ctxt->node = tmpnode;
}
if (!macaddr && xmlStrEqual(cur->name, BAD_CAST "mac")) { if (!macaddr && xmlStrEqual(cur->name, BAD_CAST "mac")) {
macaddr = virXMLPropString(cur, "address"); macaddr = virXMLPropString(cur, "address");
} else if (!network && } else if (!network &&
@ -20721,7 +20692,6 @@ virDomainNetDefFormat(virBufferPtr buf,
{ {
unsigned int actualType = virDomainNetGetActualType(def); unsigned int actualType = virDomainNetGetActualType(def);
bool publicActual = false; bool publicActual = false;
int sourceLines = 0;
const char *typeStr; const char *typeStr;
virDomainHostdevDefPtr hostdef = NULL; virDomainHostdevDefPtr hostdef = NULL;
char macstr[VIR_MAC_STRING_BUFLEN]; char macstr[VIR_MAC_STRING_BUFLEN];
@ -20791,7 +20761,15 @@ virDomainNetDefFormat(virBufferPtr buf,
def->data.network.name); def->data.network.name);
virBufferEscapeString(buf, " portgroup='%s'", virBufferEscapeString(buf, " portgroup='%s'",
def->data.network.portgroup); def->data.network.portgroup);
sourceLines++; virBufferAddLit(buf, "/>\n");
/* ONLY for internal status storage - format the ActualNetDef
* as a subelement of <interface> so that no persistent config
* data is overwritten.
*/
if ((flags & VIR_DOMAIN_DEF_FORMAT_ACTUAL_NET) &&
(virDomainActualNetDefFormat(buf, def, flags) < 0))
return -1;
break; break;
case VIR_DOMAIN_NET_TYPE_ETHERNET: case VIR_DOMAIN_NET_TYPE_ETHERNET:
@ -20805,16 +20783,13 @@ virDomainNetDefFormat(virBufferPtr buf,
virBufferAsprintf(buf, " mode='%s'", virBufferAsprintf(buf, " mode='%s'",
def->data.vhostuser->data.nix.listen ? def->data.vhostuser->data.nix.listen ?
"server" : "client"); "server" : "client");
sourceLines++; virBufferAddLit(buf, "/>\n");
} }
break; break;
case VIR_DOMAIN_NET_TYPE_BRIDGE: case VIR_DOMAIN_NET_TYPE_BRIDGE:
if (def->data.bridge.brname) { virBufferEscapeString(buf, "<source bridge='%s'/>\n",
virBufferEscapeString(buf, "<source bridge='%s'", def->data.bridge.brname);
def->data.bridge.brname);
sourceLines++;
}
break; break;
case VIR_DOMAIN_NET_TYPE_SERVER: case VIR_DOMAIN_NET_TYPE_SERVER:
@ -20829,27 +20804,25 @@ virDomainNetDefFormat(virBufferPtr buf,
virBufferAsprintf(buf, "<source port='%d'", virBufferAsprintf(buf, "<source port='%d'",
def->data.socket.port); def->data.socket.port);
} }
sourceLines++;
if (def->type != VIR_DOMAIN_NET_TYPE_UDP) if (def->type != VIR_DOMAIN_NET_TYPE_UDP) {
virBufferAddLit(buf, "/>\n");
break; break;
}
virBufferAddLit(buf, ">\n"); virBufferAddLit(buf, ">\n");
sourceLines++;
virBufferAdjustIndent(buf, 2); virBufferAdjustIndent(buf, 2);
virBufferAsprintf(buf, "<local address='%s' port='%d'/>\n", virBufferAsprintf(buf, "<local address='%s' port='%d'/>\n",
def->data.socket.localaddr, def->data.socket.localaddr,
def->data.socket.localport); def->data.socket.localport);
virBufferAdjustIndent(buf, -2); virBufferAdjustIndent(buf, -2);
virBufferAddLit(buf, "</source>\n");
break; break;
case VIR_DOMAIN_NET_TYPE_INTERNAL: case VIR_DOMAIN_NET_TYPE_INTERNAL:
if (def->data.internal.name) { virBufferEscapeString(buf, "<source name='%s'/>\n",
virBufferEscapeString(buf, "<source name='%s'", def->data.internal.name);
def->data.internal.name);
sourceLines++;
}
break; break;
case VIR_DOMAIN_NET_TYPE_DIRECT: case VIR_DOMAIN_NET_TYPE_DIRECT:
@ -20857,7 +20830,7 @@ virDomainNetDefFormat(virBufferPtr buf,
def->data.direct.linkdev); def->data.direct.linkdev);
virBufferAsprintf(buf, " mode='%s'", virBufferAsprintf(buf, " mode='%s'",
virNetDevMacVLanModeTypeToString(def->data.direct.mode)); virNetDevMacVLanModeTypeToString(def->data.direct.mode));
sourceLines++; virBufferAddLit(buf, "/>\n");
break; break;
case VIR_DOMAIN_NET_TYPE_HOSTDEV: case VIR_DOMAIN_NET_TYPE_HOSTDEV:
@ -20872,44 +20845,12 @@ virDomainNetDefFormat(virBufferPtr buf,
break; break;
} }
/* if sourceLines == 0 - no <source> info at all so far
* sourceLines == 1 - first line written, no terminating ">"
* sourceLines > 1 - multiple lines, including subelements
*/
if (def->hostIP.nips || def->hostIP.nroutes) {
if (sourceLines == 0) {
virBufferAddLit(buf, "<source>\n");
sourceLines += 2;
} else if (sourceLines == 1) {
virBufferAddLit(buf, ">\n");
sourceLines++;
}
virBufferAdjustIndent(buf, 2);
if (virDomainNetIPInfoFormat(buf, &def->hostIP) < 0)
return -1;
virBufferAdjustIndent(buf, -2);
}
if (sourceLines == 1)
virBufferAddLit(buf, "/>\n");
else if (sourceLines > 1)
virBufferAddLit(buf, "</source>\n");
if (virNetDevVlanFormat(&def->vlan, buf) < 0) if (virNetDevVlanFormat(&def->vlan, buf) < 0)
return -1; return -1;
if (virNetDevVPortProfileFormat(def->virtPortProfile, buf) < 0) if (virNetDevVPortProfileFormat(def->virtPortProfile, buf) < 0)
return -1; return -1;
if (virNetDevBandwidthFormat(def->bandwidth, buf) < 0) if (virNetDevBandwidthFormat(def->bandwidth, buf) < 0)
return -1; return -1;
/* ONLY for internal status storage - format the ActualNetDef
* as a subelement of <interface> so that no persistent config
* data is overwritten.
*/
if (def->type == VIR_DOMAIN_NET_TYPE_NETWORK &&
(flags & VIR_DOMAIN_DEF_FORMAT_ACTUAL_NET) &&
(virDomainActualNetDefFormat(buf, def, flags) < 0))
return -1;
} }
if (virDomainNetIPInfoFormat(buf, &def->guestIP) < 0) if (virDomainNetIPInfoFormat(buf, &def->guestIP) < 0)
@ -20918,7 +20859,6 @@ virDomainNetDefFormat(virBufferPtr buf,
virBufferEscapeString(buf, "<script path='%s'/>\n", virBufferEscapeString(buf, "<script path='%s'/>\n",
def->script); def->script);
virBufferEscapeString(buf, "<backenddomain name='%s'/>\n", def->domain_name); virBufferEscapeString(buf, "<backenddomain name='%s'/>\n", def->domain_name);
if (def->ifname && if (def->ifname &&
!((flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE) && !((flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE) &&
(STRPREFIX(def->ifname, VIR_NET_GENERATED_PREFIX) || (STRPREFIX(def->ifname, VIR_NET_GENERATED_PREFIX) ||
@ -20926,7 +20866,6 @@ virDomainNetDefFormat(virBufferPtr buf,
/* Skip auto-generated target names for inactive config. */ /* Skip auto-generated target names for inactive config. */
virBufferEscapeString(buf, "<target dev='%s'/>\n", def->ifname); virBufferEscapeString(buf, "<target dev='%s'/>\n", def->ifname);
} }
if (def->ifname_guest || def->ifname_guest_actual) { if (def->ifname_guest || def->ifname_guest_actual) {
virBufferAddLit(buf, "<guest"); virBufferAddLit(buf, "<guest");
/* Skip auto-generated target names for inactive config. */ /* Skip auto-generated target names for inactive config. */

View File

@ -963,8 +963,7 @@ struct _virDomainNetDef {
} tune; } tune;
char *script; char *script;
char *domain_name; /* backend domain name */ char *domain_name; /* backend domain name */
char *ifname; /* interface name on the host (<target dev='x'/>) */ char *ifname;
virNetDevIPInfo hostIP;
char *ifname_guest_actual; char *ifname_guest_actual;
char *ifname_guest; char *ifname_guest;
virNetDevIPInfo guestIP; virNetDevIPInfo guestIP;

View File

@ -1,44 +0,0 @@
<domain type='lxc'>
<name>8675309</name>
<uuid>e21987a5-e98e-9c99-0e35-803e4d9ad1fe</uuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<resource>
<partition>/machine</partition>
</resource>
<os>
<type arch='x86_64'>exe</type>
<init>/sbin/init</init>
</os>
<idmap>
<uid start='0' target='100000' count='100000'/>
<gid start='0' target='100000' count='100000'/>
</idmap>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/libvirt_lxc</emulator>
<filesystem type='mount' accessmode='passthrough'>
<source dir='/mach/8675309'/>
<target dir='/'/>
</filesystem>
<interface type='ethernet'>
<mac address='00:16:3e:0f:ef:8a'/>
<source>
<ip address='192.168.122.12' family='ipv4' prefix='24' peer='192.168.122.1'/>
<ip address='192.168.122.13' family='ipv4' prefix='24'/>
<route family='ipv4' address='0.0.0.0' gateway='192.168.122.1'/>
<route family='ipv4' address='192.168.124.0' prefix='24' gateway='192.168.124.1'/>
</source>
<ip address='192.168.122.1' family='ipv4' prefix='32' peer='192.168.122.12'/>
<guest dev='eth2'/>
</interface>
<console type='pty'>
<target type='lxc' port='0'/>
</console>
</devices>
<seclabel type='none'/>
</domain>

View File

@ -95,7 +95,6 @@ mymain(void)
DO_TEST("capabilities"); DO_TEST("capabilities");
DO_TEST("sharenet"); DO_TEST("sharenet");
DO_TEST("ethernet"); DO_TEST("ethernet");
DO_TEST("ethernet-hostip");
DO_TEST_FULL("filesystem-root", 0, false, DO_TEST_FULL("filesystem-root", 0, false,
VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS); VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS);