[libvirt] [PATCHv2 0/9] new virNetworkUpdate API

Laine Stump laine at laine.org
Tue Sep 18 08:32:04 UTC 2012


On 09/18/2012 03:38 AM, Laine Stump wrote:
> =====
>
> Changes from V1:
>
> 1) implemented Eric's suggested change to make "command"
>    a separate arg rather than squeezing it into the flags
>
> 2) already pushed the first two ACKed patches (not directly related to
>    new API
>
> 3) added new patch at the end implementing updates of dhcp host
>    entries.
>
>
> This patchset implements a new API function called virNetworkUpdate
> which enables updating certain parts of a libvirt network's definition
> without the need to destroy/re-start the network. This is especially
> useful, for example, to add/remove hosts from the dhcp static hosts
> table, or change portgroup settings.
>
> This was previously discussed in this thread:
>
>  https://www.redhat.com/archives/libvir-list/2012-August/msg01535.html
>
> continuing here in September:
>
>  https://www.redhat.com/archives/libvir-list/2012-September/msg00328.html
>
> with the final form here:
>
>  https://www.redhat.com/archives/libvir-list/2012-September/msg00465.html
>
> In short, the single function has a "section" specifier which tells
> the part of the network definition to be updated, a "parentIndex" that
> gives the index of the *parent* element containing this section (when
> there are multiples - in particular in the case of the <ip> element),
> and a fully formed XML element which will be added as-is in the case
> of VIR_NETWORK_UPDATE_ADD_* (after checking for a duplicate), used to
> search for the specific element to delete in case of
> VIR_NETWORK_UPDATE_DELETE, and used both to find the existing element
> and replace its current contents in the case of VIR_UPDATE_EXISTING
> (this implies that you can't change the change the attribute used for
> indexing, e.g. the name of a portgroup, or mac address of a dhcp host
> entry).
>
> An example of use: to add a dhcp host entry to network "net", you would do this:
>
>    virNetworkUpdate(net, VIR_NETWORK_UPDATE_COMMAND_ADD_LAST,
>                     VIR_NETWORK_SECTION_IP_DHCP_HOST, -1,
>                     "<host mac='00:11:22:33:44:55' ip='192.168.122.5'/>",
>                     VIR_NETWORK_UPDATE_AFFECT_LIVE
>                     | VIR_NETWORK_UPDATE_AFFECT_CONFIG);
>
> To delete that same entry:
>
>    virNetworkUpdate(net, VIR_NETWORK_UPDATE_COMMAND_DELETE,
>                      VIR_NETWORK_SECTION_IP_DHCP_HOST, -1,
>                     "<host mac='00:11:22:33:44:55'/>",
>                     VIR_NETWORK_UPDATE_AFFECT_LIVE
>                     | VIR_NETWORK_UPDATE_AFFECT_CONFIG);
>
> If you wanted to force any of these to affect the dhcp host list in
> the 3rd <ip> element of the network, you would replace "-1" with "2".
>
> Another example: to modify the portgroup named "engineering" (e.g. to
> increase the inbound average bandwidth from 1000 to 2000):
>
>     virNetworkUpdate(net, VIR_NETWORK_UPDATE_COMMAND_MODIFY,
>                      VIR_NETWORK_SECTION_PORTGROUP, -1,
>                      "<portgroup name='engineering' default='yes'>"
>                      "  <virtualport type='802.1Qbh'>"
>                      "    <parameters profileid='test'/>"
>                      "  </virtualport>"
>                      "  <bandwidth>"
>                      "    <inbound average='2000' peak='5000' burst='5120'/>"
>                      "    <outbound average='1000' peak='5000' burst='5120'/>"
>                      "  </bandwidth>"
>                      "</portgroup>",
>                      VIR_NETWORK_UPDATE_LIVE | VIR_NETWORK_UPDATE_CONFIG)
>
> (note that parentIndex is irrelevant for PORTGROUP, since they are in
> the toplevel of <network>, so there aren't multiple instances of
> parents. In such cases, the caller *must* set parentIndex to -1 or 0 -
> any other value indicates that they don't understand the purpose/usage
> of parentIndex, so it must result in an error. Also note that the
> above function would fail if it couldn't find an existing portgroup
> with name='engineering' (i.e. it wouldn't automatically add a new one).)
>
> Adding support for each of the different sections has been reduced to
> a single function that handles the update of a virNetworkDef; all the
> logic to determine which virNetworkDef (def or newDef) and to
> restart/SIGHUP the appropriate daemons is in higher levels and is 100%
> complete. The low level functions aren't yet finished, although the
> function for IP_DHCP_HOST is nearly done.
>
> As usual, several of the patches are re-factoring existing code, and a
> couple are bugfixes that are only peripherally related:
>
> 1/9+2/9 - actual API
> 3/9 - utility functions to simplify API implementation
> 4/9 - framework for backend that updates the virNetworkDef
> 5/9 - refactoring in bridge_driver
> 6/9 - virNetworkUpdate for bridge_driver
> 7/9 - virNetworkUpdate for test_driver
> 8/9 - simple troubleshooting aid - restart dnsmasq/radvd
>       when libvirtd is restarted (if its process is missing).
> 9/9 - implement backend for VIR_NETWORK_SECTION_IP_DHCP_HOST
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>

Thanks for the reviews. I've pushed this series, just in time for
0.10.2-rc1!

Now to write the virsh command, and some more section backends...




More information about the libvir-list mailing list