This series is a major re-arrangement and de-duplication of internal code for dealing with physical network interfaces. Currently code for physical network interfaces is split across the following files - bridge.c: bridge management, TAP device management and interface IPv4 address management - network.c: socket address management, network bandwidth and virtual port profile data management - interface.c: some generic interface management and macvtap/macvlan management - macvtap.c: more macvtap/macvlan management and virtual port profile interface setup code - lxc/veth.c: veth device management and generic interface management Furthermore across these files - Argument ordering is inconsistent - sometimes ifname is the first parameter, sometimes it isn't - Error handing is terribly inconsistent 1. Return errno values 2. Raise errors 3. Raise errors and return errno values 4. Raise errors, except when a parameter tells it not to - API naming is inconsistent. Some APIs have a vir prefix, others have different prefixes, other don't even follow a standard prefix, eg virSocketFormatAddr vs virSocketAddrMaks vs virSocketGetPort - The bridge.c APIs have an annoying 'brControl *' struct that must be passed around just to avoid opening & closing an unbound socket. - Some APIs are implemented natively, while others call out to external commands - Duplication of functionality across APIs - XML parsing & formatting code is in src/util instead of src/conf - Some of the API declarations are hidden behind #ifdefs forcing yet more #ifdefs in the callers of the APIs After applying this series, we get to a stage where the source file split is: - src/util/virnetdev.c: APIs relating to any type of interface - src/util/virnetdevbridge.c: APIs relating to bridge interfaces - src/util/virnetdevmacvlan.c: APIs relating to macvlan/macvtap interfaces - src/util/virnetdevveth.c: APIs relating to veth interfaces - src/util/virnetdevbandwidth.c: APIs for network bandwidth controls - src/util/virnetdevvportprofile.c: APIs for 802.11Qb{g,h} port profiles - src/util/virsocketaddr.c: the socket address management APIs - src/conf/netdev_bandwidth_conf.c: Parsing/formatting bandwidth XML - src/conf/netdev_vport_profile_conf.c: parsing/formatting 801.11Qb{g,h} profile XML The following style is followed - All APIs return -1 on error and raise a libvirt error. No exceptions or flags to turn off errors - Callers which don't want the raised error call virResetLastError - All APIs are annotated with ATTRIBUTE_NONNULL and ATTRIBUTE_RETURN_CHECK where appropriate - The first parameter of all APIs operating on a network interface is the interface name - All APIs have a fixed name prefix which matches the source file. No exceptions. - All XML handling code is under src/conf/ - All APIs are unconditionally declared in header files, and stubbed out with virReportSystemError(ENOSYS...) where unsupported. - No functionality is duplicated across files - External commands are avoided except in case of setting IPv4 addresses and network bandwidth controls The diffstat is a little bit misleading, showing a slight growth in the number of lines. This is primarily due to the extra GPL copyright header lines in the new files, being much larger than those removed from old files. Overall we have a decrease in actual real code, through removal of duplicated APIs b/configure.ac | 5 b/daemon/libvirtd.h | 1 b/daemon/remote.c | 1 b/libvirt.spec.in | 2 b/po/POTFILES.in | 12 b/src/Makefile.am | 26 b/src/conf/domain_conf.c | 59 - b/src/conf/domain_conf.h | 20 b/src/conf/netdev_bandwidth_conf.c | 230 ++++ b/src/conf/netdev_bandwidth_conf.h | 37 b/src/conf/netdev_vport_profile_conf.c | 236 ++++ b/src/conf/netdev_vport_profile_conf.h | 39 b/src/conf/network_conf.c | 101 +- b/src/conf/network_conf.h | 12 b/src/conf/nwfilter_conf.c | 16 b/src/conf/nwfilter_conf.h | 2 b/src/esx/esx_util.h | 2 b/src/libvirt_private.syms | 71 - b/src/lxc/lxc_container.c | 9 b/src/lxc/lxc_controller.c | 7 b/src/lxc/lxc_driver.c | 42 b/src/network/bridge_driver.c | 192 +-- b/src/nwfilter/nwfilter_ebiptables_driver.c | 4 b/src/nwfilter/nwfilter_gentech_driver.c | 25 b/src/nwfilter/nwfilter_learnipaddr.c | 32 b/src/openvz/openvz_driver.c | 1 b/src/qemu/qemu_command.c | 86 - b/src/qemu/qemu_command.h | 4 b/src/qemu/qemu_conf.c | 2 b/src/qemu/qemu_conf.h | 3 b/src/qemu/qemu_driver.c | 16 b/src/qemu/qemu_hotplug.c | 19 b/src/qemu/qemu_migration.c | 29 b/src/qemu/qemu_process.c | 15 b/src/qemu/qemu_process.h | 2 b/src/rpc/virnetsocket.c | 7 b/src/rpc/virnetsocket.h | 2 b/src/uml/uml_conf.c | 41 b/src/uml/uml_conf.h | 2 b/src/uml/uml_driver.c | 22 b/src/util/dnsmasq.c | 4 b/src/util/dnsmasq.h | 2 b/src/util/iptables.c | 20 b/src/util/iptables.h | 2 b/src/util/virnetdev.c | 1083 ++++++++++++++++++++++ b/src/util/virnetdev.h | 102 ++ b/src/util/virnetdevbandwidth.c | 265 +++++ b/src/util/virnetdevbandwidth.h | 53 + b/src/util/virnetdevbridge.c | 527 ++++++++++ b/src/util/virnetdevbridge.h | 54 + b/src/util/virnetdevmacvlan.c | 674 +++++++++++++ b/src/util/virnetdevmacvlan.h | 77 + b/src/util/virnetdevtap.c | 301 ++++++ b/src/util/virnetdevtap.h | 45 b/src/util/virnetdevveth.c | 189 +++ b/src/util/virnetdevveth.h | 35 b/src/util/virnetdevvportprofile.c | 1073 +++++++++++++++++++++ b/src/util/virnetdevvportprofile.h | 95 + b/src/util/virsocketaddr.c | 687 ++++++++++++++ b/src/util/virsocketaddr.h | 103 ++ b/src/vbox/vbox_tmpl.c | 10 b/tests/qemuxml2argvtest.c | 2 b/tests/qemuxmlnstest.c | 2 b/tests/sockettest.c | 20 b/tests/virnetsockettest.c | 1 b/tests/virnettlscontexttest.c | 6 b/tools/virsh.c | 6 src/lxc/veth.c | 319 ------ src/lxc/veth.h | 33 src/util/bridge.c | 845 ----------------- src/util/bridge.h | 120 -- src/util/interface.c | 1348 --------------------------- src/util/interface.h | 91 - src/util/macvtap.c | 1203 ------------------------ src/util/macvtap.h | 93 - src/util/network.c | 1370 ---------------------------- src/util/network.h | 167 --- 77 files changed, 6302 insertions(+), 6159 deletions(-) -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list