#!/bin/sh

ipv6_disable_lan_server() {
	uci -q batch <<-EOF >/dev/null
		del dhcp.lan.ra
		del dhcp.lan.ra_slaac
		del dhcp.lan.ra_flags
		del dhcp.lan.dhcpv6
		del dhcp.lan.ndp
EOF
}

ipv6_dns_on() {
	uci -q delete 'dhcp.@dnsmasq[0].filter_aaaa'
}

ipv6_relay_mode() {
	uci -q batch <<-EOF >/dev/null
		del network.wan6.auto

		set dhcp.wan6=dhcp
		set dhcp.wan6.interface='wan6'
		set dhcp.wan6.ignore='1'
		set dhcp.wan6.master='1'
		set dhcp.wan6.ra='relay'
		set dhcp.wan6.dhcpv6='relay'
		set dhcp.wan6.ndp='relay'

		set dhcp.lan.ra='relay'
		del dhcp.lan.ra_slaac
		del dhcp.lan.ra_flags
		set dhcp.lan.dhcpv6='relay'
		set dhcp.lan.ndp='relay'
EOF
	ipv6_dns_on
}

ipv6_pppoe_mode() {
	ipv6_disable_lan_server
	ipv6_dns_on
}

is_lan_gateway() {
	[ "$(uci -q get network.lan.defaultroute)" = "0" ] && return 1
	[ "$(uci -q get network.lan.proto)" = "dhcp" ] && return 0
	[ "$(uci -q get network.lan.proto)" = "static" ] || return 1
	[ -n "$(uci -q get network.lan.gateway)" ]
}

is_wan_pppoe() {
	[ "$(uci -q get network.wan.proto)" = "pppoe" ]
}

if is_lan_gateway; then
	echo "Single-Port Router (LAN Gateway) mode"
	ipv6_pppoe_mode
elif is_wan_pppoe; then
	echo "PPPoE mode"
	ipv6_pppoe_mode
	uci -q delete network.wan.ipv6
else
	echo "DHCP-Client mode"
	ipv6_relay_mode
fi

uci -q batch <<-EOF >/dev/null
	commit dhcp
	commit network
EOF

/etc/init.d/odhcpd reload
/etc/init.d/dnsmasq reload
/etc/init.d/network reload

echo "Done"
