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;source network='default'/&gt;
&lt;target dev='vnet0'/&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'/&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.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> <b>&lt;route family='ipv4' address='192.168.122.8' gateway='192.168.122.1'/&gt;</b>
&lt;/interface&gt; &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 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> of this element are described in the documentation for the <code>route</code>
element in <a href="formatnetwork.html#elementsStaticroute">network definitions</a>. 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> </p>
<h5><a name="elementVhostuser">vhost-user interface</a></h5> <h5><a name="elementVhostuser">vhost-user interface</a></h5>

View File

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

View File

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

View File

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