Merge "Fix DAD and gateway detection in ifupdown/ifupdown-extra, improve logs"
This commit is contained in:
commit
302385e7bb
@ -145,7 +145,8 @@ haproxy-config
|
|||||||
#helm
|
#helm
|
||||||
helm
|
helm
|
||||||
|
|
||||||
#ifupdown-extra
|
#ifupdown
|
||||||
|
ifupdown
|
||||||
ifupdown-extra
|
ifupdown-extra
|
||||||
|
|
||||||
kdump-tools
|
kdump-tools
|
||||||
|
@ -82,6 +82,7 @@ kubernetes/runc
|
|||||||
ldap/ldapscripts
|
ldap/ldapscripts
|
||||||
ldap/openldap
|
ldap/openldap
|
||||||
networking/dpdk
|
networking/dpdk
|
||||||
|
networking/ifupdown
|
||||||
networking/ifupdown-extra
|
networking/ifupdown-extra
|
||||||
networking/iputils
|
networking/iputils
|
||||||
networking/lldpd
|
networking/lldpd
|
||||||
|
@ -1,29 +0,0 @@
|
|||||||
From 3623134b09353d8d43575cb2ab8ed240a268202f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Charles Short <charles.short@windriver.com>
|
|
||||||
Date: Tue, 2 Aug 2022 08:25:36 -0400
|
|
||||||
Subject: [PATCH] Install 00check-network-cable in the correct spot
|
|
||||||
|
|
||||||
Update debian/rules to install the 00check-network-cable in the
|
|
||||||
correct spot.
|
|
||||||
|
|
||||||
Signed-off-by: Charles Short <charles.short@windriver.com>
|
|
||||||
---
|
|
||||||
debian/rules | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/debian/rules b/debian/rules
|
|
||||||
index 32ae425..6dee5a7 100755
|
|
||||||
--- a/debian/rules
|
|
||||||
+++ b/debian/rules
|
|
||||||
@@ -18,7 +18,7 @@ override_dh_install:
|
|
||||||
install -m644 debian/network-routes $(CURDIR)/debian/ifupdown-extra/etc/network/routes
|
|
||||||
install -m644 debian/network-test-default $(CURDIR)/debian/ifupdown-extra/etc/default/network-test
|
|
||||||
# Network scripts for ifupdown
|
|
||||||
- install -m755 if-up-scripts/check-network-cable $(CURDIR)/debian/ifupdown-extra/etc/network/if-up.d/00check-network-cable
|
|
||||||
+ install -m755 if-up-scripts/check-network-cable $(CURDIR)/debian/ifupdown-extra/etc/network/if-pre-up.d/00check-network-cable
|
|
||||||
install -m755 if-up-scripts/check-duplicate-ip $(CURDIR)/debian/ifupdown-extra/etc/network/if-up.d/10check-duplicate-ip
|
|
||||||
install -m755 if-up-scripts/check-duplicate-ip6 $(CURDIR)/debian/ifupdown-extra/etc/network/if-up.d/10check-duplicate-ip6
|
|
||||||
install -m755 if-up-scripts/static-routes $(CURDIR)/debian/ifupdown-extra/etc/network/if-up.d/20static-routes
|
|
||||||
--
|
|
||||||
2.25.1
|
|
||||||
|
|
@ -0,0 +1,435 @@
|
|||||||
|
From 301be9cc3629927620206132dc00dba8b83045eb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lucas Ratusznei Fonseca <lucas.ratuszneifonseca@windriver.com>
|
||||||
|
Date: Mon, 5 Feb 2024 01:15:33 -0300
|
||||||
|
Subject: [PATCH] Fix DAD and gateway detection, improve logs
|
||||||
|
|
||||||
|
---
|
||||||
|
if-up-scripts/check-duplicate-ip | 51 ++++++++++++----------
|
||||||
|
if-up-scripts/check-duplicate-ip6 | 34 ++++++++++-----
|
||||||
|
if-up-scripts/check-gateway | 72 +++++++++++++++++++++++--------
|
||||||
|
if-up-scripts/check-network-cable | 54 +++++++++++++----------
|
||||||
|
4 files changed, 138 insertions(+), 73 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/if-up-scripts/check-duplicate-ip b/if-up-scripts/check-duplicate-ip
|
||||||
|
index 347639d..a975a90 100755
|
||||||
|
--- a/if-up-scripts/check-duplicate-ip
|
||||||
|
+++ b/if-up-scripts/check-duplicate-ip
|
||||||
|
@@ -56,11 +56,22 @@ VERBOSITY=${VERBOSITY:-0}
|
||||||
|
LC_ALL=C
|
||||||
|
export LC_ALL
|
||||||
|
|
||||||
|
-if [ "$DO_SYSLOG" = "yes" ] ; then
|
||||||
|
- OUTPUT="logger -i -p daemon.err -s"
|
||||||
|
-else
|
||||||
|
- OUTPUT="echo"
|
||||||
|
-fi
|
||||||
|
+do_output() {
|
||||||
|
+ local REDIR_ECHO=""
|
||||||
|
+ if [[ " err warning " =~ " $1 " ]] ; then
|
||||||
|
+ REDIR_ECHO="1>&2"
|
||||||
|
+ fi
|
||||||
|
+
|
||||||
|
+ if [ "$DO_SYSLOG" = "yes" ] ; then
|
||||||
|
+ logger -i -p daemon.$1 ifupdown: "${@:2}"
|
||||||
|
+ else
|
||||||
|
+ eval echo 'ifupdown: "${@:2}"' $REDIR_ECHO
|
||||||
|
+ fi
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+OUT_ERR="do_output err"
|
||||||
|
+OUT_WARN="do_output warning"
|
||||||
|
+OUT_DEBUG="do_output debug"
|
||||||
|
|
||||||
|
do_arping() {
|
||||||
|
# Send ARP pings to detect if there is a duplicate address "out there"
|
||||||
|
@@ -74,18 +85,18 @@ do_arping() {
|
||||||
|
|
||||||
|
# First determine physical interface in case aliased interfaces are used
|
||||||
|
real_iface=$(echo "$IFACE" | sed -e 's|:[[:digit:]]\+||')
|
||||||
|
-
|
||||||
|
- if [ -z "`ip link show $real_iface up 2>/dev/null`" ]; then
|
||||||
|
+ if [ ! -f /sys/class/net/${real_iface}/operstate ] || [[ $(< /sys/class/net/${real_iface}/operstate) != "up" ]] ; then
|
||||||
|
+ [ "$VERBOSITY" -eq 1 ] && $OUT_DEBUG "Interface $real_iface (for $IFACE) is not in UP state, skipping duplicate IPv4 address check"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
for ADDR in $IF_ADDRESS; do
|
||||||
|
# Skip interface is address is IPv6, arping only works for IPv4
|
||||||
|
if ! echo ${ADDR} | grep -q ":" ; then
|
||||||
|
- [ "$VERBOSITY" -eq 1 ] && $OUTPUT "DEBUG: Sending arp pings through $real_iface (for $IFACE) to detect other systems using $ADDR"
|
||||||
|
- $ARPING -c $ARP_COUNT -w $ARP_TIMEOUT -D -I $real_iface $ADDR $ARPING_EXTRAOPTS >$ARPING_REDIR
|
||||||
|
+ [ "$VERBOSITY" -eq 1 ] && $OUT_DEBUG "Sending arp pings through $real_iface (for $IFACE) to detect other systems using $ADDR"
|
||||||
|
+ $ARPING -c $ARP_COUNT -w $ARP_TIMEOUT -D -I $real_iface $ADDR $ARPING_EXTRAOPTS >/dev/null
|
||||||
|
if [ $? -ne 0 ] ; then
|
||||||
|
- $OUTPUT "ERROR: Duplicate address $ADDR assigned in the network where $real_iface is connected to."
|
||||||
|
+ $OUT_ERR "Duplicate address $ADDR assigned in the network where $real_iface is connected to."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
@@ -99,7 +110,7 @@ find_ip() {
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ -z "$IFACE" ] ; then
|
||||||
|
- echo "ERROR: Do not know what interface to check. IFACE environment variable is not defined!" >&2
|
||||||
|
+ $OUT_ERR "Do not know what interface to check. IFACE environment variable is not defined!"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
@@ -111,6 +122,12 @@ case $IFACE in
|
||||||
|
*) ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
+[ -z "$IF_ADDRESS" ] && find_ip
|
||||||
|
+# Still no IP? Bail out
|
||||||
|
+if [ -z "$IF_ADDRESS" ] ; then
|
||||||
|
+ $OUT_WARN "Cannot check for duplicate IPv4 address in the network as the script could not find the IPv4 address of $IFACE. You can disable this test by setting DO_ARPING to 'no' in $DEFAULT ."
|
||||||
|
+ exit 0
|
||||||
|
+fi
|
||||||
|
|
||||||
|
# For arping:
|
||||||
|
# Two possible arpings: iputils-arping or arping, with different
|
||||||
|
@@ -120,30 +137,20 @@ if [ -x /usr/bin/arping ] ; then
|
||||||
|
ARPING=/usr/bin/arping
|
||||||
|
ARP_TIMEOUT=${ARP_TIMEOUT:-3} # Time here is measured in seconds
|
||||||
|
ARPING_EXTRAOPTS="-q" # Use -q(uiet) in iputil's arping
|
||||||
|
- ARPING_REDIR="/dev/stdout" # Do not redirect output
|
||||||
|
else
|
||||||
|
if [ -x /usr/sbin/arping ] ; then
|
||||||
|
ARPING=/usr/sbin/arping
|
||||||
|
ARP_TIMEOUT=${ARP_TIMEOUT:-1500} # Time here is measures in milliseconds
|
||||||
|
# experiments show anything less than 1500 is unreliable.
|
||||||
|
ARPING_EXTRAOPTS="" # No '-q' option in arping
|
||||||
|
- ARPING_REDIR="/dev/null" # Send output to /dev/null if using this program
|
||||||
|
else
|
||||||
|
# Do not continue if ARPING is not available
|
||||||
|
- echo "WARNING: Cannot check for duplicate IP address in the network. The script cannot find the 'arping' program (tried /usr/bin/arping and /usr/sbin/arping. Please either install the iputils-arping or arping packages or disable this test by setting DO_ARPING to 'no' in $DEFAULT ." >&2
|
||||||
|
+ $OUT_WARN "Cannot check for duplicate IP address in the network. The script cannot find the 'arping' program (tried /usr/bin/arping and /usr/sbin/arping. Please either install the iputils-arping or arping packages or disable this test by setting DO_ARPING to 'no' in $DEFAULT ."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
ARP_COUNT=${ARP_COUNT:-2}
|
||||||
|
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-[ -z "$IF_ADDRESS" ] && find_ip
|
||||||
|
-# Still no IP? Bail out
|
||||||
|
-if [ -z "$IF_ADDRESS" ] ; then
|
||||||
|
- echo "WARNING: Cannot check for duplicate IP address in the network as the script could not find the ip address of $IFACE. You can disable this test by setting DO_ARPING to 'no' in $DEFAULT ." >&2
|
||||||
|
- exit 0
|
||||||
|
-fi
|
||||||
|
do_arping
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
diff --git a/if-up-scripts/check-duplicate-ip6 b/if-up-scripts/check-duplicate-ip6
|
||||||
|
index b9ff87a..fd4b453 100755
|
||||||
|
--- a/if-up-scripts/check-duplicate-ip6
|
||||||
|
+++ b/if-up-scripts/check-duplicate-ip6
|
||||||
|
@@ -54,11 +54,22 @@ VERBOSITY=${VERBOSITY:-0}
|
||||||
|
LC_ALL=C
|
||||||
|
export LC_ALL
|
||||||
|
|
||||||
|
-if [ "$DO_SYSLOG" = "yes" ] ; then
|
||||||
|
- OUTPUT="logger -i -p daemon.err -s"
|
||||||
|
-else
|
||||||
|
- OUTPUT="echo"
|
||||||
|
-fi
|
||||||
|
+do_output() {
|
||||||
|
+ local REDIR_ECHO=""
|
||||||
|
+ if [[ " err warning " =~ " $1 " ]] ; then
|
||||||
|
+ REDIR_ECHO="1>&2"
|
||||||
|
+ fi
|
||||||
|
+
|
||||||
|
+ if [ "$DO_SYSLOG" = "yes" ] ; then
|
||||||
|
+ logger -i -p daemon.$1 ifupdown: "${@:2}"
|
||||||
|
+ else
|
||||||
|
+ eval echo 'ifupdown: "${@:2}"' $REDIR_ECHO
|
||||||
|
+ fi
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+OUT_ERR="do_output err"
|
||||||
|
+OUT_WARN="do_output warning"
|
||||||
|
+OUT_DEBUG="do_output debug"
|
||||||
|
|
||||||
|
do_ndisc() {
|
||||||
|
# Use the Network Discovery Protocol to detect if there is a duplicate address
|
||||||
|
@@ -70,23 +81,24 @@ do_ndisc() {
|
||||||
|
|
||||||
|
# First determine physical interface in case aliased interfaces are used
|
||||||
|
real_iface=$(echo "$IFACE" | sed -e 's|:[[:digit:]]\+||')
|
||||||
|
- link_address=$(ip link show wlan0 | grep link | awk '{print toupper($2)}')
|
||||||
|
-
|
||||||
|
- if [ -z "`ip link show $real_iface up`" ]; then
|
||||||
|
+ if [ ! -f /sys/class/net/${real_iface}/operstate ] || [[ $(< /sys/class/net/${real_iface}/operstate) != "up" ]] ; then
|
||||||
|
+ [ "$VERBOSITY" -eq 1 ] && $OUT_DEBUG "Interface $real_iface (for $IFACE) is not in UP state, skipping duplicate IPv6 address check"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
+ link_address=$(ip link show "$real_iface" | grep link | awk '{print toupper($2)}')
|
||||||
|
+
|
||||||
|
for ADDR in $IF_ADDRESS; do
|
||||||
|
# Only check IP address if it is IPv6
|
||||||
|
if echo ${ADDR} | grep -q ":" ; then
|
||||||
|
- [ "$VERBOSITY" -eq 1 ] && $OUTPUT "DEBUG: Sending arp pings through $real_iface (for $IFACE) to detect other systems using $ADDR"
|
||||||
|
+ [ "$VERBOSITY" -eq 1 ] && $OUT_DEBUG "Sending arp pings through $real_iface (for $IFACE) to detect other systems using $ADDR"
|
||||||
|
dup_link_address=$($NDISC -q $ADDR $real_iface)
|
||||||
|
if [ $? -eq 0 ] ; then
|
||||||
|
# If the link address is the same as our address this is not a problem
|
||||||
|
# (ndisc returns it in at least Wireless interfaces), only report if the link
|
||||||
|
# address does not match
|
||||||
|
if [ "$link_address" != "$dup_link_address" ] ; then
|
||||||
|
- $OUTPUT "ERROR: Duplicate address $ADDR assigned in the network where $real_iface is connected to."
|
||||||
|
+ $OUT_ERR "Duplicate address $ADDR assigned in the network where $real_iface is connected to."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
@@ -101,7 +113,7 @@ find_ip6() {
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ -z "$IFACE" ] ; then
|
||||||
|
- echo "ERROR: Do not know what interface to check. IFACE environment variable is not defined!" >&2
|
||||||
|
+ $OUT_ERR "Do not know what interface to check. IFACE environment variable is not defined!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
diff --git a/if-up-scripts/check-gateway b/if-up-scripts/check-gateway
|
||||||
|
index 97c93b1..d2c45c1 100755
|
||||||
|
--- a/if-up-scripts/check-gateway
|
||||||
|
+++ b/if-up-scripts/check-gateway
|
||||||
|
@@ -42,13 +42,18 @@
|
||||||
|
|
||||||
|
# Defaults
|
||||||
|
ARPING=/usr/bin/arping
|
||||||
|
+NDISC=/usr/bin/ndisc6
|
||||||
|
ARP_COUNT=${ARP_COUNT:-2}
|
||||||
|
ARP_TIMEOUT=${ARP_TIMEOUT:-3}
|
||||||
|
DO_SYSLOG=${DO_SYSLOG:-yes}
|
||||||
|
VERBOSITY=${VERBOSITY:-0}
|
||||||
|
|
||||||
|
-# Do not continue if ARPING is not available
|
||||||
|
-[ ! -x "$ARPING" ] && exit 0
|
||||||
|
+[ -x "$ARPING" ]
|
||||||
|
+HAS_ARPING=$?
|
||||||
|
+
|
||||||
|
+[ -x "$NDISC" ]
|
||||||
|
+HAS_NDISC=$?
|
||||||
|
+
|
||||||
|
# or if the user has told us to not do arpings
|
||||||
|
[ "$DO_ARPING" = "no" ] && exit 0
|
||||||
|
|
||||||
|
@@ -58,17 +63,28 @@ VERBOSITY=${VERBOSITY:-0}
|
||||||
|
# Ignore "--all"
|
||||||
|
[ "$IFACE" = "--all" ] && exit 0
|
||||||
|
|
||||||
|
-if [ "$DO_SYSLOG" = "yes" ] ; then
|
||||||
|
- OUTPUT="logger -i -p daemon.err -s"
|
||||||
|
-else
|
||||||
|
- OUTPUT="echo"
|
||||||
|
-fi
|
||||||
|
+do_output() {
|
||||||
|
+ local REDIR_ECHO=""
|
||||||
|
+ if [[ " err warning " =~ " $1 " ]] ; then
|
||||||
|
+ REDIR_ECHO="1>&2"
|
||||||
|
+ fi
|
||||||
|
+
|
||||||
|
+ if [ "$DO_SYSLOG" = "yes" ] ; then
|
||||||
|
+ logger -i -p daemon.$1 ifupdown: "${@:2}"
|
||||||
|
+ else
|
||||||
|
+ eval echo 'ifupdown: "${@:2}"' $REDIR_ECHO
|
||||||
|
+ fi
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+OUT_ERR="do_output err"
|
||||||
|
+OUT_WARN="do_output warning"
|
||||||
|
+OUT_DEBUG="do_output debug"
|
||||||
|
|
||||||
|
# Try to obtain the IP address of our gateway (DHCP case)
|
||||||
|
if [ -z "$IF_GATEWAY" ] ; then
|
||||||
|
IF_GATEWAY=$(ip route list | grep "^default " | grep "dev $IFACE" | awk '{print $3}')
|
||||||
|
# Warn if there are multiple gateways
|
||||||
|
- echo $IF_GATEWAY | grep -q " " && [ "$VERBOSITY" -eq 1 ] && $OUTPUT "Found multiple gateways as default routes for $IFACE"
|
||||||
|
+ echo $IF_GATEWAY | grep -q " " && [ "$VERBOSITY" -eq 1 ] && $OUT_DEBUG "Found multiple gateways as default routes for $IFACE"
|
||||||
|
fi
|
||||||
|
# Still no IP? Bail out
|
||||||
|
[ -z "$IF_GATEWAY" ] && exit 0
|
||||||
|
@@ -92,12 +108,7 @@ do_arping() {
|
||||||
|
local ARPING_OPTIONS="-q -c $ARP_COUNT -w $ARP_TIMEOUT -f -I $IFACE"
|
||||||
|
local GATEWAY_FOUND=1
|
||||||
|
|
||||||
|
- # Check if the interface is up
|
||||||
|
- if [ -z "`ip link show $real_iface up 2>/dev/null`" ]; then
|
||||||
|
- return 0
|
||||||
|
- fi
|
||||||
|
-
|
||||||
|
- [ "$VERBOSITY" -eq 1 ] && $OUTPUT "DEBUG: Sending arp pings through $IFACE to detect if the gateway $GATEWAY is present"
|
||||||
|
+ [ "$VERBOSITY" -eq 1 ] && $OUT_DEBUG "Sending arp pings through $IFACE to detect if the gateway $GATEWAY is present"
|
||||||
|
if [ "`id -u`" = 0 ] ; then
|
||||||
|
if $ARPING $ARPING_OPTIONS $GATEWAY ; then
|
||||||
|
GATEWAY_FOUND=0
|
||||||
|
@@ -112,10 +123,23 @@ do_arping() {
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$GATEWAY_FOUND" = 1 ] ; then
|
||||||
|
- $OUTPUT "ERROR: Cannot find default gateway $GATEWAY in the network where $IFACE is connected to"
|
||||||
|
+ $OUT_ERR "Cannot find default gateway $GATEWAY in the network where $IFACE is connected to"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
+do_ndisc() {
|
||||||
|
+
|
||||||
|
+ local GATEWAY=$1
|
||||||
|
+
|
||||||
|
+ [ "$VERBOSITY" -eq 1 ] && $OUT_DEBUG "Sending ICMP6 pings through $IFACE to detect if the gateway $GATEWAY is present"
|
||||||
|
+
|
||||||
|
+ $NDISC -q $GATEWAY $real_iface >/dev/null 2>&1
|
||||||
|
+ if [ $? -ne 0 ] ; then
|
||||||
|
+ $OUT_ERR "Cannot find default gateway $GATEWAY in the network where $IFACE is connected to"
|
||||||
|
+ fi
|
||||||
|
+
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
# Check our IFACE name, if it is a serial line or loopback skip it as ARP ping is not possible there
|
||||||
|
|
||||||
|
case "$IFACE" in
|
||||||
|
@@ -123,8 +147,22 @@ case "$IFACE" in
|
||||||
|
*) ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
-for gateway in $IF_GATEWAY ; do
|
||||||
|
- do_arping $gateway
|
||||||
|
+real_iface=$(echo "$IFACE" | sed -e 's|:[[:digit:]]\+||')
|
||||||
|
+if [ ! -f /sys/class/net/${real_iface}/operstate ] || [[ $(< /sys/class/net/${real_iface}/operstate) != "up" ]] ; then
|
||||||
|
+ [ "$VERBOSITY" -eq 1 ] && $OUT_DEBUG "Interface $real_iface (for $IFACE) is not in UP state, skipping gateway detection"
|
||||||
|
+ exit 0
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+for gateway in $IF_GATEWAY ; do
|
||||||
|
+ if [[ "$gateway" =~ ":" ]] ; then
|
||||||
|
+ if [ $HAS_NDISC -eq 0 ] ; then
|
||||||
|
+ do_ndisc $gateway
|
||||||
|
+ fi
|
||||||
|
+ else
|
||||||
|
+ if [ $HAS_ARPING -eq 0 ] ; then
|
||||||
|
+ do_arping $gateway
|
||||||
|
+ fi
|
||||||
|
+ fi
|
||||||
|
done
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
diff --git a/if-up-scripts/check-network-cable b/if-up-scripts/check-network-cable
|
||||||
|
index f8e9044..be3d5b3 100755
|
||||||
|
--- a/if-up-scripts/check-network-cable
|
||||||
|
+++ b/if-up-scripts/check-network-cable
|
||||||
|
@@ -58,11 +58,22 @@ if [ "$DO_CABLETEST" = "no" ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
-if [ "$DO_SYSLOG" = yes ]; then
|
||||||
|
- OUTPUT="logger -i -p daemon.err -s"
|
||||||
|
-else
|
||||||
|
- OUTPUT=echo
|
||||||
|
-fi
|
||||||
|
+do_output() {
|
||||||
|
+ local REDIR_ECHO=""
|
||||||
|
+ if [[ " err warning " =~ " $1 " ]] ; then
|
||||||
|
+ REDIR_ECHO="1>&2"
|
||||||
|
+ fi
|
||||||
|
+
|
||||||
|
+ if [ "$DO_SYSLOG" = "yes" ] ; then
|
||||||
|
+ logger -i -p daemon.$1 ifupdown: "${@:2}"
|
||||||
|
+ else
|
||||||
|
+ eval echo 'ifupdown: "${@:2}"' $REDIR_ECHO
|
||||||
|
+ fi
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+OUT_ERR="do_output err"
|
||||||
|
+OUT_WARN="do_output warning"
|
||||||
|
+OUT_DEBUG="do_output debug"
|
||||||
|
|
||||||
|
# Set our locale environment, just in case any of the tools get translated
|
||||||
|
LC_ALL=C
|
||||||
|
@@ -91,16 +102,8 @@ check_status_ethtool() {
|
||||||
|
return $status
|
||||||
|
}
|
||||||
|
|
||||||
|
-check_status_iplink() {
|
||||||
|
- local status=0
|
||||||
|
- local info=""
|
||||||
|
-
|
||||||
|
- [ -x "$IPTOOL" ] || return 0
|
||||||
|
- info=$($IPTOOL link show "$IFACE" up 2>&1)
|
||||||
|
- if [ -z "$info" ] ; then
|
||||||
|
- status=1
|
||||||
|
- fi
|
||||||
|
- return $status
|
||||||
|
+check_status_sysfs() {
|
||||||
|
+ [ -f /sys/class/net/${IFACE}/operstate ] && [[ $(< /sys/class/net/${IFACE}/operstate) != "down" ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
# Status check function for all types of interfaces
|
||||||
|
@@ -108,14 +111,14 @@ check_status () {
|
||||||
|
local status=0 myid=$(id -u)
|
||||||
|
|
||||||
|
$IPTOOL link show "$IFACE" >/dev/null 2>&1 || {
|
||||||
|
- $OUTPUT "ERROR: Interface $IFACE does not seem to be present" \
|
||||||
|
+ $OUT_ERR "Interface $IFACE does not seem to be present" \
|
||||||
|
"in the system"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
- check_status_iplink || status=$?
|
||||||
|
+ check_status_sysfs || status=$?
|
||||||
|
[ $status -eq 0 ] ||
|
||||||
|
- $OUTPUT "WARNING: Initialising interface $IFACE which does" \
|
||||||
|
+ $OUT_WARN "Initialising interface $IFACE which does" \
|
||||||
|
"not have a link"
|
||||||
|
return $status
|
||||||
|
}
|
||||||
|
@@ -126,7 +129,7 @@ check_ethernet_status() {
|
||||||
|
local status=0 myid=$(id -u)
|
||||||
|
|
||||||
|
$IPTOOL link show "$IFACE" >/dev/null 2>&1 || {
|
||||||
|
- $OUTPUT "ERROR: Interface $IFACE does not seem to be present" \
|
||||||
|
+ $OUT_ERR "Interface $IFACE does not seem to be present" \
|
||||||
|
"in the system"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
@@ -138,10 +141,10 @@ check_ethernet_status() {
|
||||||
|
elif [ -x "$MIITOOL" ] && [ $myid -eq 0 ]; then
|
||||||
|
check_status_miitool || status=$?
|
||||||
|
else
|
||||||
|
- check_status_iplink || status=$?
|
||||||
|
+ check_status_sysfs || status=$?
|
||||||
|
fi
|
||||||
|
[ $status -eq 0 ] ||
|
||||||
|
- $OUTPUT "WARNING: Initialising interface $IFACE which does" \
|
||||||
|
+ $OUT_WARN "Initialising interface $IFACE which does" \
|
||||||
|
"not have a link"
|
||||||
|
return $status
|
||||||
|
}
|
||||||
|
@@ -162,16 +165,21 @@ check_bond_status() {
|
||||||
|
[ $status -ne 0 ] || return 0
|
||||||
|
done
|
||||||
|
done <$slaves
|
||||||
|
- $OUTPUT "WARNING: Initialising bond $IFACE which does not have link" \
|
||||||
|
+ $OUT_WARN "Initialising bond $IFACE which does not have link" \
|
||||||
|
"on any slave"
|
||||||
|
return $status
|
||||||
|
}
|
||||||
|
|
||||||
|
[ "$IFACE" ] || {
|
||||||
|
- $OUTPUT "ERROR: Variable IFACE not set in environment"
|
||||||
|
+ $OUT_ERR "Variable IFACE not set in environment"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
+# If it is a labeled interface, skip
|
||||||
|
+if [[ "$IFACE" =~ ":" ]] ; then
|
||||||
|
+ exit 0
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
# Check our IFACE name, run the status check depending on the type of interface
|
||||||
|
case $IFACE in
|
||||||
|
en* | eth*)
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
0001-Accept-netmask-or-prefix-length-on-etc-network-route.patch
|
0001-Accept-netmask-or-prefix-length-on-etc-network-route.patch
|
||||||
0002-Install-00check-network-cable-in-the-correct-spot.patch
|
0002-ignore-IFACE-all-for-ifupdown-scripts.patch
|
||||||
0003-ignore-IFACE-all-for-ifupdown-scripts.patch
|
0003-Handle-default-route-creation.patch
|
||||||
0004-Handle-default-route-creation.patch
|
0004-Fix-DAD-and-gateway-detection-improve-logs.patch
|
||||||
|
@ -0,0 +1,70 @@
|
|||||||
|
From 382eb354d6b6ceee52fb2dd6d8845b9a313a3f78 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lucas Ratusznei Fonseca <lucas.ratuszneifonseca@windriver.com>
|
||||||
|
Date: Thu, 8 Feb 2024 14:52:17 -0300
|
||||||
|
Subject: [PATCH] Fix detection logic
|
||||||
|
|
||||||
|
---
|
||||||
|
settle-dad.sh | 42 +++++++++++++++++++++++++++---------------
|
||||||
|
1 file changed, 27 insertions(+), 15 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/settle-dad.sh b/settle-dad.sh
|
||||||
|
index 37cb516..4cdbc8e 100644
|
||||||
|
--- a/settle-dad.sh
|
||||||
|
+++ b/settle-dad.sh
|
||||||
|
@@ -6,26 +6,38 @@ delay=${IF_DAD_INTERVAL:-0.1}
|
||||||
|
|
||||||
|
[ $attempts -eq 0 ] && exit 0
|
||||||
|
|
||||||
|
-echo -n "Waiting for DAD... "
|
||||||
|
+echo -n "Attempting DAD test for ${IF_ADDRESS}/${IF_NETMASK} on ${IFACE}... "
|
||||||
|
+
|
||||||
|
+real_iface=${IFACE%:*}
|
||||||
|
+no_link=0
|
||||||
|
+
|
||||||
|
for attempt in $(seq 1 $attempts); do
|
||||||
|
- tentative=$(ip -o -6 address list dev "$IFACE" to "${IF_ADDRESS}/${IF_NETMASK}" tentative | wc -l)
|
||||||
|
- if [ $tentative -eq 0 ]; then
|
||||||
|
- attempt=0 # This might have been our last attempt, but successful
|
||||||
|
- break
|
||||||
|
+ if [ ! -f /sys/class/net/${real_iface}/operstate ] || [[ $(< /sys/class/net/${real_iface}/operstate) == "down" ]] ; then
|
||||||
|
+ no_link=0
|
||||||
|
+ else
|
||||||
|
+ no_link=1
|
||||||
|
+ tentative=$(ip -o -6 address list dev "$IFACE" to "${IF_ADDRESS}/${IF_NETMASK}" tentative)
|
||||||
|
+ if [ -z "$tentative" ]; then
|
||||||
|
+ attempt=0 # This might have been our last attempt, but successful
|
||||||
|
+ break
|
||||||
|
+ fi
|
||||||
|
+ if [[ "$tentative" =~ "dadfailed tentative" ]] ; then
|
||||||
|
+ echo "Failed"
|
||||||
|
+ exit 1
|
||||||
|
+ fi
|
||||||
|
fi
|
||||||
|
- sleep $delay
|
||||||
|
+
|
||||||
|
+ sleep $delay
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $attempt -eq $attempts ]; then
|
||||||
|
- echo "Timed out"
|
||||||
|
- exit 1
|
||||||
|
-fi
|
||||||
|
-
|
||||||
|
-dadfailed=$(ip -o -6 address list dev "$IFACE" to "${IF_ADDRESS}/${IF_NETMASK}" dadfailed | wc -l)
|
||||||
|
-
|
||||||
|
-if [ $dadfailed -ge 1 ]; then
|
||||||
|
- echo "Failed"
|
||||||
|
- exit 1
|
||||||
|
+ if [ $no_link -eq 0 ]; then
|
||||||
|
+ echo "No link"
|
||||||
|
+ exit 0
|
||||||
|
+ else
|
||||||
|
+ echo "Timed out"
|
||||||
|
+ exit 1
|
||||||
|
+ fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo Done
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
1
networking/ifupdown/debian/deb_patches/series
Normal file
1
networking/ifupdown/debian/deb_patches/series
Normal file
@ -0,0 +1 @@
|
|||||||
|
0001-Fix-detection-logic.patch
|
7
networking/ifupdown/debian/meta_data.yaml
Normal file
7
networking/ifupdown/debian/meta_data.yaml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
debver: 0.8.36
|
||||||
|
debname: ifupdown
|
||||||
|
archive: https://snapshot.debian.org/archive/debian/20220519T084715Z/pool/main/i/ifupdown/
|
||||||
|
revision:
|
||||||
|
dist: $STX_DIST
|
||||||
|
PKG_GITREVCOUNT: true
|
Loading…
Reference in New Issue
Block a user