feat(automation/deployment): Added script to autodeploy and setup wedge and nodes

Signed-off-by: Tuan-Dat Tran <tuan-dat.tran@tudattr.dev>
This commit is contained in:
Tuan-Dat Tran
2024-12-31 15:17:29 +01:00
parent f3e97a4619
commit 5857beeaf6
16 changed files with 104 additions and 148 deletions

6
scripts/00-wedge_on_reboot.sh Normal file → Executable file
View File

@@ -1,5 +1,7 @@
#!/bin/bash
SDE_INSTALL=/home/user/bf-sde-9.7.0/install
# Run this script when:
# When the switch has been restarted or you encounter the following error:
# ```sh
@@ -51,5 +53,5 @@
# CHSS MGMT ERROR: Failed to configure cdc_eth ipv6
# ```
sudo "$SDE_INSTALL/bin/bf_kpkt_mod_load" "$SDE_INSTALL"
sudo ip link set "$(basename /sys/module/bf_kpkt/drivers/pci:bf/*/net/*)" up
"$SDE_INSTALL/bin/bf_kpkt_mod_load" "$SDE_INSTALL"
ip link set "$(basename /sys/module/bf_kpkt/drivers/pci:bf/*/net/*)" up

7
scripts/01-wedge_compile_code.sh Normal file → Executable file
View File

