aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Wilck <mwilck@suse.com>2022-01-21 21:25:54 +0100
committerJóhann B. Guðmundsson <johannbg@gmail.com>2022-02-04 18:35:33 +0000
commitd754e1c6f081a6501cb7fdcb5caaa6c4977235af (patch)
tree1347c10368efc9035d111c91c46858bcb5cd125b
parent9371dcaba3c58377428eee44bd702fae7b2ab20e (diff)
downloaddracut-d754e1c6f081a6501cb7fdcb5caaa6c4977235af.tar.gz
fix(dracut-functions.sh): ip route parsing
The code for determining local interface and address works only for peers that are reachable in a single hop. This is parsed correctly: 192.168.110.1 dev br0 src 192.168.110.160 uid 0 \ cache But this isn't: 192.168.1.4 via 192.168.110.1 dev br0 src 192.168.110.160 uid 0 \ cache Fix it. Fixes: ceca74cc ("dracut-functions: add ip_params_for_remote_addr() helper")
-rwxr-xr-xdracut-functions.sh20
1 files changed, 18 insertions, 2 deletions
diff --git a/dracut-functions.sh b/dracut-functions.sh
index 63b6c892..8503c22f 100755
--- a/dracut-functions.sh
+++ b/dracut-functions.sh
@@ -783,13 +783,29 @@ btrfs_devs() {
iface_for_remote_addr() {
# shellcheck disable=SC2046
set -- $(ip -o route get to "$1")
- echo "$3"
+ while [ $# -gt 0 ]; do
+ case $1 in
+ dev)
+ echo "$2"
+ return
+ ;;
+ esac
+ shift
+ done
}
local_addr_for_remote_addr() {
# shellcheck disable=SC2046
set -- $(ip -o route get to "$1")
- echo "$5"
+ while [ $# -gt 0 ]; do
+ case $1 in
+ src)
+ echo "$2"
+ return
+ ;;
+ esac
+ shift
+ done
}
peer_for_addr() {