#!/bin/sh

# shellcheck disable=SC1091
# shellcheck disable=SC2086

. /lib/functions/guard.sh
guard "olsrd"

# reset olsrd config
uci import olsrd <<EOF
EOF

# add txtinfo plugin - needed for collectd-mod-txtinfo
PLUGIN="$(uci add olsrd LoadPlugin)"
uci set olsrd.$PLUGIN.accept=0.0.0.0
uci set olsrd.$PLUGIN.library=olsrd_txtinfo
uci set olsrd.$PLUGIN.port=2006

# add arprefresh plugin
PLUGIN="$(uci add olsrd LoadPlugin)"
uci set olsrd.$PLUGIN.library=olsrd_arprefresh

# add nameservice plugin
PLUGIN="$(uci add olsrd LoadPlugin)"
uci set olsrd.$PLUGIN.library=olsrd_nameservice
uci set olsrd.$PLUGIN.suffix=.olsr
uci set olsrd.$PLUGIN.hosts_file=/tmp/hosts/olsr
uci set olsrd.$PLUGIN.latlon_file=/var/run/latlon.js
uci set olsrd.$PLUGIN.services_file=/var/etc/services.olsr

# add jsoninfo plugin
PLUGIN="$(uci add olsrd LoadPlugin)"
uci set olsrd.$PLUGIN.accept=0.0.0.0
uci set olsrd.$PLUGIN.library=olsrd_jsoninfo
uci set olsrd.$PLUGIN.ignore=0

# add dyngw plain plugin - it is ipv4 only
PLUGIN="$(uci add olsrd LoadPlugin)"
uci set olsrd.$PLUGIN.library=olsrd_dyn_gw
uci add_list olsrd.$PLUGIN.Ping=9.9.9.10        # Quad9 unfiltered
uci add_list olsrd.$PLUGIN.Ping=194.150.168.168 # dns.as250.net
uci add_list olsrd.$PLUGIN.Ping=149.112.112.10  # Quad9 secondary
uci set olsrd.$PLUGIN.ignore=0

# set olsrd defaults
OLSRD="$(uci add olsrd olsrd)"
uci set olsrd.$OLSRD.IpVersion=4
uci set olsrd.$OLSRD.FIBMetric=flat
uci set olsrd.$OLSRD.AllowNoInt=yes
uci set olsrd.$OLSRD.TcRedundancy=2
uci set olsrd.$OLSRD.NatThreshold=0.75
uci set olsrd.$OLSRD.LinkQualityAlgorithm=etx_ff
uci set olsrd.$OLSRD.SmartGateway=yes
uci set olsrd.$OLSRD.SmartGatewayThreshold=50
uci set olsrd.$OLSRD.Pollrate=0.025
uci set olsrd.$OLSRD.RtTable=111
uci set olsrd.$OLSRD.RtTableDefault=112
uci set olsrd.$OLSRD.RtTableTunnel=113
uci set olsrd.$OLSRD.RtTableTunnelPriority=100000
uci set olsrd.$OLSRD.RtTableDefaultOlsrPriority=20000

# set InterfaceDefaults parameters
INTERFACES="$(uci add olsrd InterfaceDefaults)"
uci set olsrd.$INTERFACES.MidValidityTime=500.0
uci set olsrd.$INTERFACES.TcInterval=2.0
uci set olsrd.$INTERFACES.HnaValidityTime=125.0
uci set olsrd.$INTERFACES.HelloValidityTime=125.0
uci set olsrd.$INTERFACES.TcValidityTime=500.0
uci set olsrd.$INTERFACES.Ip4Broadcast=255.255.255.255
uci set olsrd.$INTERFACES.MidInterval=25.0
uci set olsrd.$INTERFACES.HelloInterval=3.0
uci set olsrd.$INTERFACES.HnaInterval=10.0

# set procd parameters
uci set olsrd.procd=procd
uci set olsrd.procd.respawn_threshold=3600
uci set olsrd.procd.respawn_timeout=15
uci set olsrd.procd.respawn_retry=0

uci commit olsrd

# add routing tables
tables="/etc/iproute2/rt_tables"
test -d /etc/iproute2/ || mkdir -p /etc/iproute2/
grep -q "111 olsr" $tables || echo "111 olsr" >>$tables
grep -q "112 olsr-default" $tables || echo "112 olsr-default" >>$tables
grep -q "113 olsr-tunnel" $tables || echo "113 olsr-tunnel" >>$tables
