mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-21 19:02:25 +00:00
conf: allow setting peer address in <ip> element of <interface>
The peer attribute is used to set the property of the same name in the interface IP info: <interface type='ethernet'> ... <ip family='ipv4' address='192.168.122.5' prefix='32' peer='192.168.122.6'/> ... </interface> Note that this element is used to set the IP information on the *guest* side interface, not the host side interface - that will be supported in an upcoming patch. (This is an updated *re*-commit of commit 690969af, which was subsequently reverted in commit 1d14b13f). Signed-off-by: Vasiliy Tolstov <v.tolstov@selfip.ru> Signed-off-by: Laine Stump <laine@laine.org>
This commit is contained in:
parent
f1e0d0da11
commit
93135abf14
@ -4967,6 +4967,7 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
<source network='default'/>
|
||||
<target dev='vnet0'/>
|
||||
<b><ip address='192.168.122.5' prefix='24'/></b>
|
||||
<b><ip address='192.168.122.5' prefix='24' peer='10.0.0.10'/></b>
|
||||
<b><route family='ipv4' address='192.168.122.0' prefix='24' gateway='192.168.122.1'/></b>
|
||||
<b><route family='ipv4' address='192.168.122.8' gateway='192.168.122.1'/></b>
|
||||
</interface>
|
||||
@ -4985,21 +4986,30 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
<span class="since">Since 1.2.12</span> the network devices and host devices
|
||||
with network capabilities can be provided zero or more IP addresses to set
|
||||
on the target device. Note that some hypervisors or network device types
|
||||
will simply ignore them or only use the first one. The <code>family</code>
|
||||
attribute can be set to either <code>ipv4</code> or <code>ipv6</code>, the
|
||||
<code>address</code> attribute holds the IP address. The <code>prefix</code>
|
||||
is not mandatory since some hypervisors do not handle it.
|
||||
<span class="since">Since 1.2.12</span> network devices and
|
||||
hostdev devices with network capabilities can optionally be provided
|
||||
one or more IP addresses to set on the network device in the
|
||||
guest. Note that some hypervisors or network device types will
|
||||
simply ignore them or only use the first one.
|
||||
The <code>family</code> attribute can be set to
|
||||
either <code>ipv4</code> or <code>ipv6</code>, and the
|
||||
<code>address</code> attribute contains the IP address. The
|
||||
optional <code>prefix</code> is the number of 1 bits in the
|
||||
netmask, and will be automatically set if not specified - for
|
||||
IPv4 the default prefix is determined according to the network
|
||||
"class" (A, B, or C - see RFC870), and for IPv6 the default
|
||||
prefix is 64. The optional <code>peer</code> attribute holds the
|
||||
IP address of the other end of a point-to-point network
|
||||
device <span class="since">(since 2.0.0)</span>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<span class="since">Since 1.2.12</span> route elements can also be added
|
||||
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.
|
||||
<span class="since">Since 1.2.12</span> route elements can also be
|
||||
added to define IP routes to add in the guest. 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 used by the LXC driver.
|
||||
</p>
|
||||
|
||||
<h5><a name="elementVhostuser">vhost-user interface</a></h5>
|
||||
|
@ -2629,6 +2629,11 @@
|
||||
<ref name="ipPrefix"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="peer">
|
||||
<ref name="ipAddr"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<empty/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
|
@ -6121,7 +6121,7 @@ virDomainNetIPParseXML(xmlNodePtr node)
|
||||
unsigned int prefixValue = 0;
|
||||
char *familyStr = NULL;
|
||||
int family = AF_UNSPEC;
|
||||
char *address = NULL;
|
||||
char *address = NULL, *peer = NULL;
|
||||
|
||||
if (!(address = virXMLPropString(node, "address"))) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
@ -6159,6 +6159,13 @@ virDomainNetIPParseXML(xmlNodePtr node)
|
||||
}
|
||||
ip->prefix = prefixValue;
|
||||
|
||||
if ((peer = virXMLPropString(node, "peer")) != NULL &&
|
||||
virSocketAddrParse(&ip->peer, peer, family) < 0) {
|
||||
virReportError(VIR_ERR_INVALID_ARG,
|
||||
_("Invalid peer '%s' in <ip>"), peer);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = ip;
|
||||
ip = NULL;
|
||||
|
||||
@ -6166,6 +6173,7 @@ virDomainNetIPParseXML(xmlNodePtr node)
|
||||
VIR_FREE(prefixStr);
|
||||
VIR_FREE(familyStr);
|
||||
VIR_FREE(address);
|
||||
VIR_FREE(peer);
|
||||
VIR_FREE(ip);
|
||||
return ret;
|
||||
}
|
||||
@ -20264,6 +20272,12 @@ virDomainNetIPInfoFormat(virBufferPtr buf,
|
||||
virBufferAsprintf(buf, " family='%s'", familyStr);
|
||||
if (def->ips[i]->prefix)
|
||||
virBufferAsprintf(buf, " prefix='%u'", def->ips[i]->prefix);
|
||||
if (VIR_SOCKET_ADDR_VALID(&def->ips[i]->peer)) {
|
||||
if (!(ipStr = virSocketAddrFormat(&def->ips[i]->peer)))
|
||||
return -1;
|
||||
virBufferAsprintf(buf, " peer='%s'", ipStr);
|
||||
VIR_FREE(ipStr);
|
||||
}
|
||||
virBufferAddLit(buf, "/>\n");
|
||||
}
|
||||
|
||||
|
@ -26,8 +26,9 @@
|
||||
# include "virsocketaddr.h"
|
||||
|
||||
typedef struct {
|
||||
virSocketAddr address; /* ipv4 or ipv6 address */
|
||||
unsigned int prefix; /* number of 1 bits in the net mask */
|
||||
virSocketAddr address; /* ipv4 or ipv6 address */
|
||||
virSocketAddr peer; /* ipv4 or ipv6 address of peer */
|
||||
unsigned int prefix; /* number of 1 bits in the netmask */
|
||||
} virNetDevIPAddr, *virNetDevIPAddrPtr;
|
||||
|
||||
typedef struct {
|
||||
|
Loading…
x
Reference in New Issue
Block a user