#!/bin/sh . /lib/functions.sh . /lib/functions/network.sh . /lib/mwan3/mwan3.sh help() { cat < Load rules and routes for specific interface ifdown Unload rules and routes for specific interface interfaces Show interfaces status policies Show currently active policy connected Show directly connected networks rules Show active rules status Show all status EOF } ifdown() { if [ -z "$1" ]; then echo "Error: Expecting interface. Usage: mwan3 ifdown " && exit 0 fi if [ -n "$2" ]; then echo "Error: Too many arguments. Usage: mwan3 ifdown " && exit 0 fi ACTION=ifdown INTERFACE=$1 /sbin/hotplug-call iface kill $(pgrep -f "mwan3track $1 $2") &> /dev/null mwan3_delete_iface_iptables $1 mwan3_track_clean $1 } ifup() { local device enabled config_load mwan3 if [ -z "$1" ]; then echo "Expecting interface. Usage: mwan3 ifup " && exit 0 fi if [ -n "$2" ]; then echo "Too many arguments. Usage: mwan3 ifup " && exit 0 fi config_get enabled "$1" enabled 0 device=$(uci -p /var/state get network.$1.ifname) &> /dev/null if [ -n "$device" ] ; then [ "$enabled" -eq 1 ] && ACTION=ifup INTERFACE=$1 DEVICE=$device /sbin/hotplug-call iface fi } interfaces() { config_load mwan3 echo "Interface status:" config_foreach mwan3_report_iface_status interface echo -e } policies() { echo "Current ipv4 policies:" mwan3_report_policies_v4 echo -e echo "Current ipv6 policies:" mwan3_report_policies_v6 echo -e } connected() { echo "Directly connected ipv4 networks:" mwan3_report_connected_v4 echo -e echo "Directly connected ipv6 networks:" mwan3_report_connected_v6 echo -e } rules() { echo "Active ipv4 user rules:" mwan3_report_rules_v4 echo -e echo "Active ipv6 user rules:" mwan3_report_rules_v6 echo -e } status() { interfaces policies connected rules } start() { config_load mwan3 config_foreach ifup interface } stop() { local ipset route rule table IP IPT killall mwan3track &> /dev/null config_load mwan3 config_foreach mwan3_track_clean interface for IP in "$IP4" "$IP6"; do for route in $($IP route list table all | sed 's/.*table \([^ ]*\) .*/\1/' | awk '{print $1}' | awk '{for(i=1;i<=NF;i++) if($i+0>0) if($i+0<255) {print;break}}'); do $IP route flush table $route &> /dev/null done for rule in $($IP rule list | egrep '^[1-2][0-9]{3}\:' | cut -d ':' -f 1); do $IP rule del pref $rule &> /dev/null done done for IPT in "$IPT4" "$IPT6"; do $IPT -D PREROUTING -j mwan3_hook &> /dev/null $IPT -D OUTPUT -j mwan3_hook &> /dev/null for table in $($IPT -S | awk '{print $2}' | grep mwan3 | sort -u); do $IPT -F $table &> /dev/null done for table in $($IPT -S | awk '{print $2}' | grep mwan3 | sort -u); do $IPT -X $table &> /dev/null done done for ipset in $($IPS -n list | grep mwan3_); do $IPS -q destroy $ipset done for ipset in $($IPS -n list | grep mwan3 | grep -E '_v4|_v6'); do $IPS -q destroy $ipset done mwan3_lock_clean } restart() { stop start } case "$1" in ifup|ifdown|interfaces|policies|connected|rules|status|start|stop|restart) $* ;; *) help ;; esac exit 0