Compare commits

...

2 Commits

Author SHA1 Message Date
Jakob Olsson
ca3791a2f1 add script-trigger pkg to reload scripts on new ubusx client 2019-05-09 15:42:38 +02:00
Jakob Olsson
1c659d10b6 easy-qos: update iptables to add repeated addresses preemtively 2019-05-09 14:21:20 +02:00
4 changed files with 115 additions and 12 deletions

View File

@@ -1,5 +1,6 @@
#!/bin/sh /etc/rc.common
. /lib/functions/iopsys-repeated-macs.sh
. /usr/share/libubox/jshn.sh
START=99
@@ -79,13 +80,13 @@ map_client_entries() {
# Find the IP of a corresponding mac from arp table
get_ipaddress() {
local clients ip mac host
local clients ip="" mac host
json_load "$(cat ${CLIENT_LIST})"
json_get_keys keys
# jshn seems a bit iffy on having : in key, replace by _
json_select "${1//:/_}"
json_select "${1//:/_}" 2 > /dev/null
json_get_var ip ip
echo "$ip"
@@ -141,7 +142,24 @@ create_rule() {
fi
cmd="-s ${src_ip} $cmd"
check_and_create ${cmd}
check_and_create ${cmd}
}
create_rules() {
proto=$1; shift
mac=$1; shift
prio_num=$1; shift
port_list=$1;
ip=$(get_ipaddress $mac)
[ -n "$ip" ] || return
if [ "$proto" == "none" ]; then
create_rule tcp $ip $prio_num $port_list
create_rule udp $ip $prio_num $port_list
else
create_rule $proto $ip $prio_num $port_list
fi
}
manage_rule() {
@@ -154,17 +172,15 @@ manage_rule() {
}
prio_num=$(get_priority ${priority})
ip=$(get_ipaddress ${macaddr})
port_list=$(echo ${port}|sed 's/ /,/g')
if [ -n "${ip}" -a -n "${prio_num}" ]; then
if [ "${proto}" == "none" ]; then
create_rule tcp ${ip} ${prio_num} ${port_list}
create_rule udp ${ip} ${prio_num} ${port_list}
else
create_rule ${proto} ${ip} ${prio_num} ${port_list}
fi
fi
[ -n "${prio_num}" ] || return
create_rules ${proto} ${macaddr} ${prio_num} ${port_list}
repeated_macs=$(mac_to_repeated ${macaddr})
for mac in $repeated_macs; do
create_rules ${proto} $mac ${prio_num} ${port_list}
done
}
reload_service() {

35
script-trigger/Makefile Normal file
View File

@@ -0,0 +1,35 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=script-trigger
PKG_VERSION:=1.0
PKG_RELEASE:=0
include $(INCLUDE_DIR)/package.mk
define Package/script-trigger
SECTION:=net
CATEGORY:=Network
TITLE:=Script Trigger
endef
define Package/script-trigger/description
This package will install a script listening for ubusx object getting
added in order to reload the firewall and easy-qos script
endef
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./files/* $(PKG_BUILD_DIR)/
endef
define Build/Compile
endef
define Package/script-trigger/install
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_DIR) $(1)/usr/bin
$(CP) ./files/etc/init.d/script-trigger $(1)/etc/init.d/
$(CP) ./files/usr/bin/script-trigger $(1)/usr/bin/
endef
$(eval $(call BuildPackage,script-trigger))

View File

@@ -0,0 +1,28 @@
#!/bin/sh /etc/rc.common
START=14
STOP=96
USE_PROCD=1
NAME=script-trigger
start_service() {
procd_open_instance
procd_set_param command "/usr/bin/script-trigger"
procd_set_param respawn
procd_close_instance
}
stop() {
#stop_service() is called after procd killed the service
killall -9 script-trigger
}
service_triggers()
{
echo ;
}
reload_service() {
echo ;
}

View File

@@ -0,0 +1,24 @@
#!/bin/sh
. /usr/share/libubox/jshn.sh
while true ; do
ubus listen ubus.object.add | \
while read event ; do
json_load "$event"
json_get_keys keys
for k in $keys; do
case $k in
*add)
json_select $k
json_get_var path path
if [ -n "$(echo $path | grep [0-9].[0-9].[0-9].[0-9]/router.system)" ]; then
/etc/init.d/firewall restart
/etc/init.d/easy-qos restart
fi
;;
esac
done
done
done