#!/bin/bash
#
# This script will setup network namespaces SVM1 ("service VM1") and SVM2 so that
# traffic between net1 (to which VM1 is attached) and net2 (to which VM2 is attached)
# goes through SMV1 and SVM2:
#
# VM1-------net1     SVM1 --- SVM2    net2-----VM2
#  .1    11.0.0.                      12.0.0   .1
# 
# Route targets....
#
# net1: :1
# net2: :2
# 
# - chain for traffic from net1 to net2:
# hop12_0: first hop: net1 to SVM1
# hop12_1: second hop: SVM1 to SVM2

as=64512

hop12_0=$as:120
hop12_1=$as:121

##
## - chain for traffic from net2 to net1:
## hop21_0: first hop: net2 to SVM2
## hop21_1: second hop: SVM2 to SVM1

hop21_0=$as:210
hop21_1=$as:211


source $(dirname $0)/generic-functions

clean_start

clean_netns_all net1vm1 svm1 svm2 net2vm2

## 
## VM1:  sur A
##
 
r_a bagpipe-rest-attach --attach --port netns:to-vm1 --network-type ipvpn --vpn-instance-id net1vm1 --ip 11.0.0.1 --rt $as:1 --import-rt $hop12_0



## SVM1: sur B
##               
## [vrf:x1][if:to-svm1-x1]---[x1][netns:svm1][h0]---[to-svm1-h0][vrf:h01]
##                               
## 
## x1:100.0.0.0/24    
## h01:30.0.0.0/24
## h02:40.0.0.0/24
## x2:200.0.0.0/24
 
## attach x1:
 
r_b bagpipe-rest-attach --attach --port netns:to-svm1-x1 --network-type ipvpn --vpn-instance-id x1 --ip 100.0.0.1/24 --netns svm1 --if2vpn x1 \
	--import $as:1 \
	--readv-from-rt $hop12_1 --readv-to-rt $hop12_0

## attach h0:
 
#r_b bagpipe-rest-attach --attach --port netns:to-svm1-h0 --network-type ipvpn --vpn-instance-id h01 --ip 30.0.0.1/24 --netns svm1 --if2vpn h0 \
#	--import-rt $hop12_1 \
#	--readv-from-rt $as:1 --readv-to-rt $hop21_1

r_b bagpipe-rest-attach --attach --port netns:to-svm1-h0 --mac 52:54:00:99:99:99 --network-type ipvpn --vpn-instance-id h01 --ip 30.0.0.1/24 --netns svm1  --if2vpn h0 \
	--import-rt $hop12_1 \

r_b bagpipe-rest-attach --attach --port to-svm1-h0 --mac 52:54:00:99:99:99 --network-type ipvpn --vpn-instance-id h01 --ip 11.0.0.0/24 --advertise-subnet --export-rt $hop21_1 --import-rt $hop12_1

r_b ./setup-cross-routing svm1 x1 100.0.0.254 h0 30.0.0.254



## SVM2: sur A
#
# [vrf:h02][to-svm2-h0]---[h0][netns:svm2][x2]---[if:to-svm2-x2][vrf:x2]
 
## attach h0:
 
#r_a bagpipe-rest-attach --attach --port netns:to-svm2-h0 --network-type ipvpn --vpn-instance-id h02 --ip 40.0.0.1/24 --netns svm2 --if2vpn h0 \
#	--import-rt $hop21_1 \
#	--readv-from-rt $as:2 --readv-to-rt $hop12_1
 
r_a bagpipe-rest-attach --attach --port netns:to-svm2-h0 --mac 52:54:00:99:99:99 --network-type ipvpn --vpn-instance-id h02 --ip 40.0.0.1/24 --netns svm2 --if2vpn h0 \
	--import-rt $hop21_1 \

r_a bagpipe-rest-attach --attach --port to-svm2-h0 --mac 52:54:00:99:99:99 --network-type ipvpn --vpn-instance-id h02 --ip 12.0.0.0/24 --advertise-subnet --export-rt $hop12_1 --import-rt $hop21_1 

## attach x2:
r_a bagpipe-rest-attach --attach --port netns:to-svm2-x2 --network-type ipvpn --vpn-instance-id x2 --ip 200.0.0.1/24 --netns svm2 --if2vpn x2 \
	--import $as:2 \
	--readv-from-rt $hop21_1 --readv-to-rt $hop21_0
 
r_a ./setup-cross-routing svm2 x2 200.0.0.254 h0 40.0.0.254



## VM2:  sur B
## 

r_b bagpipe-rest-attach --attach --port netns:to-vm2 --network-type ipvpn --vpn-instance-id net2vm2 --ip 12.0.0.1 --rt $as:2 --import-rt $hop21_0

#
# Test
#

wait_ready

r_a ip netns exec net1vm1 ping 12.0.0.1 -c 3


r_a bagpipe-looking-glass vpns instances net1vm1 dataplane flows
r_b bagpipe-looking-glass vpns instances x1 dataplane flows
r_b bagpipe-looking-glass vpns instances h01 dataplane flows
r_a bagpipe-looking-glass vpns instances h02 dataplane flows
r_a bagpipe-looking-glass vpns instances x2 dataplane flows
r_b bagpipe-looking-glass vpns instances net2vm2 dataplane flows

r_both bagpipe-looking-glass logs

clean_stop

