- Add Network IP Route tab,

- Improve status info,
- Fix comment in systemd service file.
This commit is contained in:
2025-07-06 01:58:10 +02:00
parent c9388dae6b
commit 0edc46fc42
4 changed files with 174 additions and 14 deletions

View File

@@ -3,19 +3,19 @@
Description=Rx3 Network Service Description=Rx3 Network Service
Documentation=man:systemd.service(5) Documentation=man:systemd.service(5)
After=network-online.target After=network-online.target
Wants=network-online.target # guarantees wait-online is pulled in Wants=network-online.target
Before=docker.service # run *first*, because Docker needs the bridges Before=docker.service
[Service] [Service]
Type=oneshot # the script runs and exits Type=oneshot
ExecStart=/usr/local/sbin/rx3_net_adm start ExecStart=/usr/local/sbin/rx3_net_adm start
ExecStartPost=/usr/local/sbin/rx3_net_adm status ExecStartPost=/usr/local/sbin/rx3_net_adm status
ExecStop=/usr/local/sbin/rx3_net_adm stop ExecStop=/usr/local/sbin/rx3_net_adm stop
ExecStopPost=/usr/local/sbin/rx3_net_adm status ExecStopPost=/usr/local/sbin/rx3_net_adm status
ExecReload=/usr/local/sbin/rx3_net_adm restart ExecReload=/usr/local/sbin/rx3_net_adm restart
RemainAfterExit=yes # keeps the unit in “active” state RemainAfterExit=yes
TimeoutStartSec=30s # tweak to taste TimeoutStartSec=30s
TimeoutStopSec=15s # idem TimeoutStopSec=15s
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target

View File

