libvirt domain xml allow to set peer address

Signed-off-by: Vasiliy Tolstov <v.tolstov@selfip.ru>
This commit is contained in:
Vasiliy Tolstov 2016-04-04 21:00:03 +00:00 committed by Daniel P. Berrange
parent b3d069872c
commit 690969af9c
4 changed files with 30 additions and 2 deletions

View File

@ -4758,6 +4758,7 @@ qemu-kvm -net nic,model=? /dev/null
&lt;source network='default'/&gt;
&lt;target dev='vnet0'/&gt;
<b>&lt;ip address='192.168.122.5' prefix='24'/&gt;</b>
<b>&lt;ip address='192.168.122.5' prefix='24' peer='10.0.0.10'/&gt;</b>
<b>&lt;route family='ipv4' address='192.168.122.0' prefix='24' gateway='192.168.122.1'/&gt;</b>
<b>&lt;route family='ipv4' address='192.168.122.8' gateway='192.168.122.1'/&gt;</b>
&lt;/interface&gt;
@ -4790,7 +4791,16 @@ qemu-kvm -net nic,model=? /dev/null
to define the network routes to use for the network device. The attributes
of this element are described in the documentation for the <code>route</code>
element in <a href="formatnetwork.html#elementsStaticroute">network definitions</a>.
This is only used by the LXC driver.
This is used by the LXC driver and <span class="since">Since 1.3.3</span> by the QEMU
driver.
</p>
<p>
<span class="since">Since 1.3.3</span> ip elements can hold peer attribute to assign
a point-to-point address for the network device. The attributes of this element
are described in the documentation for the <code>ip</code> element in
<a href="formatnetwork.html#elementsAddress">network definitions</a>.
This is only used by the LXC and QEMU drivers.
</p>
<h5><a name="elementVhostuser">vhost-user interface</a></h5>

View File

@ -2393,6 +2393,11 @@
<ref name="ipPrefix"/>
</attribute>
</optional>
<optional>
<attribute name="peer">
<ref name="ipAddr"/>
</attribute>
</optional>
<empty/>
</element>
</zeroOrMore>

View File

@ -5733,7 +5733,7 @@ virDomainNetIpParseXML(xmlNodePtr node)
unsigned int prefixValue = 0;
char *familyStr = NULL;
int family = AF_UNSPEC;
char *address = NULL;
char *address = NULL, *peer = NULL;
if (!(prefixStr = virXMLPropString(node, "prefix")) ||
(virStrToLong_ui(prefixStr, NULL, 10, &prefixValue) < 0)) {
@ -5747,6 +5747,9 @@ virDomainNetIpParseXML(xmlNodePtr node)
goto cleanup;
}
if ((peer = virXMLPropString(node, "peer")) == NULL)
VIR_DEBUG("Peer is empty");
familyStr = virXMLPropString(node, "family");
if (familyStr && STREQ(familyStr, "ipv4"))
family = AF_INET;
@ -5764,6 +5767,14 @@ virDomainNetIpParseXML(xmlNodePtr node)
address);
goto cleanup;
}
if ((peer != NULL) && (virSocketAddrParse(&ip->peer, peer, family) < 0)) {
virReportError(VIR_ERR_INVALID_ARG,
_("Failed to parse IP address: '%s'"),
peer);
goto cleanup;
}
ip->prefix = prefixValue;
ret = ip;
@ -5773,6 +5784,7 @@ virDomainNetIpParseXML(xmlNodePtr node)
VIR_FREE(prefixStr);
VIR_FREE(familyStr);
VIR_FREE(address);
VIR_FREE(peer);
VIR_FREE(ip);
return ret;
}

View File

@ -514,6 +514,7 @@ typedef struct _virDomainNetIpDef virDomainNetIpDef;
typedef virDomainNetIpDef *virDomainNetIpDefPtr;
struct _virDomainNetIpDef {
virSocketAddr address; /* ipv4 or ipv6 address */
virSocketAddr peer; /* ipv4 or ipv6 address of peer */
unsigned int prefix; /* number of 1 bits in the net mask */
};