</li>
</ul>
</dd>
+ <dt><code>backenddomain</code></dt>
+ <dd>The optional <code>backenddomain</code> element allows specifying a
+ backend domain (aka driver domain) hosting the disk. Use the
+ <code>name</code> attribute to specify the backend domain name.
+ <span class="since">Since 1.2.13 (Xen only)</span>
+ </dd>
<dt><code>boot</code></dt>
<dd>Specifies that the disk is bootable. The <code>order</code>
attribute determines the order in which devices will be tried during
network device.
<span class="since">Since 0.9.10 (QEMU and KVM only)</span>.
</p>
+ <h5><a name="elementDomain">Setting up a network backend in a driver domain</a></h5>
+<pre>
+ ...
+ <devices>
+ ...
+ <interface type='bridge'>
+ <source bridge='br0'/>
+ <b><backenddomain name='netvm'/></b>
+ </interface>
+ ...
+ </devices>
+ ...</pre>
+
+ <p>
+ The optional <code>backenddomain</code> element allows specifying a
+ backend domain (aka driver domain) for the interface. Use the
+ <code>name</code> attribute to specify the backend domain name. You
+ can use it to create a direct network link between domains (so data
+ will not go through host system). Use with type 'ethernet' to create
+ plain network link, or with type 'bridge' to connect to a bridge inside
+ the backend domain.
+ <span class="since">Since 1.2.13 (Xen only)</span>
+ </p>
<h5><a name="elementQoS">Quality of service</a></h5>
VIR_FREE(def->wwn);
VIR_FREE(def->vendor);
VIR_FREE(def->product);
+ VIR_FREE(def->domain_name);
virDomainDeviceInfoClear(&def->info);
VIR_FREE(def);
VIR_FREE(def->backend.vhost);
VIR_FREE(def->virtPortProfile);
VIR_FREE(def->script);
+ VIR_FREE(def->domain_name);
VIR_FREE(def->ifname);
VIR_FREE(def->ifname_guest);
VIR_FREE(def->ifname_guest_actual);
char *discard = NULL;
char *mirrorFormat = NULL;
char *mirrorType = NULL;
+ char *domain_name = NULL;
int expected_secret_usage = -1;
int auth_secret_usage = -1;
int ret = 0;
if (target &&
STRPREFIX(target, "ioemu:"))
memmove(target, target+6, strlen(target)-5);
+ } else if (!domain_name &&
+ xmlStrEqual(cur->name, BAD_CAST "backenddomain")) {
+ domain_name = virXMLPropString(cur, "name");
} else if (xmlStrEqual(cur->name, BAD_CAST "geometry")) {
if (virXPathUInt("string(./geometry/@cyls)",
ctxt, &def->geometry.cylinders) < 0) {
driverName = NULL;
def->src->encryption = encryption;
encryption = NULL;
+ def->domain_name = domain_name;
+ domain_name = NULL;
def->serial = serial;
serial = NULL;
def->wwn = wwn;
VIR_FREE(product);
VIR_FREE(mirrorType);
VIR_FREE(mirrorFormat);
+ VIR_FREE(domain_name);
ctxt->node = save_ctxt;
return def;
char *mode = NULL;
char *linkstate = NULL;
char *addrtype = NULL;
+ char *domain_name = NULL;
char *vhostuser_mode = NULL;
char *vhostuser_path = NULL;
char *vhostuser_type = NULL;
} else if (!script &&
xmlStrEqual(cur->name, BAD_CAST "script")) {
script = virXMLPropString(cur, "path");
+ } else if (!domain_name &&
+ xmlStrEqual(cur->name, BAD_CAST "backenddomain")) {
+ domain_name = virXMLPropString(cur, "name");
} else if (xmlStrEqual(cur->name, BAD_CAST "model")) {
model = virXMLPropString(cur, "type");
} else if (xmlStrEqual(cur->name, BAD_CAST "driver")) {
def->script = script;
script = NULL;
}
+ if (domain_name != NULL) {
+ def->domain_name = domain_name;
+ domain_name = NULL;
+ }
if (ifname != NULL) {
def->ifname = ifname;
ifname = NULL;
VIR_FREE(mode);
VIR_FREE(linkstate);
VIR_FREE(addrtype);
+ VIR_FREE(domain_name);
VIR_FREE(trustGuestRxFilters);
VIR_FREE(ips);
VIR_FREE(vhost_path);
def->src->backingStoreRaw, 1) < 0)
return -1;
+ virBufferEscapeString(buf, "<backenddomain name='%s'/>\n", def->domain_name);
+
virDomainDiskGeometryDefFormat(buf, def);
virDomainDiskBlockIoDefFormat(buf, def);
virBufferEscapeString(buf, "<script path='%s'/>\n",
def->script);
+ virBufferEscapeString(buf, "<backenddomain name='%s'/>\n", def->domain_name);
if (def->ifname &&
!((flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE) &&
(STRPREFIX(def->ifname, VIR_NET_GENERATED_PREFIX)))) {