#!/bin/sh /etc/rc.common # Copyright (C) 2018 Ycarus (Yannick Chabanois) # shellcheck disable=SC2039 # vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : # shellcheck disable=SC2034 { START=99 STOP=10 USE_PROCD=1 } set_shadowsocks_address() { uci -q set shadowsocks-libev.$1.local_address="$2" } set_ipv6_state() { local disable_ipv6="$(uci -q get openmptcprouter.settings.disable_ipv6)" [ -z "$disable_ipv6" ] && disable_ipv6="1" sysctl -qw net.ipv6.conf.all.disable_ipv6=$disable_ipv6 sed -i "s:^net.ipv6.conf.all.disable_ipv6=[0-9]*:net.ipv6.conf.all.disable_ipv6=$disable_ipv6:" /etc/sysctl.d/zzz_openmptcprouter.conf uci -q batch <<-EOF >/dev/null set firewall.@defaults[0].disable_ipv6=$disable_ipv6 commit firewall EOF if [ "$disable_ipv6" == "1" ]; then logger -t "omr-6in4" "Disable IPv6" uci -q batch <<-EOF >/dev/null set dhcp.lan.ra_default="0" set network.lan.ipv6="0" delete network.lan.ipv6 delete dhcp.lan.dhcpv6 delete dhcp.lan.ra delete dhcp.lan.ra_default delete dhcp.lan.ra_management delete dhcp.lan.ra_preference EOF config_load shadowsocks-libev config_foreach set_shadowsocks_address ss_redir "0.0.0.0" else logger -t "omr-6in4" "Enable IPv6" uci -q batch <<-EOF >/dev/null set dhcp.lan.dhcpv6="server" set dhcp.lan.ra="server" set dhcp.lan.ra_default="1" set dhcp.lan.ra_preference="high" set dhcp.lan.ra_management="1" set network.lan.ipv6="1" set network.lan.delegate="0" EOF config_load shadowsocks-libev config_foreach set_shadowsocks_address ss_redir "::" fi uci -q batch <<-EOF >/dev/null commit network commit dhcp commit shadowsocks-libev EOF /etc/init.d/odhcpd restart } start_service() { [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "$(sysctl -n net.ipv6.conf.all.disable_ipv6)" ] && set_ipv6_state [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" = "1" ] && { ifdown omr6in4 return } ifup omr6in4 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() { stop start }