mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
* docs/apibuild.py docs/newapi.xsl: fix generation of XML and
stylesheet * docs/*: regenerated * src/bridge.c src/bridge.h src/buf.c src/iptables.c src/libvirt.c src/qemu_driver.c src/qemu_driver.h src/uuid.c src/uuid.h: cleanup, addd comments, made functions static and fixe a few bugs Daniel
This commit is contained in:
parent
4c0f24c10f
commit
b4c282a79b
@ -1,3 +1,12 @@
|
||||
Fri Jun 29 15:18:36 CEST 2007 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* docs/apibuild.py docs/newapi.xsl: fix generation of XML and
|
||||
stylesheet
|
||||
* docs/*: regenerated
|
||||
* src/bridge.c src/bridge.h src/buf.c src/iptables.c src/libvirt.c
|
||||
src/qemu_driver.c src/qemu_driver.h src/uuid.c src/uuid.h: cleanup,
|
||||
addd comments, made functions static and fixe a few bugs
|
||||
|
||||
Tue Jun 29 13:44:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>
|
||||
|
||||
* docs/site.xsl, docs/libvir.html, docs/hvsupport.html:
|
||||
|
@ -125,10 +125,12 @@
|
||||
<a href="html/libvirt-libvirt.html#virConnectNumOfDomains">virConnectNumOfDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectNumOfNetworks">virConnectNumOfNetworks</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetAutostart">virDomainGetAutostart</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetConnect">virDomainGetConnect</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetMaxVcpus">virDomainGetMaxVcpus</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virNetworkGetAutostart">virNetworkGetAutostart</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virNetworkGetBridgeName">virNetworkGetBridgeName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virNetworkGetConnect">virNetworkGetConnect</a><br />
|
||||
</dd></dl><h2>Letter R:</h2><dl><dt>RFC4122</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetUUIDString">virDomainGetUUIDString</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virNetworkGetUUIDString">virNetworkGetUUIDString</a><br />
|
||||
</dd><dt>Read-Only</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
@ -138,8 +140,6 @@
|
||||
<a href="html/libvirt-virterror.html#virResetLastError">virResetLastError</a><br />
|
||||
</dd><dt>Resume</dt><dd><a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
</dd><dt>Retrieve</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
</dd><dt>Returns</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetConnect">virDomainGetConnect</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virNetworkGetConnect">virNetworkGetConnect</a><br />
|
||||
</dd></dl><h2>Letter S:</h2><dl><dt>See</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
</dd><dt>Set</dt><dd><a href="html/libvirt-virterror.html#virConnSetErrorFunc">virConnSetErrorFunc</a><br />
|
||||
<a href="html/libvirt-virterror.html#virSetErrorFunc">virSetErrorFunc</a><br />
|
||||
|
@ -51,6 +51,17 @@ ignored_files = {
|
||||
"console.c": "internal code",
|
||||
"event.h": "internal code",
|
||||
"event.c": "internal code",
|
||||
"iptables.h": "internal code",
|
||||
"iptables.c": "internal code",
|
||||
"buf.h": "internal code",
|
||||
"buf.c": "internal code",
|
||||
"qemu_driver.c": "internal code",
|
||||
"remote_internal.c": "internal code",
|
||||
"bridge.h": "internal code",
|
||||
"bridge.c": "internal code",
|
||||
"uuid.h": "internal code",
|
||||
"uuid.c": "internal code",
|
||||
|
||||
}
|
||||
|
||||
ignored_words = {
|
||||
|
@ -442,8 +442,8 @@ The content of this structure is not made public by the API.
|
||||
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>autostart</tt></i>:</span></td><td>the value returned</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error, 0 in case of success</td></tr></tbody></table></div></div>
|
||||
<hr/>
|
||||
<div class="refsect2" lang="en"><h3><a name="virDomainGetConnect"/>virDomainGetConnect ()</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> virDomainGetConnect (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> dom)<br/>
|
||||
</pre><p/>
|
||||
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>dom</tt></i>:</span></td><td>pointer to a domain</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the connection pointer associated with a domain. The reference counter on the connection is not increased by this call. Returns the <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> or NULL in case of failure.</td></tr></tbody></table></div></div>
|
||||
</pre><p>Provides the connection pointer associated with a domain. The reference counter on the connection is not increased by this call.</p>
|
||||
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>dom</tt></i>:</span></td><td>pointer to a domain</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> or NULL in case of failure.</td></tr></tbody></table></div></div>
|
||||
<hr/>
|
||||
<div class="refsect2" lang="en"><h3><a name="virDomainGetID"/>virDomainGetID ()</h3><pre class="programlisting">unsigned int virDomainGetID (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain)<br/>
|
||||
</pre><p>Get the hypervisor ID number for the domain</p>
|
||||
@ -598,8 +598,8 @@ The content of this structure is not made public by the API.
|
||||
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>a network object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a 0 terminated interface name, or NULL in case of error. the caller must free() the returned value.</td></tr></tbody></table></div></div>
|
||||
<hr/>
|
||||
<div class="refsect2" lang="en"><h3><a name="virNetworkGetConnect"/>virNetworkGetConnect ()</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> virNetworkGetConnect (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> net)<br/>
|
||||
</pre><p/>
|
||||
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>net</tt></i>:</span></td><td>pointer to a network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the connection pointer associated with a network. The reference counter on the connection is not increased by this call. Returns the <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> or NULL in case of failure.</td></tr></tbody></table></div></div>
|
||||
</pre><p>Provides the connection pointer associated with a network. The reference counter on the connection is not increased by this call.</p>
|
||||
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>net</tt></i>:</span></td><td>pointer to a network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> or NULL in case of failure.</td></tr></tbody></table></div></div>
|
||||
<hr/>
|
||||
<div class="refsect2" lang="en"><h3><a name="virNetworkGetName"/>virNetworkGetName ()</h3><pre class="programlisting">const char * virNetworkGetName (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)<br/>
|
||||
</pre><p>Get the public name for that network</p>
|
||||
|
@ -3,5 +3,5 @@ Makefile.in
|
||||
Makefile
|
||||
.deps
|
||||
.libs
|
||||
info1
|
||||
suspend
|
||||
info1
|
||||
|
@ -18,24 +18,24 @@ install-data-local:
|
||||
|
||||
EXTRA_DIST=examples.xsl index.py examples.xml
|
||||
|
||||
noinst_PROGRAMS=info1 suspend
|
||||
|
||||
info1_SOURCES=info1.c
|
||||
info1_LDFLAGS=
|
||||
info1_DEPENDENCIES= $(DEPS)
|
||||
info1_LDADD= $(LDADDS)
|
||||
noinst_PROGRAMS=suspend info1
|
||||
|
||||
suspend_SOURCES=suspend.c
|
||||
suspend_LDFLAGS=
|
||||
suspend_DEPENDENCIES= $(DEPS)
|
||||
suspend_LDADD= $(LDADDS)
|
||||
|
||||
info1_SOURCES=info1.c
|
||||
info1_LDFLAGS=
|
||||
info1_DEPENDENCIES= $(DEPS)
|
||||
info1_LDADD= $(LDADDS)
|
||||
|
||||
valgrind:
|
||||
$(MAKE) CHECKER='valgrind' tests
|
||||
|
||||
tests: $(noinst_PROGRAMS)
|
||||
@(echo '## examples regression tests')
|
||||
@($(CHECKER) ./info1)
|
||||
@($(CHECKER) ./suspend)
|
||||
@($(CHECKER) ./info1)
|
||||
|
||||
|
||||
|
@ -1,23 +1,4 @@
|
||||
<examples>
|
||||
<example filename='info1.c'>
|
||||
<synopsis>Extract informations about Xen domain 0</synopsis>
|
||||
<purpose>Demonstrate the basic use of the library to connect to the hypervisor and extract domain informations.</purpose>
|
||||
<usage>info1</usage>
|
||||
<test>info1</test>
|
||||
<author>Daniel Veillard</author>
|
||||
<copy>see Copyright for the status of this software. </copy>
|
||||
<section>Informations</section>
|
||||
<includes>
|
||||
</includes>
|
||||
<uses>
|
||||
<function line='43' file='libvirt' name='virDomainGetInfo'/>
|
||||
<function line='53' file='libvirt' name='virDomainFree'/>
|
||||
<function line='36' file='libvirt' name='virDomainLookupByID'/>
|
||||
<function line='55' file='libvirt' name='virConnectClose'/>
|
||||
<struct line='25' file='libvirt' name='virDomainInfo'/>
|
||||
<function line='29' file='libvirt' name='virConnectOpenReadOnly'/>
|
||||
</uses>
|
||||
</example>
|
||||
<example filename='suspend.c'>
|
||||
<synopsis>Suspend a domain and then resume its execution</synopsis>
|
||||
<purpose>Demonstrate the basic use of the library to suspend and resume a domain. If no id is given on the command line this script will suspend and resume the first domain found which is not Domain 0.</purpose>
|
||||
@ -40,33 +21,52 @@
|
||||
<function line='100' file='libvirt' name='virConnectOpenReadOnly'/>
|
||||
</uses>
|
||||
</example>
|
||||
<example filename='info1.c'>
|
||||
<synopsis>Extract informations about Xen domain 0</synopsis>
|
||||
<purpose>Demonstrate the basic use of the library to connect to the hypervisor and extract domain informations.</purpose>
|
||||
<usage>info1</usage>
|
||||
<test>info1</test>
|
||||
<author>Daniel Veillard</author>
|
||||
<copy>see Copyright for the status of this software. </copy>
|
||||
<section>Informations</section>
|
||||
<includes>
|
||||
</includes>
|
||||
<uses>
|
||||
<function line='43' file='libvirt' name='virDomainGetInfo'/>
|
||||
<function line='53' file='libvirt' name='virDomainFree'/>
|
||||
<function line='36' file='libvirt' name='virDomainLookupByID'/>
|
||||
<function line='55' file='libvirt' name='virConnectClose'/>
|
||||
<struct line='25' file='libvirt' name='virDomainInfo'/>
|
||||
<function line='29' file='libvirt' name='virConnectOpenReadOnly'/>
|
||||
</uses>
|
||||
</example>
|
||||
<symbols>
|
||||
<symbol name='virConnectClose'>
|
||||
<ref filename='info1.c'/>
|
||||
<ref filename='suspend.c'/>
|
||||
<ref filename='info1.c'/>
|
||||
</symbol>
|
||||
<symbol name='virConnectListDomains'>
|
||||
<ref filename='suspend.c'/>
|
||||
</symbol>
|
||||
<symbol name='virConnectOpenReadOnly'>
|
||||
<ref filename='info1.c'/>
|
||||
<ref filename='suspend.c'/>
|
||||
<ref filename='info1.c'/>
|
||||
</symbol>
|
||||
<symbol name='virDomainFree'>
|
||||
<ref filename='info1.c'/>
|
||||
<ref filename='suspend.c'/>
|
||||
<ref filename='info1.c'/>
|
||||
</symbol>
|
||||
<symbol name='virDomainGetInfo'>
|
||||
<ref filename='info1.c'/>
|
||||
<ref filename='suspend.c'/>
|
||||
<ref filename='info1.c'/>
|
||||
</symbol>
|
||||
<symbol name='virDomainInfo'>
|
||||
<ref filename='info1.c'/>
|
||||
<ref filename='suspend.c'/>
|
||||
<ref filename='info1.c'/>
|
||||
</symbol>
|
||||
<symbol name='virDomainLookupByID'>
|
||||
<ref filename='info1.c'/>
|
||||
<ref filename='suspend.c'/>
|
||||
<ref filename='info1.c'/>
|
||||
</symbol>
|
||||
<symbol name='virDomainResume'>
|
||||
<ref filename='suspend.c'/>
|
||||
|
@ -242,8 +242,8 @@ The content of this structure is not made public by the API.
|
||||
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virDomainGetAutostart" id="virDomainGetAutostart"></a>Function: virDomainGetAutostart</h3><pre class="programlisting">int virDomainGetAutostart (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> int * autostart)<br />
|
||||
</pre><p>Provides a boolean value indicating whether the domain configured to be automatically started when the host machine boots.</p>
|
||||
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>autostart</tt></i>:</span></td><td>the value returned</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error, 0 in case of success</td></tr></tbody></table></div><h3><a name="virDomainGetConnect" id="virDomainGetConnect"></a>Function: virDomainGetConnect</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> virDomainGetConnect (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> dom)<br />
|
||||
</pre><p></p>
|
||||
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dom</tt></i>:</span></td><td>pointer to a domain</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the connection pointer associated with a domain. The reference counter on the connection is not increased by this call. Returns the <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> or NULL in case of failure.</td></tr></tbody></table></div><h3><a name="virDomainGetID" id="virDomainGetID"></a>Function: virDomainGetID</h3><pre class="programlisting">unsigned int virDomainGetID (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain)<br />
|
||||
</pre><p>Provides the connection pointer associated with a domain. The reference counter on the connection is not increased by this call.</p>
|
||||
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dom</tt></i>:</span></td><td>pointer to a domain</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> or NULL in case of failure.</td></tr></tbody></table></div><h3><a name="virDomainGetID" id="virDomainGetID"></a>Function: virDomainGetID</h3><pre class="programlisting">unsigned int virDomainGetID (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain)<br />
|
||||
</pre><p>Get the hypervisor ID number for the domain</p>
|
||||
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the domain ID number or (unsigned int) -1 in case of error</td></tr></tbody></table></div><h3><a name="virDomainGetInfo" id="virDomainGetInfo"></a>Function: virDomainGetInfo</h3><pre class="programlisting">int virDomainGetInfo (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> <a href="libvirt-libvirt.html#virDomainInfoPtr">virDomainInfoPtr</a> info)<br />
|
||||
</pre><p>Extract information about a domain. Note that if the connection used to get the domain is limited only a partial set of the information can be extracted.</p>
|
||||
@ -320,8 +320,8 @@ The content of this structure is not made public by the API.
|
||||
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>a network object</td></tr><tr><td><span class="term"><i><tt>autostart</tt></i>:</span></td><td>the value returned</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error, 0 in case of success</td></tr></tbody></table></div><h3><a name="virNetworkGetBridgeName" id="virNetworkGetBridgeName"></a>Function: virNetworkGetBridgeName</h3><pre class="programlisting">char * virNetworkGetBridgeName (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)<br />
|
||||
</pre><p>Provides a bridge interface name to which a domain may connect a network interface in order to join the network.</p>
|
||||
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>a network object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a 0 terminated interface name, or NULL in case of error. the caller must free() the returned value.</td></tr></tbody></table></div><h3><a name="virNetworkGetConnect" id="virNetworkGetConnect"></a>Function: virNetworkGetConnect</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> virNetworkGetConnect (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> net)<br />
|
||||
</pre><p></p>
|
||||
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>net</tt></i>:</span></td><td>pointer to a network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the connection pointer associated with a network. The reference counter on the connection is not increased by this call. Returns the <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> or NULL in case of failure.</td></tr></tbody></table></div><h3><a name="virNetworkGetName" id="virNetworkGetName"></a>Function: virNetworkGetName</h3><pre class="programlisting">const char * virNetworkGetName (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)<br />
|
||||
</pre><p>Provides the connection pointer associated with a network. The reference counter on the connection is not increased by this call.</p>
|
||||
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>net</tt></i>:</span></td><td>pointer to a network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> or NULL in case of failure.</td></tr></tbody></table></div><h3><a name="virNetworkGetName" id="virNetworkGetName"></a>Function: virNetworkGetName</h3><pre class="programlisting">const char * virNetworkGetName (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)<br />
|
||||
</pre><p>Get the public name for that network</p>
|
||||
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>a network object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the name or NULL, the string need not be deallocated its lifetime will be the same as the network object.</td></tr></tbody></table></div><h3><a name="virNetworkGetUUID" id="virNetworkGetUUID"></a>Function: virNetworkGetUUID</h3><pre class="programlisting">int virNetworkGetUUID (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network, <br /> unsigned char * uuid)<br />
|
||||
</pre><p>Get the UUID for a network</p>
|
||||
|
@ -614,8 +614,8 @@
|
||||
<arg name='autostart' type='int *' info='the value returned'/>
|
||||
</function>
|
||||
<function name='virDomainGetConnect' file='libvirt' module='libvirt'>
|
||||
<info></info>
|
||||
<return type='virConnectPtr' info='the connection pointer associated with a domain. The reference counter on the connection is not increased by this call. Returns the virConnectPtr or NULL in case of failure.'/>
|
||||
<info>Provides the connection pointer associated with a domain. The reference counter on the connection is not increased by this call.</info>
|
||||
<return type='virConnectPtr' info='the virConnectPtr or NULL in case of failure.'/>
|
||||
<arg name='dom' type='virDomainPtr' info='pointer to a domain'/>
|
||||
</function>
|
||||
<function name='virDomainGetID' file='libvirt' module='libvirt'>
|
||||
@ -850,8 +850,8 @@
|
||||
<arg name='network' type='virNetworkPtr' info='a network object'/>
|
||||
</function>
|
||||
<function name='virNetworkGetConnect' file='libvirt' module='libvirt'>
|
||||
<info></info>
|
||||
<return type='virConnectPtr' info='the connection pointer associated with a network. The reference counter on the connection is not increased by this call. Returns the virConnectPtr or NULL in case of failure.'/>
|
||||
<info>Provides the connection pointer associated with a network. The reference counter on the connection is not increased by this call.</info>
|
||||
<return type='virConnectPtr' info='the virConnectPtr or NULL in case of failure.'/>
|
||||
<arg name='net' type='virNetworkPtr' info='pointer to a network'/>
|
||||
</function>
|
||||
<function name='virNetworkGetName' file='libvirt' module='libvirt'>
|
||||
|
@ -1058,10 +1058,12 @@
|
||||
<ref name='virConnectNumOfDomains'/>
|
||||
<ref name='virConnectNumOfNetworks'/>
|
||||
<ref name='virDomainGetAutostart'/>
|
||||
<ref name='virDomainGetConnect'/>
|
||||
<ref name='virDomainGetMaxVcpus'/>
|
||||
<ref name='virGetVersion'/>
|
||||
<ref name='virNetworkGetAutostart'/>
|
||||
<ref name='virNetworkGetBridgeName'/>
|
||||
<ref name='virNetworkGetConnect'/>
|
||||
</word>
|
||||
</letter>
|
||||
<letter name='R'>
|
||||
@ -1086,10 +1088,6 @@
|
||||
<word name='Retrieve'>
|
||||
<ref name='virDomainGetMaxMemory'/>
|
||||
</word>
|
||||
<word name='Returns'>
|
||||
<ref name='virDomainGetConnect'/>
|
||||
<ref name='virNetworkGetConnect'/>
|
||||
</word>
|
||||
</letter>
|
||||
<letter name='S'>
|
||||
<word name='See'>
|
||||
|
@ -476,20 +476,19 @@
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="docomponents">
|
||||
<xsl:param name="mode"/>
|
||||
<xsl:apply-templates select="exports[@type='macro']" mode="$mode">
|
||||
<xsl:apply-templates select="exports[@type='macro']">
|
||||
<xsl:sort select='@symbol'/>
|
||||
</xsl:apply-templates>
|
||||
<xsl:apply-templates select="exports[@type='enum']" mode="$mode">
|
||||
<xsl:apply-templates select="exports[@type='enum']">
|
||||
<xsl:sort select='@symbol'/>
|
||||
</xsl:apply-templates>
|
||||
<xsl:apply-templates select="exports[@type='typedef']" mode="$mode">
|
||||
<xsl:apply-templates select="exports[@type='typedef']">
|
||||
<xsl:sort select='@symbol'/>
|
||||
</xsl:apply-templates>
|
||||
<xsl:apply-templates select="exports[@type='struct']" mode="$mode">
|
||||
<xsl:apply-templates select="exports[@type='struct']">
|
||||
<xsl:sort select='@symbol'/>
|
||||
</xsl:apply-templates>
|
||||
<xsl:apply-templates select="exports[@type='function']" mode="$mode">
|
||||
<xsl:apply-templates select="exports[@type='function']">
|
||||
<xsl:sort select='@symbol'/>
|
||||
</xsl:apply-templates>
|
||||
</xsl:template>
|
||||
|
176
src/bridge.c
176
src/bridge.c
@ -53,6 +53,15 @@ struct _brControl {
|
||||
int fd;
|
||||
};
|
||||
|
||||
/**
|
||||
* brInit:
|
||||
* @ctlp: pointer to bridge control return value
|
||||
*
|
||||
* Initialize a new bridge layer. In case of success
|
||||
* @ctlp will contain a pointer to the new bridge structure.
|
||||
*
|
||||
* Returns 0 in case of success, an error code otherwise.
|
||||
*/
|
||||
int
|
||||
brInit(brControl **ctlp)
|
||||
{
|
||||
@ -74,14 +83,22 @@ brInit(brControl **ctlp)
|
||||
}
|
||||
|
||||
*ctlp = (brControl *)malloc(sizeof(struct _brControl));
|
||||
if (!*ctlp)
|
||||
if (!*ctlp) {
|
||||
close(fd);
|
||||
return ENOMEM;
|
||||
}
|
||||
|
||||
(*ctlp)->fd = fd;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* brShutdown:
|
||||
* @ctl: pointer to a bridge control
|
||||
*
|
||||
* Shutdown the bridge layer and deallocate the associated structures
|
||||
*/
|
||||
void
|
||||
brShutdown(brControl *ctl)
|
||||
{
|
||||
@ -94,6 +111,19 @@ brShutdown(brControl *ctl)
|
||||
free(ctl);
|
||||
}
|
||||
|
||||
/**
|
||||
* brAddBridge:
|
||||
* @ctl: bridge control pointer
|
||||
* @nameOrFmt: the bridge name (or name template)
|
||||
* @name: pointer to @maxlen bytes to store the bridge name
|
||||
* @maxlen: size of @name array
|
||||
*
|
||||
* This function register a new bridge, @nameOrFmt can be either
|
||||
* a fixed name or a name template with '%d' for dynamic name allocation.
|
||||
* in either case the final name for the bridge will be stored in @name.
|
||||
*
|
||||
* Returns 0 in case of success or an errno code in case of failure.
|
||||
*/
|
||||
int
|
||||
brAddBridge(brControl *ctl,
|
||||
const char *nameOrFmt,
|
||||
@ -141,6 +171,15 @@ brAddBridge(brControl *ctl,
|
||||
return errno;
|
||||
}
|
||||
|
||||
/**
|
||||
* brDeleteBridge:
|
||||
* @ctl: bridge control pointer
|
||||
* @name: the bridge name
|
||||
*
|
||||
* Remove a bridge from the layer.
|
||||
*
|
||||
* Returns 0 in case of success or an errno code in case of failure.
|
||||
*/
|
||||
int
|
||||
brDeleteBridge(brControl *ctl,
|
||||
const char *name)
|
||||
@ -177,6 +216,16 @@ brAddDelInterface(brControl *ctl,
|
||||
return ioctl(ctl->fd, cmd, &ifr) == 0 ? 0 : errno;
|
||||
}
|
||||
|
||||
/**
|
||||
* brAddInterface:
|
||||
* @ctl: bridge control pointer
|
||||
* @bridge: the bridge name
|
||||
* @iface: the network interface name
|
||||
*
|
||||
* Adds an interface to a bridge
|
||||
*
|
||||
* Returns 0 in case of success or an errno code in case of failure.
|
||||
*/
|
||||
int
|
||||
brAddInterface(brControl *ctl,
|
||||
const char *bridge,
|
||||
@ -185,6 +234,16 @@ brAddInterface(brControl *ctl,
|
||||
return brAddDelInterface(ctl, SIOCBRADDIF, bridge, iface);
|
||||
}
|
||||
|
||||
/**
|
||||
* brDeleteInterface:
|
||||
* @ctl: bridge control pointer
|
||||
* @bridge: the bridge name
|
||||
* @iface: the network interface name
|
||||
*
|
||||
* Removes an interface from a bridge
|
||||
*
|
||||
* Returns 0 in case of success or an errno code in case of failure.
|
||||
*/
|
||||
int
|
||||
brDeleteInterface(brControl *ctl,
|
||||
const char *bridge,
|
||||
@ -194,6 +253,21 @@ brDeleteInterface(brControl *ctl,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* brAddTap:
|
||||
* @ctl: bridge control pointer
|
||||
* @bridge: the bridge name
|
||||
* @ifname: the interface name (or name template)
|
||||
* @maxlen: size of @ifname array
|
||||
* @tapfd: file descriptor return value for the new tap device
|
||||
*
|
||||
* This function reates a new tap device on a bridge. @ifname can be either
|
||||
* a fixed name or a name template with '%d' for dynamic name allocation.
|
||||
* in either case the final name for the bridge will be stored in @ifname
|
||||
* and the associated file descriptor in @tapfd.
|
||||
*
|
||||
* Returns 0 in case of success or an errno code in case of failure.
|
||||
*/
|
||||
int
|
||||
brAddTap(brControl *ctl,
|
||||
const char *bridge,
|
||||
@ -259,6 +333,16 @@ brAddTap(brControl *ctl,
|
||||
return errno;
|
||||
}
|
||||
|
||||
/**
|
||||
* brSetInterfaceUp:
|
||||
* @ctl: bridge control pointer
|
||||
* @ifname: the interface name
|
||||
* @up: 1 for up, 0 for down
|
||||
*
|
||||
* Function to control if an interface is activated (up, 1) or not (down, 0)
|
||||
*
|
||||
* Returns 0 in case of success or an errno code in case of failure.
|
||||
*/
|
||||
int
|
||||
brSetInterfaceUp(brControl *ctl,
|
||||
const char *ifname,
|
||||
@ -294,6 +378,16 @@ brSetInterfaceUp(brControl *ctl,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* brGetInterfaceUp:
|
||||
* @ctl: bridge control pointer
|
||||
* @ifname: the interface name
|
||||
* @up: where to store the status
|
||||
*
|
||||
* Function to query if an interface is activated (1) or not (0)
|
||||
*
|
||||
* Returns 0 in case of success or an errno code in case of failure.
|
||||
*/
|
||||
int
|
||||
brGetInterfaceUp(brControl *ctl,
|
||||
const char *ifname,
|
||||
@ -302,7 +396,7 @@ brGetInterfaceUp(brControl *ctl,
|
||||
struct ifreq ifr;
|
||||
int len;
|
||||
|
||||
if (!ctl || !ifname)
|
||||
if (!ctl || !ifname || !up)
|
||||
return EINVAL;
|
||||
|
||||
if ((len = strlen(ifname)) >= BR_IFNAME_MAXLEN)
|
||||
@ -392,6 +486,19 @@ brGetInetAddr(brControl *ctl,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* brSetInetAddress:
|
||||
* @ctl: bridge control pointer
|
||||
* @ifname: the interface name
|
||||
* @addr: the string representation of the IP adress
|
||||
*
|
||||
* Function to bind the interface to an IP address, it should handle
|
||||
* IPV4 and IPv6. The string for addr would be of the form
|
||||
* "ddd.ddd.ddd.ddd" assuming the common IPv4 format.
|
||||
*
|
||||
* Returns 0 in case of success or an errno code in case of failure.
|
||||
*/
|
||||
|
||||
int
|
||||
brSetInetAddress(brControl *ctl,
|
||||
const char *ifname,
|
||||
@ -400,6 +507,20 @@ brSetInetAddress(brControl *ctl,
|
||||
return brSetInetAddr(ctl, ifname, SIOCSIFADDR, addr);
|
||||
}
|
||||
|
||||
/**
|
||||
* brGetInetAddress:
|
||||
* @ctl: bridge control pointer
|
||||
* @ifname: the interface name
|
||||
* @addr: the array for the string representation of the IP adress
|
||||
* @maxlen: size of @addr in bytes
|
||||
*
|
||||
* Function to get the IP address of an interface, it should handle
|
||||
* IPV4 and IPv6. The returned string for addr would be of the form
|
||||
* "ddd.ddd.ddd.ddd" assuming the common IPv4 format.
|
||||
*
|
||||
* Returns 0 in case of success or an errno code in case of failure.
|
||||
*/
|
||||
|
||||
int
|
||||
brGetInetAddress(brControl *ctl,
|
||||
const char *ifname,
|
||||
@ -409,6 +530,19 @@ brGetInetAddress(brControl *ctl,
|
||||
return brGetInetAddr(ctl, ifname, SIOCGIFADDR, addr, maxlen);
|
||||
}
|
||||
|
||||
/**
|
||||
* brSetInetNetmask:
|
||||
* @ctl: bridge control pointer
|
||||
* @ifname: the interface name
|
||||
* @addr: the string representation of the netmask
|
||||
*
|
||||
* Function to set the netmask of an interface, it should handle
|
||||
* IPV4 and IPv6 forms. The string for addr would be of the form
|
||||
* "ddd.ddd.ddd.ddd" assuming the common IPv4 format.
|
||||
*
|
||||
* Returns 0 in case of success or an errno code in case of failure.
|
||||
*/
|
||||
|
||||
int
|
||||
brSetInetNetmask(brControl *ctl,
|
||||
const char *ifname,
|
||||
@ -417,6 +551,20 @@ brSetInetNetmask(brControl *ctl,
|
||||
return brSetInetAddr(ctl, ifname, SIOCSIFNETMASK, addr);
|
||||
}
|
||||
|
||||
/**
|
||||
* brGetInetNetmask:
|
||||
* @ctl: bridge control pointer
|
||||
* @ifname: the interface name
|
||||
* @addr: the array for the string representation of the netmask
|
||||
* @maxlen: size of @addr in bytes
|
||||
*
|
||||
* Function to get the netmask of an interface, it should handle
|
||||
* IPV4 and IPv6. The returned string for addr would be of the form
|
||||
* "ddd.ddd.ddd.ddd" assuming the common IPv4 format.
|
||||
*
|
||||
* Returns 0 in case of success or an errno code in case of failure.
|
||||
*/
|
||||
|
||||
int
|
||||
brGetInetNetmask(brControl *ctl,
|
||||
const char *ifname,
|
||||
@ -463,6 +611,17 @@ brctlSpawn(char * const *argv)
|
||||
return (WIFEXITED(status) && WEXITSTATUS(status) == 0) ? 0 : EINVAL;
|
||||
}
|
||||
|
||||
/**
|
||||
* brSetForwardDelay:
|
||||
* @ctl: bridge control pointer
|
||||
* @bridge: the bridge name
|
||||
* @delay: delay in seconds
|
||||
*
|
||||
* Set the bridge forward delay
|
||||
*
|
||||
* Returns 0 in case of success or an errno code in case of failure.
|
||||
*/
|
||||
|
||||
int
|
||||
brSetForwardDelay(brControl *ctl ATTRIBUTE_UNUSED,
|
||||
const char *bridge,
|
||||
@ -512,6 +671,17 @@ brSetForwardDelay(brControl *ctl ATTRIBUTE_UNUSED,
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* brSetEnableSTP:
|
||||
* @ctl: bridge control pointer
|
||||
* @bridge: the bridge name
|
||||
* @enable: 1 to enable, 0 to disable
|
||||
*
|
||||
* Control whether the bridge participates in the spanning tree protocol,
|
||||
* in general don't disable it without good reasons.
|
||||
*
|
||||
* Returns 0 in case of success or an errno code in case of failure.
|
||||
*/
|
||||
int
|
||||
brSetEnableSTP(brControl *ctl ATTRIBUTE_UNUSED,
|
||||
const char *bridge,
|
||||
@ -534,7 +704,7 @@ brSetEnableSTP(brControl *ctl ATTRIBUTE_UNUSED,
|
||||
if (!(argv[n++] = strdup(BRCTL_PATH)))
|
||||
goto error;
|
||||
|
||||
if (!(argv[n++] = strdup("setfd")))
|
||||
if (!(argv[n++] = strdup("stp")))
|
||||
goto error;
|
||||
|
||||
if (!(argv[n++] = strdup(bridge)))
|
||||
|
@ -25,7 +25,16 @@
|
||||
#include <net/if.h>
|
||||
#include <netinet/in.h>
|
||||
|
||||
/**
|
||||
* BR_IFNAME_MAXLEN:
|
||||
* maximum size in byte of the name for an interface
|
||||
*/
|
||||
#define BR_IFNAME_MAXLEN IF_NAMESIZE
|
||||
|
||||
/**
|
||||
* BR_INET_ADDR_MAXLEN:
|
||||
* maximum size in bytes for an inet addess name
|
||||
*/
|
||||
#define BR_INET_ADDR_MAXLEN INET_ADDRSTRLEN
|
||||
|
||||
typedef struct _brControl brControl;
|
||||
|
30
src/buf.c
30
src/buf.c
@ -83,6 +83,14 @@ virBufferAdd(virBufferPtr buf, const char *str, int len)
|
||||
return (0);
|
||||
}
|
||||
|
||||
/**
|
||||
* virBufferNew:
|
||||
* @size: creation size in bytes
|
||||
*
|
||||
* Creates a new buffer
|
||||
*
|
||||
* Returns a pointer to the buffer or NULL in case of error
|
||||
*/
|
||||
virBufferPtr
|
||||
virBufferNew(unsigned int size)
|
||||
{
|
||||
@ -99,6 +107,13 @@ virBufferNew(unsigned int size)
|
||||
return buf;
|
||||
}
|
||||
|
||||
/**
|
||||
* virBufferFree:
|
||||
* @buf: the buffer to deallocate
|
||||
*
|
||||
* Free the set of resources used by a buffer.
|
||||
*/
|
||||
|
||||
void
|
||||
virBufferFree(virBufferPtr buf)
|
||||
{
|
||||
@ -113,12 +128,19 @@ virBufferFree(virBufferPtr buf)
|
||||
* virBufferContentAndFree:
|
||||
* @buf: Buffer
|
||||
*
|
||||
* Return the content from the buffer and free (only) the buffer structure.
|
||||
* Get the content from the buffer and free (only) the buffer structure.
|
||||
*
|
||||
* Returns the buffer content or NULL in case of error.
|
||||
*/
|
||||
char *
|
||||
virBufferContentAndFree (virBufferPtr buf)
|
||||
{
|
||||
char *content = buf->content;
|
||||
char *content;
|
||||
|
||||
if (buf == NULL)
|
||||
return(NULL);
|
||||
|
||||
content = buf->content;
|
||||
|
||||
free (buf);
|
||||
return content;
|
||||
@ -128,7 +150,7 @@ virBufferContentAndFree (virBufferPtr buf)
|
||||
* virBufferVSprintf:
|
||||
* @buf: the buffer to dump
|
||||
* @format: the format
|
||||
* @argptr: the variable list of arguments
|
||||
* @...: the variable list of arguments
|
||||
*
|
||||
* Do a formatted print to an XML buffer.
|
||||
*
|
||||
@ -165,7 +187,7 @@ virBufferVSprintf(virBufferPtr buf, const char *format, ...)
|
||||
/**
|
||||
* virBufferStrcat:
|
||||
* @buf: the buffer to dump
|
||||
* @argptr: the variable list of strings, the last argument must be NULL
|
||||
* @...: the variable list of strings, the last argument must be NULL
|
||||
*
|
||||
* Concatenate strings to an XML buffer.
|
||||
*
|
||||
|
203
src/iptables.c
203
src/iptables.c
@ -530,6 +530,13 @@ iptablesAddRemoveRule(iptRules *rules, int action, const char *arg, ...)
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesContextNew:
|
||||
*
|
||||
* Create a new IPtable context
|
||||
*
|
||||
* Returns a pointer to the new structure or NULL in case of error
|
||||
*/
|
||||
iptablesContext *
|
||||
iptablesContextNew(void)
|
||||
{
|
||||
@ -554,6 +561,12 @@ iptablesContextNew(void)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesContextFree:
|
||||
* @ctx: pointer to the IP table context
|
||||
*
|
||||
* Free the ressources associated with an IP table context
|
||||
*/
|
||||
void
|
||||
iptablesContextFree(iptablesContext *ctx)
|
||||
{
|
||||
@ -597,6 +610,12 @@ iptRulesReload(iptRules *rules)
|
||||
rules->rules[i].rule, rules->chain, rules->table, strerror(retval));
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesReloadRules:
|
||||
* @ctx: pointer to the IP table context
|
||||
*
|
||||
* Reloads all the IP table rules associated to a context
|
||||
*/
|
||||
void
|
||||
iptablesReloadRules(iptablesContext *ctx)
|
||||
{
|
||||
@ -626,6 +645,18 @@ iptablesInput(iptablesContext *ctx,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesAddTcpInput:
|
||||
* @ctx: pointer to the IP table context
|
||||
* @iface: the interface name
|
||||
* @port: the TCP port to add
|
||||
*
|
||||
* Add an input to the IP table allowing access to the given @port on
|
||||
* the given @iface interface for TCP packets
|
||||
*
|
||||
* Returns 0 in case of success or an error code in case of error
|
||||
*/
|
||||
|
||||
int
|
||||
iptablesAddTcpInput(iptablesContext *ctx,
|
||||
const char *iface,
|
||||
@ -634,6 +665,17 @@ iptablesAddTcpInput(iptablesContext *ctx,
|
||||
return iptablesInput(ctx, iface, port, ADD, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesRemoveTcpInput:
|
||||
* @ctx: pointer to the IP table context
|
||||
* @iface: the interface name
|
||||
* @port: the TCP port to remove
|
||||
*
|
||||
* Removes an input from the IP table, hence forbiding access to the given
|
||||
* @port on the given @iface interface for TCP packets
|
||||
*
|
||||
* Returns 0 in case of success or an error code in case of error
|
||||
*/
|
||||
int
|
||||
iptablesRemoveTcpInput(iptablesContext *ctx,
|
||||
const char *iface,
|
||||
@ -642,6 +684,18 @@ iptablesRemoveTcpInput(iptablesContext *ctx,
|
||||
return iptablesInput(ctx, iface, port, REMOVE, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesAddUdpInput:
|
||||
* @ctx: pointer to the IP table context
|
||||
* @iface: the interface name
|
||||
* @port: the UDP port to add
|
||||
*
|
||||
* Add an input to the IP table allowing access to the given @port on
|
||||
* the given @iface interface for UDP packets
|
||||
*
|
||||
* Returns 0 in case of success or an error code in case of error
|
||||
*/
|
||||
|
||||
int
|
||||
iptablesAddUdpInput(iptablesContext *ctx,
|
||||
const char *iface,
|
||||
@ -650,6 +704,17 @@ iptablesAddUdpInput(iptablesContext *ctx,
|
||||
return iptablesInput(ctx, iface, port, ADD, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesRemoveUdpInput:
|
||||
* @ctx: pointer to the IP table context
|
||||
* @iface: the interface name
|
||||
* @port: the UDP port to remove
|
||||
*
|
||||
* Removes an input from the IP table, hence forbiding access to the given
|
||||
* @port on the given @iface interface for UDP packets
|
||||
*
|
||||
* Returns 0 in case of success or an error code in case of error
|
||||
*/
|
||||
int
|
||||
iptablesRemoveUdpInput(iptablesContext *ctx,
|
||||
const char *iface,
|
||||
@ -687,6 +752,19 @@ iptablesForwardAllowOut(iptablesContext *ctx,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesAddForwardAllowOut:
|
||||
* @ctx: pointer to the IP table context
|
||||
* @network: the source network name
|
||||
* @iface: the source interface name
|
||||
* @physdev: the physical output device
|
||||
*
|
||||
* Add a rule to the IP table context to allow the traffic for the
|
||||
* network @network via interface @iface to be forwarded to
|
||||
* @physdev device. This allow the outbound traffic on a bridge.
|
||||
*
|
||||
* Returns 0 in case of success or an error code otherwise
|
||||
*/
|
||||
int
|
||||
iptablesAddForwardAllowOut(iptablesContext *ctx,
|
||||
const char *network,
|
||||
@ -696,6 +774,19 @@ iptablesAddForwardAllowOut(iptablesContext *ctx,
|
||||
return iptablesForwardAllowOut(ctx, network, iface, physdev, ADD);
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesRemoveForwardAllowOut:
|
||||
* @ctx: pointer to the IP table context
|
||||
* @network: the source network name
|
||||
* @iface: the source interface name
|
||||
* @physdev: the physical output device
|
||||
*
|
||||
* Remove a rule from the IP table context hence forbidding forwarding
|
||||
* of the traffic for the network @network via interface @iface
|
||||
* to the @physdev device output. This stops the outbound traffic on a bridge.
|
||||
*
|
||||
* Returns 0 in case of success or an error code otherwise
|
||||
*/
|
||||
int
|
||||
iptablesRemoveForwardAllowOut(iptablesContext *ctx,
|
||||
const char *network,
|
||||
@ -738,6 +829,19 @@ iptablesForwardAllowIn(iptablesContext *ctx,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesAddForwardAllowIn:
|
||||
* @ctx: pointer to the IP table context
|
||||
* @network: the source network name
|
||||
* @iface: the output interface name
|
||||
* @physdev: the physical input device or NULL
|
||||
*
|
||||
* Add rules to the IP table context to allow the traffic for the
|
||||
* network @network on @physdev device to be forwarded to
|
||||
* interface @iface. This allow the inbound traffic on a bridge.
|
||||
*
|
||||
* Returns 0 in case of success or an error code otherwise
|
||||
*/
|
||||
int
|
||||
iptablesAddForwardAllowIn(iptablesContext *ctx,
|
||||
const char *network,
|
||||
@ -747,6 +851,19 @@ iptablesAddForwardAllowIn(iptablesContext *ctx,
|
||||
return iptablesForwardAllowIn(ctx, network, iface, physdev, ADD);
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesRemoveForwardAllowIn:
|
||||
* @ctx: pointer to the IP table context
|
||||
* @network: the source network name
|
||||
* @iface: the output interface name
|
||||
* @physdev: the physical input device or NULL
|
||||
*
|
||||
* Remove rules from the IP table context hence forbidding the traffic for
|
||||
* network @network on @physdev device to be forwarded to
|
||||
* interface @iface. This stops the inbound traffic on a bridge.
|
||||
*
|
||||
* Returns 0 in case of success or an error code otherwise
|
||||
*/
|
||||
int
|
||||
iptablesRemoveForwardAllowIn(iptablesContext *ctx,
|
||||
const char *network,
|
||||
@ -773,12 +890,34 @@ iptablesForwardAllowCross(iptablesContext *ctx,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesAddForwardAllowCross:
|
||||
* @ctx: pointer to the IP table context
|
||||
* @iface: the input/output interface name
|
||||
*
|
||||
* Add rules to the IP table context to allow traffic to cross that
|
||||
* interface. It allows all traffic between guests on the same bridge
|
||||
* represented by that interface.
|
||||
*
|
||||
* Returns 0 in case of success or an error code otherwise
|
||||
*/
|
||||
int
|
||||
iptablesAddForwardAllowCross(iptablesContext *ctx,
|
||||
const char *iface) {
|
||||
return iptablesForwardAllowCross(ctx, iface, ADD);
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesRemoveForwardAllowCross:
|
||||
* @ctx: pointer to the IP table context
|
||||
* @iface: the input/output interface name
|
||||
*
|
||||
* Remove rules to the IP table context to block traffic to cross that
|
||||
* interface. It forbids traffic between guests on the same bridge
|
||||
* represented by that interface.
|
||||
*
|
||||
* Returns 0 in case of success or an error code otherwise
|
||||
*/
|
||||
int
|
||||
iptablesRemoveForwardAllowCross(iptablesContext *ctx,
|
||||
const char *iface) {
|
||||
@ -801,6 +940,16 @@ iptablesForwardRejectOut(iptablesContext *ctx,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesAddForwardRejectOut:
|
||||
* @ctx: pointer to the IP table context
|
||||
* @iface: the output interface name
|
||||
*
|
||||
* Add rules to the IP table context to forbid all traffic to that
|
||||
* interface. It forbids forwarding from the bridge to that interface.
|
||||
*
|
||||
* Returns 0 in case of success or an error code otherwise
|
||||
*/
|
||||
int
|
||||
iptablesAddForwardRejectOut(iptablesContext *ctx,
|
||||
const char *iface)
|
||||
@ -808,6 +957,16 @@ iptablesAddForwardRejectOut(iptablesContext *ctx,
|
||||
return iptablesForwardRejectOut(ctx, iface, ADD);
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesRemoveForwardRejectOut:
|
||||
* @ctx: pointer to the IP table context
|
||||
* @iface: the output interface name
|
||||
*
|
||||
* Remove rules from the IP table context forbidding all traffic to that
|
||||
* interface. It reallow forwarding from the bridge to that interface.
|
||||
*
|
||||
* Returns 0 in case of success or an error code otherwise
|
||||
*/
|
||||
int
|
||||
iptablesRemoveForwardRejectOut(iptablesContext *ctx,
|
||||
const char *iface)
|
||||
@ -833,6 +992,16 @@ iptablesForwardRejectIn(iptablesContext *ctx,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesAddForwardRejectIn:
|
||||
* @ctx: pointer to the IP table context
|
||||
* @iface: the input interface name
|
||||
*
|
||||
* Add rules to the IP table context to forbid all traffic from that
|
||||
* interface. It forbids forwarding from that interface to the bridge.
|
||||
*
|
||||
* Returns 0 in case of success or an error code otherwise
|
||||
*/
|
||||
int
|
||||
iptablesAddForwardRejectIn(iptablesContext *ctx,
|
||||
const char *iface)
|
||||
@ -840,6 +1009,16 @@ iptablesAddForwardRejectIn(iptablesContext *ctx,
|
||||
return iptablesForwardRejectIn(ctx, iface, ADD);
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesRemoveForwardRejectIn:
|
||||
* @ctx: pointer to the IP table context
|
||||
* @iface: the input interface name
|
||||
*
|
||||
* Remove rules from the IP table context forbidding all traffic from that
|
||||
* interface. It allows forwarding from that interface to the bridge.
|
||||
*
|
||||
* Returns 0 in case of success or an error code otherwise
|
||||
*/
|
||||
int
|
||||
iptablesRemoveForwardRejectIn(iptablesContext *ctx,
|
||||
const char *iface)
|
||||
@ -873,6 +1052,18 @@ iptablesForwardMasquerade(iptablesContext *ctx,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesAddForwardMasquerade:
|
||||
* @ctx: pointer to the IP table context
|
||||
* @network: the source network name
|
||||
* @physdev: the physical input device or NULL
|
||||
*
|
||||
* Add rules to the IP table context to allow masquerading
|
||||
* network @network on @physdev. This allow the bridge to
|
||||
* masquerade for that network (on @physdev).
|
||||
*
|
||||
* Returns 0 in case of success or an error code otherwise
|
||||
*/
|
||||
int
|
||||
iptablesAddForwardMasquerade(iptablesContext *ctx,
|
||||
const char *network,
|
||||
@ -881,6 +1072,18 @@ iptablesAddForwardMasquerade(iptablesContext *ctx,
|
||||
return iptablesForwardMasquerade(ctx, network, physdev, ADD);
|
||||
}
|
||||
|
||||
/**
|
||||
* iptablesRemoveForwardMasquerade:
|
||||
* @ctx: pointer to the IP table context
|
||||
* @network: the source network name
|
||||
* @physdev: the physical input device or NULL
|
||||
*
|
||||
* Remove rules from the IP table context to stop masquerading
|
||||
* network @network on @physdev. This stops the bridge from
|
||||
* masquerading for that network (on @physdev).
|
||||
*
|
||||
* Returns 0 in case of success or an error code otherwise
|
||||
*/
|
||||
int
|
||||
iptablesRemoveForwardMasquerade(iptablesContext *ctx,
|
||||
const char *network,
|
||||
|
@ -684,7 +684,7 @@ virConnectNumOfDomains(virConnectPtr conn)
|
||||
* virDomainGetConnect:
|
||||
* @dom: pointer to a domain
|
||||
*
|
||||
* Returns the connection pointer associated with a domain. The
|
||||
* Provides the connection pointer associated with a domain. The
|
||||
* reference counter on the connection is not increased by this
|
||||
* call.
|
||||
*
|
||||
@ -2195,7 +2195,7 @@ virDomainDetachDevice(virDomainPtr domain, char *xml)
|
||||
* virNetworkGetConnect:
|
||||
* @net: pointer to a network
|
||||
*
|
||||
* Returns the connection pointer associated with a network. The
|
||||
* Provides the connection pointer associated with a network. The
|
||||
* reference counter on the connection is not increased by this
|
||||
* call.
|
||||
*
|
||||
|
@ -53,6 +53,9 @@
|
||||
#include "qemu_driver.h"
|
||||
#include "qemu_conf.h"
|
||||
|
||||
static int qemudShutdown(void);
|
||||
|
||||
|
||||
#define qemudLog(level, msg...) fprintf(stderr, msg)
|
||||
|
||||
static int qemudSetCloseExec(int fd) {
|
||||
@ -84,16 +87,16 @@ static int qemudSetNonBlock(int fd) {
|
||||
|
||||
|
||||
static void qemudDispatchVMEvent(int fd, int events, void *opaque);
|
||||
int qemudStartVMDaemon(struct qemud_driver *driver,
|
||||
static int qemudStartVMDaemon(struct qemud_driver *driver,
|
||||
struct qemud_vm *vm);
|
||||
|
||||
int qemudShutdownVMDaemon(struct qemud_driver *driver,
|
||||
static int qemudShutdownVMDaemon(struct qemud_driver *driver,
|
||||
struct qemud_vm *vm);
|
||||
|
||||
int qemudStartNetworkDaemon(struct qemud_driver *driver,
|
||||
static int qemudStartNetworkDaemon(struct qemud_driver *driver,
|
||||
struct qemud_network *network);
|
||||
|
||||
int qemudShutdownNetworkDaemon(struct qemud_driver *driver,
|
||||
static int qemudShutdownNetworkDaemon(struct qemud_driver *driver,
|
||||
struct qemud_network *network);
|
||||
|
||||
struct qemud_driver *qemu_driver = NULL;
|
||||
@ -135,7 +138,13 @@ void qemudAutostartConfigs(struct qemud_driver *driver) {
|
||||
}
|
||||
}
|
||||
|
||||
int qemudStartup(void) {
|
||||
/**
|
||||
* qemudStartup:
|
||||
*
|
||||
* Initialization function for the QEmu daemon
|
||||
*/
|
||||
static int
|
||||
qemudStartup(void) {
|
||||
uid_t uid = geteuid();
|
||||
struct passwd *pw;
|
||||
char *base = NULL;
|
||||
@ -203,7 +212,14 @@ int qemudStartup(void) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int qemudReload(void) {
|
||||
/**
|
||||
* qemudReload:
|
||||
*
|
||||
* Function to restart the QEmu daemon, it will recheck the configuration
|
||||
* files and update its state and the networking
|
||||
*/
|
||||
static int
|
||||
qemudReload(void) {
|
||||
qemudScanConfigs(qemu_driver);
|
||||
|
||||
if (qemu_driver->iptables) {
|
||||
@ -216,7 +232,16 @@ int qemudReload(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qemudActive(void) {
|
||||
/**
|
||||
* qemudActive:
|
||||
*
|
||||
* Checks if the QEmu daemon is active, i.e. has an active domain or
|
||||
* an active network
|
||||
*
|
||||
* Returns 1 if active, 0 otherwise
|
||||
*/
|
||||
static int
|
||||
qemudActive(void) {
|
||||
/* If we've any active networks or guests, then we
|
||||
* mark this driver as active
|
||||
*/
|
||||
@ -228,7 +253,13 @@ int qemudActive(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qemudShutdown() {
|
||||
/**
|
||||
* qemudShutdown:
|
||||
*
|
||||
* Shutdown the QEmu daemon, it will stop all active domains and networks
|
||||
*/
|
||||
static int
|
||||
qemudShutdown(void) {
|
||||
struct qemud_vm *vm;
|
||||
struct qemud_network *network;
|
||||
|
||||
@ -602,7 +633,7 @@ static int qemudNextFreeVNCPort(struct qemud_driver *driver ATTRIBUTE_UNUSED) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int qemudStartVMDaemon(struct qemud_driver *driver,
|
||||
static int qemudStartVMDaemon(struct qemud_driver *driver,
|
||||
struct qemud_vm *vm) {
|
||||
char **argv = NULL, **tmp;
|
||||
int i;
|
||||
@ -754,7 +785,7 @@ static int qemudVMData(struct qemud_driver *driver ATTRIBUTE_UNUSED,
|
||||
}
|
||||
|
||||
|
||||
int qemudShutdownVMDaemon(struct qemud_driver *driver, struct qemud_vm *vm) {
|
||||
static int qemudShutdownVMDaemon(struct qemud_driver *driver, struct qemud_vm *vm) {
|
||||
if (!qemudIsActiveVM(vm))
|
||||
return 0;
|
||||
|
||||
@ -1122,7 +1153,7 @@ qemudEnableIpForwarding(void)
|
||||
#undef PROC_IP_FORWARD
|
||||
}
|
||||
|
||||
int qemudStartNetworkDaemon(struct qemud_driver *driver,
|
||||
static int qemudStartNetworkDaemon(struct qemud_driver *driver,
|
||||
struct qemud_network *network) {
|
||||
const char *name;
|
||||
int err;
|
||||
@ -1233,7 +1264,7 @@ int qemudStartNetworkDaemon(struct qemud_driver *driver,
|
||||
}
|
||||
|
||||
|
||||
int qemudShutdownNetworkDaemon(struct qemud_driver *driver,
|
||||
static int qemudShutdownNetworkDaemon(struct qemud_driver *driver,
|
||||
struct qemud_network *network) {
|
||||
int err;
|
||||
|
||||
@ -1452,7 +1483,7 @@ static int qemudGetCPUInfo(unsigned int *cpus, unsigned int *mhz,
|
||||
return 0;
|
||||
}
|
||||
|
||||
virDrvOpenStatus qemudOpen(virConnectPtr conn,
|
||||
static virDrvOpenStatus qemudOpen(virConnectPtr conn,
|
||||
const char *name,
|
||||
int flags ATTRIBUTE_UNUSED) {
|
||||
uid_t uid = getuid();
|
||||
@ -1503,7 +1534,7 @@ static int qemudGetMaxVCPUs(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
return -1;
|
||||
}
|
||||
|
||||
int qemudGetNodeInfo(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
static int qemudGetNodeInfo(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
virNodeInfoPtr node) {
|
||||
struct utsname info;
|
||||
|
||||
@ -1522,7 +1553,7 @@ int qemudGetNodeInfo(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *qemudGetCapabilities(virConnectPtr conn ATTRIBUTE_UNUSED) {
|
||||
static char *qemudGetCapabilities(virConnectPtr conn ATTRIBUTE_UNUSED) {
|
||||
struct utsname utsname;
|
||||
int i, j, r;
|
||||
int have_kqemu = 0;
|
||||
@ -1710,7 +1741,7 @@ static int qemudGetProcessInfo(unsigned long long *cpuTime, int pid) {
|
||||
}
|
||||
|
||||
|
||||
virDomainPtr qemudDomainLookupByID(virConnectPtr conn,
|
||||
static virDomainPtr qemudDomainLookupByID(virConnectPtr conn,
|
||||
int id) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
|
||||
struct qemud_vm *vm = qemudFindVMByID(driver, id);
|
||||
@ -1730,7 +1761,7 @@ virDomainPtr qemudDomainLookupByID(virConnectPtr conn,
|
||||
dom->id = vm->id;
|
||||
return dom;
|
||||
}
|
||||
virDomainPtr qemudDomainLookupByUUID(virConnectPtr conn,
|
||||
static virDomainPtr qemudDomainLookupByUUID(virConnectPtr conn,
|
||||
const unsigned char *uuid) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
|
||||
struct qemud_vm *vm = qemudFindVMByUUID(driver, uuid);
|
||||
@ -1750,7 +1781,7 @@ virDomainPtr qemudDomainLookupByUUID(virConnectPtr conn,
|
||||
dom->id = vm->id;
|
||||
return dom;
|
||||
}
|
||||
virDomainPtr qemudDomainLookupByName(virConnectPtr conn,
|
||||
static virDomainPtr qemudDomainLookupByName(virConnectPtr conn,
|
||||
const char *name) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
|
||||
struct qemud_vm *vm = qemudFindVMByName(driver, name);
|
||||
@ -1771,7 +1802,7 @@ virDomainPtr qemudDomainLookupByName(virConnectPtr conn,
|
||||
return dom;
|
||||
}
|
||||
|
||||
int qemudGetVersion(virConnectPtr conn, unsigned long *version) {
|
||||
static int qemudGetVersion(virConnectPtr conn, unsigned long *version) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
|
||||
if (qemudExtractVersion(driver) < 0)
|
||||
return -1;
|
||||
@ -1780,7 +1811,7 @@ int qemudGetVersion(virConnectPtr conn, unsigned long *version) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qemudListDomains(virConnectPtr conn, int *ids, int nids) {
|
||||
static int qemudListDomains(virConnectPtr conn, int *ids, int nids) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
|
||||
struct qemud_vm *vm = driver->vms;
|
||||
int got = 0;
|
||||
@ -1793,11 +1824,11 @@ int qemudListDomains(virConnectPtr conn, int *ids, int nids) {
|
||||
}
|
||||
return got;
|
||||
}
|
||||
int qemudNumDomains(virConnectPtr conn) {
|
||||
static int qemudNumDomains(virConnectPtr conn) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
|
||||
return driver->nactivevms;
|
||||
}
|
||||
virDomainPtr qemudDomainCreate(virConnectPtr conn, const char *xml,
|
||||
static virDomainPtr qemudDomainCreate(virConnectPtr conn, const char *xml,
|
||||
unsigned int flags ATTRIBUTE_UNUSED) {
|
||||
struct qemud_vm_def *def;
|
||||
struct qemud_vm *vm;
|
||||
@ -1828,7 +1859,7 @@ virDomainPtr qemudDomainCreate(virConnectPtr conn, const char *xml,
|
||||
}
|
||||
|
||||
|
||||
int qemudDomainSuspend(virDomainPtr dom) {
|
||||
static int qemudDomainSuspend(virDomainPtr dom) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
|
||||
char *info;
|
||||
struct qemud_vm *vm = qemudFindVMByID(driver, dom->id);
|
||||
@ -1854,7 +1885,7 @@ int qemudDomainSuspend(virDomainPtr dom) {
|
||||
}
|
||||
|
||||
|
||||
int qemudDomainResume(virDomainPtr dom) {
|
||||
static int qemudDomainResume(virDomainPtr dom) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
|
||||
char *info;
|
||||
struct qemud_vm *vm = qemudFindVMByID(driver, dom->id);
|
||||
@ -1879,7 +1910,7 @@ int qemudDomainResume(virDomainPtr dom) {
|
||||
}
|
||||
|
||||
|
||||
int qemudDomainDestroy(virDomainPtr dom) {
|
||||
static int qemudDomainDestroy(virDomainPtr dom) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
|
||||
struct qemud_vm *vm = qemudFindVMByID(driver, dom->id);
|
||||
int ret;
|
||||
@ -1914,7 +1945,7 @@ static char *qemudDomainGetOSType(virDomainPtr dom) {
|
||||
return type;
|
||||
}
|
||||
|
||||
int qemudDomainGetInfo(virDomainPtr dom,
|
||||
static int qemudDomainGetInfo(virDomainPtr dom,
|
||||
virDomainInfoPtr info) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
|
||||
struct qemud_vm *vm = qemudFindVMByUUID(driver, dom->uuid);
|
||||
@ -1941,7 +1972,7 @@ int qemudDomainGetInfo(virDomainPtr dom,
|
||||
}
|
||||
|
||||
|
||||
int qemudDomainSave(virDomainPtr dom,
|
||||
static int qemudDomainSave(virDomainPtr dom,
|
||||
const char *path ATTRIBUTE_UNUSED) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
|
||||
struct qemud_vm *vm = qemudFindVMByID(driver, dom->id);
|
||||
@ -1958,7 +1989,7 @@ int qemudDomainSave(virDomainPtr dom,
|
||||
}
|
||||
|
||||
|
||||
int qemudDomainRestore(virConnectPtr conn,
|
||||
static int qemudDomainRestore(virConnectPtr conn,
|
||||
const char *path ATTRIBUTE_UNUSED) {
|
||||
/*struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;*/
|
||||
qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED, "restore is not supported");
|
||||
@ -1966,7 +1997,7 @@ int qemudDomainRestore(virConnectPtr conn,
|
||||
}
|
||||
|
||||
|
||||
char *qemudDomainDumpXML(virDomainPtr dom,
|
||||
static char *qemudDomainDumpXML(virDomainPtr dom,
|
||||
int flags ATTRIBUTE_UNUSED) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
|
||||
struct qemud_vm *vm = qemudFindVMByUUID(driver, dom->uuid);
|
||||
@ -1979,7 +2010,7 @@ char *qemudDomainDumpXML(virDomainPtr dom,
|
||||
}
|
||||
|
||||
|
||||
int qemudListDefinedDomains(virConnectPtr conn,
|
||||
static int qemudListDefinedDomains(virConnectPtr conn,
|
||||
char **const names, int nnames) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
|
||||
struct qemud_vm *vm = driver->vms;
|
||||
@ -2003,13 +2034,13 @@ int qemudListDefinedDomains(virConnectPtr conn,
|
||||
}
|
||||
|
||||
|
||||
int qemudNumDefinedDomains(virConnectPtr conn) {
|
||||
static int qemudNumDefinedDomains(virConnectPtr conn) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
|
||||
return driver->ninactivevms;
|
||||
}
|
||||
|
||||
|
||||
int qemudDomainStart(virDomainPtr dom) {
|
||||
static int qemudDomainStart(virDomainPtr dom) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
|
||||
struct qemud_vm *vm = qemudFindVMByUUID(driver, dom->uuid);
|
||||
|
||||
@ -2023,7 +2054,7 @@ int qemudDomainStart(virDomainPtr dom) {
|
||||
}
|
||||
|
||||
|
||||
virDomainPtr qemudDomainDefine(virConnectPtr conn, const char *xml) {
|
||||
static virDomainPtr qemudDomainDefine(virConnectPtr conn, const char *xml) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
|
||||
struct qemud_vm_def *def;
|
||||
struct qemud_vm *vm;
|
||||
@ -2052,7 +2083,7 @@ virDomainPtr qemudDomainDefine(virConnectPtr conn, const char *xml) {
|
||||
return dom;
|
||||
}
|
||||
|
||||
int qemudDomainUndefine(virDomainPtr dom) {
|
||||
static int qemudDomainUndefine(virDomainPtr dom) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
|
||||
struct qemud_vm *vm = qemudFindVMByUUID(driver, dom->uuid);
|
||||
|
||||
@ -2081,7 +2112,7 @@ int qemudDomainUndefine(virDomainPtr dom) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qemudDomainGetAutostart(virDomainPtr dom,
|
||||
static int qemudDomainGetAutostart(virDomainPtr dom,
|
||||
int *autostart) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
|
||||
struct qemud_vm *vm = qemudFindVMByUUID(driver, dom->uuid);
|
||||
@ -2096,7 +2127,7 @@ int qemudDomainGetAutostart(virDomainPtr dom,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qemudDomainSetAutostart(virDomainPtr dom,
|
||||
static int qemudDomainSetAutostart(virDomainPtr dom,
|
||||
int autostart) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
|
||||
struct qemud_vm *vm = qemudFindVMByUUID(driver, dom->uuid);
|
||||
@ -2141,7 +2172,7 @@ int qemudDomainSetAutostart(virDomainPtr dom,
|
||||
return 0;
|
||||
}
|
||||
|
||||
virNetworkPtr qemudNetworkLookupByUUID(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
static virNetworkPtr qemudNetworkLookupByUUID(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
const unsigned char *uuid) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
|
||||
struct qemud_network *network = qemudFindNetworkByUUID(driver, uuid);
|
||||
@ -2159,7 +2190,7 @@ virNetworkPtr qemudNetworkLookupByUUID(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
}
|
||||
return net;
|
||||
}
|
||||
virNetworkPtr qemudNetworkLookupByName(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
static virNetworkPtr qemudNetworkLookupByName(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
const char *name) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
|
||||
struct qemud_network *network = qemudFindNetworkByName(driver, name);
|
||||
@ -2193,12 +2224,12 @@ static int qemudCloseNetwork(virConnectPtr conn) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qemudNumNetworks(virConnectPtr conn) {
|
||||
static int qemudNumNetworks(virConnectPtr conn) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->networkPrivateData;
|
||||
return driver->nactivenetworks;
|
||||
}
|
||||
|
||||
int qemudListNetworks(virConnectPtr conn, char **const names, int nnames) {
|
||||
static int qemudListNetworks(virConnectPtr conn, char **const names, int nnames) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->networkPrivateData;
|
||||
struct qemud_network *network = driver->networks;
|
||||
int got = 0, i;
|
||||
@ -2220,12 +2251,12 @@ int qemudListNetworks(virConnectPtr conn, char **const names, int nnames) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int qemudNumDefinedNetworks(virConnectPtr conn) {
|
||||
static int qemudNumDefinedNetworks(virConnectPtr conn) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->networkPrivateData;
|
||||
return driver->ninactivenetworks;
|
||||
}
|
||||
|
||||
int qemudListDefinedNetworks(virConnectPtr conn, char **const names, int nnames) {
|
||||
static int qemudListDefinedNetworks(virConnectPtr conn, char **const names, int nnames) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->networkPrivateData;
|
||||
struct qemud_network *network = driver->networks;
|
||||
int got = 0, i;
|
||||
@ -2247,7 +2278,7 @@ int qemudListDefinedNetworks(virConnectPtr conn, char **const names, int nnames)
|
||||
return -1;
|
||||
}
|
||||
|
||||
virNetworkPtr qemudNetworkCreate(virConnectPtr conn, const char *xml) {
|
||||
static virNetworkPtr qemudNetworkCreate(virConnectPtr conn, const char *xml) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->networkPrivateData;
|
||||
struct qemud_network_def *def;
|
||||
struct qemud_network *network;
|
||||
@ -2274,7 +2305,7 @@ virNetworkPtr qemudNetworkCreate(virConnectPtr conn, const char *xml) {
|
||||
return net;
|
||||
}
|
||||
|
||||
virNetworkPtr qemudNetworkDefine(virConnectPtr conn, const char *xml) {
|
||||
static virNetworkPtr qemudNetworkDefine(virConnectPtr conn, const char *xml) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->networkPrivateData;
|
||||
struct qemud_network_def *def;
|
||||
struct qemud_network *network;
|
||||
@ -2301,7 +2332,7 @@ virNetworkPtr qemudNetworkDefine(virConnectPtr conn, const char *xml) {
|
||||
return net;
|
||||
}
|
||||
|
||||
int qemudNetworkUndefine(virNetworkPtr net) {
|
||||
static int qemudNetworkUndefine(virNetworkPtr net) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)net->conn->networkPrivateData;
|
||||
struct qemud_network *network = qemudFindNetworkByUUID(driver, net->uuid);
|
||||
|
||||
@ -2325,7 +2356,7 @@ int qemudNetworkUndefine(virNetworkPtr net) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qemudNetworkStart(virNetworkPtr net) {
|
||||
static int qemudNetworkStart(virNetworkPtr net) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)net->conn->networkPrivateData;
|
||||
struct qemud_network *network = qemudFindNetworkByUUID(driver, net->uuid);
|
||||
|
||||
@ -2338,7 +2369,7 @@ int qemudNetworkStart(virNetworkPtr net) {
|
||||
return qemudStartNetworkDaemon(driver, network);
|
||||
}
|
||||
|
||||
int qemudNetworkDestroy(virNetworkPtr net) {
|
||||
static int qemudNetworkDestroy(virNetworkPtr net) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)net->conn->networkPrivateData;
|
||||
struct qemud_network *network = qemudFindNetworkByUUID(driver, net->uuid);
|
||||
|
||||
@ -2351,7 +2382,7 @@ int qemudNetworkDestroy(virNetworkPtr net) {
|
||||
return qemudShutdownNetworkDaemon(driver, network);
|
||||
}
|
||||
|
||||
char *qemudNetworkDumpXML(virNetworkPtr net, int flags ATTRIBUTE_UNUSED) {
|
||||
static char *qemudNetworkDumpXML(virNetworkPtr net, int flags ATTRIBUTE_UNUSED) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)net->conn->networkPrivateData;
|
||||
struct qemud_network *network = qemudFindNetworkByUUID(driver, net->uuid);
|
||||
|
||||
@ -2364,7 +2395,7 @@ char *qemudNetworkDumpXML(virNetworkPtr net, int flags ATTRIBUTE_UNUSED) {
|
||||
return qemudGenerateNetworkXML(driver, network, network->def);
|
||||
}
|
||||
|
||||
char *qemudNetworkGetBridgeName(virNetworkPtr net) {
|
||||
static char *qemudNetworkGetBridgeName(virNetworkPtr net) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)net->conn->networkPrivateData;
|
||||
struct qemud_network *network = qemudFindNetworkByUUID(driver, net->uuid);
|
||||
char *bridge;
|
||||
@ -2381,7 +2412,7 @@ char *qemudNetworkGetBridgeName(virNetworkPtr net) {
|
||||
return bridge;
|
||||
}
|
||||
|
||||
int qemudNetworkGetAutostart(virNetworkPtr net,
|
||||
static int qemudNetworkGetAutostart(virNetworkPtr net,
|
||||
int *autostart) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)net->conn->networkPrivateData;
|
||||
struct qemud_network *network = qemudFindNetworkByUUID(driver, net->uuid);
|
||||
@ -2396,7 +2427,7 @@ int qemudNetworkGetAutostart(virNetworkPtr net,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qemudNetworkSetAutostart(virNetworkPtr net,
|
||||
static int qemudNetworkSetAutostart(virNetworkPtr net,
|
||||
int autostart) {
|
||||
struct qemud_driver *driver = (struct qemud_driver *)net->conn->networkPrivateData;
|
||||
struct qemud_network *network = qemudFindNetworkByUUID(driver, net->uuid);
|
||||
|
@ -27,89 +27,8 @@
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
int qemudStartup(void);
|
||||
int qemudReload(void);
|
||||
int qemudShutdown(void);
|
||||
int qemudActive(void);
|
||||
int qemudRegister(void);
|
||||
|
||||
virDrvOpenStatus qemudOpen(virConnectPtr conn,
|
||||
const char *name,
|
||||
int flags);
|
||||
|
||||
int qemudGetNodeInfo(virConnectPtr conn,
|
||||
virNodeInfoPtr info);
|
||||
|
||||
char *qemudGetCapabilities(virConnectPtr conn);
|
||||
|
||||
virDomainPtr qemudDomainLookupByID(virConnectPtr conn,
|
||||
int id);
|
||||
virDomainPtr qemudDomainLookupByUUID(virConnectPtr conn,
|
||||
const unsigned char *uuid);
|
||||
virDomainPtr qemudDomainLookupByName(virConnectPtr conn,
|
||||
const char *name);
|
||||
|
||||
int qemudGetVersion(virConnectPtr conn, unsigned long *version);
|
||||
int qemudListDomains(virConnectPtr conn,
|
||||
int *ids,
|
||||
int nids);
|
||||
int qemudNumDomains(virConnectPtr conn);
|
||||
virDomainPtr qemudDomainCreate(virConnectPtr conn,
|
||||
const char *xml,
|
||||
unsigned int flags);
|
||||
int qemudDomainSuspend(virDomainPtr dom);
|
||||
int qemudDomainResume(virDomainPtr dom);
|
||||
int qemudDomainDestroy(virDomainPtr dom);
|
||||
int qemudDomainGetInfo(virDomainPtr dom,
|
||||
virDomainInfoPtr info);
|
||||
int qemudDomainSave(virDomainPtr dom,
|
||||
const char *path);
|
||||
int qemudDomainRestore(virConnectPtr conn,
|
||||
const char *path);
|
||||
char *qemudDomainDumpXML(virDomainPtr dom,
|
||||
int flags);
|
||||
int qemudListDefinedDomains(virConnectPtr conn,
|
||||
char **const names,
|
||||
int nnames);
|
||||
int qemudNumDefinedDomains(virConnectPtr conn);
|
||||
int qemudDomainStart(virDomainPtr dom);
|
||||
virDomainPtr qemudDomainDefine(virConnectPtr conn,
|
||||
const char *xml);
|
||||
int qemudDomainUndefine(virDomainPtr dom);
|
||||
int qemudDomainGetAutostart(virDomainPtr dom,
|
||||
int *autostart);
|
||||
int qemudDomainSetAutostart(virDomainPtr dom,
|
||||
int autostart);
|
||||
|
||||
|
||||
virNetworkPtr qemudNetworkLookupByUUID(virConnectPtr conn,
|
||||
const unsigned char *uuid);
|
||||
virNetworkPtr qemudNetworkLookupByName(virConnectPtr conn,
|
||||
const char *name);
|
||||
|
||||
int qemudNumNetworks(virConnectPtr conn);
|
||||
int qemudListNetworks(virConnectPtr conn,
|
||||
char **const names,
|
||||
int nnames);
|
||||
int qemudNumDefinedNetworks(virConnectPtr conn);
|
||||
int qemudListDefinedNetworks(virConnectPtr conn,
|
||||
char **const names,
|
||||
int nnames);
|
||||
virNetworkPtr qemudNetworkCreate(virConnectPtr conn,
|
||||
const char *xml);
|
||||
virNetworkPtr qemudNetworkDefine(virConnectPtr conn,
|
||||
const char *xml);
|
||||
int qemudNetworkStart(virNetworkPtr net);
|
||||
int qemudNetworkUndefine(virNetworkPtr net);
|
||||
int qemudNetworkDestroy(virNetworkPtr net);
|
||||
char *qemudNetworkDumpXML(virNetworkPtr net,
|
||||
int flags);
|
||||
char *qemudNetworkGetBridgeName(virNetworkPtr net);
|
||||
int qemudNetworkGetAutostart(virNetworkPtr net,
|
||||
int *autostart);
|
||||
int qemudNetworkSetAutostart(virNetworkPtr net,
|
||||
int autostart);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
24
src/uuid.c
24
src/uuid.c
@ -77,11 +77,22 @@ virUUIDGeneratePseudoRandomBytes(unsigned char *buf,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* virUUIDGenerate:
|
||||
* @uuid: array of VIR_UUID_RAW_LEN bytes to store the new UUID
|
||||
*
|
||||
* Generates a randomized unique identifier.
|
||||
*
|
||||
* Returns 0 in case of success and -1 in case of failure
|
||||
*/
|
||||
int
|
||||
virUUIDGenerate(unsigned char *uuid)
|
||||
{
|
||||
int err;
|
||||
|
||||
if (uuid == NULL)
|
||||
return(-1);
|
||||
|
||||
if ((err = virUUIDGenerateRandomBytes(uuid, VIR_UUID_RAW_LEN)))
|
||||
qemudLog(QEMUD_WARN,
|
||||
"Falling back to pseudorandom UUID, "
|
||||
@ -90,11 +101,24 @@ virUUIDGenerate(unsigned char *uuid)
|
||||
return virUUIDGeneratePseudoRandomBytes(uuid, VIR_UUID_RAW_LEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* virUUIDParse:
|
||||
* @uuid: zero terminated string representation of the UUID
|
||||
* @rawuuid: array of VIR_UUID_RAW_LEN bytes to store the raw UUID
|
||||
*
|
||||
* Parses the external string representation, allowing spaces and '-'
|
||||
* character in the sequence, and storing the result as a raw UUID
|
||||
*
|
||||
* Returns 0 in case of success and -1 in case of error.
|
||||
*/
|
||||
int
|
||||
virUUIDParse(const char *uuid, unsigned char *rawuuid) {
|
||||
const char *cur;
|
||||
int i;
|
||||
|
||||
if ((uuid == NULL) || (rawuuid == NULL))
|
||||
return(-1);
|
||||
|
||||
/*
|
||||
* do a liberal scan allowing '-' and ' ' anywhere between character
|
||||
* pairs as long as there is 32 of them in the end.
|
||||
|
@ -22,6 +22,10 @@
|
||||
#ifndef __VIR_UUID_H__
|
||||
#define __VIR_UUID_H__
|
||||
|
||||
/**
|
||||
* VIR_UUID_RAW_LEN:
|
||||
* number of bytes used by an UUID in raw form
|
||||
*/
|
||||
#define VIR_UUID_RAW_LEN 16
|
||||
|
||||
int virUUIDGenerate(unsigned char *uuid);
|
||||
|
Loading…
Reference in New Issue
Block a user