#!/bin/sh

. /opt/control.setloki/library/celery.sh

/usr/sbin/modprobe ifb
/usr/sbin/ip link set dev ifb0 up
/usr/sbin/ip link set ifb0 txqlen 4096
/usr/sbin/ip link set dev ifb1 up
/usr/sbin/ip link set ifb1 txqlen 4096

IFACE_NUM=`echo -n ${PPP_IFACE} | tail -c 1`
IFACE_METRIC=$((${IFACE_NUM} + 10))

/usr/sbin/ip route add default via ${PPP_REMOTE} dev ${PPP_IFACE} metric ${IFACE_METRIC}
/usr/sbin/ip route add default via ${PPP_REMOTE} dev ${PPP_IFACE} table ${PPP_IFACE}table
/usr/sbin/ip route add ${PPP_REMOTE} dev ${PPP_IFACE} proto kernel scope link src ${PPP_LOCAL} table ${PPP_IFACE}table
/usr/sbin/ip rule list | grep -wq "from ${PPP_LOCAL} lookup ${PPP_IFACE}table" || /usr/sbin/ip rule add from ${PPP_LOCAL} lookup ${PPP_IFACE}table prio 32700

# egress redirection
/usr/sbin/tc qdisc add dev ${PPP_IFACE} root handle 1: htb
/usr/sbin/tc filter add dev ${PPP_IFACE} parent 1: protocol ip u32 match u32 0 0 action connmark action mirred egress redirect dev ifb0
# ingress redirection
/usr/sbin/tc qdisc add dev ${PPP_IFACE} handle ffff: ingress
/usr/sbin/tc filter add dev ${PPP_IFACE} parent ffff: protocol ip u32 match u32 0 0 action connmark action mirred egress redirect dev ifb1

# call ppp update task from celery to update ppp interface information.
kwargs=$(generate_celery_kwargs "network.ppp_update" '{"iface": "'"${PPP_IFACE}"'", "ppp_local": "'"${PPP_LOCAL}"'", "ppp_remote": "'"${PPP_REMOTE}"'", "network": "'"${NETWORK}"'"}')
/opt/venv3/bin/celery --workdir "/opt/control.setloki" -A tasks.task_manager call network.ppp_update -k "$kwargs"
