#!/bin/sh

THIS_UPLINKNAME="tunnelberlin_tunneldigger"

. /lib/functions/freifunk-berlin-network.sh
. /lib/functions/guard.sh
. /lib/functions/system.sh

# always set correct masquerading, regardless of guard
uci set firewall.zone_ffuplink.masq=1
uci commit firewall

current_preset=$(uci get ffberlin-uplink.preset.current)
if [ ${current_preset} != ${THIS_UPLINKNAME} ]; then
    if [ ${current_preset} != "undefined" ]; then
        # when the uplink-preset has changed, recreate remember the preset we are coming from
        # and prepare for reinit of the relevant settings via freifunk-berlin-ffuplink-defaults
        # uci-defaults
        logger -t "ffuplink" "uplink-preset has been changed."
        uci set ffberlin-uplink.preset.previous=${current_preset}
        create_ffuplink
    fi
    uci set ffberlin-uplink.preset.current=${THIS_UPLINKNAME}
fi
# set set auth-type required for this uplink-type, e.g. for freifunk-wizard
uci set ffberlin-uplink.uplink.auth=none

macaddr=$(uci -q get ffberlin-uplink.uplink.macaddr)
if [ -z "$macaddr" ]; then
    macaddr=$(generate_random_mac_hex "fe")
    uci set ffberlin-uplink.uplink.macaddr=$macaddr
fi

uci commit ffberlin-uplink

guard "tunnelberlin_tunneldigger"

uci delete network.ffuplink_dev
uci set network.ffuplink_dev=device
uci set network.ffuplink_dev.name=ffuplink
uci set network.ffuplink_dev.macaddr=$macaddr
uci commit network.ffuplink_dev

uci set network.ffuplink.proto=dhcp
uci commit network.ffuplink

# tunneldigger setup
UUID=$(uci -q get tunneldigger.ffuplink.uuid)
if [ $? -eq 1 ]; then
    UUID=$macaddr
    for _byte in 7 8 9 10; do
        UUID=$UUID$(dd if=/dev/urandom bs=1 count=1 2>/dev/null | hexdump -e '1/1 ":%02x"')
    done
fi

uci delete tunneldigger.ffuplink
uci set tunneldigger.ffuplink=broker
# Remove old address list in excahange with srv
uci -q delete tunneldigger.ffuplink.address
uci set tunneldigger.ffuplink.srv='_tunnel._udp.berlin.freifunk.net'
uci set tunneldigger.ffuplink.uuid=$UUID
uci set tunneldigger.ffuplink.interface=ffuplink
uci set tunneldigger.ffuplink.broker_selection=usage
uci set tunneldigger.ffuplink.bind_interface=wan
uci set tunneldigger.ffuplink.enabled=1
uci commit tunneldigger
