From df9c620d97d370caaebb4566fd9c2c063141b121 Mon Sep 17 00:00:00 2001 From: Tuan-Dat Tran Date: Mon, 23 Dec 2024 16:45:18 +0100 Subject: [PATCH] feat(ncs-node01,ncs-node02,ncs-wedge): Setup namespace and interface config and switch configs for l1switch Signed-off-by: Tuan-Dat Tran --- README.md | 7 +- grafik.png | Bin 0 -> 92442 bytes scripts/00-wedge_on_reboot.sh | 55 ++++++++++++ scripts/01-wedge_compile_code.sh | 15 ++++ scripts/02-run_switch_program.sh | 6 ++ scripts/03-wedge_port_configure.sh | 11 +++ scripts/04-wedge_route_configure.py | 28 ++++++ scripts/10-host_notes.sh | 108 ++++++++++++++++++++++ scripts/11-host_arps.sh | 14 +++ sender-receiver-scripts/receiver.py | 67 ++++++++++++++ sender-receiver-scripts/sender.py | 134 ++++++++++++++++++++++++++++ sketch.md | 12 +++ 12 files changed, 456 insertions(+), 1 deletion(-) create mode 100644 grafik.png create mode 100644 scripts/00-wedge_on_reboot.sh create mode 100644 scripts/01-wedge_compile_code.sh create mode 100644 scripts/02-run_switch_program.sh create mode 100644 scripts/03-wedge_port_configure.sh create mode 100644 scripts/04-wedge_route_configure.py create mode 100644 scripts/10-host_notes.sh create mode 100644 scripts/11-host_arps.sh create mode 100644 sender-receiver-scripts/receiver.py create mode 100644 sender-receiver-scripts/sender.py create mode 100644 sketch.md diff --git a/README.md b/README.md index 47ab27b..0f69b6b 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,8 @@ Three folders: - Testbed setup with alveo network cards to run on host and a switch - Pluggable network traffic generation at the experimentation stage - Xilinx FPGA Cards will be used -- Non static testbed - Make general first especially ARP/IP/Interface and go from there +- Non static testbed - Make general first especially ARP/IP/Interface and go + from there ### Whats needed @@ -105,6 +106,10 @@ TODO ## Plan Project +### Rough Sketch + +I start by creating a rough sketch in [./sketch.md](./sketch.md). + ## Implement MVP ## Refine diff --git a/grafik.png b/grafik.png new file mode 100644 index 0000000000000000000000000000000000000000..88683241f8afceaa209a7df5bb0ad268f62cda96 GIT binary patch literal 92442 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 z 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�F+Nxr*EAXj&O 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 xAP@*T0m2{)1OkCT& mtu 1500 qdisc mq state UP group default qlen 1000 +# - Data: +# - enp6s0f0np0 | 10.0.1.1 | 64:9d:99:b1:0a:88 | tb_node1_if0 | 32/2 | 266 +# - enp6s0f1np1 | 10.0.1.2 | 64:9d:99:b1:0a:89 | tb_node1_if1 | 32/3 | 267 +# - enp6s0f2np2 | 10.0.1.3 | 64:9d:99:b1:0a:8a | tb_node1_if2 | 32/1 | 265 +# - enp6s0f3np3 | 10.0.1.4 | 64:9d:99:b1:0a:8b | tb_node1_if3 | 32/0 | 264 +# +# ncs-node2: +# - Control: +# - enp4s0f2: mtu 1500 qdisc mq state UP group default qlen 1000 +# - Data: +# - enp6s0f0np0 | 10.0.2.1 | 64:9d:99:b1:0a:a4 | tb_node2_if0 | 31/0 | 256 +# - enp6s0f1np1 | 10.0.2.2 | 64:9d:99:b1:0a:a5 | tb_node2_if1 | 31/3 | 259 +# - enp6s0f2np2 | 10.0.2.3 | 64:9d:99:b1:0a:a6 | tb_node2_if2 | 31/1 | 257 +# - enp6s0f3np3 | 10.0.2.4 | 64:9d:99:b1:0a:a7 | tb_node2_if3 | 31/2 | 258 +# +# ncs-wedge: +# PORT |MAC |D_P|P/PT|SPEED |FEC |AN|KR|RDY|ADM|OPR|LPBK |FRAMES RX |FRAMES TX |E +# 31/0 |48/0|256|2/ 0|10G |NONE|Ds|Au|YES|ENB|UP | NONE | 62| 0| +# 31/1 |48/1|257|2/ 1|10G |NONE|Ds|Au|YES|ENB|UP | NONE | 62| 0| +# 31/2 |48/2|258|2/ 2|10G |NONE|Ds|Au|YES|ENB|UP | NONE | 62| 0| +# 31/3 |48/3|259|2/ 3|10G |NONE|Ds|Au|YES|ENB|UP | NONE | 62| 0| +# 32/0 |50/0|264|2/ 8|10G |NONE|Ds|Au|YES|ENB|UP | NONE | 62| 0| +# 32/1 |50/1|265|2/ 9|10G |NONE|Ds|Au|YES|ENB|UP | NONE | 62| 0| +# 32/2 |50/2|266|2/10|10G |NONE|Ds|Au|YES|ENB|UP | NONE | 65| 0| +# 32/3 |50/3|267|2/11|10G |NONE|Ds|Au|YES|ENB|UP | NONE | 65| 0| + +# node1 +# Create Namespace: Testbed on Node1 for Interface n +sudo ip netns add tb_node1_if0 +sudo ip netns add tb_node1_if1 +sudo ip netns add tb_node1_if2 +sudo ip netns add tb_node1_if3 + +# Add interfaces to namespaces +sudo ip link set enp6s0f0np0 netns tb_node1_if0 +sudo ip link set enp6s0f1np1 netns tb_node1_if1 +sudo ip link set enp6s0f2np2 netns tb_node1_if2 +sudo ip link set enp6s0f3np3 netns tb_node1_if3 + +# Show Info +sudo ip netns exec tb_node1_if0 ip a s enp6s0f0np0 +sudo ip netns exec tb_node1_if1 ip a s enp6s0f1np1 +sudo ip netns exec tb_node1_if2 ip a s enp6s0f2np2 +sudo ip netns exec tb_node1_if3 ip a s enp6s0f3np3 + +# Set IP Addresses +sudo ip netns exec tb_node1_if0 ip addr add dev enp6s0f0np0 10.0.1.1/16 +sudo ip netns exec tb_node1_if1 ip addr add dev enp6s0f1np1 10.0.1.2/16 +sudo ip netns exec tb_node1_if2 ip addr add dev enp6s0f2np2 10.0.1.3/16 +sudo ip netns exec tb_node1_if3 ip addr add dev enp6s0f3np3 10.0.1.4/16 + +# Turn on Links +sudo ip netns exec tb_node1_if0 ip link set up enp6s0f0np0 +sudo ip netns exec tb_node1_if1 ip link set up enp6s0f1np1 +sudo ip netns exec tb_node1_if2 ip link set up enp6s0f2np2 +sudo ip netns exec tb_node1_if3 ip link set up enp6s0f3np3 + +sudo ./11-host_arps.sh tb_node1_if0 enp6s0f0np0 +sudo ./11-host_arps.sh tb_node1_if1 enp6s0f1np1 +sudo ./11-host_arps.sh tb_node1_if2 enp6s0f2np2 +sudo ./11-host_arps.sh tb_node1_if3 enp6s0f3np3 + +# node2 +# Create Namespace: Testbed on Node1 for Interface n +sudo ip netns add tb_node2_if0 +sudo ip netns add tb_node2_if1 +sudo ip netns add tb_node2_if2 +sudo ip netns add tb_node2_if3 + +# Add interfaces to namespaces +sudo ip link set enp6s0f0np0 netns tb_node2_if0 +sudo ip link set enp6s0f1np1 netns tb_node2_if1 +sudo ip link set enp6s0f2np2 netns tb_node2_if2 +sudo ip link set enp6s0f3np3 netns tb_node2_if3 + +# Show Info +sudo ip netns exec tb_node2_if0 ip a s enp6s0f0np0 +sudo ip netns exec tb_node2_if1 ip a s enp6s0f1np1 +sudo ip netns exec tb_node2_if2 ip a s enp6s0f2np2 +sudo ip netns exec tb_node2_if3 ip a s enp6s0f3np3 + +# Set IP Addresses +sudo ip netns exec tb_node2_if0 ip addr add dev enp6s0f0np0 10.0.2.1/16 +sudo ip netns exec tb_node2_if1 ip addr add dev enp6s0f1np1 10.0.2.2/16 +sudo ip netns exec tb_node2_if2 ip addr add dev enp6s0f2np2 10.0.2.3/16 +sudo ip netns exec tb_node2_if3 ip addr add dev enp6s0f3np3 10.0.2.4/16 + +# Turn on Links +sudo ip netns exec tb_node2_if0 ip link set up enp6s0f0np0 +sudo ip netns exec tb_node2_if1 ip link set up enp6s0f1np1 +sudo ip netns exec tb_node2_if2 ip link set up enp6s0f2np2 +sudo ip netns exec tb_node2_if3 ip link set up enp6s0f3np3 + +# execute arp +sudo ./11-host_arps.sh tb_node2_if0 enp6s0f0np0 +sudo ./11-host_arps.sh tb_node2_if1 enp6s0f1np1 +sudo ./11-host_arps.sh tb_node2_if2 enp6s0f2np2 +sudo ./11-host_arps.sh tb_node2_if3 enp6s0f3np3 + +# Show arp +sudo ip netns exec tb_node2_if0 ip a s enp6s0f0np0 +sudo ip netns exec tb_node2_if1 ip a s enp6s0f1np1 +sudo ip netns exec tb_node2_if2 ip a s enp6s0f2np2 +sudo ip netns exec tb_node2_if3 ip a s enp6s0f3np3 diff --git a/scripts/11-host_arps.sh b/scripts/11-host_arps.sh new file mode 100644 index 0000000..61ae354 --- /dev/null +++ b/scripts/11-host_arps.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +NS=$1 +IF=$2 + +sudo ip netns exec "$NS" arp -i "$IF" -s 10.0.1.1 64:9d:99:b1:0a:88 +sudo ip netns exec "$NS" arp -i "$IF" -s 10.0.1.2 64:9d:99:b1:0a:89 +sudo ip netns exec "$NS" arp -i "$IF" -s 10.0.1.3 64:9d:99:b1:0a:8a +sudo ip netns exec "$NS" arp -i "$IF" -s 10.0.1.4 64:9d:99:b1:0a:8b + +sudo ip netns exec "$NS" arp -i "$IF" -s 10.0.2.1 64:9d:99:b1:0a:a4 +sudo ip netns exec "$NS" arp -i "$IF" -s 10.0.2.2 64:9d:99:b1:0a:a5 +sudo ip netns exec "$NS" arp -i "$IF" -s 10.0.2.3 64:9d:99:b1:0a:a6 +sudo ip netns exec "$NS" arp -i "$IF" -s 10.0.2.4 64:9d:99:b1:0a:a7 diff --git a/sender-receiver-scripts/receiver.py b/sender-receiver-scripts/receiver.py new file mode 100644 index 0000000..8d52b94 --- /dev/null +++ b/sender-receiver-scripts/receiver.py @@ -0,0 +1,67 @@ +import sys +import time +import threading +from scapy.all import Ether, IP, UDP, send, sendp, Raw, sniff + +global initial_timestamp +initial_timestamp = int(time.time() * 1000) + +# Simulated ACK sending function +def send_ack(destination_IP, my_port, sender_port): + ack_data = "" + ################### + # With localhost: + ack_packet = IP(dst=destination_IP) / UDP(dport=sender_port, sport=my_port) / Raw(load=str(ack_data)) + send(ack_packet, verbose=False) + ################### + # With netns: + # ack_packet = Ether(dst="00:00:00:00:00:04", src="00:00:00:00:00:01") / IP(dst="127.0.0.1") / UDP(dport=5551) / Raw(load=str(ack_data)) + # sendp(ack_packet, verbose=False) + ################### + print(f"Sent ACK: {ack_data}") + +# Process incoming packets +def process_packet(pkt): + ################### Save timestamps ################### + if Raw in pkt: + with open(save_file, "a") as f: # open as "a" for append + global initial_timestamp + receival_time = str(int(time.time() * 1000) - initial_timestamp) # time of arrival at receiver + send_time = pkt[Raw].load # time it was sent from the sender + ################### Conversion & error handling ################### + try: + send_time = int(send_time.decode("utf-8").split("X")[0]) # decode the payload and stop at "X" + except ValueError: # For the last packet without a timestamp but "END" as payload + print(f"END for {my_port}") + send_ack(destination_IP, my_port, sender_port) + return + except Exception as e: + print(f"Decoding error at {my_port}") + send_ack(destination_IP, my_port, sender_port) + return + ################### Write data ################### + aoi = int(receival_time) - send_time + f.write(f"{send_time},{receival_time},{aoi}\n") + + send_ack(destination_IP, my_port, sender_port) + +# Main loop +def main(destination_IP, my_port, sender_port): + ################### + # With localhost: + sniff(iface="lo", filter=f"udp and dst port {my_port}", prn=process_packet, store=False) + ################### + # With netns: + # sniff(iface="ns-g", filter=f"udp and dst port {my_port}", prn=process_packet, store=False) + ################### + +if __name__ == "__main__": + if len(sys.argv) != 4: + print("Usage: python receive_and_ack.py ") + sys.exit(1) + + destination_IP = sys.argv[1] # Clear + my_port = int(sys.argv[2]) # Port to listen on + sender_port = int(sys.argv[3]) # Port to send acks to + save_file = f"timestamps_{my_port}" + main(destination_IP, my_port, sender_port) diff --git a/sender-receiver-scripts/sender.py b/sender-receiver-scripts/sender.py new file mode 100644 index 0000000..d438413 --- /dev/null +++ b/sender-receiver-scripts/sender.py @@ -0,0 +1,134 @@ +import sys +import time +import random +import threading +from scapy.all import Ether, IP, UDP, sendp, Raw, sniff, send + +global initial_timestamp +initial_timestamp = int(time.time() * 1000) + + +# Parameters +Q_max = 10 # Maximum queue size +age_threshold = 1.0 # Delta_T in seconds + +# Sender's state +last_update_time = None # Last time an ACK was received +N = 1 # Active senders (received from ACK) +queue_utilization = 0 # Received as Q_i/Q_max +delta_c = 0 # Time since the last ACK (calculated using T_ACK) + +# Function to calculate P_s +def calculate_probability(N, queue_utilization, delta_c): + if queue_utilization < 1: + return 1.0 # Full probability if the queue is underutilized + elif queue_utilization == 1: + # Calculate f(Delta_i) + f_delta = max((delta_c - age_threshold) / age_threshold, 0) + return (Q_max / N) + f_delta # Combine probabilities + +# Function to send a packet +def send_packet(target_ip, receiver_port, my_port, dscp_value, packet_size, FIN_flag): + + ether_layer = Ether(dst="00:00:00:00:00:04", src="00:00:00:00:00:01") + ip_layer = IP(dst=target_ip, tos=dscp_value << 2) + udp_layer = UDP(dport=receiver_port, sport=my_port) + + + # # Socket to listen for the ACKs + # ack_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + # ack_socket.settimeout(2) # 2 seconds timer to receive the ack. Otherwise considered lost + # ack_socket.bind(("", my_port)) + + # timestamp = str(int(time.time())) # Convert to a string for embedding + + global initial_timestamp + timestamp = str(int(time.time() * 1000) - initial_timestamp) + + if (not FIN_flag): + payload = timestamp + "X" * max((packet_size - len(timestamp)), 0) # max to prevent possible errors when choosing too small packet size + else: + payload = "END" + "X" * max((packet_size - len(timestamp)), 0) + + # packet = ether_layer / ip_layer / udp_layer / Raw(load=payload) + packet = ip_layer / udp_layer / Raw(load=payload) + # sendp(packet, verbose=False) + send(packet, verbose=False) + print(".", end='', flush=True) + +# Listen for ACKs +def process_ack(pkt): + global last_update_time, N, queue_utilization, delta_c + + if Raw in pkt: + ack_data = pkt[Raw].load.decode('utf-8') + N, queue_utilization, T_ACK = eval(ack_data) + last_update_time = T_ACK + print(f"Received ACK: N={N}, Utilization={queue_utilization}, T_ACK={T_ACK}") + +# Main loop +def main(target_ip, receiver_port, my_port, dscp_value, nb_packets, packet_size): + global delta_c + packets_sent = 0 + + while packets_sent < nb_packets: + # Update delta_c (time since the last ACK) + if last_update_time: + delta_c = time.time() - last_update_time + else: + delta_c = float('inf') # No ACK received yet + + # Calculate sending probability + P_s = calculate_probability(N, queue_utilization, delta_c) + + # Decide whether to send a packet + if random.random() < P_s: + + FIN_flag = False + if packets_sent == nb_packets - 1: + FIN_flag = True + + send_packet(target_ip, receiver_port, my_port, dscp_value, packet_size, FIN_flag) + packets_sent += 1 + print(f"Packet sent with probability P_s={P_s:.2f}") + else: + print(f"Packet skipped with probability P_s={P_s:.2f}") + + # Wait for a short interval before the next attempt + time.sleep(0.1) + + print(f"Finished sending {nb_packets} packets to {target_ip}:{receiver_port}") + + +if __name__ == "__main__": + if len(sys.argv) != 6: + print("Usage: python send_dscp_packets.py ") + sys.exit(1) + + target_ip = sys.argv[1] # IP of the receiver + my_port = int(sys.argv[2]) # Sender port + receiver_port = int(sys.argv[3]) # Receiver port + nb_packets = int(sys.argv[4]) # Total number of packets to send + packet_size = int(sys.argv[5]) - 42 # Packet size in Bytes - 42 (previous headers) + dscp_value = 0 # Hardcoded DSCP value for now + + # main(target_ip, receiver_port, my_port, dscp_value, nb_packets) + + threading.Thread(target=main, args=(target_ip, receiver_port, my_port, dscp_value, nb_packets, packet_size), daemon=True).start() + ################### + # With localhost: + sniff(iface="lo", filter=f"udp and dst port {my_port}", prn=process_ack, store=False)#, timeout=0.1) + ################### + # With netns: + # sniff(iface="ns-r", filter=f"udp and dst port {my_port}", prn=process_ack, store=False) + ################### + +''' Archive: + +# Add padding: + payload = timestamp + "X" * (packet_size - len(timestamp)) + + + + +''' diff --git a/sketch.md b/sketch.md new file mode 100644 index 0000000..0f90559 --- /dev/null +++ b/sketch.md @@ -0,0 +1,12 @@ +# Setup of P4 Testbed + +| RP-ECN | Patricks | +| -------------------------------------------------------------------- | --------------------------------------- | +| Setup ARP on each host | | +| (When first time) Install required tools | Set time on each node | +| Run switch program on wedge | Setup Namespaces on node | +| Prepare Ports on wedge | Setup Interfaces/IPs on node | +| Configure touting tables on wedge | Setup Routing on node | +| Do Portshaping | ARP Entries on node | +| Run experiment-script | | +| Reset of setup can be done by executing `reset.sh` on each test node | Delete all namespaces on each test node |