git: e172102c8c48 - main - sysutils/xe-guest-utilities: Update to 6.3.0

From: Mark Felder <feld_at_FreeBSD.org>
Date: Mon, 23 Sep 2024 16:44:29 UTC
The branch main has been updated by feld:

URL: https://cgit.FreeBSD.org/ports/commit/?id=e172102c8c481b266b7650278bd2147055a942e4

commit e172102c8c481b266b7650278bd2147055a942e4
Author:     Mark Felder <feld@FreeBSD.org>
AuthorDate: 2024-09-23 16:44:24 +0000
Commit:     Mark Felder <feld@FreeBSD.org>
CommitDate: 2024-09-23 16:44:24 +0000

    sysutils/xe-guest-utilities: Update to 6.3.0
    
    This update changes the way IP addresses and interfaces are reported to adhere to the newer XAPI syntax and will now report IPv6 addresses.
    
    PR:  281256
    Reported by:    freebsd@filter.paco.to
---
 sysutils/xe-guest-utilities/Makefile               |   3 +-
 .../files/patch-xe-update-guest-attrs              | 150 ++++++++++++++++++++-
 2 files changed, 144 insertions(+), 9 deletions(-)

diff --git a/sysutils/xe-guest-utilities/Makefile b/sysutils/xe-guest-utilities/Makefile
index c7bc5c2b87d9..553d6552651a 100644
--- a/sysutils/xe-guest-utilities/Makefile
+++ b/sysutils/xe-guest-utilities/Makefile
@@ -1,6 +1,5 @@
 PORTNAME=	xe-guest-utilities
-PORTVERSION=	6.2.0
-PORTREVISION=	3
+PORTVERSION=	6.3.0
 CATEGORIES=	sysutils
 MASTER_SITES=	LOCAL/feld
 DISTNAME=	${PORTNAME}-6.0.2
