From 59aa12ab87303dd230e71337df22e096eade54d8 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 19 Jun 2023 17:16:14 +0000
Subject: [PATCH] Hackfest:

- Reorganized Hackfest#1 descriptors to new sub-folder
- Added descriptors for Hackfest#2
- Minor corrections in
---
 hackfest/containerlab/commands.txt            |  50 +++--
 .../{ => hackfest1}/context-topology.json     |   0
 .../{ => hackfest1}/device-all.json           |   0
 .../device-netconf-openconfig.json            |   0
 .../{ => hackfest1}/device-tapi-ols.json      |   0
 .../{ => hackfest1}/links.json                |   0
 .../{ => hackfest1}/service-l3vpn.json        |   0
 .../hackfest2/emulated-topology.json          | 210 ++++++++++++++++++
 .../hackfest2/emulated-topology.png           | Bin 0 -> 41576 bytes
 .../tfs-descriptors/hackfest2/l3-service.json |  44 ++++
 10 files changed, 282 insertions(+), 22 deletions(-)
 rename hackfest/tfs-descriptors/{ => hackfest1}/context-topology.json (100%)
 rename hackfest/tfs-descriptors/{ => hackfest1}/device-all.json (100%)
 rename hackfest/tfs-descriptors/{ => hackfest1}/device-netconf-openconfig.json (100%)
 rename hackfest/tfs-descriptors/{ => hackfest1}/device-tapi-ols.json (100%)
 rename hackfest/tfs-descriptors/{ => hackfest1}/links.json (100%)
 rename hackfest/tfs-descriptors/{ => hackfest1}/service-l3vpn.json (100%)
 create mode 100644 hackfest/tfs-descriptors/hackfest2/emulated-topology.json
 create mode 100644 hackfest/tfs-descriptors/hackfest2/emulated-topology.png
 create mode 100644 hackfest/tfs-descriptors/hackfest2/l3-service.json

diff --git a/hackfest/containerlab/commands.txt b/hackfest/containerlab/commands.txt
index c6af3341d..18c629c0a 100644
--- a/hackfest/containerlab/commands.txt
+++ b/hackfest/containerlab/commands.txt
@@ -24,12 +24,38 @@ $ sudo containerlab deploy --topo tfs-scenario.clab.yml
 ## Access SR Bash
 $ docker exec -it clab-tfs-scenario-srl1 bash
 
-## Acess SR CLI
+## Access SR CLI
 $ docker exec -it clab-tfs-scenario-srl1 sr_cli
 
 ## Destroy scenario
 $ sudo containerlab destroy --topo tfs-scenario.clab.yml
 
+
+## Enable OpenConfig data models and set as default:
+$ docker exec -it clab-tfs-scenario-srl1 sr_cli
+# enter candidate
+# system management openconfig admin-state enable
+# system gnmi-server network-instance mgmt yang-models openconfig
+# commit stay
+# quit
+
+
+# Configure containerlab clients
+docker exec -it clab-tfs-scenario-client1 bash
+    ip address add 172.16.1.10/24 dev eth1
+    ip route add 172.16.2.0/24 via 172.16.1.1
+
+    ping 172.16.2.1 or 172.16.2.10
+
+docker exec -it clab-tfs-scenario-client2 bash
+    ip address add 172.16.2.10/24 dev eth1
+    ip route add 172.16.1.0/24 via 172.16.2.1
+
+    ping 172.16.1.1 or 172.16.1.10
+
+
+
+
 ## Install gNMIc
 $ sudo bash -c "$(curl -sL https://get-gnmic.kmrd.dev)"
 
@@ -52,13 +78,6 @@ $ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify -e json_ietf s
 $ssh admin@clab-srlinux-srl1
 
 
-## Enable OpenConfig data models and set as default:
-$ docker exec -it clab-tfs-scenario-srl1 sr_cli
-# enter candidate
-# system management openconfig admin-state enable
-# system gnmi-server network-instance mgmt yang-models openconfig
-# commit stay
-# quit
 
 
 # Check configurations done:
@@ -76,18 +95,5 @@ gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set -
 gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/interfaces/interface[name=ethernet-1/1]/subinterfaces/subinterface[index=0]'
 gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/interfaces/interface[name=ethernet-1/2]/subinterfaces/subinterface[index=0]'
 
-# Run driver in standalone mode
+# Run gNMI Driver in standalone mode (advanced)
 PYTHONPATH=./src python -m src.device.tests.test_gnmi
