diff options
author | Martin Wilck <mwilck@suse.com> | 2022-01-21 21:25:54 +0100 |
---|---|---|
committer | Jóhann B. Guðmundsson <johannbg@gmail.com> | 2022-02-04 18:35:33 +0000 |
commit | d754e1c6f081a6501cb7fdcb5caaa6c4977235af (patch) | |
tree | 1347c10368efc9035d111c91c46858bcb5cd125b | |
parent | 9371dcaba3c58377428eee44bd702fae7b2ab20e (diff) | |
download | dracut-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-x | dracut-functions.sh | 20 |
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() { |