mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-12-19 10:23:03 +00:00
Add new package which has scripts for ssid client ratelimiting. Adds rules for ssid ratelimiting and client ratimiting based on 'wireless' config file options 'drate'(ssid dl), 'urate'(ssid ul), 'cdrate'(client dl), and 'curate' (client ul). Signed-off-by: Chaitanya Kiran Godavarthi <chaitanya.kiran@connectus.ai>
94 lines
2.0 KiB
Bash
94 lines
2.0 KiB
Bash
#!/bin/sh
|
|
#
|
|
# Copyright (C) 2018 rosysong@rosinson.com
|
|
#
|
|
|
|
. /lib/functions/network.sh
|
|
. /lib/nft-qos/core.sh
|
|
|
|
P1=""; P2=""; P3=""; P4=""; P5=""; P6="";
|
|
P7=""; P8=""; P9=""; P10=""; P11="";
|
|
|
|
qosdef_validate_priority() {
|
|
uci_load_validate nft-qos default "$1" "$2" \
|
|
'priority_enable:bool:0' \
|
|
'priority_netdev:maxlength(8)'
|
|
}
|
|
|
|
_qosdef_handle_protox() { # <priority> <rule>
|
|
case "$1" in
|
|
-400) P1="$P1""$2";;
|
|
-300) P2="$P2""$2";;
|
|
-225) P3="$P3""$2";;
|
|
-200) P4="$P4""$2";;
|
|
-150) P5="$P5""$2";;
|
|
-100) P6="$P6""$2";;
|
|
0) P7="$P7""$2";;
|
|
50) P8="$P8""$2";;
|
|
100) P9="$P9""$2";;
|
|
225) P10="$P10""$2";;
|
|
300) P11="$P11""$2";;
|
|
esac
|
|
}
|
|
|
|
qosdef_handle_protox() { # <section>
|
|
local proto prio srv
|
|
|
|
config_get proto $1 'protocol'
|
|
config_get prio $1 'priority'
|
|
config_get srv $1 'service'
|
|
|
|
[ -z "$proto" -o \
|
|
-z "$prio" -o \
|
|
-z "$srv" ] && return
|
|
|
|
_qosdef_handle_protox $prio \
|
|
"\t\t$proto dport { $srv } accept\n"
|
|
}
|
|
|
|
qosdef_append_rule_protox() { # <section>
|
|
config_foreach qosdef_handle_protox $1
|
|
qosdef_appendx \
|
|
"${P1}${P2}${P3}${P4}${P5}${P6}${P7}${P8}${P9}${P10}${P11}"
|
|
}
|
|
|
|
qosdef_append_chain_priority() { # <name> <section> <device>
|
|
local name=$1 device=$3
|
|
|
|
qosdef_appendx "\tchain $name {\n"
|
|
qosdef_append_chain_ingress filter $device 0 accept
|
|
qosdef_append_rule_protox $2
|
|
qosdef_appendx "\t}\n"
|
|
}
|
|
|
|
qosdef_remove_priority() {
|
|
qosdef_remove_table netdev nft-qos-priority
|
|
}
|
|
|
|
# init traffic priority
|
|
qosdef_init_priority() {
|
|
local ifname="br-lan"
|
|
|
|
[ "$2" = 0 ] || {
|
|
logger -t nft-qos-priority "validation failed"
|
|
return 1
|
|
}
|
|
|
|
[ $priority_enable -eq 0 ] && return 1
|
|
|
|
case "$priority_netdev" in
|
|
lan) [ "$(uci_get network.lan.type)" != "bridge" ] && {
|
|
network_get_device ifname "$priority_netdev" || \
|
|
ifname="$(uci_get network.lan.ifname)"
|
|
}
|
|
;;
|
|
wan*) network_get_device ifname "$priority_netdev" || \
|
|
ifname="$(uci_get network.$priority_netdev.ifname)"
|
|
;;
|
|
esac
|
|
|
|
qosdef_appendx "table netdev nft-qos-priority {\n"
|
|
qosdef_append_chain_priority filter priority $ifname
|
|
qosdef_appendx "}\n"
|
|
}
|