Blame SOURCES/bz2133682-IPsrcaddr-proto-metric-scope-default-route-fixes.patch

98dd5d
From 237d55120a7c8d761f839c96651e722b3bb3bc88 Mon Sep 17 00:00:00 2001
98dd5d
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
98dd5d
Date: Wed, 12 Oct 2022 13:57:30 +0200
98dd5d
Subject: [PATCH 1/4] IPsrcaddr: fix PROTO regex
98dd5d
98dd5d
---
98dd5d
 heartbeat/IPsrcaddr | 2 +-
98dd5d
 1 file changed, 1 insertion(+), 1 deletion(-)
98dd5d
98dd5d
diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr
98dd5d
index 7dbf65ff5..24406d296 100755
98dd5d
--- a/heartbeat/IPsrcaddr
98dd5d
+++ b/heartbeat/IPsrcaddr
98dd5d
@@ -188,7 +188,7 @@ IPADDR="\($OCTET\.\)\{3\}$OCTET"
98dd5d
 SRCCLAUSE="src$WS$WS*\($IPADDR\)"
98dd5d
 MATCHROUTE="\(.*${WS}\)\($SRCCLAUSE\)\($WS.*\|$\)"
98dd5d
 METRICCLAUSE=".*\(metric$WS[^ ]\+\)"
98dd5d
-PROTOCLAUSE=".*\(proto$WS[^ ]\+\)"
98dd5d
+PROTOCLAUSE=".*\(proto$WS[^ ]\+\).*"
98dd5d
 FINDIF=findif
98dd5d
 
98dd5d
 # findif needs that to be set
98dd5d
98dd5d
From c70ba457851a401cb201cb87d23bdbc5f4fcd2b3 Mon Sep 17 00:00:00 2001
98dd5d
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
98dd5d
Date: Wed, 12 Oct 2022 14:00:30 +0200
98dd5d
Subject: [PATCH 2/4] IPsrcaddr: detect metric for main table only, and allow
98dd5d
 specifying metric if necessary
98dd5d
98dd5d
---
98dd5d
 heartbeat/IPsrcaddr | 18 +++++++++++++++++-
98dd5d
 1 file changed, 17 insertions(+), 1 deletion(-)
98dd5d
98dd5d
diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr
98dd5d
index 24406d296..4745eb8a7 100755
98dd5d
--- a/heartbeat/IPsrcaddr
98dd5d
+++ b/heartbeat/IPsrcaddr
98dd5d
@@ -59,12 +59,14 @@ OCF_RESKEY_ipaddress_default=""
98dd5d
 OCF_RESKEY_cidr_netmask_default=""
98dd5d
 OCF_RESKEY_destination_default="0.0.0.0/0"
98dd5d
 OCF_RESKEY_proto_default=""
98dd5d
+OCF_RESKEY_metric_default=""
98dd5d
 OCF_RESKEY_table_default=""
98dd5d
 
98dd5d
 : ${OCF_RESKEY_ipaddress=${OCF_RESKEY_ipaddress_default}}
98dd5d
 : ${OCF_RESKEY_cidr_netmask=${OCF_RESKEY_cidr_netmask_default}}
98dd5d
 : ${OCF_RESKEY_destination=${OCF_RESKEY_destination_default}}
98dd5d
 : ${OCF_RESKEY_proto=${OCF_RESKEY_proto_default}}
98dd5d
+: ${OCF_RESKEY_metric=${OCF_RESKEY_metric_default}}
98dd5d
 : ${OCF_RESKEY_table=${OCF_RESKEY_table_default}}
98dd5d
 #######################################################################
98dd5d
 
98dd5d
@@ -143,6 +145,14 @@ Proto to match when finding network. E.g. "kernel".
98dd5d
 <content type="string" default="${OCF_RESKEY_proto_default}" />
98dd5d
 </parameter>
98dd5d
 
98dd5d
+<parameter name="metric">
98dd5d
+<longdesc lang="en">
98dd5d
+Metric. Only needed if incorrect metric value is used.
98dd5d
+</longdesc>
98dd5d
+<shortdesc lang="en">Metric</shortdesc>
98dd5d
+<content type="string" default="${OCF_RESKEY_metric_default}" />
98dd5d
+</parameter>
98dd5d
+
98dd5d
 <parameter name="table">
98dd5d
 <longdesc lang="en">
98dd5d
 Table to modify. E.g. "local".
98dd5d
@@ -548,8 +558,14 @@ rc=$?
98dd5d
 
98dd5d
 INTERFACE=`echo $findif_out | awk '{print $1}'`
98dd5d
 LISTROUTE=`$IP2UTIL route list dev $INTERFACE scope link $PROTO match $ipaddress`
