From 5b302e805c70fe6fb544470c311d0a7e64514bca Mon Sep 17 00:00:00 2001 From: Oyvind Albrigtsen Date: Fri, 14 Oct 2022 13:44:52 +0200 Subject: [PATCH] - IPsrcaddr: proto, metric, scope and default route fixes Resolves: rhbz#2134411 --- ...oto-metric-scope-default-route-fixes.patch | 147 ++++++++++++++++++ resource-agents.spec | 9 +- 2 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 bz2134411-IPsrcaddr-proto-metric-scope-default-route-fixes.patch diff --git a/bz2134411-IPsrcaddr-proto-metric-scope-default-route-fixes.patch b/bz2134411-IPsrcaddr-proto-metric-scope-default-route-fixes.patch new file mode 100644 index 0000000..8722395 --- /dev/null +++ b/bz2134411-IPsrcaddr-proto-metric-scope-default-route-fixes.patch @@ -0,0 +1,147 @@ +From 237d55120a7c8d761f839c96651e722b3bb3bc88 Mon Sep 17 00:00:00 2001 +From: Oyvind Albrigtsen +Date: Wed, 12 Oct 2022 13:57:30 +0200 +Subject: [PATCH 1/4] IPsrcaddr: fix PROTO regex + +--- + heartbeat/IPsrcaddr | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr +index 7dbf65ff5..24406d296 100755 +--- a/heartbeat/IPsrcaddr ++++ b/heartbeat/IPsrcaddr +@@ -188,7 +188,7 @@ IPADDR="\($OCTET\.\)\{3\}$OCTET" + SRCCLAUSE="src$WS$WS*\($IPADDR\)" + MATCHROUTE="\(.*${WS}\)\($SRCCLAUSE\)\($WS.*\|$\)" + METRICCLAUSE=".*\(metric$WS[^ ]\+\)" +-PROTOCLAUSE=".*\(proto$WS[^ ]\+\)" ++PROTOCLAUSE=".*\(proto$WS[^ ]\+\).*" + FINDIF=findif + + # findif needs that to be set + +From c70ba457851a401cb201cb87d23bdbc5f4fcd2b3 Mon Sep 17 00:00:00 2001 +From: Oyvind Albrigtsen +Date: Wed, 12 Oct 2022 14:00:30 +0200 +Subject: [PATCH 2/4] IPsrcaddr: detect metric for main table only, and allow + specifying metric if necessary + +--- + heartbeat/IPsrcaddr | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr +index 24406d296..4745eb8a7 100755 +--- a/heartbeat/IPsrcaddr ++++ b/heartbeat/IPsrcaddr +@@ -59,12 +59,14 @@ OCF_RESKEY_ipaddress_default="" + OCF_RESKEY_cidr_netmask_default="" + OCF_RESKEY_destination_default="0.0.0.0/0" + OCF_RESKEY_proto_default="" ++OCF_RESKEY_metric_default="" + OCF_RESKEY_table_default="" + + : ${OCF_RESKEY_ipaddress=${OCF_RESKEY_ipaddress_default}} + : ${OCF_RESKEY_cidr_netmask=${OCF_RESKEY_cidr_netmask_default}} + : ${OCF_RESKEY_destination=${OCF_RESKEY_destination_default}} + : ${OCF_RESKEY_proto=${OCF_RESKEY_proto_default}} ++: ${OCF_RESKEY_metric=${OCF_RESKEY_metric_default}} + : ${OCF_RESKEY_table=${OCF_RESKEY_table_default}} + ####################################################################### + +@@ -143,6 +145,14 @@ Proto to match when finding network. E.g. "kernel". + + + ++ ++ ++Metric. Only needed if incorrect metric value is used. ++ ++Metric ++ ++ ++ + + + Table to modify. E.g. "local". +@@ -548,8 +558,14 @@ rc=$? + + INTERFACE=`echo $findif_out | awk '{print $1}'` + LISTROUTE=`$IP2UTIL route list dev $INTERFACE scope link $PROTO match $ipaddress` +-METRIC=`echo $LISTROUTE | sed -n "s/$METRICCLAUSE/\1/p"` + [ -z "$PROTO" ] && PROTO=`echo $LISTROUTE | sed -n "s/$PROTOCLAUSE/\1/p"` ++if [ -n "$OCF_RESKEY_metric" ]; then ++ METRIC="metric $OCF_RESKEY_metric" ++elif [ -z "$TABLE" ] || [ "${TABLE#table }" = "main" ]; then ++ METRIC=`echo $LISTROUTE | sed -n "s/$METRICCLAUSE/\1/p"` ++else ++ METRIC="" ++fi + if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then + NETWORK=`echo $LISTROUTE | grep -m 1 -o '^[^ ]*'` + + +From c514f12f7a19440f475938f2a4659e5e9667fa25 Mon Sep 17 00:00:00 2001 +From: Oyvind Albrigtsen +Date: Wed, 12 Oct 2022 14:01:26 +0200 +Subject: [PATCH 3/4] IPsrcaddr: use scope host when using non-main tables + +--- + heartbeat/IPsrcaddr | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr +index 4745eb8a7..926246008 100755 +--- a/heartbeat/IPsrcaddr ++++ b/heartbeat/IPsrcaddr +@@ -279,8 +279,14 @@ srca_stop() { + + [ $rc = 2 ] && errorexit "The address you specified to stop does not match the preferred source address" + ++ if [ -z "$TABLE" ] || [ "${TABLE#table }" = "main" ]; then ++ SCOPE="link" ++ else ++ SCOPE="host" ++ fi ++ + PRIMARY_IP="$($IP2UTIL -4 -o addr show dev $INTERFACE primary | awk '{split($4,a,"/");print a[1]}')" +- OPTS="proto kernel scope link src $PRIMARY_IP" ++ OPTS="proto kernel scope $SCOPE src $PRIMARY_IP" + + $IP2UTIL route replace $TABLE $NETWORK dev $INTERFACE $OPTS $METRIC || \ + errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE $OPTS $METRIC' failed" + +From 1f387ac8017b3eee23b41eadafd58ce21a29eb21 Mon Sep 17 00:00:00 2001 +From: Oyvind Albrigtsen +Date: Thu, 13 Oct 2022 13:11:28 +0200 +Subject: [PATCH 4/4] IPsrcaddr: fix monitor/status for default route not being + equal to src IP before start, and change route src correctly in stop-action + +--- + heartbeat/IPsrcaddr | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr +index 926246008..1bd41a930 100755 +--- a/heartbeat/IPsrcaddr ++++ b/heartbeat/IPsrcaddr +@@ -229,6 +229,7 @@ srca_read() { + + [ -z "$SRCIP" ] && return 1 + [ $SRCIP = $1 ] && return 0 ++ [ "$__OCF_ACTION" = "monitor" ] || [ "$__OCF_ACTION" = "status" ] && [ "${ROUTE%% *}" = "default" ] && return 1 + return 2 + } + +@@ -292,8 +293,8 @@ srca_stop() { + errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE $OPTS $METRIC' failed" + + if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then +- $CMDCHANGE $ROUTE_WO_SRC || \ +- errorexit "command '$CMDCHANGE $ROUTE_WO_SRC' failed" ++ $CMDCHANGE $ROUTE_WO_SRC src $PRIMARY_IP || \ ++ errorexit "command '$CMDCHANGE $ROUTE_WO_SRC src $PRIMARY_IP' failed" + fi + + return $? diff --git a/resource-agents.spec b/resource-agents.spec index ccbd8ab..7e51bbf 100644 --- a/resource-agents.spec +++ b/resource-agents.spec @@ -45,7 +45,7 @@ Name: resource-agents Summary: Open Source HA Reusable Cluster Resource Scripts Version: 4.10.0 -Release: 24%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist} +Release: 25%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist} License: GPLv2+ and LGPLv2+ URL: https://github.com/ClusterLabs/resource-agents Source0: %{upstream_prefix}-%{upstream_version}.tar.gz @@ -84,6 +84,7 @@ Patch31: bz2109161-storage_mon-3-fix-child-process-exit.patch Patch32: bz2109161-storage_mon-4-fix-possible-false-negatives.patch Patch33: bz2102126-LVM-activate-fix-return-codes.patch Patch34: bz2111147-azure-events-az-new-ra.patch +Patch35: bz2134411-IPsrcaddr-proto-metric-scope-default-route-fixes.patch # bundled ha-cloud-support libs Patch500: ha-cloud-support-aws.patch @@ -242,6 +243,7 @@ exit 1 %patch32 -p1 %patch33 -p1 %patch34 -p1 +%patch35 -p1 # bundled ha-cloud-support libs %patch500 -p1 @@ -563,6 +565,11 @@ rm -rf %{buildroot}/usr/share/doc/resource-agents %{_usr}/lib/ocf/lib/heartbeat/OCF_*.pm %changelog +* Fri Oct 14 2022 Oyvind Albrigtsen - 4.10.0-25 +- IPsrcaddr: proto, metric, scope and default route fixes + + Resolves: rhbz#2134411 + * Thu Sep 8 2022 Oyvind Albrigtsen - 4.10.0-24 - storage_mon: fix specified scores count and possible false negatives - LVM-activate: use correct return codes to fix unexpected behaviour