diff --git a/sysutils/xe-guest-utilities/files/patch-xe-update-guest-attrs b/sysutils/xe-guest-utilities/files/patch-xe-update-guest-attrs
index 9b572de87bd1..681e47fa016b 100644
--- a/sysutils/xe-guest-utilities/files/patch-xe-update-guest-attrs
+++ b/sysutils/xe-guest-utilities/files/patch-xe-update-guest-attrs
@@ -1,16 +1,152 @@
---- src/sbin/xe-update-guest-attrs.orig	2014-07-07 15:45:10.000000000 +0200
-+++ src/sbin/xe-update-guest-attrs	2015-01-30 10:24:05.000000000 +0100
-@@ -173,10 +173,10 @@
- xenstore_write_cached "control/feature-balloon" "1"
+--- src/sbin/xe-update-guest-attrs.orig	2024-09-03 15:39:43.133537000 -0400
++++ src/sbin/xe-update-guest-attrs	2024-09-03 15:42:09.862675000 -0400
+@@ -39,7 +39,7 @@ XENSTORE=${XENSTORE:-/usr/local/bin/xenstore}
+ 
+ export PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/sbin
+ XENSTORE=${XENSTORE:-/usr/local/bin/xenstore}
+-
++CACHEROOT="/var/cache/xenstore"
+ XENSTORE_UPDATED=0
+ 
+ # parse command line opts
+@@ -54,7 +54,7 @@ xenstore_write_cached() {
+ 
+ xenstore_write_cached() {
+     key="$1" newval="$2"
+-    cache=/var/cache/xenstore/$key
++    cache=${CACHEROOT}/$key
+     if [ -f $cache ] ; then
+ 	# cache exists
+ 	oldval=$(cat "$cache")
+@@ -82,13 +82,13 @@ domid=$(/usr/local/bin/xenstore-read "domid")
+ 
+ # If we detect a domain change then delete our cache and force a refresh
+ domid=$(/usr/local/bin/xenstore-read "domid")
+-cache=/var/cache/xenstore/unique-domain-id
++cache=${CACHEROOT}/unique-domain-id
+ newval=$(/usr/local/bin/xenstore-read "/local/domain/${domid}/unique-domain-id")
+ if [ -e $cache ]; then
+     oldval=$(cat "$cache")
+     if [ "$oldval" != "$newval" ]; then
+ 	# domain changed
+-	rm -rf /var/cache/xenstore
++	rm -rf xenstore
+     fi
+ fi
+ mkdir -p $(dirname "$cache")
+@@ -96,7 +96,7 @@ xenstore_rm_cached() {
+ 
+ xenstore_rm_cached() {
+     key="$1"
+-    cache=/var/cache/xenstore/$key
++    cache=${CACHEROOT}/$key
+     if [ ! -e $cache ] ; then
+ 	return 1
+     fi
+@@ -109,21 +109,46 @@ xenstore_rm_cached() {
+     return 1
+ }
+ 
++# read cache, using xen-style integers (e.g., "0", "1")
++# return bsd names like xn0
+ xenstore_list_interfaces_cached() {
+-    topdir=/var/cache/xenstore/attr
++    topdir=${CACHEROOT}/attr
+     if [ -d $topdir ] ; then
+ 	cd $topdir 
+-	for dir in * ; do 
+-	    [ -f $dir/ip ] && echo $dir
++	# if a file named like vif/0/ipv4/0 exists, then xn0 is a valid interface
++	# sort -u to get only unique interfaces
++	iflist=$(ls vif/*/ipv?/* | cut -d / -f 2 | sort -u | xargs echo)
++	for n in $iflist
++	do
++		echo "xn${n}"
+ 	done
+     fi
+ }
+ 
++# XAPI expects things like attr/vif/0/ipv4/0 = 172.30.0.2
++# So this tries to map BSD names like xn0 to attr/vif/0
+ xe_ip_if() {
+-interfaces=$(/sbin/ifconfig -u | grep ': flags=' | grep xn | cut -d ':' -f1)
+-for if in $interfaces ; do
+-	echo $(echo $if | sed 's/xn/eth/g') "|" $(/sbin/ifconfig $if | grep 'inet ' | cut -d ' ' -f2)
+-done
++        interfaces=$(/sbin/ifconfig -u | grep ': flags=' | grep xn | cut -d ':' -f1)
++	n=0
++        for ifacename in $interfaces ; do
++                v4ips=$(/sbin/ifconfig $ifacename | grep 'inet ' | cut -d ' ' -f2)
++		# FreeBSD reports some IPv6 addrs like fe80:1234::abcd%xn0, the `cut` strips that off
++                v6ips=$(/sbin/ifconfig $ifacename | grep 'inet6 ' | cut -d ' ' -f2 | cut -d % -f 1 )
++		i=0
++		for v4ip in $v4ips
++		do
++			echo "vif/$n/ipv4/$i | $v4ip"
++			i=$(($i+1))
++		done
++
++		i=0
++		for v6ip in $v6ips
++		do
++			echo "vif/$n/ipv6/$i | $v6ip"
++			i=$(($i+1))
++		done
++		n=$(($n+1))
++        done
+ }
+ 
+ if [ $MEMORY_MODE -eq 1 ] ; then
+@@ -140,22 +165,33 @@ fi
+ 	xenstore_write_cached "data/meminfo_free" "$memavail"
+ fi
+ 
++# xe_ip_if | while read linea
++# do
++#   if=$(echo $linea | cut -d '|' -f1 | sed 's/ //g')
++#   inet=$(echo $linea | cut -d '|' -f2 | sed 's/^ //')
++#   xenstore_write_cached "attr/${if}/ip" "${inet}" 
++# done
++
++# This breaks apart a string like "vif/0/ipv4/0 | 172.16.0.8" into 2 arguments for
++# xenstore_write_cached
+ xe_ip_if | while read linea
+ do
+-  if=$(echo $linea | cut -d '|' -f1 | sed 's/ //g')
+-  inet=$(echo $linea | cut -d '|' -f2 | sed 's/^ //')
+-  xenstore_write_cached "attr/${if}/ip" "${inet}" 
++  if=$(echo $linea | cut -d '|' -f1 | tr -d ' ' )
++  inet=$(echo $linea | cut -d '|' -f2 | tr -d ' ' )
++  xenstore_write_cached "attr/${if}" "${inet}" 
+ done
+ 
+ # remove any interfaces that have been unplugged or downed
+-for at in $(xenstore_list_interfaces_cached) ; do
++for xn in $(xenstore_list_interfaces_cached) ; do
+ 	link=1
+-	xn=$(echo $at | sed 's/eth/xn/')
+-	iface=$(/sbin/ifconfig $xn | grep UP | cut -d ':' -f1)
++	iface=$(/sbin/ifconfig $xn | grep "UP," | cut -d ':' -f1)
+ 	[ "${iface}" = "${xn}" ] && link=0
+ 	
+ 	if [ "$link" -gt "0" ] ; then
+-		xenstore_rm_cached "attr/${at}"
++		# bsd-named interface is gone, remove attr from xenstore
++		vifnum=$(echo $xn | sed 's/xn//g')
++		echo "removing vif $vifnum"
++		xenstore_rm_cached "attr/vif/${vifnum}"
+ 	fi
+ done
+ 
+@@ -174,9 +210,9 @@ xenstore_write_cached "attr/PVAddons/MajorVersion" "6"
  
  # build time addons
--xenstore_write_cached "attr/PVAddons/MajorVersion" "6"
+ xenstore_write_cached "attr/PVAddons/MajorVersion" "6"
 -xenstore_write_cached "attr/PVAddons/MinorVersion" "0"
 -xenstore_write_cached "attr/PVAddons/MicroVersion" "2" 
 -xenstore_write_cached "attr/PVAddons/BuildVersion" "54078"
-+xenstore_write_cached "attr/PVAddons/MajorVersion" "6"
 +xenstore_write_cached "attr/PVAddons/MinorVersion" "2"
-+xenstore_write_cached "attr/PVAddons/MicroVersion" "0" 
++xenstore_write_cached "attr/PVAddons/MicroVersion" "1" 
 +xenstore_write_cached "attr/PVAddons/BuildVersion" "76888"
  xenstore_write_cached "attr/PVAddons/Installed" "1"