97d26e4 util: fallback to ioctl(SIOCBRDELBR) if netlink RTM_DELLINK fails

Authored and Committed by Laine Stump 8 years ago
    util: fallback to ioctl(SIOCBRDELBR) if netlink RTM_DELLINK fails
    
    commit 09778e09 switched from using ioctl(SIOCBRDELBR) for bridge
    device deletion to using a netlink RTM_DELLINK message, which is the
    more modern way to delete a bridge (and also doesn't require the
    bridge to be ~IFF_UP to succeed). However, although older kernels
    (e.g. 2.6.32, in RHEL6/CentOS6) support deleting *some* link types
    with RTM_NEWLINK, they don't support deleting bridges, and there is no
    compile-time way to figure this out.
    
    This patch moves the body of the SIOCBRDELBR version of
    virNetDevBridgeDelete() into a static function, calls the new function
    from the original, and also calls the new function from the
    RTM_DELLINK version if the RTM_DELLINK message generates an EOPNOTSUPP
    error. Since RTM_DELLINK is done from the subordinate function
    virNetlinkDelLink, which is also called for other purposes (deleting a
    macvtap interface), a function pointer called "fallback" has been
    added to the arglist of virNetlinkDelLink() - if that arg != NULL, the
    provided function will be called when (and only when) RTM_DELLINK
    fails with EOPNOTSUPP.
    
    Resolves:  https://bugzilla.redhat.com/show_bug.cgi?id=1252780 (part 2)
    
        
file modified
+34 -11
file modified
+1 -1
file modified
+11 -2
file modified
+4 -1