diff --git a/hpvd-Revert-Changes-for-adding-keyfile-support-in-RHEL-sp.patch b/hpvd-Revert-Changes-for-adding-keyfile-support-in-RHEL-sp.patch new file mode 100644 index 0000000..1be87ac --- /dev/null +++ b/hpvd-Revert-Changes-for-adding-keyfile-support-in-RHEL-sp.patch @@ -0,0 +1,65 @@ +From eb4f3620e350c45a88c24d1a56523bbb1ab28fe8 Mon Sep 17 00:00:00 2001 +From: Ani Sinha +Date: Tue, 9 Jan 2024 10:05:14 +0530 +Subject: [PATCH 1/3] Revert "Changes for adding keyfile support in RHEL + specific script" + +RH-Author: Ani Sinha +RH-MergeRequest: 14: Revert all changes related to adding keyfile support in hyperv-daemons +RH-Jira: RHEL-9901 +RH-Acked-by: Cathy Avery +RH-Acked-by: Jon Maloy +RH-Commit: [1/3] 474dc7d7388a29dbf3e15217b092504295efee25 + +This reverts commit eeb77fe2cd3232abd96a1bdf1bbcfcd04053ffff. +The revert is necessary because the keyfile support generates a regression when +both ipv4 and ipv6 are used together. Please see the thread +https://lkml.org/lkml/2023/12/23/138 + +Signed-off-by: Ani Sinha +--- + hv_set_ifconfig.sh | 26 +++++++++++--------------- + 1 file changed, 11 insertions(+), 15 deletions(-) + +diff --git a/hv_set_ifconfig.sh b/hv_set_ifconfig.sh +index 93decd6..9c2ee30 100644 +--- a/hv_set_ifconfig.sh ++++ b/hv_set_ifconfig.sh +@@ -74,23 +74,19 @@ + # call. + # + +-# This is RHEL specific bash script that configures NM keyfiles. +-# ifcfg files passed as the first argument to this script remains untouched. + +-if [ -z "$2" ]; then +- echo "No input NM keyfile. Exiting!" +- exit 1 +-fi + +-sed -i '/\[ipv4\]/a ignore-auto-dns=false' $2 +-sed -i '/\[connection\]/a autoconnect=true' $2 ++echo "IPV6INIT=yes" >> $1 ++echo "PEERDNS=yes" >> $1 ++echo "ONBOOT=yes" >> $1 + +-filename="${2##*/}" ++#Unlike older sysconfig scripts, NetworkManager expects GATEWAYx=ipaddr for all values of x. ++#So the first gateway is GATEWAY0 instead of GATEWAY. Other values should remain unchanged. ++#Workaround this by replacing GATEWAY= with GATEWAY0=. ++sed -i "s/GATEWAY=/GATEWAY0=/" $1 + +-cp $2 /etc/NetworkManager/system-connections/ +-chmod 600 /etc/NetworkManager/system-connections/$filename ++cp $1 /etc/sysconfig/network-scripts/ + +-nmcli connection load "/etc/NetworkManager/system-connections/${filename}" +-nmcli connection up filename "/etc/NetworkManager/system-connections/${filename}" +- +-exit 0 ++filename="${1##*/}" ++nmcli connection load "/etc/sysconfig/network-scripts/${filename}" ++nmcli connection up filename "/etc/sysconfig/network-scripts/${filename}" +-- +2.41.0 + diff --git a/hpvd-Revert-hv-hv_kvp_daemon-Some-small-fixes-for-handlin.patch b/hpvd-Revert-hv-hv_kvp_daemon-Some-small-fixes-for-handlin.patch new file mode 100644 index 0000000..46f89f4 --- /dev/null +++ b/hpvd-Revert-hv-hv_kvp_daemon-Some-small-fixes-for-handlin.patch @@ -0,0 +1,89 @@ +From af30a3d74a1c6b4a501f994ec43d97597e94e098 Mon Sep 17 00:00:00 2001 +From: Ani Sinha +Date: Tue, 9 Jan 2024 10:07:57 +0530 +Subject: [PATCH 2/3] Revert "hv/hv_kvp_daemon: Some small fixes for handling + NM keyfiles" + +RH-Author: Ani Sinha +RH-MergeRequest: 14: Revert all changes related to adding keyfile support in hyperv-daemons +RH-Jira: RHEL-9901 +RH-Acked-by: Cathy Avery +RH-Acked-by: Jon Maloy +RH-Commit: [2/3] 9d25d58204ad78881d21865fda902dd29a462fa8 + +This reverts commit 0b5a275023d7779db38f3d944103419532f034f4. + +The revert is necessary because the keyfile support generates a regression when +both ipv4 and ipv6 are used together. Please see the thread + https://lkml.org/lkml/2023/12/23/138 + +Signed-off-by: Ani Sinha +--- + hv_kvp_daemon.c | 20 ++++++++------------ + hv_set_ifconfig.sh | 4 ++-- + 2 files changed, 10 insertions(+), 14 deletions(-) + +diff --git a/hv_kvp_daemon.c b/hv_kvp_daemon.c +index 318e2da..264eeb9 100644 +--- a/hv_kvp_daemon.c ++++ b/hv_kvp_daemon.c +@@ -1421,7 +1421,7 @@ static int kvp_set_ip_info(char *if_name, struct hv_kvp_ipaddr_value *new_val) + if (error) + goto setval_error; + +- if (new_val->addr_family & ADDR_FAMILY_IPV6) { ++ if (new_val->addr_family == ADDR_FAMILY_IPV6) { + error = fprintf(nmfile, "\n[ipv6]\n"); + if (error < 0) + goto setval_error; +@@ -1455,18 +1455,14 @@ static int kvp_set_ip_info(char *if_name, struct hv_kvp_ipaddr_value *new_val) + if (error < 0) + goto setval_error; + +- /* we do not want ipv4 addresses in ipv6 section and vice versa */ +- if (is_ipv6 != is_ipv4((char *)new_val->gate_way)) { +- error = fprintf(nmfile, "gateway=%s\n", (char *)new_val->gate_way); +- if (error < 0) +- goto setval_error; +- } ++ error = fprintf(nmfile, "gateway=%s\n", (char *)new_val->gate_way); ++ if (error < 0) ++ goto setval_error; ++ ++ error = fprintf(nmfile, "dns=%s\n", (char *)new_val->dns_addr); ++ if (error < 0) ++ goto setval_error; + +- if (is_ipv6 != is_ipv4((char *)new_val->dns_addr)) { +- error = fprintf(nmfile, "dns=%s\n", (char *)new_val->dns_addr); +- if (error < 0) +- goto setval_error; +- } + fclose(nmfile); + fclose(ifcfg_file); + +diff --git a/hv_set_ifconfig.sh b/hv_set_ifconfig.sh +index 9c2ee30..35aae6f 100644 +--- a/hv_set_ifconfig.sh ++++ b/hv_set_ifconfig.sh +@@ -53,7 +53,7 @@ + # or "manual" if no boot-time protocol should be used) + # + # address1=ipaddr1/plen +-# address2=ipaddr2/plen ++# address=ipaddr2/plen + # + # gateway=gateway1;gateway2 + # +@@ -61,7 +61,7 @@ + # + # [ipv6] + # address1=ipaddr1/plen +-# address2=ipaddr2/plen ++# address2=ipaddr1/plen + # + # gateway=gateway1;gateway2 + # +-- +2.41.0 + diff --git a/hpvd-Revert-hv-hv_kvp_daemon-Support-for-keyfile-based-co.patch b/hpvd-Revert-hv-hv_kvp_daemon-Support-for-keyfile-based-co.patch new file mode 100644 index 0000000..5e16f0a --- /dev/null +++ b/hpvd-Revert-hv-hv_kvp_daemon-Support-for-keyfile-based-co.patch @@ -0,0 +1,407 @@ +From 814ef4ba2f28f766811da9cbf39c4dd826810fea Mon Sep 17 00:00:00 2001 +From: Ani Sinha +Date: Tue, 9 Jan 2024 10:10:29 +0530 +Subject: [PATCH 3/3] Revert "hv/hv_kvp_daemon:Support for keyfile based + connection profile" + +RH-Author: Ani Sinha +RH-MergeRequest: 14: Revert all changes related to adding keyfile support in hyperv-daemons +RH-Jira: RHEL-9901 +RH-Acked-by: Cathy Avery +RH-Acked-by: Jon Maloy +RH-Commit: [3/3] e5ef938a993ede072c749d9923fe5384d82586fa + +This reverts commit a360344134e075dfebc99c1551e141e2ec25a2fa. + +The revert is necessary because the keyfile support generates a regression when +both ipv4 and ipv6 are used together. Please see the thread + https://lkml.org/lkml/2023/12/23/138 + +Signed-off-by: Ani Sinha +--- + hv_kvp_daemon.c | 233 ++++++--------------------------------------- + hv_set_ifconfig.sh | 30 +----- + 2 files changed, 33 insertions(+), 230 deletions(-) + +diff --git a/hv_kvp_daemon.c b/hv_kvp_daemon.c +index 264eeb9..27f5e7d 100644 +--- a/hv_kvp_daemon.c ++++ b/hv_kvp_daemon.c +@@ -1171,79 +1171,12 @@ static int process_ip_string(FILE *f, char *ip_string, int type) + return 0; + } + +-/* +- * Only IPv4 subnet strings needs to be converted to plen +- * For IPv6 the subnet is already privided in plen format +- */ +-static int kvp_subnet_to_plen(char *subnet_addr_str) +-{ +- int plen = 0; +- struct in_addr subnet_addr4; +- +- /* +- * Convert subnet address to binary representation +- */ +- if (inet_pton(AF_INET, subnet_addr_str, &subnet_addr4) == 1) { +- uint32_t subnet_mask = ntohl(subnet_addr4.s_addr); +- +- while (subnet_mask & 0x80000000) { +- plen++; +- subnet_mask <<= 1; +- } +- } else { +- return -1; +- } +- +- return plen; +-} +- +-static int process_ip_string_nm(FILE *f, char *ip_string, char *subnet, +- int is_ipv6) +-{ +- char addr[INET6_ADDRSTRLEN]; +- char subnet_addr[INET6_ADDRSTRLEN]; +- int error, i = 0; +- int ip_offset = 0, subnet_offset = 0; +- int plen; +- +- memset(addr, 0, sizeof(addr)); +- memset(subnet_addr, 0, sizeof(subnet_addr)); +- +- while (parse_ip_val_buffer(ip_string, &ip_offset, addr, +- (MAX_IP_ADDR_SIZE * 2)) && +- parse_ip_val_buffer(subnet, +- &subnet_offset, +- subnet_addr, +- (MAX_IP_ADDR_SIZE * +- 2))) { +- if (!is_ipv6) +- plen = kvp_subnet_to_plen((char *)subnet_addr); +- else +- plen = atoi(subnet_addr); +- +- if (plen < 0) +- return plen; +- +- error = fprintf(f, "address%d=%s/%d\n", ++i, (char *)addr, +- plen); +- if (error < 0) +- return error; +- +- memset(addr, 0, sizeof(addr)); +- memset(subnet_addr, 0, sizeof(subnet_addr)); +- } +- +- return 0; +-} +- + static int kvp_set_ip_info(char *if_name, struct hv_kvp_ipaddr_value *new_val) + { + int error = 0; +- char if_filename[PATH_MAX]; +- char nm_filename[PATH_MAX]; +- FILE *ifcfg_file, *nmfile; ++ char if_file[PATH_MAX]; ++ FILE *file; + char cmd[PATH_MAX]; +- int is_ipv6 = 0; + char *mac_addr; + int str_len; + +@@ -1264,7 +1197,7 @@ static int kvp_set_ip_info(char *if_name, struct hv_kvp_ipaddr_value *new_val) + * in a given distro to configure the interface and so are free + * ignore information that may not be relevant. + * +- * Here is the ifcfg format of the ip configuration file: ++ * Here is the format of the ip configuration file: + * + * HWADDR=macaddr + * DEVICE=interface name +@@ -1287,32 +1220,6 @@ static int kvp_set_ip_info(char *if_name, struct hv_kvp_ipaddr_value *new_val) + * tagged as IPV6_DEFAULTGW and IPV6 NETMASK will be tagged as + * IPV6NETMASK. + * +- * Here is the keyfile format of the ip configuration file: +- * +- * [ethernet] +- * mac-address=macaddr +- * [connection] +- * interface-name=interface name +- * +- * [ipv4] +- * method= (where is "auto" if DHCP is configured +- * or "manual" if no boot-time protocol should be used) +- * +- * address1=ipaddr1/plen +- * address2=ipaddr2/plen +- * +- * gateway=gateway1;gateway2 +- * +- * dns=dns1;dns2 +- * +- * [ipv6] +- * address1=ipaddr1/plen +- * address2=ipaddr2/plen +- * +- * gateway=gateway1;gateway2 +- * +- * dns=dns1;dns2 +- * + * The host can specify multiple ipv4 and ipv6 addresses to be + * configured for the interface. Furthermore, the configuration + * needs to be persistent. A subsequent GET call on the interface +@@ -1320,29 +1227,14 @@ static int kvp_set_ip_info(char *if_name, struct hv_kvp_ipaddr_value *new_val) + * call. + */ + +- /* +- * We are populating both ifcfg and nmconnection files +- */ +- snprintf(if_filename, sizeof(if_filename), "%s%s%s", KVP_CONFIG_LOC, +- "/ifcfg-", if_name); ++ snprintf(if_file, sizeof(if_file), "%s%s%s", KVP_CONFIG_LOC, ++ "/ifcfg-", if_name); + +- ifcfg_file = fopen(if_filename, "w"); ++ file = fopen(if_file, "w"); + +- if (!ifcfg_file) { ++ if (file == NULL) { + syslog(LOG_ERR, "Failed to open config file; error: %d %s", +- errno, strerror(errno)); +- return HV_E_FAIL; +- } +- +- snprintf(nm_filename, sizeof(nm_filename), "%s%s%s%s", KVP_CONFIG_LOC, +- "/", if_name, ".nmconnection"); +- +- nmfile = fopen(nm_filename, "w"); +- +- if (!nmfile) { +- syslog(LOG_ERR, "Failed to open config file; error: %d %s", +- errno, strerror(errno)); +- fclose(ifcfg_file); ++ errno, strerror(errno)); + return HV_E_FAIL; + } + +@@ -1356,31 +1248,14 @@ static int kvp_set_ip_info(char *if_name, struct hv_kvp_ipaddr_value *new_val) + goto setval_error; + } + +- error = kvp_write_file(ifcfg_file, "HWADDR", "", mac_addr); +- if (error < 0) +- goto setmac_error; +- +- error = kvp_write_file(ifcfg_file, "DEVICE", "", if_name); +- if (error < 0) +- goto setmac_error; +- +- error = fprintf(nmfile, "\n[connection]\n"); +- if (error < 0) +- goto setmac_error; +- +- error = kvp_write_file(nmfile, "interface-name", "", if_name); ++ error = kvp_write_file(file, "HWADDR", "", mac_addr); ++ free(mac_addr); + if (error) +- goto setmac_error; +- +- error = fprintf(nmfile, "\n[ethernet]\n"); +- if (error < 0) +- goto setmac_error; ++ goto setval_error; + +- error = kvp_write_file(nmfile, "mac-address", "", mac_addr); ++ error = kvp_write_file(file, "DEVICE", "", if_name); + if (error) +- goto setmac_error; +- +- free(mac_addr); ++ goto setval_error; + + /* + * The dhcp_enabled flag is only for IPv4. In the case the host only +@@ -1388,91 +1263,47 @@ static int kvp_set_ip_info(char *if_name, struct hv_kvp_ipaddr_value *new_val) + * proceed to parse and pass the IPv6 information to the + * disto-specific script hv_set_ifconfig. + */ +- +- /* +- * First populate the ifcfg file format +- */ + if (new_val->dhcp_enabled) { +- error = kvp_write_file(ifcfg_file, "BOOTPROTO", "", "dhcp"); ++ error = kvp_write_file(file, "BOOTPROTO", "", "dhcp"); + if (error) + goto setval_error; ++ + } else { +- error = kvp_write_file(ifcfg_file, "BOOTPROTO", "", "none"); ++ error = kvp_write_file(file, "BOOTPROTO", "", "none"); + if (error) + goto setval_error; + } + +- error = process_ip_string(ifcfg_file, (char *)new_val->ip_addr, +- IPADDR); +- if (error) +- goto setval_error; ++ /* ++ * Write the configuration for ipaddress, netmask, gateway and ++ * name servers. ++ */ + +- error = process_ip_string(ifcfg_file, (char *)new_val->sub_net, +- NETMASK); ++ error = process_ip_string(file, (char *)new_val->ip_addr, IPADDR); + if (error) + goto setval_error; + +- error = process_ip_string(ifcfg_file, (char *)new_val->gate_way, +- GATEWAY); ++ error = process_ip_string(file, (char *)new_val->sub_net, NETMASK); + if (error) + goto setval_error; + +- error = process_ip_string(ifcfg_file, (char *)new_val->dns_addr, DNS); ++ error = process_ip_string(file, (char *)new_val->gate_way, GATEWAY); + if (error) + goto setval_error; + +- if (new_val->addr_family == ADDR_FAMILY_IPV6) { +- error = fprintf(nmfile, "\n[ipv6]\n"); +- if (error < 0) +- goto setval_error; +- is_ipv6 = 1; +- } else { +- error = fprintf(nmfile, "\n[ipv4]\n"); +- if (error < 0) +- goto setval_error; +- } +- +- /* +- * Now we populate the keyfile format +- */ +- +- if (new_val->dhcp_enabled) { +- error = kvp_write_file(nmfile, "method", "", "auto"); +- if (error < 0) +- goto setval_error; +- } else { +- error = kvp_write_file(nmfile, "method", "", "manual"); +- if (error < 0) +- goto setval_error; +- } +- +- /* +- * Write the configuration for ipaddress, netmask, gateway and +- * name services +- */ +- error = process_ip_string_nm(nmfile, (char *)new_val->ip_addr, +- (char *)new_val->sub_net, is_ipv6); +- if (error < 0) +- goto setval_error; +- +- error = fprintf(nmfile, "gateway=%s\n", (char *)new_val->gate_way); +- if (error < 0) +- goto setval_error; +- +- error = fprintf(nmfile, "dns=%s\n", (char *)new_val->dns_addr); +- if (error < 0) ++ error = process_ip_string(file, (char *)new_val->dns_addr, DNS); ++ if (error) + goto setval_error; + +- fclose(nmfile); +- fclose(ifcfg_file); ++ fclose(file); + + /* + * Now that we have populated the configuration file, + * invoke the external script to do its magic. + */ + +- str_len = snprintf(cmd, sizeof(cmd), KVP_SCRIPTS_PATH "%s %s %s", +- "hv_set_ifconfig", if_filename, nm_filename); ++ str_len = snprintf(cmd, sizeof(cmd), KVP_SCRIPTS_PATH "%s %s", ++ "hv_set_ifconfig", if_file); + /* + * This is a little overcautious, but it's necessary to suppress some + * false warnings from gcc 8.0.1. +@@ -1485,16 +1316,14 @@ static int kvp_set_ip_info(char *if_name, struct hv_kvp_ipaddr_value *new_val) + + if (system(cmd)) { + syslog(LOG_ERR, "Failed to execute cmd '%s'; error: %d %s", +- cmd, errno, strerror(errno)); ++ cmd, errno, strerror(errno)); + return HV_E_FAIL; + } + return 0; +-setmac_error: +- free(mac_addr); ++ + setval_error: + syslog(LOG_ERR, "Failed to write config file"); +- fclose(ifcfg_file); +- fclose(nmfile); ++ fclose(file); + return error; + } + +diff --git a/hv_set_ifconfig.sh b/hv_set_ifconfig.sh +index 35aae6f..fe7fccf 100644 +--- a/hv_set_ifconfig.sh ++++ b/hv_set_ifconfig.sh +@@ -18,12 +18,12 @@ + # + # This example script is based on a RHEL environment. + # +-# Here is the ifcfg format of the ip configuration file: ++# Here is the format of the ip configuration file: + # + # HWADDR=macaddr + # DEVICE=interface name + # BOOTPROTO= (where is "dhcp" if DHCP is configured +-# or "none" if no boot-time protocol should be used) ++# or "none" if no boot-time protocol should be used) + # + # IPADDR0=ipaddr1 + # IPADDR1=ipaddr2 +@@ -41,32 +41,6 @@ + # tagged as IPV6_DEFAULTGW and IPV6 NETMASK will be tagged as + # IPV6NETMASK. + # +-# Here is the keyfile format of the ip configuration file: +-# +-# [ethernet] +-# mac-address=macaddr +-# [connection] +-# interface-name=interface name +-# +-# [ipv4] +-# method= (where is "auto" if DHCP is configured +-# or "manual" if no boot-time protocol should be used) +-# +-# address1=ipaddr1/plen +-# address=ipaddr2/plen +-# +-# gateway=gateway1;gateway2 +-# +-# dns=dns1; +-# +-# [ipv6] +-# address1=ipaddr1/plen +-# address2=ipaddr1/plen +-# +-# gateway=gateway1;gateway2 +-# +-# dns=dns1;dns2 +-# + # The host can specify multiple ipv4 and ipv6 addresses to be + # configured for the interface. Furthermore, the configuration + # needs to be persistent. A subsequent GET call on the interface +-- +2.41.0 + diff --git a/hyperv-daemons.spec b/hyperv-daemons.spec index 95b01ba..3903c81 100644 --- a/hyperv-daemons.spec +++ b/hyperv-daemons.spec @@ -13,7 +13,7 @@ Name: hyperv-daemons Version: 0 -Release: 0.35%{?snapver}%{?dist} +Release: 0.36%{?snapver}%{?dist} Summary: Hyper-V daemons suite Group: System Environment/Daemons @@ -78,6 +78,12 @@ Patch13: hpvd-hv-hv_kvp_daemon-Support-for-keyfile-based-connectio.patch Patch14: hpvd-hv-hv_kvp_daemon-Some-small-fixes-for-handling-NM-ke.patch # For RHEL-9901 - [Hyper-V][RHEL-8] hyperv-daemons write incompatible IPv6 prefix (IPV6NETMASK) in connection configuration Patch15: hpvd-Changes-for-adding-keyfile-support-in-RHEL-specific-.patch +# For RHEL-9901 - [Hyper-V][RHEL-8] hyperv-daemons write incompatible IPv6 prefix (IPV6NETMASK) in connection configuration +Patch16: hpvd-Revert-Changes-for-adding-keyfile-support-in-RHEL-sp.patch +# For RHEL-9901 - [Hyper-V][RHEL-8] hyperv-daemons write incompatible IPv6 prefix (IPV6NETMASK) in connection configuration +Patch17: hpvd-Revert-hv-hv_kvp_daemon-Some-small-fixes-for-handlin.patch +# For RHEL-9901 - [Hyper-V][RHEL-8] hyperv-daemons write incompatible IPv6 prefix (IPV6NETMASK) in connection configuration +Patch18: hpvd-Revert-hv-hv_kvp_daemon-Support-for-keyfile-based-co.patch # For bz#2020141 - [Hyper-V][RHEL8.6][ARM64] No hyperv-daemons package built for aarch64 platform # Patch6: hpvd-Enable-build-on-aarch64.patch @@ -200,6 +206,9 @@ cp -pvL %{SOURCE4} hv_set_ifconfig.sh %patch13 -p1 %patch14 -p1 %patch15 -p1 +%patch16 -p1 +%patch17 -p1 +%patch18 -p1 %build # HYPERV KVP DAEMON @@ -317,6 +326,13 @@ fi %{_sbindir}/vmbus_testing %changelog +* Tue Jan 16 2024 Jon Maloy - 0-0.36.20180415git +- hpvd-Revert-Changes-for-adding-keyfile-support-in-RHEL-sp.patch [RHEL-9901] +- hpvd-Revert-hv-hv_kvp_daemon-Some-small-fixes-for-handlin.patch [RHEL-9901] +- hpvd-Revert-hv-hv_kvp_daemon-Support-for-keyfile-based-co.patch [RHEL-9901] +- Resolves: RHEL-9901 + ([Hyper-V][RHEL-8] hyperv-daemons write incompatible IPv6 prefix (IPV6NETMASK) in connection configuration) + * Thu Dec 21 2023 Jon Maloy - 0-0.35.20180415git - hpvd-hv-hv_kvp_daemon-Support-for-keyfile-based-connectio.patch [RHEL-9901] - hpvd-hv-hv_kvp_daemon-Some-small-fixes-for-handling-NM-ke.patch [RHEL-9901]