Testing dry run, xbnet takes quite a while to get xbnet0 interface up and running and its a hanging call, need a workaround this

This commit is contained in:
Emran Billah 2024-08-08 14:11:30 -03:00
parent bfbf716b88
commit da8f682ffd
7 changed files with 213 additions and 5 deletions

9
.env Normal file
View File

@ -0,0 +1,9 @@
# Configuration for xbnet0
XBEE0_PORT=/dev/ttyUSB1
XBEE0_NET_IP=192.168.10.1
PING0_TARGET=192.168.10.2
# Configuration for xbnet1
XBEE1_PORT=/dev/ttyUSB2
XBEE1_NET_IP=192.168.10.2
PING1_TARGET=192.168.10.1

28
Dockerfile Normal file
View File

@ -0,0 +1,28 @@
# Use an official Rust image as the base
FROM rust:latest
# Install dependencies
RUN apt-get update && apt-get install -y \
libudev-dev \
iproute2 \
iputils-ping \
&& rm -rf /var/lib/apt/lists/*
# Clone the xbnet repository
RUN git clone https://github.com/jgoerzen/xbnet.git /usr/src/xbnet
# Build xbnet
WORKDIR /usr/src/xbnet
RUN cargo build --release
# Copy the built binary to /usr/local/bin
RUN cp target/release/xbnet /usr/local/bin/xbnet
# Create the entrypoint script
RUN echo '#!/bin/bash\n\
set -e\n\
exec "$@"' > /entrypoint.sh \
&& chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["bash"]

View File

@ -2,17 +2,17 @@
- The README.md will be fully updated once the repo is in a stable state
# TODO:
- Need to automate rust project (xbnet)
## TODO
- Need to automate Rust project (xbnet)
- Configure (looks good)
- Build
- Deploy
- On ubuntu for testing
- On Ubuntu for testing
- On Linux for Tegra for TX2
- On Jetson Orin
- Working on setup_host_device.sh
- Issues with bridging interfaces
- Need to add setup_end_device.sh
- Need dokcerize service
- Possibly may need to bridge docker xbnet network will local wifi interface as well
- Need to dockerize service
- Possibly may need to bridge docker xbnet network with local wifi interface as well
- Make a submodule of xbnet, or copy over raw files, depending on future decisions

View File

@ -0,0 +1,38 @@
version: '3.8'
services:
xbnet0:
build: .
container_name: xbnet0
privileged: true
env_file:
- .env
devices:
- "${XBEE0_PORT}:${XBEE0_PORT}"
command: >
bash -c "
set -x;
xbnet ${XBEE0_PORT} tun;
ip addr add ${XBEE0_NET_IP}/24 dev xbnet0;
ip link set dev xbnet0 up;
ping -c 4 ${PING0_TARGET};
sleep infinity
"
xbnet1:
build: .
container_name: xbnet1
privileged: true
env_file:
- .env
devices:
- "${XBEE1_PORT}:${XBEE1_PORT}"
command: >
bash -c "
set -x;
xbnet ${XBEE1_PORT} tun;
ip addr add ${XBEE1_NET_IP}/24 dev xbnet1;
ip link set dev xbnet1 up;
ping -c 4 ${PING1_TARGET};
sleep infinity
"

19
docker-compose.yml Normal file
View File

@ -0,0 +1,19 @@
version: '3.8'
services:
xbee-node:
build: .
container_name: xbee_node
privileged: true
env_file:
- .env
devices:
- "${XBEE0_PORT}:${XBEE0_PORT}"
command: >
bash -c "
xbnet ${XBEE0_PORT} tun;
ip addr add ${XBEE0_NET_IP}/24 dev xbnet0;
ip link set dev xbnet0 up;
ping -c 4 ${PING0_TARGET};
sleep infinity
"

56
test/test-run-cleanup.sh Normal file
View File

@ -0,0 +1,56 @@
#!/bin/bash
# Function to display usage instructions
usage() {
echo "Usage: $0 -p xbee_port"
echo " -p xbee_port The serial port where the XBee is connected (e.g., /dev/ttyUSB0)"
exit 1
}
# Parse command-line arguments
while getopts "p:" opt; do
case "$opt" in
p) xbee_port=$OPTARG ;;
*) usage ;;
esac
done
# Check if required arguments are provided
if [ -z "$xbee_port" ]; then
usage
fi
# Find the xbnet interface created by xbnet
xbnet_interface=$(ip link show | grep -o 'xbnet[0-9]*')
# Remove the IP address and bring down the network interface
if [ -n "$xbnet_interface" ]; then
echo "Removing IP address from $xbnet_interface..."
sudo ip addr flush dev $xbnet_interface
echo "Bringing down the network interface $xbnet_interface..."
sudo ip link set dev $xbnet_interface down
echo "Removing the network interface $xbnet_interface..."
sudo ip link delete $xbnet_interface
else
echo "No xbnet interface found."
fi
# Remove the xbnet binary
if [ -f /usr/local/bin/xbnet ]; then
echo "Removing xbnet binary..."
sudo rm /usr/local/bin/xbnet
else
echo "xbnet binary not found."
fi
# Remove the cloned xbnet repository
if [ -d /usr/src/xbnet ]; then
echo "Removing the cloned xbnet repository..."
sudo rm -rf /usr/src/xbnet
else
echo "xbnet repository not found."
fi
echo "Cleanup complete."

58
test/test-run.sh Normal file
View File

@ -0,0 +1,58 @@
#!/bin/bash
#
# Usage: eg. ./test-run.sh -p /dev/ttyUSB0 -s 192.168.10.1 -d 192.168.10.2
#
# Function to display usage instructions
usage() {
echo "Usage: $0 -p xbee_port -s xbee_net_src_ip -d xbee_net_dst_ip"
echo " -p xbee_port The serial port where the XBee is connected (e.g., /dev/ttyUSB0)"
echo " -s xbee_net_src_ip The source IP address for the XBee network (e.g., 192.168.10.1)"
echo " -d xbee_net_dst_ip The destination IP address to ping (e.g., 192.168.10.2)"
exit 1
}
# Parse command-line arguments
while getopts "p:s:d:" opt; do
case "$opt" in
p) xbee_port=$OPTARG ;;
s) xbee_net_src_ip=$OPTARG ;;
d) xbee_net_dst_ip=$OPTARG ;;
*) usage ;;
esac
done
# Check if all required arguments are provided
if [ -z "$xbee_port" ] || [ -z "$xbee_net_src_ip" ] || [ -z "$xbee_net_dst_ip" ]; then
usage
fi
# Update package list and install necessary packages
echo "Installing necessary packages..."
sudo apt-get update
sudo apt-get install -y git build-essential libudev-dev iproute2 iputils-ping cargo
# Clone the xbnet repository
echo "Cloning xbnet repository..."
git clone https://github.com/jgoerzen/xbnet.git /usr/src/xbnet
# Build xbnet
echo "Building xbnet..."
cd /usr/src/xbnet
cargo build --release
# Copy the built binary to /usr/local/bin
echo "Installing xbnet..."
sudo cp target/release/xbnet /usr/local/bin/xbnet
# Configure the XBee network interface
echo "Configuring XBee network interface..."
sudo xbnet $xbee_port tun
sudo ip addr add $xbee_net_src_ip/24 dev xbnet0
sudo ip link set dev xbnet0 up
# Ping the destination IP to verify connectivity
echo "Pinging destination IP $xbee_net_dst_ip..."
ping -c 4 $xbee_net_dst_ip
echo "Setup complete. The XBee network interface is configured and tested."