From ecd2470ddb0c3e2b3cf6acf2ef5ceb78e3fdfe14 Mon Sep 17 00:00:00 2001 From: Etienne Champetier Date: Fri, 27 Jun 2025 19:18:51 -0400 Subject: [PATCH] mwan3: replace $(cat ..) with readfile Remove a fork+exec Signed-off-by: Etienne Champetier --- net/mwan3/files/etc/hotplug.d/iface/15-mwan3 | 2 +- net/mwan3/files/lib/mwan3/common.sh | 7 +++--- net/mwan3/files/lib/mwan3/mwan3.sh | 9 ++++--- net/mwan3/files/usr/libexec/rpcd/mwan3 | 26 ++++++++++++-------- net/mwan3/files/usr/sbin/mwan3track | 3 ++- 5 files changed, 28 insertions(+), 19 deletions(-) diff --git a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 index 6eac6309aa..f2bb67ca0e 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 +++ b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 @@ -45,7 +45,7 @@ config_get_bool enabled $INTERFACE 'enabled' '0' config_get initial_state $INTERFACE initial_state "online" if [ "$initial_state" = "offline" ]; then - status=$(cat $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS 2>/dev/null || echo unknown) + readfile status $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS 2>/dev/null || status="unknown" [ "$status" = "online" ] || status=offline else status=online diff --git a/net/mwan3/files/lib/mwan3/common.sh b/net/mwan3/files/lib/mwan3/common.sh index d3597aaf8c..caf546e665 100644 --- a/net/mwan3/files/lib/mwan3/common.sh +++ b/net/mwan3/files/lib/mwan3/common.sh @@ -141,7 +141,7 @@ mwan3_init() # mwan3's MARKing mask (at least 3 bits should be set) if [ -e "${MWAN3_STATUS_DIR}/mmx_mask" ]; then - MMX_MASK=$(cat "${MWAN3_STATUS_DIR}/mmx_mask") + readfile MMX_MASK "${MWAN3_STATUS_DIR}/mmx_mask" MWAN3_INTERFACE_MAX=$(uci_get_state mwan3 globals iface_max) else config_get MMX_MASK globals mmx_mask '0x3F00' @@ -208,14 +208,15 @@ mwan3_count_one_bits() } get_uptime() { - local uptime=$(cat /proc/uptime) + local uptime + readfile uptime /proc/uptime echo "${uptime%%.*}" } get_online_time() { local time_n time_u iface iface="$1" - time_u="$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/ONLINE" 2>/dev/null)" + readfile time_u "$MWAN3TRACK_STATUS_DIR/${iface}/ONLINE" 2>/dev/null [ -z "${time_u}" ] || [ "${time_u}" = "0" ] || { time_n="$(get_uptime)" echo $((time_n-time_u)) diff --git a/net/mwan3/files/lib/mwan3/mwan3.sh b/net/mwan3/files/lib/mwan3/mwan3.sh index e639002d91..c270b8a0e1 100644 --- a/net/mwan3/files/lib/mwan3/mwan3.sh +++ b/net/mwan3/files/lib/mwan3/mwan3.sh @@ -996,7 +996,7 @@ mwan3_interface_hotplug_shutdown() interface="$1" ifdown="$2" [ -f $MWAN3TRACK_STATUS_DIR/$interface/STATUS ] && { - status=$(cat $MWAN3TRACK_STATUS_DIR/$interface/STATUS) + readfile status $MWAN3TRACK_STATUS_DIR/$interface/STATUS } [ "$status" != "online" ] && [ "$ifdown" != 1 ] && return @@ -1076,8 +1076,9 @@ mwan3_set_iface_hotplug_state() { mwan3_get_iface_hotplug_state() { local iface=$1 - - cat "$MWAN3_STATUS_DIR/iface_state/$iface" 2>/dev/null || echo "offline" + local state=offline + readfile state "$MWAN3_STATUS_DIR/iface_state/$iface" + echo "$state" } mwan3_report_iface_status() @@ -1101,7 +1102,7 @@ mwan3_report_iface_status() fi if [ -f "$MWAN3TRACK_STATUS_DIR/${1}/STATUS" ]; then - status="$(cat "$MWAN3TRACK_STATUS_DIR/${1}/STATUS")" + readfile status "$MWAN3TRACK_STATUS_DIR/${1}/STATUS" else status="unknown" fi diff --git a/net/mwan3/files/usr/libexec/rpcd/mwan3 b/net/mwan3/files/usr/libexec/rpcd/mwan3 index 210e79a6d8..30c2550160 100755 --- a/net/mwan3/files/usr/libexec/rpcd/mwan3 +++ b/net/mwan3/files/usr/libexec/rpcd/mwan3 @@ -68,7 +68,7 @@ report_policies_v6() { get_age() { local time_p time_u iface="$1" - time_p="$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/TIME")" + readfile time_p "$MWAN3TRACK_STATUS_DIR/${iface}/TIME" [ -z "${time_p}" ] || { time_n="$(get_uptime)" echo $((time_n-time_p)) @@ -78,7 +78,7 @@ get_age() { get_offline_time() { local time_n time_d iface iface="$1" - time_d="$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/OFFLINE")" + readfile time_d "$MWAN3TRACK_STATUS_DIR/${iface}/OFFLINE" [ -z "${time_d}" ] || [ "${time_d}" = "0" ] || { time_n="$(get_uptime)" echo $((time_n-time_d)) @@ -92,7 +92,7 @@ get_mwan3_status() { local age=0 local online=0 local offline=0 - local enabled time_p time_n time_u time_d status track_status up uptime + local enabled time_p time_n time_u time_d status track_status up uptime temp if [ "${iface}" != "${iface_select}" ] && [ "${iface_select}" != "" ]; then return @@ -109,7 +109,7 @@ get_mwan3_status() { if [ -f "$MWAN3TRACK_STATUS_DIR/${iface}/STATUS" ]; then network_get_uptime uptime "$iface" network_is_up "$iface" && up="1" - status="$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/STATUS")" + readfile status "$MWAN3TRACK_STATUS_DIR/${iface}/STATUS" else uptime=0 up=0 @@ -121,9 +121,12 @@ get_mwan3_status() { json_add_int online "${online}" json_add_int offline "${offline}" json_add_int uptime "${uptime}" - json_add_int "score" "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/SCORE")" - json_add_int "lost" "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/LOST")" - json_add_int "turn" "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/TURN")" + readfile temp "$MWAN3TRACK_STATUS_DIR/${iface}/SCORE" + json_add_int "score" "$temp" + readfile temp "$MWAN3TRACK_STATUS_DIR/${iface}/LOST" + json_add_int "lost" "$temp" + readfile temp "$MWAN3TRACK_STATUS_DIR/${iface}/TURN" + json_add_int "turn" "$temp" json_add_string "status" "${status}" json_add_boolean "enabled" "${enabled}" json_add_boolean "running" "${running}" @@ -136,9 +139,12 @@ get_mwan3_status() { track="${file#*/TRACK_}" json_add_object json_add_string ip "${track}" - json_add_string status "$(cat "${file}")" - json_add_int latency "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/LATENCY_${track}")" - json_add_int packetloss "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/LOSS_${track}")" + readfile temp "${file}" + json_add_string status "$temp" + readfile temp "$MWAN3TRACK_STATUS_DIR/${iface}/LATENCY_${track}" + json_add_int latency "$temp" + readfile temp "$MWAN3TRACK_STATUS_DIR/${iface}/LOSS_${track}" + json_add_int packetloss "$temp" json_close_object done json_close_array diff --git a/net/mwan3/files/usr/sbin/mwan3track b/net/mwan3/files/usr/sbin/mwan3track index e30ad5fedd..9365e1b237 100755 --- a/net/mwan3/files/usr/sbin/mwan3track +++ b/net/mwan3/files/usr/sbin/mwan3track @@ -111,7 +111,8 @@ validate_wrap() { } disconnected() { - local status="$(cat ${MWAN3TRACK_STATUS_DIR}/${INTERFACE}/STATUS)" + local status + readfile status ${MWAN3TRACK_STATUS_DIR}/${INTERFACE}/STATUS STATUS='offline' echo "offline" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS