#!/bin/bash -x
#
# Copyright 2019-present Open Networking Foundation
#
# SPDX-License-Identifier: Apache-2.0

set -o errexit
set -o pipefail
set -o nounset

exec 3>&1
exec &>>/var/log/simple-ovs-cni.log

PATH="$CNI_PATH:$(dirname "${BASH_SOURCE[0]}"):$PATH"
CNI_CONF=$(cat /dev/stdin)

get_bridge() {
	echo "br-$(echo $CNI_CONF | jq -r '.name')"
}

ipam() {
	local plugin=$(echo $CNI_CONF | jq -r '.ipam.type')
	local res=$(echo $"$CNI_CONF" | "$plugin" | jq -c '.')
	echo $res
}

add_br_and_port() {
	mkdir -p /var/run/netns/
        ln -sfT $CNI_NETNS /var/run/netns/$CNI_CONTAINERID

	local bridge=$(get_bridge)
	local ip=$1

	ovs-vsctl --may-exist add-br $bridge
	ovs-vsctl add-port $bridge $CNI_IFNAME -- set Interface $CNI_IFNAME type=internal

	ip link set $CNI_IFNAME netns $CNI_CONTAINERID
        ip netns exec $CNI_CONTAINERID ip addr add $ip dev $CNI_IFNAME
        ip netns exec $CNI_CONTAINERID ip link set $CNI_IFNAME up
}

delete_br_and_port() {
	local bridge="br-$(echo $CNI_CONF | jq -r '.name')"
	ovs-vsctl del-port $CNI_IFNAME
	if [ -z "$(ovs-vsctl list-ports $bridge)" ]; then
		ovs-vsctl del-br $bridge
	fi
}

case $CNI_COMMAND in
ADD)
	res=$(ipam)
	ip=$(echo $res | jq -r '.ips[0].address')
	add_br_and_port $ip
        echo '{"cniVersion":"0.3.1"}' | jq -c --arg ip $ip '.ips[0].address = $ip' >&3
	;;
DEL)
	set +o errexit
	ipam
	delete_br_and_port
	set -o errexit
	;;
*)
	echo "CNI_COMMAND=[ADD|DEL] only supported"
	exit 1
	;;
esac