98dd5d
-METRIC=`echo $LISTROUTE | sed -n "s/$METRICCLAUSE/\1/p"`
98dd5d
 [ -z "$PROTO" ] && PROTO=`echo $LISTROUTE | sed -n "s/$PROTOCLAUSE/\1/p"`
98dd5d
+if [ -n "$OCF_RESKEY_metric" ]; then
98dd5d
+	METRIC="metric $OCF_RESKEY_metric"
98dd5d
+elif [ -z "$TABLE" ] || [ "${TABLE#table }" = "main" ]; then
98dd5d
+	METRIC=`echo $LISTROUTE | sed -n "s/$METRICCLAUSE/\1/p"`
98dd5d
+else
98dd5d
+	METRIC=""
98dd5d
+fi
98dd5d
 if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then
98dd5d
 	NETWORK=`echo $LISTROUTE | grep -m 1 -o '^[^ ]*'`
98dd5d
 
98dd5d
98dd5d
From c514f12f7a19440f475938f2a4659e5e9667fa25 Mon Sep 17 00:00:00 2001
98dd5d
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
98dd5d
Date: Wed, 12 Oct 2022 14:01:26 +0200
98dd5d
Subject: [PATCH 3/4] IPsrcaddr: use scope host when using non-main tables
98dd5d
98dd5d
---
98dd5d
 heartbeat/IPsrcaddr | 8 +++++++-
98dd5d
 1 file changed, 7 insertions(+), 1 deletion(-)
98dd5d
98dd5d
diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr
98dd5d
index 4745eb8a7..926246008 100755
98dd5d
--- a/heartbeat/IPsrcaddr
98dd5d
+++ b/heartbeat/IPsrcaddr
98dd5d
@@ -279,8 +279,14 @@ srca_stop() {
98dd5d
 	  
98dd5d
 	[ $rc = 2 ] && errorexit "The address you specified to stop does not match the preferred source address"
98dd5d
 
98dd5d
+	if [ -z "$TABLE" ] || [ "${TABLE#table }" = "main" ]; then
98dd5d
+		SCOPE="link"
98dd5d
+	else
98dd5d
+		SCOPE="host"
98dd5d
+	fi
98dd5d
+
98dd5d
 	PRIMARY_IP="$($IP2UTIL -4 -o addr show dev $INTERFACE primary | awk '{split($4,a,"/");print a[1]}')"
98dd5d
-	OPTS="proto kernel scope link src $PRIMARY_IP"
98dd5d
+	OPTS="proto kernel scope $SCOPE src $PRIMARY_IP"
98dd5d
 
98dd5d
 	$IP2UTIL route replace $TABLE $NETWORK dev $INTERFACE $OPTS $METRIC || \
98dd5d
 		errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE $OPTS $METRIC' failed"
98dd5d
98dd5d
From 1f387ac8017b3eee23b41eadafd58ce21a29eb21 Mon Sep 17 00:00:00 2001
98dd5d
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
98dd5d
Date: Thu, 13 Oct 2022 13:11:28 +0200
98dd5d
Subject: [PATCH 4/4] IPsrcaddr: fix monitor/status for default route not being
98dd5d
 equal to src IP before start, and change route src correctly in stop-action
98dd5d
98dd5d
---
98dd5d
 heartbeat/IPsrcaddr | 5 +++--
98dd5d
 1 file changed, 3 insertions(+), 2 deletions(-)
98dd5d
98dd5d
diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr
98dd5d
index 926246008..1bd41a930 100755
98dd5d
--- a/heartbeat/IPsrcaddr
98dd5d
+++ b/heartbeat/IPsrcaddr
98dd5d
@@ -229,6 +229,7 @@ srca_read() {
98dd5d
 
98dd5d
 	[ -z "$SRCIP" ] && return 1
98dd5d
 	[ $SRCIP = $1 ] && return 0
98dd5d
+	[ "$__OCF_ACTION" = "monitor" ] || [ "$__OCF_ACTION" = "status" ] && [ "${ROUTE%% *}" = "default" ] && return 1
98dd5d
 	return 2
98dd5d
 }
98dd5d
 
98dd5d
@@ -292,8 +293,8 @@ srca_stop() {
98dd5d
 		errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE $OPTS $METRIC' failed"
98dd5d
 
98dd5d
 	if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then
98dd5d
-		$CMDCHANGE $ROUTE_WO_SRC || \
98dd5d
-			errorexit "command '$CMDCHANGE $ROUTE_WO_SRC' failed"
98dd5d
+		$CMDCHANGE $ROUTE_WO_SRC src $PRIMARY_IP || \
98dd5d
+			errorexit "command '$CMDCHANGE $ROUTE_WO_SRC src $PRIMARY_IP' failed"
98dd5d
 	fi
98dd5d
 
98dd5d
 	return $?