Re: Better network reporting from FreeBSD VM via xenstore

From: Roger Pau Monné <roger.pau_at_citrix.com>
Date: Mon, 08 Aug 2022 12:30:36 UTC
On Fri, Aug 05, 2022 at 03:43:55PM +0200, Ondra Knezour wrote:
> Hello all,
> 
> it seems to me that there is some room to improve how are things about
> networking reported from FreeBSD VM to the hypervisor.
> 
> Now we have function xe_ip_if() in /usr/local/sbin/xe-update-guest-attrs
> which just grep for xn interfaces, read one IP address for each which is
> eventually written to the /var/cache/xenstore/attr/ethNUMBER/ip
> 
> First - from where the ip node comes? I didn't find any such in
> https://xenbits.xen.org/docs/unstable/misc/xenstore-paths.html

I think this is all specific to XenServer (a.k.a. Citrix Hypervisor)
and XCP (as being part of the xe-guest-utilities package), but not
used by upstream Xen toolstack (xl), and no one cared to add the used
paths to the upstream documents.

> We have
> 
> xenstore ls attr
> eth0 = ""
>  ip = "10.0.0.1"
> PVAddons = ""
>  MajorVersion = "6"
>  MinorVersion = "2"
>  MicroVersion = "0"
>  BuildVersion = "76888"
>  Installed = "1"
> 
> But on Linux
> 
> xenstore ls | grep attr -A 50
> attr = ""
>  PVAddons = ""
>   BuildVersion = "1"
>   Installed = "1"
>   MajorVersion = "8"
>   MinorVersion = "1"
>   MicroVersion = "50"
>  vif = ""
>   1 = ""
>    ipv6 = ""
>     0 = "fe80::9c30:52ff:fef1:8711"
>    ipv4 = ""
>     0 = "10.128.99.15"
>   2 = ""
>    ipv4 = ""
>     0 = "10.0.1.15"
>    ipv6 = ""
>     0 = "fe80::e833:9cff:fe5e:c21c"
>   0 = ""
>    ipv4 = ""
>     0 = "172.22.1.15"
>    ipv6 = ""
>     0 = "fe80::c0ff:d7ff:fee2:b5ff"
> xenserver = ""
>  attr = ""
>  device = ""
>   vbd3 = ""
>    768 = ""
>    5696 = ""
>   vif = ""
>    0 = ""
>     static-ip-setting = ""
>      mac = "c2:ff:d7:e2:b5:ff"
>      error-code = "0"
>      error-msg = ""
>      enabled = "0"
>      enabled6 = "0"
>    1 = ""
>     static-ip-setting = ""
>      mac = "9e:30:52:f1:87:11"
>      error-code = "0"
>      error-msg = ""
>      enabled = "0"
>      enabled6 = "0"
>    2 = ""
>     static-ip-setting = ""
>      mac = "ea:33:9c:5e:c2:1c"
>      error-code = "0"
>      error-msg = ""
>      enabled = "0"
>      enabled6 = "0"

You seem to use different commands on FreeBSD and Linux to get the
entries (`xenstore ls attr` vs `xenstore ls | grep attr -A 50`), so
it's not really a fair comparison I would say.

> And secondly - I have multiple interfaces in VM, renamed by VLANs their are
> connected to. Some of them have multiple IPv4 addresses. Some also have IPv6
> address(es). Bummer, I don't see any of this in pool management. And I
> wouldn't even without interface renames, because we report only one IPv4
> address. First problem may be solved with some creative work with
> /etc/rc.conf, for example using result of following command in adition to
> simple ifconfig | grep xn
> 
> sysrc -a | grep -E "ifconfig_xn[[:digit:]]_name"
> ifconfig_xn0_name: vlan1000
> ifconfig_xn1_name: vlan1001
> ifconfig_xn2_name: vlan2000
> 
> or list all ethernet interfaces (ifconfig -l ether) and look for
> ifconfig_xnX_name line for each not(xn). But regarding other missing
> info/nodes, I just don't know. May someone please enlighten me what is
> missing on our side?

I've added dinoex as he is the maintainer of the xe-guest-utilities
package, maybe he has some ideas about how this can be solved.

You might also want to raise a ticket with the XCP-ng guys [0] about
this, they usually care about OSes not officially supported by
XenServer.

Thanks, Roger.

[0] https://github.com/xcp-ng/xcp/issues