-
-# Configure clients
-docker exec -it clab-tfs-scenario-client1 bash
-    ip address add 172.16.1.10/24 dev eth1
-    ip route add 172.16.2.0/24 via 172.16.1.1
-
-    ping 172.16.2.1 or 172.16.2.10
-
-docker exec -it clab-tfs-scenario-client2 bash
-    ip address add 172.16.2.10/24 dev eth1
-    ip route add 172.16.1.0/24 via 172.16.2.1
-
-    ping 172.16.1.1 or 172.16.1.10
diff --git a/hackfest/tfs-descriptors/context-topology.json b/hackfest/tfs-descriptors/hackfest1/context-topology.json
similarity index 100%
rename from hackfest/tfs-descriptors/context-topology.json
rename to hackfest/tfs-descriptors/hackfest1/context-topology.json
diff --git a/hackfest/tfs-descriptors/device-all.json b/hackfest/tfs-descriptors/hackfest1/device-all.json
similarity index 100%
rename from hackfest/tfs-descriptors/device-all.json
rename to hackfest/tfs-descriptors/hackfest1/device-all.json
diff --git a/hackfest/tfs-descriptors/device-netconf-openconfig.json b/hackfest/tfs-descriptors/hackfest1/device-netconf-openconfig.json
similarity index 100%
rename from hackfest/tfs-descriptors/device-netconf-openconfig.json
rename to hackfest/tfs-descriptors/hackfest1/device-netconf-openconfig.json
diff --git a/hackfest/tfs-descriptors/device-tapi-ols.json b/hackfest/tfs-descriptors/hackfest1/device-tapi-ols.json
similarity index 100%
rename from hackfest/tfs-descriptors/device-tapi-ols.json
rename to hackfest/tfs-descriptors/hackfest1/device-tapi-ols.json
diff --git a/hackfest/tfs-descriptors/links.json b/hackfest/tfs-descriptors/hackfest1/links.json
similarity index 100%
rename from hackfest/tfs-descriptors/links.json
rename to hackfest/tfs-descriptors/hackfest1/links.json
diff --git a/hackfest/tfs-descriptors/service-l3vpn.json b/hackfest/tfs-descriptors/hackfest1/service-l3vpn.json
similarity index 100%
rename from hackfest/tfs-descriptors/service-l3vpn.json
rename to hackfest/tfs-descriptors/hackfest1/service-l3vpn.json
diff --git a/hackfest/tfs-descriptors/hackfest2/emulated-topology.json b/hackfest/tfs-descriptors/hackfest2/emulated-topology.json
new file mode 100644
index 000000000..6885c7d90
--- /dev/null
+++ b/hackfest/tfs-descriptors/hackfest2/emulated-topology.json
@@ -0,0 +1,210 @@
+{
+    "contexts": [
+        {"context_id": {"context_uuid": {"uuid": "admin"}}}
+    ],
+    "topologies": [
+        {"topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}}}
+    ],
+    "devices": [
+        {
+            "device_id": {"device_uuid": {"uuid": "R1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 1, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/1"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/2"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/3"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/4"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/5"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/6"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/1"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/2"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/3"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 1, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/1"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/2"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/3"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/4"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/5"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/6"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/1"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/2"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/3"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R3"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 1, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/1"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/2"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/3"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/4"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/5"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/6"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/1"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/2"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/3"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R4"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 1, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/1"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/2"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/3"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/4"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/5"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/6"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/1"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/2"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/3"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R5"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 1, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/1"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/2"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/3"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/4"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/5"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/6"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/1"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/2"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/3"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R6"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 1, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/1"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/2"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/3"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/4"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/5"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/6"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/1"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/2"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/3"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R7"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 1, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/1"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/2"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "1/3"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/1"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/2"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/3"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/4"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/5"},
+                    {"sample_types": [101, 102, 201, 202], "type": "copper", "uuid": "2/6"}
+                ]}}}
+            ]}
+        }
+    ],
+    "links": [
+        {"link_id": {"link_uuid": {"uuid": "R1==R2"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "2/1"}},
+            {"device_id": {"device_uuid": {"uuid": "R2"}}, "endpoint_uuid": {"uuid": "2/2"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R1==R6"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "2/2"}},
+            {"device_id": {"device_uuid": {"uuid": "R6"}}, "endpoint_uuid": {"uuid": "2/1"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R1==R7"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "2/3"}},
+            {"device_id": {"device_uuid": {"uuid": "R7"}}, "endpoint_uuid": {"uuid": "2/1"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R2==R1"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R2"}}, "endpoint_uuid": {"uuid": "2/2"}},
+            {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "2/1"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R2==R3"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R2"}}, "endpoint_uuid": {"uuid": "2/1"}},
+            {"device_id": {"device_uuid": {"uuid": "R3"}}, "endpoint_uuid": {"uuid": "2/2"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R3==R2"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R3"}}, "endpoint_uuid": {"uuid": "2/2"}},
+            {"device_id": {"device_uuid": {"uuid": "R2"}}, "endpoint_uuid": {"uuid": "2/1"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R3==R4"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R3"}}, "endpoint_uuid": {"uuid": "2/1"}},
+            {"device_id": {"device_uuid": {"uuid": "R4"}}, "endpoint_uuid": {"uuid": "2/2"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R3==R7"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R3"}}, "endpoint_uuid": {"uuid": "2/3"}},
+            {"device_id": {"device_uuid": {"uuid": "R7"}}, "endpoint_uuid": {"uuid": "2/3"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R4==R3"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R4"}}, "endpoint_uuid": {"uuid": "2/2"}},
+            {"device_id": {"device_uuid": {"uuid": "R3"}}, "endpoint_uuid": {"uuid": "2/1"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R4==R5"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R4"}}, "endpoint_uuid": {"uuid": "2/1"}},
+            {"device_id": {"device_uuid": {"uuid": "R5"}}, "endpoint_uuid": {"uuid": "2/2"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R5==R4"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R5"}}, "endpoint_uuid": {"uuid": "2/2"}},
+            {"device_id": {"device_uuid": {"uuid": "R4"}}, "endpoint_uuid": {"uuid": "2/1"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R5==R6"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R5"}}, "endpoint_uuid": {"uuid": "2/1"}},
+            {"device_id": {"device_uuid": {"uuid": "R6"}}, "endpoint_uuid": {"uuid": "2/2"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R5==R7"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R5"}}, "endpoint_uuid": {"uuid": "2/3"}},
+            {"device_id": {"device_uuid": {"uuid": "R7"}}, "endpoint_uuid": {"uuid": "2/5"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R6==R1"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R6"}}, "endpoint_uuid": {"uuid": "2/1"}},
+            {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "2/2"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R6==R5"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R6"}}, "endpoint_uuid": {"uuid": "2/2"}},
+            {"device_id": {"device_uuid": {"uuid": "R5"}}, "endpoint_uuid": {"uuid": "2/1"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R7==R1"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R7"}}, "endpoint_uuid": {"uuid": "2/1"}},
+            {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "2/3"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R7==R3"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R7"}}, "endpoint_uuid": {"uuid": "2/3"}},
+            {"device_id": {"device_uuid": {"uuid": "R3"}}, "endpoint_uuid": {"uuid": "2/3"}}
+        ]},
+        {"link_id": {"link_uuid": {"uuid": "R7==R5"}}, "link_endpoint_ids": [
+            {"device_id": {"device_uuid": {"uuid": "R7"}}, "endpoint_uuid": {"uuid": "2/5"}},
+            {"device_id": {"device_uuid": {"uuid": "R5"}}, "endpoint_uuid": {"uuid": "2/3"}}
+        ]}
+    ]
+}
diff --git a/hackfest/tfs-descriptors/hackfest2/emulated-topology.png b/hackfest/tfs-descriptors/hackfest2/emulated-topology.png
new file mode 100644
index 0000000000000000000000000000000000000000..e8684e825cd8a92d58c58c785b45203f7b0abee2
GIT binary patch
literal 41576
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
U?ScPF@)Ydbb3iLY<B0G70y#xG8UO$Q