@@ -1,5 +1,7 @@
#!/bin/bash
SDE_INSTALL=/home/user/bf-sde-9.7.0/install
# For this code we'll need to do the following steps
# 1. `cd` into the directory where the P4 code is
# 2. Copy this script into the same directory
@@ -7,9 +9,10 @@
# Define the name of the P4 main program as an argument to this script, like this:
# $ ./00-wedge_compile_code.sh l1switch.p4
PROGRAM=$1
PROGRAM=l1switch.p4
COMPILED=${PROGRAM%.p4}.tofino
bf-p4c "$PROGRAM"
cd /tmp/l1switch || exit
/home/user/bf-sde-9.7.0/install/bin/bf-p4c "$PROGRAM" 1>/dev/null
cp -r "$COMPILED/" "$SDE_INSTALL"
cp -r "$COMPILED"/*.conf "$SDE_INSTALL"/share/p4/targets/tofino/

4
scripts/02-run_switch_program.sh Normal file → Executable file
View File

@@ -1,6 +1,4 @@
#!/bin/bash
PROGRAM=$1
cd "$SDE" || exit
./run_switchd.sh "$PROGRAM"
SDE=/home/user/bf-sde-9.7.0/ SDE_INSTALL=/home/user/bf-sde-9.7.0/install ./run_switchd.sh -p l1switch

View File

@@ -1,11 +0,0 @@
#!/bin/bash
# from bf_shell
ucli
pm
port-add 31/- 10G NONE
an-set 31/- 2
port-enb 31/-
port-add 32/- 10G NONE
an-set 32/- 2
port-enb 32/-

View File

@@ -1,5 +1,3 @@
# from bf_shell
# bfrt_python
bfrt.l1switch.pipe.SwitchIngress.t_l1_forwarding.add_with_send(
egress_port=266, dst_addr="10.0.1.1"
)

0
scripts/10-host_setup_node1.sh Normal file → Executable file
View File

0
scripts/10-host_setup_node2.sh Normal file → Executable file
View File

0
scripts/19-cleanup.sh Normal file → Executable file
View File

0
scripts/30-add_namespaces.sh Normal file → Executable file
View File

12
scripts/31-configure_interfaces.sh Normal file → Executable file
View File

@@ -6,26 +6,14 @@ IP=$3
# Add interfaces to namespaces
ip link set "$IF" netns "$NS"
ip link set "$IF" netns "$NS"
ip link set "$IF" netns "$NS"
ip link set "$IF" netns "$NS"
# Set IP Addresses
ip netns exec "$NS" ip addr add dev "$IF" "$IP"
ip netns exec "$NS" ip addr add dev "$IF" "$IP"
ip netns exec "$NS" ip addr add dev "$IF" "$IP"
ip netns exec "$NS" ip addr add dev "$IF" "$IP"
# Turn on Links
ip netns exec "$NS" ip link set up "$IF"
ip netns exec "$NS" ip link set up "$IF"
ip netns exec "$NS" ip link set up "$IF"
ip netns exec "$NS" ip link set up "$IF"
# For Debugging
#
# # Show interface info
# ip netns exec "$NS" ip a s "$IF"
# ip netns exec "$NS" ip a s "$IF"
# ip netns exec "$NS" ip a s "$IF"
# ip netns exec "$NS" ip a s "$IF"

0
scripts/32-setup_arp.sh Normal file → Executable file
View File

7
scripts/98-test.sh Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/bash
SDE=/home/user/bf-sde-9.7.0/
SDE_INSTALL=/home/user/bf-sde-9.7.0/install
echo "$SDE"
echo "$SDE_INSTALL"

68
scripts/99-deployment.sh Executable file
View File

@@ -0,0 +1,68 @@
#!/bin/bash
WEDGE_PASS="Jony154977"
USER_PASS="asdf1234"
run_script_via_ssh() {
local script_path="$1" # Path to the script to be copied
local ssh_host="$2" # SSH host
local pass=$3
local remote_path="/tmp/$(basename "$script_path")" # Destination path on the remote machine
# Copy the script to the remote host
scp "$script_path" "$ssh_host:$remote_path"
if [[ $? -ne 0 ]]; then
echo "Error: Failed to copy the script to the remote host."
return 1
fi
# Execute the script on the remote host with sudo
ssh "$ssh_host" "echo $pass | sudo -S $remote_path"
if [[ $? -ne 0 ]]; then
echo "Error: Failed to execute the script on the remote host."
return 1
fi
echo "Script executed successfully on $ssh_host."
}
wedge_setup() {
scp -r ../l1switch/ ncs-wedge:/tmp/
run_script_via_ssh ./00-wedge_on_reboot.sh ncs-wedge $WEDGE_PASS
run_script_via_ssh ./01-wedge_compile_code.sh ncs-wedge $WEDGE_PASS
scp ./l1switch.service ncs-wedge:/tmp/l1switch.service
scp ./02-run_switch_program.sh ncs-wedge:/home/user/bf-sde-9.7.0/l1switch.sh
ssh ncs-wedge "echo $WEDGE_PASS | sudo -S mv /tmp/l1switch.service /etc/systemd/system/l1switch.service"
ssh ncs-wedge "echo $WEDGE_PASS | sudo -S systemctl daemon-reload"
ssh ncs-wedge "echo $WEDGE_PASS | sudo -S systemctl start l1switch.service"
scp ./03-wedge_port_configure.command ncs-wedge:/tmp/
ssh ncs-wedge "/home/user/bf-sde-9.7.0/install/bin/bfshell -f /tmp/03-wedge_port_configure.command"
scp ./04-wedge_route_configure.py ncs-wedge:/tmp/
ssh ncs-wedge "/home/user/bf-sde-9.7.0/install/bin/bfshell -b /tmp/04-wedge_route_configure.py"
}
setup_node() {
local nodeid="$1"
local node="ncs-node$nodeid"
local node_script="./10-host_setup_node$nodeid.sh"
scp "./30-add_namespaces.sh" "$node":
scp "./31-configure_interfaces.sh" "$node":
scp "./32-setup_arp.sh" "$node":
run_script_via_ssh "$node_script" "$node" $USER_PASS
}
# wedge_setup
# setup_node 1
# setup_node 2
read -p "YOU WILL NEED TO PRESS CTRL+C AT SOME POINT SINCE THE RECEIVER WILL RUN INDEFINETLY. (Press any key to confirm.)" -n1 -s
TIMEOUT=30
ssh ncs-node1 "echo $USER_PASS | sudo -S timeout $TIMEOUT ip netns exec tb_node1_if0 python3 receiver.py 10.0.2.1 30123 30123" &
ssh ncs-node2 "echo $USER_PASS | sudo -S timeout $TIMEOUT ip netns exec tb_node2_if0 python3 sender.py 10.0.1.1 30123 30123 100 128"
scp ncs-node1:timestamps_30123 .

View File

@@ -3,6 +3,9 @@
In this repository we're have scripts to setup a network testbed with
2 nodes and a Tofino Wedge 100BF-32X 100GBE Baremetal Switch.
You can run the script [./99-deployment.sh](./99-deployment.sh) for a sample
deployment.
## Prerequisites
- Hardware

13
scripts/l1switch.service Normal file
View File

@@ -0,0 +1,13 @@
[Unit]
Description=Run L1Switch Program
After=network.target
[Service]
ExecStart=/home/user/bf-sde-9.7.0/l1switch.sh
WorkingDirectory=/home/user/bf-sde-9.7.0
User=root
Group=root
Restart=always
[Install]
WantedBy=multi-user.target