Skip to content

Commit

Permalink
Merge pull request #296 from fabric-testbed/rel1.7
Browse files Browse the repository at this point in the history
Rel1.7 - updates
  • Loading branch information
kthare10 authored Aug 6, 2024
2 parents 67a4364 + 02fe661 commit 93aba44
Show file tree
Hide file tree
Showing 8 changed files with 1,177 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"# Manage a FABRIC Slice using Tailscale\n",
"\n",
"This Jupyter notebook provides a guide to creating and managing your slices using Tailscale Mesh VPN. \n",
"Watch this video for more details on [Tailscale](https://www.youtube.com/watch?v=oklvRBmEL4s&t=2s).\n",
"\n",
"<img src=\"./figs/mesh_vpn.png\" width=\"30%\"><br>\n",
"\n",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Create a Point to Point (Layer 2) Network with Explicit Route Options (ERO)\n",
"\n",
"This notebook shows how to create an isolated Point 2 Point Layer2 Ethernet, specify Explicity Route Options (ERO) to control Quality of Service and connect compute nodes to it and use FABlib's automatic configuration functionality."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Import the FABlib Library\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from ipaddress import ip_address, IPv4Address, IPv6Address, IPv4Network, IPv6Network\n",
"import ipaddress\n",
"\n",
"from fabrictestbed_extensions.fablib.fablib import FablibManager as fablib_manager\n",
"\n",
"fablib = fablib_manager()\n",
" \n",
"fablib.show_config();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Create the Experiment Slice\n",
"\n",
"The following script sets up two nodes, each with dedicated NICs connected to two isolated WAN Ethernets, with and without Explicit Routes.\n",
"\n",
"Two nodes are instantiated, each with a NIC component added. This script employs components modeled after NIC_ConnectX_6, representing a 100 Gpbs Mellanox ConnectX-6 PCI device. When using dedicated PCI devices, the entire physical device is allocated to one node, accessed through PCI passthrough. Using the `get_interfaces()` method on a component retrieves a list of interfaces. Many dedicated NIC components may have multiple ports, with either port connectable to the network.\n",
"\n",
"\n",
"NIC component model options include:\n",
"- NIC_ConnectX_5: 25 Gbps Dedicated Mellanox ConnectX-5 PCI Device (2 Ports)\n",
"- NIC_ConnectX_6: 100 Gbps Dedicated Mellanox ConnectX-6 PCI Device (2 Ports)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"slice_name = 'MySlice-ero'\n",
"[site1, site2, site3] = fablib.get_random_sites(count=3)\n",
"print(f\"Sites: {site1}, {site2}, {site3}\")\n",
"\n",
"node1_name = 'Node1'\n",
"node2_name = 'Node2'\n",
"net1_name = 'net-with-ero'\n",
"net2_name = 'net'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"\n",
"#Create Slice\n",
"slice = fablib.new_slice(name=slice_name)\n",
"\n",
"# Network\n",
"net1 = slice.add_l2network(name=net1_name, subnet=IPv4Network(\"192.168.1.0/24\"))\n",
"\n",
"net2 = slice.add_l2network(name=net2_name, subnet=IPv4Network(\"192.168.2.0/24\"))\n",
"\n",
"# Node1\n",
"node1 = slice.add_node(name=node1_name, site=site1)\n",
"n1_nic1 = node1.add_component(model='NIC_ConnectX_5', name='nic1')\n",
"n1_nic1.get_interfaces()[0].set_mode('auto')\n",
"n1_nic1.get_interfaces()[0].set_vlan('100')\n",
"n1_nic1.get_interfaces()[1].set_mode('auto')\n",
"n1_nic1.get_interfaces()[1].set_vlan('200')\n",
"\n",
"net1.add_interface(n1_nic1.get_interfaces()[0])\n",
"\n",
"net2.add_interface(n1_nic1.get_interfaces()[1])\n",
"\n",
"# Node2\n",
"node2 = slice.add_node(name=node2_name, site=site2)\n",
"n2_nic1 = node2.add_component(model='NIC_ConnectX_5', name='nic1')\n",
"\n",
"n2_nic1.get_interfaces()[0].set_mode('auto')\n",
"n2_nic1.get_interfaces()[0].set_vlan('100')\n",
"n2_nic1.get_interfaces()[1].set_mode('auto')\n",
"n2_nic1.get_interfaces()[1].set_vlan('200')\n",
"\n",
"net1.add_interface(n2_nic1.get_interfaces()[0])\n",
"\n",
"net2.add_interface(n2_nic1.get_interfaces()[1])\n",
"\n",
"# Set Explicit Route Options for Network1\n",
"net1.set_l2_route_hops(hops=[site3])\n",
"\n",
"\n",
"#Submit Slice Request\n",
"slice.submit()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Run the Experiment\n",
"We demonstrate the variance in delay between two networks. It's important to note that the network utilizing ERO exhibits greater ping delay compared to the network without ERO."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Get Slice and Nodes\n",
"slice = fablib.get_slice(slice_name)\n",
"\n",
"node1 = slice.get_node(name=node1_name) \n",
"node2 = slice.get_node(name=node2_name) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Ping on the Network with Explicit Routes"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"node2_net1_addr = node2.get_interface(network_name=net1_name).get_ip_addr()\n",
"\n",
"stdout, stderr = node1.execute(f'ping -c 5 {node2_net1_addr}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Ping on the Network without Explicit Routes"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"node2_net2_addr = node2.get_interface(network_name=net2_name).get_ip_addr()\n",
"\n",
"stdout, stderr = node1.execute(f'ping -c 5 {node2_net2_addr}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Delete the Slice\n",
"\n",
"Please delete your slice when you are done with your experiment."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"slice.delete()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.8"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Loading

0 comments on commit 93aba44

Please sign in to comment.