@@ -38,6 +38,12 @@ declare -g DNS_CACHE_LOCK="/var/lock/network/dns.lock"
declare -g DNS_CACHE_UPDATED=0 declare -g DNS_CACHE_UPDATED=0
if [ ! -v LOG ] || [[ "${LOG}" == "" ]]
then
export LOG=":"
fi
@@ -47,6 +53,8 @@ declare -g DNS_CACHE_UPDATED=0
dns_tab_load() dns_tab_load()
{ {
${LOG} 1>&2 "Loading DNS cache..."
file_lock "${DNS_CACHE_LOCK}" READ 9 file_lock "${DNS_CACHE_LOCK}" READ 9
if [[ ( -e "${DNS_CACHE_FILE}" ) && ( "${NETWORK_CONFIG_FILE}" -ot "${DNS_CACHE_FILE}" ) ]] if [[ ( -e "${DNS_CACHE_FILE}" ) && ( "${NETWORK_CONFIG_FILE}" -ot "${DNS_CACHE_FILE}" ) ]]
@@ -88,6 +96,8 @@ dns_tab_load()
dns_tab_save() dns_tab_save()
{ {
${LOG} 1>&2 "Saving DNS cache..."
if [[ "${DNS_CACHE_UPDATED}" != "0" ]] if [[ "${DNS_CACHE_UPDATED}" != "0" ]]
then then
file_lock "${DNS_CACHE_LOCK}" WRITE 9 file_lock "${DNS_CACHE_LOCK}" WRITE 9

View File

@@ -24,6 +24,10 @@ declare -g NETWORK_BASH=1
declare -g NETWORK_OPENVPN_STATUS declare -g NETWORK_OPENVPN_STATUS
declare -Ag NETWORK_IP_ROUTE_TAB
declare -g NETWORK_IP_ROUTE_ID_LIST
declare -Ag NETWORK_IP_ROUTE_IP_IDX
declare -g NETWORK_SRC_TYPE declare -g NETWORK_SRC_TYPE
declare -Ag NETWORK_SRC_TAB declare -Ag NETWORK_SRC_TAB
declare -g NETWORK_SRC_ID_LIST declare -g NETWORK_SRC_ID_LIST
@@ -48,9 +52,9 @@ file_lock ${NETWORK_CONFIG_LOCK} READ 9
file_unlock 9 file_unlock 9
if [ ! -v LOG ] if [ ! -v LOG ] || [[ "${LOG}" == "" ]]
then then
LOG=":" export LOG=":"
fi fi
@@ -63,6 +67,8 @@ fi
network_common_load() network_common_load()
{ {
${LOG} 1>&2 "Loading common..."
NETWORK_OPENVPN_STATUS="$( sudo /usr/local/sbin/openvpn-status)" NETWORK_OPENVPN_STATUS="$( sudo /usr/local/sbin/openvpn-status)"
NETWORK_TABLE_LIST="" NETWORK_TABLE_LIST=""
} }
@@ -87,6 +93,94 @@ network_common_dump()
#--------------------------------------------------------------------------------------------------------------------------
# network_ip_route_tab_load
#--------------------------------------------------------------------------------------------------------------------------
network_ip_route_tab_load()
{
nirtl_id=0
${LOG} 1>&2 "Loading IP Route tab..."
while IFS= read -r line
do
line=${line%%#*}
if [[ ! -z "$line" ]]
then
set ${line}
nirtl_ip="$1"
nirtl_mask="$2"
nirtl_device="$3"
var_assign NETWORK_IP_ROUTE_ID_LIST "${nirtl_id}" INC
tab_assign NETWORK_IP_ROUTE_TAB "${nirtl_id},IP" "${nirtl_ip}"
tab_assign NETWORK_IP_ROUTE_TAB "${nirtl_id},Mask" "${nirtl_mask}"
tab_assign NETWORK_IP_ROUTE_TAB "${nirtl_id},Device" "${nirtl_device}"
tab_assign NETWORK_IP_ROUTE_IP_IDX "${nirtl_ip}" "${nirtl_id}"
nirtl_id=$(( ${nirtl_id} + 1))
fi
done <<< ${NETWORK_IP_ROUTE_CONFIG}
}
#--------------------------------------------------------------------------------------------------------------------------
# network_ip_route_tab_get
#--------------------------------------------------------------------------------------------------------------------------
network_ip_route_tab_get()
{
ip_route_id="$1"
ip_route_ip=${NETWORK_IP_ROUTE_TAB["${ip_route_id},IP"]}
ip_route_mask=${NETWORK_IP_ROUTE_TAB["${ip_route_id},Mask"]}
ip_route_device=${NETWORK_IP_ROUTE_TAB["${ip_route_id},Device"]}
}
#--------------------------------------------------------------------------------------------------------------------------
# network_ip_route_tab_dump
#--------------------------------------------------------------------------------------------------------------------------
network_ip_route_tab_dump()
{
echo "NETWORK_IP_ROUTE_ID_LIST: [${NETWORK_IP_ROUTE_ID_LIST}]"
echo
echo "NETWORK_IP_ROUTE_IP_IDX:"
for key in "${!NETWORK_IP_ROUTE_IP_IDX[@]}"
do
echo "[${key}]: [${NETWORK_IP_ROUTE_IP_IDX[${key}]}]"
done | sort -n
echo
echo "NETWORK_IP_ROUTE_TAB:"
for key in "${!NETWORK_IP_ROUTE_TAB[@]}"
do
echo "[${key}]: [${NETWORK_IP_ROUTE_TAB[${key}]}]"
done | sort -n
echo
}
#-------------------------------------------------------------------------------------------------------------------------- #--------------------------------------------------------------------------------------------------------------------------
# network_dst_tab_load # network_dst_tab_load
#-------------------------------------------------------------------------------------------------------------------------- #--------------------------------------------------------------------------------------------------------------------------
@@ -96,6 +190,8 @@ network_dst_tab_load()
ndtl_id=0 ndtl_id=0
${LOG} 1>&2 "Loading Dst tab..."
while IFS= read -r line while IFS= read -r line
do do
line=${line%%#*} line=${line%%#*}
@@ -255,6 +351,8 @@ network_src_tab_load()
nstl_port_default=3000 nstl_port_default=3000
${LOG} 1>&2 "Loading Src tab..."
while IFS= read -r line while IFS= read -r line
do do
line=${line%%#*} line=${line%%#*}
@@ -455,10 +553,13 @@ network_src_tab_ip_lookup()
network_tab_load() network_tab_load()
{ {
${LOG} 1>&2 "Loading config..."
dns_tab_load dns_tab_load
network_common_load network_common_load
network_ip_route_tab_load
network_dst_tab_load network_dst_tab_load
network_src_tab_load network_src_tab_load
@@ -479,6 +580,7 @@ network_tab_dump()
network_common_dump network_common_dump
network_ip_route_tab_dump
network_dst_tab_dump network_dst_tab_dump
network_src_tab_dump network_src_tab_dump
} }
@@ -516,9 +618,11 @@ network_table_init()
${LOG} "Add Rx3 routes in VPN tables" ${LOG} "Add Rx3 routes in VPN tables"
for route in ${IP_ROUTE} for ip_route_id in ${NETWORK_IP_ROUTE_ID_LIST}
do do
${DEBUG} ip route add ${route/:*/} table ${dst_table} dev ${route/*:/} network_ip_route_tab_get ${ip_route_id}
${DEBUG} ip route add ${ip_route_ip}/${ip_route_mask} table ${dst_table} dev ${ip_route_device}
done done
done done
} }
@@ -537,9 +641,11 @@ network_table_deinit()
for table in ${NETWORK_TABLE_LIST} for table in ${NETWORK_TABLE_LIST}
do do
for route in ${IP_ROUTE} for ip_route_id in ${NETWORK_IP_ROUTE_ID_LIST}
do do
${DEBUG} ip route del ${route/:*/} table ${table} dev ${route/*:/} 2>/dev/null network_ip_route_tab_get ${ip_route_id}
${DEBUG} ip route del ${ip_route_ip}/${ip_route_mask} table ${table} dev ${ip_route_device} 2>/dev/null
done done
done done
@@ -890,6 +996,50 @@ network_stop()
network_status() network_status()
{ {
echo "Number of Network IP Route entries: ${#NETWORK_IP_ROUTE_IP_IDX[@]}"
echo "Number of Network Src entries: ${#NETWORK_SRC_IP_IDX[@]}"
echo "Number of Network Dst entries: ${#NETWORK_DST_DEV_IDX[@]}"
echo "Number of DNS cache A entries: ${#DNS_A_TAB[@]}"
echo "Number of DNS cache PTR entries: ${#DNS_PTR_TAB[@]}"
(
echo "SRC"
for src_id in ${NETWORK_SRC_ID_LIST}
do
network_src_tab_get ${src_id}
echo ${src_device}
done | sort -u
echo "DST"
for dst_id in ${NETWORK_DST_ID_LIST}
do
network_dst_tab_get ${dst_id}
echo ${dst_device}
done | sort -u
) | while read entry
do
case ${entry}
in
"SRC")
echo
echo "Src Devices:"
;;
"DST")
echo
echo "Dst Devices:"
;;
*)
ip address show $entry | sed -e 's/^[^:]*: //'
;;
esac
done
echo
echo "Rules:" echo "Rules:"
ip rule show ip rule show

View File

@@ -19,7 +19,7 @@ prog="rx3-net"
# Some functions to make the below more readable
#-------------------------------------------------------------------------------------------------------------------------- #--------------------------------------------------------------------------------------------------------------------------
# Start # Start