• L
    network: implement backend of virNetworkUpdate(IP_DHCP_HOST) · e3b6b2be
    Laine Stump 提交于
    This patch fills in the first implementation for one of the
    virNetworkUpdate sections. With this code, you can now add/delete/edit
    <host> entries in a network's <ip> address <dhcp> element (by
    specifying a section of VIR_NETWORK_SECTION_IP_DHCP_HOST).
    
    If you pass in a parentIndex of -1, the code will automatically find
    the one ip element that has a <dhcp> section and make the updates
    there. Otherwise, you can specify an index >= 0, and libvirt will look
    for that particular instance of <ip> in the network, and modify its
    <dhcp> element. (This currently isn't very useful, because libvirt
    only supports having dhcp information on a single IP address, but that
    could change in the future).
    
    When adding a new host entry
    (VIR_NETWORK_UPDATE_COMMAND_ADD_(FIRST|LAST)), the existing entries
    will be compared to the new entry, and if any non-empty attribute
    matches, the add will fail. When updating an existing entry
    (VIR_NETWORK_UPDATE_COMMAND_MODIFY), the mac address or name will be
    used to find the existing entry, and other fields will only be updated
    (note there is some potential for ambiguity here if you specify the
    mac address from one entry and the name from another).  When deleting
    an existing entry (VIR_NETWORK_UPDATE_COMMAND_DELETE), all non-empty
    attributes in the supplied xml arg will be compared - all of them must
    match before libvirt will delete the host.
    
    The xml should be a fully formed <host> element as it would appear in
    a network definition, e.g. "<host mac=00:11:22:33:44:55 ip=10.1.23.22
    name='testbox'/>" (when adding/updating, ip and one of mac|name is
    required; when deleting, you can specify any one, two, or all
    attributes, but they all must match the target element).
    
    As with the update of any other section, you can choose to affect the
    live config (with flag VIR_NETWORK_UPDATE_AFFECT_LIVE), the persistent
    config (VIR_NETWORK_UPDATE_AFFECT_CONFIG), or both. If you've chosen
    to affect the live config, those changes will take effect immediately,
    with no need to destroy/restart the network.
    
    An example of adding a host entry:
    
       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);
    
    (you could also delete it by replacing "mac='00:11:22:33:44:55'" with
    "ip='192.168.122.5'".)
    e3b6b2be
network_conf.c 89.4 KB