literal 0
HcmV?d00001

diff --git a/hackfest/tfs-descriptors/hackfest2/l3-service.json b/hackfest/tfs-descriptors/hackfest2/l3-service.json
new file mode 100644
index 000000000..540d3a7a6
--- /dev/null
+++ b/hackfest/tfs-descriptors/hackfest2/l3-service.json
@@ -0,0 +1,44 @@
+{
+    "services": [
+        {
+            "service_id": {
+                "context_id": {"context_uuid": {"uuid": "admin"}},
+                "service_uuid": {"uuid": "l3-service"}
+            },
+            "service_type": 1,
+            "service_status": {"service_status": 1},
+            "service_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "R4"}}, "endpoint_uuid": {"uuid": "1/2"}}
+            ],
+            "service_constraints": [
+                {"custom": {"constraint_type": "bandwidth[gbps]", "constraint_value": "10.0"}},
+                {"custom": {"constraint_type": "latency[ms]", "constraint_value": "15.2"}}
+            ],
+            "service_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "/settings", "resource_value": {
+                    "address_families": ["IPV4"],
+                    "bgp_as": 65000,
+                    "bgp_route_target": "65000:333",
+                    "mtu": 1512
+                }}},
+                {"action": 1, "custom": {"resource_key": "/device[R1]/endpoint[1/2]/settings", "resource_value": {
+                    "address_ip": "3.3.2.1",
+                    "address_prefix": 24,
+                    "route_distinguisher": "65000:123",
+                    "router_id": "10.10.10.1",
+                    "sub_interface_index": 400,
+                    "vlan_id": 400
+                }}},
+                {"action": 1, "custom": {"resource_key": "/device[R4]/endpoint[1/2]/settings", "resource_value": {
+                    "address_ip": "3.3.1.1",
+                    "address_prefix": 24,
+                    "route_distinguisher": "65000:123",
+                    "router_id": "20.20.20.1",
+                    "sub_interface_index": 400,
+                    "vlan_id": 500
+                }}}
+            ]}
+        }
+    ]
+}
-- 
GitLab