Skip to content
Snippets Groups Projects
  1. May 04, 2022
    • Andrew Deason's avatar
      qga/commands-posix: Fix listing ifaces for Solaris · 70335c46
      Andrew Deason authored
      
      The code for guest-network-get-interfaces needs a couple of small
      adjustments for Solaris:
      
      - The results from SIOCGIFHWADDR are documented as being in ifr_addr,
        not ifr_hwaddr (ifr_hwaddr doesn't exist on Solaris).
      
      - The implementation of guest_get_network_stats is Linux-specific, so
        hide it under #ifdef CONFIG_LINUX. On non-Linux, we just won't
        provide network interface stats.
      
      Signed-off-by: default avatarAndrew Deason <adeason@sinenomine.net>
      Reviewed-by: default avatarMichal Privoznik <mprivozn@redhat.com>
      Message-Id: <20220426195526.7699-4-adeason@sinenomine.net>
      70335c46
    • Andrew Deason's avatar
      qga/commands-posix: Fix iface hw address detection · aec0730e
      Andrew Deason authored
      
      Since its introduction in commit 3424fc9f ("qemu-ga: add
      guest-network-get-interfaces command"), guest-network-get-interfaces
      seems to check if a given interface has a hardware address by checking
      'ifa->ifa_flags & SIOCGIFHWADDR'. But ifa_flags is a field for IFF_*
      flags (IFF_UP, IFF_LOOPBACK, etc), and comparing it to an ioctl like
      SIOCGIFHWADDR doesn't make sense.
      
      On Linux, this isn't a big deal, since SIOCGIFHWADDR has so many bits
      set (0x8927), 'ifa->ifa_flags & SIOCGIFHWADDR' will usually have a
      nonzero result for any 'normal'-looking interfaces: anything with
      IFF_UP (0x1) or IFF_BROADCAST (0x2) set, as well as several
      less-common flags. This means we'll try to get the hardware address
      for most/all interfaces, even those that don't really have one (like
      the loopback device). For those interfaces, Linux just returns a
      hardware address of all zeroes.
      
      On Solaris, however, trying to get the hardware address for a loopback
      device returns an EADDRNOTAVAIL error. This causes us to return an
      error and the entire guest-network-get-interfaces call fails.
      
      Change this logic to always try to get the hardware address for each
      interface, and don't return an error if we fail to get it. Instead,
      just don't include the 'hardware-address' field in the result if we
      can't get the hardware address.
      
      Signed-off-by: default avatarAndrew Deason <adeason@sinenomine.net>
      Reviewed-by: default avatarMichal Privoznik <mprivozn@redhat.com>
      Message-Id: <20220426195526.7699-3-adeason@sinenomine.net>
      aec0730e
    • Andrew Deason's avatar
      qga/commands-posix: Use getifaddrs when available · 59e35c7b
      Andrew Deason authored
      
      Currently, commands-posix.c assumes that getifaddrs() is only
      available on Linux, and so the related guest agent command
      guest-network-get-interfaces is only implemented for #ifdef __linux__.
      This function does exist on other platforms, though, such as Solaris.
      So, add a meson check for getifaddrs(), and move the code for
      guest-network-get-interfaces to be built whenever getifaddrs() is
      available.
      
      The implementation for guest-network-get-interfaces still has some
      Linux-specific code, which is not fixed in this commit. This commit
      moves the relevant big chunks of code around without changing them, so
      a future commit can change the code in place.
      
      Signed-off-by: default avatarAndrew Deason <adeason@sinenomine.net>
      Reviewed-by: default avatarMichal Privoznik <mprivozn@redhat.com>
      Message-Id: <20220426195526.7699-2-adeason@sinenomine.net>
      59e35c7b
  2. May 03, 2022
  3. May 02, 2022
Loading