1. 08 11月, 2019 1 次提交
    • L
      util: set bridge device MAC address explicitly during virNetDevBridgeCreate · 13ec8270
      Laine Stump 提交于
      When libvirt first implemented a stable and configurable MAC address
      for the bridges created for libvirt virtual networks (commit
      5754dbd5, in libvirt v0.8.8) most distro stable releases didn't
      support explicitly setting the MAC address of a bridge; the bridge
      just always assumed the lowest numbered MAC of all attached
      interfaces. Because of this, we stabilized the bridge MAC address by
      creating a "dummy" tap interface with a MAC address guaranteed to be
      lower than any of the guest tap devices' MACs (which all started with
      0xFE, so it's not difficult to do) and attached it to the bridge -
      this was the inception of the "virbr0-nic" device that has confused so
      many people over the years.
      
      Even though the linux kernel had recently gained support for
      explicitly setting a bridge MAC, we deemed it unnecessary to set the
      MAC that way, because the other (indirect) method worked everywhere.
      
      But recently there have been reports that the bridge MAC address was
      not following the setting in the network config, and mismatched the
      MAC of the dummy tap device (which was still correct). It turns out
      that this is due to a change in systemd-242 that persists whatever MAC
      address is set for a bridge when it's initially started. According to
      the systemd NEWS file entry for version 242
      (https://github.com/systemd/systemd/blob/master/NEWS):
      
        "if a bridge interface is created without any slaves, and gains
         a slave later, then now the bridge does not inherit slave's MAC."
      
      This change was the result of:
      
        https://github.com/systemd/systemd/issues/3374
      
      (apparently if there is no MAC saved for a bridge by the name of a
      bridge being created, the random MAC generated during creation is
      saved, and then that same MAC is used to explicitly set the MAC each
      time it is created). Once a bridge has an explicitly set MAC, the "use
      the lowest numbered MAC of attached devices" rule is ignored, so our
      dummy tap device is like the goggles - it does nothing! (well, almost).
      
      We could whine about changes in default behavior, etc. etc., but
      because the change was in response to actual user problems, that seems
      likely a fruitless task. Fortunately, time has marched on, and even
      distro releases that are old enough that they are no longer supported
      by upstream libvirt (e.g. RHEL6) have support for explicitly setting a
      bridge device MAC address, either during creation or with a separate
      ioctl after creation, so we can now do that.
      
      To enable explicitly setting the mac during bridge creation, we add a
      mac arg to virNetDevBridgeCreate().  In the case of platforms where
      the bridge is created with a netlink RTM_NEWLINK message, we just add
      that mac to the message. For platforms that still use an ioctl (either
      SIOCBRADDBR or SIOCIFCREATE2), we make a separate call to
      virNetDevSetMAC() after creating the bridge.
      
      (NB: I was unable to test the calling of virNetDevSetMAC() from the
      SIOCIFCREATE2 (BSD) version of virNetDevBridgeCreate(); even though I
      managed to get a FreeBSD system setup and libvirt built there, when I
      tried to start the default network the SIOCIFCREATE2 ioctl itself
      failed, so it never even got to the virNetDevSetMAC(). That leaves the
      FreeBSD implementation untested.)
      
      This makes the dummy tap pointless for purposes of setting the MAC
      address, but it is still useful for IPv6 DAD initialization (which
      apparently requires at least one interface to be attached to the
      bridge and online), as well as for setting an initial MTU for the
      bridge, so it hasn't been removed.
      
      (NB: we can safely *always* call virNetDevBridgeCreate() with
      &def->mac from the network driver because, in spite of the existence
      of a "mac_specified" bool in the config suggesting that it may not
      always be present, in reality a mac address will always be added to
      any network that doesn't have one - this is guaranteed in all cases by
      commit a47ae7c0)
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1760851Signed-off-by: NLaine Stump <laine@redhat.com>
      Reviewed-by: NJiri Denemark <jdenemar@redhat.com>
      13ec8270
  2. 15 10月, 2019 1 次提交
  3. 19 6月, 2019 1 次提交
  4. 14 12月, 2018 2 次提交
    • D
      Enforce a standard header file guard symbol name · 568a4172
      Daniel P. Berrangé 提交于
      Require that all headers are guarded by a symbol named
      
        LIBVIRT_$FILENAME
      
      where $FILENAME is the uppercased filename, with all characters
      outside a-z changed into '_'.
      
      Note we do not use a leading __ because that is technically a
      namespace reserved for the toolchain.
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      568a4172
    • D
      Remove all Author(s): lines from source file headers · 60046283
      Daniel P. Berrangé 提交于
      In many files there are header comments that contain an Author:
      statement, supposedly reflecting who originally wrote the code.
      In a large collaborative project like libvirt, any non-trivial
      file will have been modified by a large number of different
      contributors. IOW, the Author: comments are quickly out of date,
      omitting people who have made significant contribitions.
      
      In some places Author: lines have been added despite the person
      merely being responsible for creating the file by moving existing
      code out of another file. IOW, the Author: lines give an incorrect
      record of authorship.
      
      With this all in mind, the comments are useless as a means to identify
      who to talk to about code in a particular file. Contributors will always
      be better off using 'git log' and 'git blame' if they need to  find the
      author of a particular bit of code.
      
      This commit thus deletes all Author: comments from the source and adds
      a rule to prevent them reappearing.
      
      The Copyright headers are similarly misleading and inaccurate, however,
      we cannot delete these as they have legal meaning, despite being largely
      inaccurate. In addition only the copyright holder is permitted to change
      their respective copyright statement.
      Reviewed-by: NErik Skultety <eskultet@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      60046283
  5. 09 12月, 2014 2 次提交
    • L
      util: functions to manage bridge fdb (forwarding database) · 19a5474d
      Laine Stump 提交于
      These two functions use netlink RTM_NEWNEIGH and RTM_DELNEIGH messages
      to add and delete entries from a bridge's fdb. The bridge itself is
      not referenced in the arguments to the functions, only the name of the
      device that is attached to the bridge (since a device can only be
      attached to one bridge at a time, and must be attached for this
      function to make sense, the kernel easily infers which bridge's fdb is
      being modified by looking at the device name/index).
      19a5474d
    • L
      util: new functions for setting bridge and bridge port attributes · 100b7a72
      Laine Stump 提交于
      These functions all set/get items in the sysfs for a bridge device.
      100b7a72
  6. 21 9月, 2012 1 次提交
  7. 23 7月, 2012 1 次提交
    • O
      Desert the FSF address in copyright · f9ce7dad
      Osier Yang 提交于
      Per the FSF address could be changed from time to time, and GNU
      recommends the following now: (http://www.gnu.org/licenses/gpl-howto.html)
      
        You should have received a copy of the GNU General Public License
        along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
      
      This patch removes the explicit FSF address, and uses above instead
      (of course, with inserting 'Lesser' before 'General').
      
      Except a bunch of files for security driver, all others are changed
      automatically, the copyright for securify files are not complete,
      that's why to do it manually:
      
        src/security/security_selinux.h
        src/security/security_driver.h
        src/security/security_selinux.c
        src/security/security_apparmor.h
        src/security/security_apparmor.c
        src/security/security_driver.c
      f9ce7dad
  8. 10 11月, 2011 1 次提交
    • D
      Split bridge.h into three separate files · e49c9bf2
      Daniel P. Berrange 提交于
      Following the renaming of the bridge management APIs, we can now
      split the source file into 3 corresponding pieces
      
       * src/util/virnetdev.c: APIs for any type of network interface
       * src/util/virnetdevbridge.c: APIs for bridge interfaces
       * src/util/virnetdevtap.c: APIs for TAP interfaces
      
      * src/util/virnetdev.c, src/util/virnetdev.h,
        src/util/virnetdevbridge.c, src/util/virnetdevbridge.h,
        src/util/virnetdevtap.c, src/util/virnetdevtap.h: Copied
        from bridge.{c,h}
      * src/util/bridge.c, src/util/bridge.h: Split into 3 pieces
      * src/lxc/lxc_driver.c, src/network/bridge_driver.c,
        src/openvz/openvz_driver.c, src/qemu/qemu_command.c,
        src/qemu/qemu_conf.h, src/uml/uml_conf.c, src/uml/uml_conf.h,
        src/uml/uml_driver.c: Update #include directives
      e49c9bf2