diff --git a/omr-6in4/Makefile b/omr-6in4/Makefile index 82b4114e0..8d9a1b693 100644 --- a/omr-6in4/Makefile +++ b/omr-6in4/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=omr-6in4 -PKG_VERSION:=0.3 +PKG_VERSION:=0.4 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk diff --git a/omr-6in4/files/bin/omr-6in4 b/omr-6in4/files/bin/omr-6in4 new file mode 100755 index 000000000..b494ab9db --- /dev/null +++ b/omr-6in4/files/bin/omr-6in4 @@ -0,0 +1,27 @@ +#!/bin/sh +# Copyright (C) 2018 Ycarus (Yannick Chabanois) + +while true; do + if [ "$(uci -q get glorytun.vpn.enable)" = "1" ]; then + iface=$(uci -q get glorytun.vpn.dev) + elif [ "$(uci -q get mlvpn.general.enable)" = "1" ]; then + iface=$(uci -q get mlvpn.general.interface_name) + elif [ "$(uci -q get openvpn.omr.enabled)" = "1" ]; then + iface=$(uci -q get openvpn.omr.dev) + fi + addr=$(ubus call network.interface.omrvpn status | jsonfilter -q -e '@["ipv4-address"][0].address' | tr -d "\n") + [ -z "$addr" ] && [ -n "$iface" ] && addr=$(ip -4 addr show dev $iface | grep inet | awk '{print $2}' | cut -d/ -f1 | tr -d "\n") + peer=$(ubus call network.interface.omrvpn status | jsonfilter -q -e '@.route[0].nexthop' | tr -d "\n") + [ -z "$peer" ] && [ -n "$iface" ] && peer=$(ip -4 r list dev $iface | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d "\n") + [ -z "$addr" ] && exit 0 + [ -z "$peer" ] && exit 0 + if [ "$addr" != "$(uci -q get network.omr6in4.ipaddr)" ] || [ "$peer" != "$(uci -q get network.omr6in4.peeraddr)" ]; then + uci -q batch <<-EOF + set network.omr6in4.ipaddr=$addr + set network.omr6in4.peeraddr=$peer + EOF + uci -q commit network + ifup omr6in4 + fi + sleep 10 +done \ No newline at end of file diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4 index 74d50eea4..1c20c524d 100755 --- a/omr-6in4/files/etc/init.d/omr-6in4 +++ b/omr-6in4/files/etc/init.d/omr-6in4 @@ -1,33 +1,32 @@ #!/bin/sh /etc/rc.common # Copyright (C) 2018 Ycarus (Yannick Chabanois) +# shellcheck disable=SC2039 +# vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : -START=99 -USE_PROCD=1 +# shellcheck disable=SC2034 +{ + START=99 + STOP=10 + USE_PROCD=1 +} + + +start_service() { + [ "$(sysctl -n net.ipv6.conf.all.disable_ipv6 | tr -d '\n')" = "1" ] && return + procd_open_instance + # shellcheck disable=SC2086 + procd_set_param command /bin/omr-6in4 + procd_set_param limits nofile="51200 51200" + procd_set_param respawn 0 10 0 + procd_set_param stderr 1 + procd_close_instance +} service_triggers() { procd_add_interface_trigger "omrvpn" } reload_service() { - if [ "$(uci -q get glorytun.vpn.enable)" = "1" ]; then - iface=$(uci -q get glorytun.vpn.dev) - elif [ "$(uci -q get mlvpn.general.enable)" = "1" ]; then - iface=$(uci -q get mlvpn.general.interface_name) - elif [ "$(uci -q get openvpn.omr.enabled)" = "1" ]; then - iface=$(uci -q get openvpn.omr.dev) - fi - addr=$(ubus call network.interface.omrvpn status | jsonfilter -q -e '@["ipv4-address"][0].address' | tr -d "\n") - [ -z "$addr" ] && [ -n "$iface" ] && addr=$(ip -4 addr show dev $iface | grep inet | awk '{print $2}' | cut -d/ -f1 | tr -d "\n") - peer=$(ubus call network.interface.omrvpn status | jsonfilter -q -e '@.route[0].nexthop' | tr -d "\n") - [ -z "$peer" ] && [ -n "$iface" ] && peer=$(ip -4 r list dev $iface | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d "\n") - [ -z "$addr" ] && exit 0 - [ -z "$peer" ] && exit 0 - if [ "$addr" != "$(uci -q get network.omr6in4.ipaddr)" ] || [ "$peer" != "$(uci -q get network.omr6in4.peeraddr)" ]; then - uci -q batch <<-EOF - set network.omr6in4.ipaddr=$addr - set network.omr6in4.peeraddr=$peer - EOF - uci -q commit network - ifup omr6in4 - fi -} \ No newline at end of file + stop + start +}