From 506fb7b114ace8ab84d7dc67fd34765f7907953c Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 6 Jul 2026 21:58:11 +0200 Subject: [PATCH] fix: Parse Debian ipcalc output correctly (#1215) --- src/network.sh | 78 +++++++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 32 deletions(-) diff --git a/src/network.sh b/src/network.sh index d224525..8b6b780 100644 --- a/src/network.sh +++ b/src/network.sh @@ -69,38 +69,6 @@ isUserMode() { esac } -maskToCIDR() { - - local mask="$1" - local prefix="" - - prefix=$(ipcalc -p 0.0.0.0 "$mask" | awk -F= '/^PREFIX=/ { print $2 }') - - if [[ ! "$prefix" =~ ^[0-9]+$ ]] || (( prefix < 1 || prefix > 30 )); then - error "Invalid MASK: '$mask'" - return 1 - fi - - echo "$prefix" - return 0 -} - -networkCIDR() { - - local ip="$1" - local network="" - - network=$(ipcalc -n "$ip" "$MASK" | awk -F= '/^NETWORK=/ { print $2 }') - - if [ -z "$network" ]; then - error "Failed to calculate network address from IP '$ip' and netmask '$MASK'." - return 1 - fi - - echo "$network/$PREFIX" - return 0 -} - getMTU() { local dev="$1" @@ -153,6 +121,52 @@ gatewayMAC() { echo "$mac" | md5sum | sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/' } +maskToCIDR() { + + local mask="$1" + local prefix="" + + prefix=$(ipcalc -n -b "0.0.0.0/$mask" 2>/dev/null | awk ' + /^Netmask:/ { + for (i = 1; i <= NF; i++) { + if ($i == "=") { + print $(i + 1) + exit + } + } + } + ') + + if [[ ! "$prefix" =~ ^[0-9]+$ ]] || (( prefix < 1 || prefix > 30 )); then + error "Invalid MASK: '$mask'" + return 1 + fi + + echo "$prefix" + return 0 +} + +networkCIDR() { + + local ip="$1" + local network="" + + network=$(ipcalc -n -b "$ip/$MASK" 2>/dev/null | awk ' + /^Network:/ { + print $2 + exit + } + ') + + if [[ ! "$network" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]+$ ]]; then + error "Failed to calculate network address from IP '$ip' and netmask '$MASK'." + return 1 + fi + + echo "$network" + return 0 +} + detectInterface() { if [ -n "$DEV" ]; then