#!/bin/bash

sumdev_disable(){
	if pgrep sumdev > /dev/null 2>&1; then
		systemctl stop sumdev
		systemctl disable sumdev
		echo "sumdev disabled"
		sumnetcfg_bak
	else
		echo "sumdev no enabled"
	fi
}


sumdev_enable(){
	systemctl enable sumdev
	systemctl restart sumdev
	if [[ -f /etc/sumnet/sumnet.json ]]; then
		sumnetcfg_restore
	fi
	echo "sumdev enabled"
}

ip_rule_del_16(){
		while true; do
			if ip rule show | grep -q "lookup 16"; then
				sudo ip rule del lookup 16
			else
				break
			fi
		done
		echo "lookup 16 is removed!"
		/opt/sumtrd/bin/bpftool net

}

sumnetcfg_bak(){
	if [[ -f /etc/sumnet/sumnet.json ]]; then
		if [[ ! -f /etc/sumnet/sumnet.json.bak ]]; then
			cp /etc/sumnet/sumnet.json /etc/sumnet/sumnet.json.bak
 			cp /etc/sumnet/sumnet.json /etc/sumnet/sumnet.json.bak.nodev
			echo "sumnetcfg is bak"
		fi
                sumnetcfg_apply
	else
                ip_rule_del_16
	fi
}

set_sumnetcfg_nodev(){
#The server does not need to disable aggregation.
	if jq -e '.network.bridges."br-switch0".routes' /etc/sumnet/sumnet.json.bak.nodev > /dev/null; then
		jq '.network.bridges."br-switch0".routes1 = .network.bridges."br-switch0".routes | del(.network.bridges."br-switch0".routes) | (.network.bridges."br-switch0"."routing-policy1" = .network.bridges."br-switch0"."routing-policy" | del(.network.bridges."br-switch0"."routing-policy")) | (.network.bridges."br-lan0"."routes1" = .network.bridges."br-lan0".routes | del(.network.bridges."br-lan0".routes)) | (.network.bridges."br-lan0"."routing-policy1" = .network.bridges."br-lan0"."routing-policy" | del(.network.bridges."br-lan0"."routing-policy")) | (.network.veths.tun0.route1 = .network.veths.tun0.route | del(.network.veths.tun0.route)) | (.network.veths.tun0."routing-policies1" = .network.veths.tun0."routing-policies" | del(.network.veths.tun0."routing-policies"))' /etc/sumnet/sumnet.json.bak.nodev > /etc/sumnet/sumnet.json.bak.nodev1
		echo "/etc/sumnet/sumnet.json.bak.nodev1 done."
	else
		echo ".network.bridges.\"br-switch0\.routes does not exist."
	fi
}

sumnetcfg_apply(){
	set_sumnetcfg_nodev
	cp  /etc/sumnet/sumnet.json.bak.nodev1 /etc/sumnet/sumnet.json
	sumnet generate
	sumnet apply
	echo "sumnet apply success"
        ip_rule_del_16
	ip rule
}


sumnetcfg_restore(){
	cp /etc/sumnet/sumnet.json.bak /etc/sumnet/sumnet.json
	sumnet generate
	sumnet apply
	echo "sumnet restored"
	ip rule
}

sumdev_disable
#sumdev_enable
