1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
#!/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 ./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
## 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
|