From 4d964af1731307e70b11bbd1aa45d996171587b4 Mon Sep 17 00:00:00 2001
From: Pim van Pelt <pim@ipng.nl>
Date: Wed, 31 May 2023 16:07:25 +0000
Subject: [PATCH] Templetize ovs-config.sh and share it between bird and frr

---
 generate                                      |  3 +-
 .../bird/{ovs-config.sh => ovs-config.sh.j2}  |  2 +-
 overlays/frr/ovs-config.sh                    | 79 -------------------
 overlays/frr/ovs-config.sh.j2                 |  1 +
 4 files changed, 4 insertions(+), 81 deletions(-)
 rename overlays/bird/{ovs-config.sh => ovs-config.sh.j2} (98%)
 delete mode 100755 overlays/frr/ovs-config.sh
 create mode 120000 overlays/frr/ovs-config.sh.j2

diff --git a/generate b/generate
index 575bb73..be97ca1 100755
--- a/generate
+++ b/generate
@@ -250,7 +250,8 @@ def main():
       for node_id in range(ncount):
         log.info("Generating for %s node %d" % (node_type, node_id))
         data["node"] = create_node(data["lab"], node_id, node_type)
-        log.debug("node: %s" % data["node"])
+        data["overlay"] = args.overlay
+        log.debug(f"data: {data}")
 
         # Assemble a dictionary of tpl=>fn
         overlay = data["overlays"][args.overlay]
diff --git a/overlays/bird/ovs-config.sh b/overlays/bird/ovs-config.sh.j2
similarity index 98%
rename from overlays/bird/ovs-config.sh
rename to overlays/bird/ovs-config.sh.j2
index b990afe..c68721a 100755
--- a/overlays/bird/ovs-config.sh
+++ b/overlays/bird/ovs-config.sh.j2
@@ -1,6 +1,6 @@
 #!/bin/bash
 #
-# OVS configuration for the `bird` overlay
+# OVS configuration for the `{{ overlay }}` overlay
 
 LAB=${LAB:=0}
 BR=vpplan
diff --git a/overlays/frr/ovs-config.sh b/overlays/frr/ovs-config.sh
deleted file mode 100755
index 5f6962a..0000000
--- a/overlays/frr/ovs-config.sh
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/bash
-#
-# OVS configuration for the `frr` overlay
-
-LAB=${LAB:=0}
-BR=vpplan
-for p in $(ovs-vsctl list-ifaces $BR); do
-  ovs-vsctl set port $p vlan_mode=access
-done
-
-# Uplink is VLAN 10
-ovs-vsctl add port vpp${LAB}-0-0 tag 10
-ovs-vsctl add port uplink tag 10
-
-# Link vpp${LAB}-0 <-> vpp${LAB}-1 in VLAN 20
-ovs-vsctl add port vpp${LAB}-0-1 tag 20
-ovs-vsctl add port vpp${LAB}-1-0 tag 20
-
-# Link vpp${LAB}-1 <-> vpp${LAB}-2 in VLAN 21
-ovs-vsctl add port vpp${LAB}-1-1 tag 21
-ovs-vsctl add port vpp${LAB}-2-0 tag 21
-
-# Link vpp${LAB}-2 <-> vpp${LAB}-3 in VLAN 22
-ovs-vsctl add port vpp${LAB}-2-1 tag 22
-ovs-vsctl add port vpp${LAB}-3-0 tag 22
-
-## Wire host${LAB}-0-[0123] to e2 of all VPP machines
-ovs-vsctl set port vpp${LAB}-0-2 tag=30
-ovs-vsctl set port host${LAB}-0-0 tag=30
-ovs-vsctl set port vpp${LAB}-1-2 tag=31
-ovs-vsctl set port host${LAB}-0-1 tag=31
-ovs-vsctl set port vpp${LAB}-2-2 tag=32
-ovs-vsctl set port host${LAB}-0-2 tag=32
-ovs-vsctl set port vpp${LAB}-3-2 tag=33
-ovs-vsctl set port host${LAB}-0-3 tag=33
-
-## Wire host${LAB}-1-[0123] to e3 of all VPP machines
-ovs-vsctl set port vpp${LAB}-0-3 tag=40
-ovs-vsctl set port host${LAB}-1-0 tag=40
-ovs-vsctl set port vpp${LAB}-1-3 tag=41
-ovs-vsctl set port host${LAB}-1-1 tag=41
-ovs-vsctl set port vpp${LAB}-2-3 tag=42
-ovs-vsctl set port host${LAB}-1-2 tag=42
-ovs-vsctl set port vpp${LAB}-3-3 tag=43
-ovs-vsctl set port host${LAB}-1-3 tag=43
-
-## Wire tap${LAB}-0-0 as 'rx' tap
-MIRROR=mirror-rx
-ovs-vsctl set port tap${LAB}-0-0 vlan_mode=native-tagged
-[ ovs-vsctl list mirror $MIRROR >/dev/null 2>&1 ] || \
-  ovs-vsctl -- --id=@m get mirror $MIRROR -- remove bridge $BR mirrors @m
-ovs-vsctl --id=@m create mirror name=$MIRROR \
-  -- --id=@p get port tap${LAB}-0-0 \
-  -- add bridge $BR mirrors @m \
-  -- set mirror $MIRROR output-port=@p \
-  -- set mirror $MIRROR select_dst_port=[] \
-  -- set mirror $MIRROR select_src_port=[]
-for iface in $(ovs-vsctl list-ports $BR); do
-  [[ $iface == tap* ]] && continue
-  [[ $iface == uplink ]] && continue
-  ovs-vsctl add mirror $MIRROR select_dst_port $(ovs-vsctl get port $iface _uuid)
-done
-
-## Wire tap${LAB}-0-1 as 'tx' tap
-MIRROR=mirror-tx
-ovs-vsctl set port tap${LAB}-0-1 vlan_mode=native-tagged
-[ ovs-vsctl list mirror $MIRROR >/dev/null 2>&1 ] || \
-  ovs-vsctl -- --id=@m get mirror $MIRROR -- remove bridge $BR mirrors @m
-ovs-vsctl --id=@m create mirror name=$MIRROR \
-  -- --id=@p get port tap${LAB}-0-1 \
-  -- add bridge $BR mirrors @m \
-  -- set mirror $MIRROR output-port=@p \
-  -- set mirror $MIRROR select_dst_port=[] \
-  -- set mirror $MIRROR select_src_port=[]
-for iface in $(ovs-vsctl list-ports $BR); do
-  [[ $iface == tap* ]] && continue
-  [[ $iface == uplink ]] && continue
-  ovs-vsctl add mirror $MIRROR select_src_port $(ovs-vsctl get port $iface _uuid)
-done
diff --git a/overlays/frr/ovs-config.sh.j2 b/overlays/frr/ovs-config.sh.j2
new file mode 120000
index 0000000..fad196a
--- /dev/null
+++ b/overlays/frr/ovs-config.sh.j2
@@ -0,0 +1 @@
+../bird/ovs-config.sh.j2
\ No newline at end of file