#!/bin/bash

# Copyright 2017-present Open Networking Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

function mac_to_iface {
    MAC=$1
    ifconfig|grep $MAC| awk '{print $1}'|grep -v '\.'
}

iptables -L > /dev/null
ip6tables -L > /dev/null

STAG={{ s_tags[0] }}
CTAG={{ c_tags[0] }}
VSG=vsg-$STAG-$CTAG

docker inspect $VSG > /dev/null 2>&1
if [ "$?" == 1 ]
then
    docker pull {{ docker_remote_image_name }}
    docker run -d --name=$VSG --privileged=true --net=none \
    -v /var/container_volumes/$VSG/mount:/mount:ro \
    -v /var/container_volumes/$VSG/etc/dnsmasq.d:/etc/dnsmasq.d:ro \
    -v /var/container_volumes/$VSG/etc/service/message:/etc/service/message \
    -v /var/container_volumes/$VSG/usr/local/sbin:/usr/local/sbin:ro \
    {{ docker_local_image_name }}
else
    docker start $VSG
fi

# Set up networking via pipework
WAN_IFACE=br-wan
docker exec $VSG ifconfig eth0 >> /dev/null || pipework $WAN_IFACE -i eth0 $VSG {{ wan_container_ip }}/{{ wan_container_netbits }}@{{ wan_container_gateway_ip }} {{ wan_container_mac }}

LAN_IFACE=eth0
ifconfig $LAN_IFACE >> /dev/null
if [ "$?" == 0 ]
then
    ifconfig $LAN_IFACE.$STAG >> /dev/null || ip link add link $LAN_IFACE name $LAN_IFACE.$STAG type vlan id $STAG
    ifconfig $LAN_IFACE.$STAG up
    docker exec $VSG ifconfig eth1 >> /dev/null || pipework $LAN_IFACE.$STAG -i eth1 $VSG 192.168.0.1/24 @$CTAG
fi

#HPC_IFACE=$( mac_to_iface {{ hpc_client_mac }} )
#docker exec $VSG ifconfig eth2 >> /dev/null || pipework $HPC_IFACE -i eth2 $VSG {{ hpc_client_ip }}/24

# Make sure VM's eth0 (hpc_client) has no IP address
#ifconfig $HPC_IFACE 0.0.0.0

# Attach to container
docker start -a $VSG
