Testing multi computer setup
This commit is contained in:
parent
949b292793
commit
6e3d464ae8
28
.env
28
.env
|
@ -1,16 +1,14 @@
|
||||||
|
# Base params
|
||||||
|
BASE_SUBNET=192.168.1
|
||||||
|
XBEE_INDEX=1
|
||||||
|
|
||||||
|
# Default params
|
||||||
|
DEFAULT_GATEWAY=192.168.1.1
|
||||||
|
DEFAULT_IPVLAN_IP=192.168.1.20 # Required only when running ipvlan net (look in docker compose)
|
||||||
|
DEFAULT_MACVLAN_IP=192.168.1.30 # Required only when running macvlan net (look in docker compose)
|
||||||
|
|
||||||
# Configuration for xbnet0
|
# Configuration for xbnet0
|
||||||
XBEE0_PORT=/dev/ttyUSB0
|
XBEE_PORT=/dev/ttyUSB0
|
||||||
XBEE0_BAUDRATE=230400
|
XBEE_BAUDRATE=230400
|
||||||
XBEE0_NET_SRC_IP=192.168.1.10 # Ensure this IP matches the macvlan network in Docker Compose
|
XBEE_NET_SRC_IP=192.168.1.201 # Ensure this IP matches the network range
|
||||||
XBEE0_NET_DST_IP=192.168.1.11 # Ensure this IP matches the network range
|
XBEE_NET_IFACE_NAME=xbnet0
|
||||||
XBEE0_NET_IFACE_NAME=xbnet0
|
|
||||||
|
|
||||||
# Configuration for xbnet1
|
|
||||||
XBEE1_PORT=/dev/ttyUSB1
|
|
||||||
XBEE1_BAUDRATE=230400
|
|
||||||
XBEE1_NET_SRC_IP=192.168.1.11 # Note: This requires the subnet 192.168.1... (to match with the default gateway, or use Masquerade if changing the subnet)
|
|
||||||
XBEE1_NET_DST_IP=192.168.1.10 # Note: This requires the subnet 192.168.1... (to match with the default gateway, or use Masquerade if changing the subnet)
|
|
||||||
XBEE1_NET_IFACE_NAME=xbnet1
|
|
||||||
|
|
||||||
# Default Gateway
|
|
||||||
DEFAULT_GATEWAY=192.168.1.1
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
workspace
|
67
README.md
67
README.md
|
@ -23,14 +23,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# SERVICES-XBEE-NET
|
# SERVICES-XBEE_NET
|
||||||
|
|
||||||
This project contains a Dockerized setup to create and manage an XBee network using the `xbnet` utility. The network interface is bridged with a host Wi-Fi interface, enabling internet access for connected devices.
|
This project contains a Dockerized setup to create and manage an XBee network using the `xbnet` utility. The network interface is bridged with a host Wi-Fi interface, enabling internet access for connected devices.
|
||||||
##### Note: This project uses the `tap` xbnet protocol, which is a layer 2 protocol. This supports full ethernet pipeline. For a simple IP level protocol support, the `tun` xbnet protocol can be used.
|
##### Note: This project uses the `tap` xbnet protocol, which is a layer 2 protocol. This supports full ethernet pipeline. For a simple IP level protocol support, the `tun` xbnet protocol can be used.
|
||||||
|
|
||||||
## File Structure
|
## File Structure
|
||||||
```
|
```bash
|
||||||
services-xbee-net/
|
services-xbee_net/
|
||||||
├── scripts/
|
├── scripts/
|
||||||
│ ├── entrypoint.sh # Entrypoint script for Docker container
|
│ ├── entrypoint.sh # Entrypoint script for Docker container
|
||||||
│ ├── get_connected_wifi_info.sh # Script to fetch connected Wi-Fi device information
|
│ ├── get_connected_wifi_info.sh # Script to fetch connected Wi-Fi device information
|
||||||
|
@ -55,40 +55,54 @@ Ensure Docker and Docker Compose are installed on your machine.
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
### 1. Clone the Repository
|
#### 1. Clone the Repository
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/your-username/services-xbee_net.git
|
git clone https://git.spirirobotics.com/Spiri/services-xbee_net
|
||||||
cd services-xbee_net
|
cd services-xbee_net
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. Modify the `.env` File
|
#### 2. Modify `.env-...` File based on running single or multiple xbnets
|
||||||
|
|
||||||
The `.env` file contains the configuration parameters for the XBee network. You may need to update these parameters according to your specific setup.
|
The `.env` file contains the configuration parameters for the XBee network. You may need to update these parameters according to your specific setup.
|
||||||
- For a single xbnet setup, modify all the `XBEE0` params only
|
- For a single xbnet setup, modify params in the `.env-run-single`
|
||||||
- For multi xbnet setup, add similar config chunks like `XBEE1`
|
- For multi xbnet setup, modify params in the `.env-run-multiple`
|
||||||
#### (Note: Multi node xbnet setup is currently under progress)
|
#### (Note: Multi node xbnet setup is currently under progress)
|
||||||
|
|
||||||
|
---
|
||||||
|
##### a. Sample `.env-run-single` config:
|
||||||
```bash
|
```bash
|
||||||
# Configuration for xbnet0
|
# Configuration for xbnet0
|
||||||
XBEE0_PORT=/dev/ttyUSB0 # The serial port for the XBee device
|
XBEE_PORT=/dev/ttyUSB0
|
||||||
XBEE0_BAUDRATE=230400 # Baud rate for the XBee device
|
XBEE_BAUDRATE=230400
|
||||||
XBEE0_NET_SRC_IP=192.168.1.10 # Source IP for the XBee network
|
XBEE_NET_SRC_IP=192.168.1.100 # Ensure this IP matches the network range
|
||||||
XBEE0_NET_DST_IP=192.168.1.11 # Destination IP for the XBee network
|
XBEE_NET_IFACE_NAME=xbnet0
|
||||||
XBEE0_NET_IFACE_NAME=xbnet0 # Interface name for the XBee network
|
|
||||||
|
|
||||||
# Configuration for xbnet1
|
|
||||||
XBEE1_PORT=/dev/ttyUSB1
|
|
||||||
XBEE1_BAUDRATE=230400
|
|
||||||
XBEE1_NET_SRC_IP=192.168.1.11
|
|
||||||
XBEE1_NET_DST_IP=192.168.1.10
|
|
||||||
XBEE1_NET_IFACE_NAME=xbnet1
|
|
||||||
|
|
||||||
# Default Gateway
|
# Default Gateway
|
||||||
DEFAULT_GATEWAY=192.168.1.1
|
DEFAULT_GATEWAY=192.168.1.1
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Build and Start the Docker Container
|
##### b. Sample `.env-run-multiple` config:
|
||||||
|
```bash
|
||||||
|
# Configuration for xbnet0 (REQUIRED: minimum config to run a single xbnet node)
|
||||||
|
XBEE0_PORT=/dev/ttyUSB0 # The serial port for the XBee device
|
||||||
|
XBEE0_BAUDRATE=230400 # Baud rate for the XBee device
|
||||||
|
XBEE0_NET_SRC_IP=192.168.1.100 # Source IP for the XBee network
|
||||||
|
XBEE0_NET_IFACE_NAME=xbnet0 # Interface name for the XBee network
|
||||||
|
|
||||||
|
# Configuration for xbnet1 (OPTIONAL: only required for multi node xbnets)
|
||||||
|
XBEE1_PORT=/dev/ttyUSB1
|
||||||
|
XBEE1_BAUDRATE=230400
|
||||||
|
XBEE1_NET_SRC_IP=192.168.1.101
|
||||||
|
XBEE1_NET_IFACE_NAME=xbnet1
|
||||||
|
|
||||||
|
# Default Gateway (REQUIRED: part of minimum concifg to run a single xbnet node)
|
||||||
|
DEFAULT_GATEWAY=192.168.1.1
|
||||||
|
```
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
#### 3. Build and Start the Docker Container
|
||||||
|
|
||||||
To build the Docker image and start the container, run:
|
To build the Docker image and start the container, run:
|
||||||
|
|
||||||
|
@ -98,14 +112,15 @@ docker-compose -f docker-compose.yml up --build
|
||||||
|
|
||||||
This will build the Docker image and start the container with the XBee network and the required setup.
|
This will build the Docker image and start the container with the XBee network and the required setup.
|
||||||
|
|
||||||
### 4. Health Check and Container Management
|
#### 4. Health Check and Container Management
|
||||||
|
|
||||||
The container includes a health check that pings the XBee network interface to ensure it is functioning properly. The container is configured to restart automatically if the health check fails.
|
The container includes a health check that pings the XBee network interface to ensure it is functioning properly. \
|
||||||
|
The container is configured to restart automatically if the health check fails.
|
||||||
|
|
||||||
### 5. Troubleshooting
|
#### 5. Troubleshooting
|
||||||
|
|
||||||
Ensure the XBee devices are connected to the correct serial ports.
|
Ensure the XBee devices are connected to the correct serial ports.\
|
||||||
Verify the network interfaces using ip a inside the container.
|
Verify the network interfaces using ip a inside the container.\
|
||||||
The container logs can be viewed using:
|
The container logs can be viewed using:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|
|
@ -10,7 +10,7 @@ services:
|
||||||
container_name: xbnet0
|
container_name: xbnet0
|
||||||
privileged: true
|
privileged: true
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env-run-multiple
|
||||||
devices:
|
devices:
|
||||||
- "${XBEE0_PORT}:${XBEE0_PORT}"
|
- "${XBEE0_PORT}:${XBEE0_PORT}"
|
||||||
command: >
|
command: >
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
version: '3.8'
|
version: '3.8'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
xbee-node:
|
xbnet-node:
|
||||||
build: .
|
build: .
|
||||||
container_name: xbee_node
|
container_name: xbnet_node
|
||||||
privileged: true
|
privileged: true
|
||||||
env_file: .env
|
env_file: .env
|
||||||
networks:
|
networks:
|
||||||
# xbee_net:
|
# xbee_net:
|
||||||
# ipv4_address: ${XBEE0_NET_SRC_IP} # Ensure this IP belongs to the xbee_net subnet
|
# ipv4_address: ${XBEE0_NET_SRC_IP} # Ensure this IP belongs to the xbee_net subnet
|
||||||
ipvlan_net:
|
ipvlan_net:
|
||||||
ipv4_address: 192.168.1.20 # Assign an IP within the same range as your host's Wi-Fi
|
ipv4_address: ${DEFAULT_IPVLAN_IP} # Assign an IP within the same range as your host's Wi-Fi
|
||||||
# macvlan_net:
|
# macvlan_net:
|
||||||
# ipv4_address: 192.168.1.20 # Assign an IP within the same range as your host's Wi-Fi
|
# ipv4_address: ${DEFAULT_MACVLAN_IP} # Assign an IP within the same range as your host's Wi-Fi
|
||||||
|
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
|
@ -31,15 +31,15 @@ networks:
|
||||||
parent: wlp0s20f3 # This should be your host's Wi-Fi or Ethernet interface
|
parent: wlp0s20f3 # This should be your host's Wi-Fi or Ethernet interface
|
||||||
ipam:
|
ipam:
|
||||||
config:
|
config:
|
||||||
- subnet: 192.168.1.0/24 # Match the Wi-Fi network range
|
- subnet: ${BASE_SUBNET}.0/24 # Match the Wi-Fi network range
|
||||||
gateway: 192.168.1.1 # Your router's gateway
|
gateway: ${DEFAULT_GATEWAY} # Your router's gateway
|
||||||
|
|
||||||
# 3. macvlan not working for some reason
|
# 3. macvlan not working for some reason
|
||||||
macvlan_net:
|
# macvlan_net:
|
||||||
# driver: macvlan
|
# driver: macvlan
|
||||||
# driver_opts:
|
# driver_opts:
|
||||||
# parent: wlp0s20f3 # This should be your host's Wi-Fi interface
|
# parent: wlp0s20f3 # This should be your host's Wi-Fi interface
|
||||||
# ipam:
|
# ipam:
|
||||||
# config:
|
# config:
|
||||||
# - subnet: 192.168.1.0/24 # Match the Wi-Fi network range
|
# - subnet: ${BASE_SUBNET}.0/24 # Match the Wi-Fi network range
|
||||||
# gateway: ${DEFAULT_GATEWAY} # Your router's gateway
|
# gateway: ${DEFAULT_GATEWAY} # Your router's gateway
|
|
@ -0,0 +1,60 @@
|
||||||
|
# run-single.sh
|
||||||
|
#
|
||||||
|
# This script sets up the environment for running a Docker Compose configuration with XBee networks.
|
||||||
|
# It accepts an optional --index=<int> argument to specify the XBEE_INDEX value.
|
||||||
|
# If no index is provided, it defaults to 1.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# ./run-single.sh # Runs with default index (1)
|
||||||
|
# ./run-single.sh --index=2 # Runs with index 2
|
||||||
|
#
|
||||||
|
# IPs assigned:
|
||||||
|
# BASE_SUBNET: eg.: 192.168.1
|
||||||
|
# DEFAULT_GATEWAY: ${BASE_SUBNET}.1, eg.: 192.168.1.1
|
||||||
|
# DEFAULT_IPVLAN_IP: ${BASE_SUBNET}.20 eg.: 192.168.1.20
|
||||||
|
# DEFAULT_MACVLAN_IP: ${BASE_SUBNET}.30 eg.: 192.168.1.30
|
||||||
|
# XBEE_NET_SRC_IP: ${BASE_SUBNET}.20${index} eg.: 192.168.1.201 (all Xbnets will be in the 200+ range)
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Default index value
|
||||||
|
index=1
|
||||||
|
|
||||||
|
# Parse command-line arguments
|
||||||
|
for arg in "$@"
|
||||||
|
do
|
||||||
|
case $arg in
|
||||||
|
--index=*)
|
||||||
|
index="${arg#*=}"
|
||||||
|
shift # Remove --index=<int> from processing
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Set BASE_SUBNET
|
||||||
|
BASE_SUBNET="192.168.1"
|
||||||
|
|
||||||
|
# Create a .env file with the specified parameters
|
||||||
|
cat <<EOF > .env
|
||||||
|
# Base params
|
||||||
|
BASE_SUBNET=${BASE_SUBNET}
|
||||||
|
XBEE_INDEX=${index}
|
||||||
|
|
||||||
|
# Default params
|
||||||
|
DEFAULT_GATEWAY=${BASE_SUBNET}.1
|
||||||
|
DEFAULT_IPVLAN_IP=${BASE_SUBNET}.20 # Required only when running ipvlan net (look in docker compose)
|
||||||
|
DEFAULT_MACVLAN_IP=${BASE_SUBNET}.30 # Required only when running macvlan net (look in docker compose)
|
||||||
|
|
||||||
|
# Configuration for xbnet0
|
||||||
|
XBEE_PORT=/dev/ttyUSB0
|
||||||
|
XBEE_BAUDRATE=230400
|
||||||
|
XBEE_NET_SRC_IP=${BASE_SUBNET}.20${index} # Ensure this IP matches the network range
|
||||||
|
XBEE_NET_IFACE_NAME=xbnet0
|
||||||
|
EOF
|
||||||
|
|
||||||
|
|
||||||
|
# Restart Docker Composes services
|
||||||
|
docker compose -f docker-compose-run-single.yml down
|
||||||
|
docker compose -f docker-compose-run-single.yml up --build
|
|
@ -1,7 +1,30 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# enable_host_macvlan.sh
|
||||||
|
#
|
||||||
|
# This script enables IP forwarding, deletes any existing `macvlan0` interface, and creates a new `macvlan0` interface
|
||||||
|
# on the dynamically detected Wi-Fi interface. It allows the Docker container to have its own IP address on the local subnet.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# ./enable_host_macvlan.sh
|
||||||
|
#
|
||||||
|
# The script will automatically determine the Wi-Fi interface name and assign an IP address to the `macvlan0` interface.
|
||||||
|
# Modify the assigned IP address if your network setup differs.
|
||||||
|
|
||||||
|
# Source the get_connected_wifi_info.sh script to use its functions
|
||||||
|
source ./get_connected_wifi_info.sh
|
||||||
|
|
||||||
|
# Get the Wi-Fi interface name dynamically
|
||||||
|
WIFI_DEVICE=$(get_connected_wifi_device)
|
||||||
|
|
||||||
|
# Check if a Wi-Fi device was found
|
||||||
|
if [ -z "$WIFI_DEVICE" ]; then
|
||||||
|
echo "Error: No connected Wi-Fi device found. Exiting..."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Enable IP forwarding
|
# Enable IP forwarding
|
||||||
sudo sysctl net.ipv4.ip_forward
|
sudo sysctl net.ipv4.ip_forward=1
|
||||||
|
|
||||||
# Delete the existing macvlan0 interface if it exists
|
# Delete the existing macvlan0 interface if it exists
|
||||||
if ip link show macvlan0 &> /dev/null; then
|
if ip link show macvlan0 &> /dev/null; then
|
||||||
|
@ -9,10 +32,14 @@ if ip link show macvlan0 &> /dev/null; then
|
||||||
sudo ip link delete macvlan0
|
sudo ip link delete macvlan0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create a new macvlan0 interface
|
# Create a new macvlan0 interface linked to the detected Wi-Fi interface
|
||||||
echo "Creating macvlan0 interface..."
|
echo "Creating macvlan0 interface on $WIFI_DEVICE..."
|
||||||
sudo ip link add link wlp0s20f3 macvlan0 type macvlan mode bridge
|
sudo ip link add link $WIFI_DEVICE macvlan0 type macvlan mode bridge
|
||||||
sudo ip addr add 192.168.1.100/24 dev macvlan0 # Use an IP in the same range as the container network but different from any assigned IP
|
|
||||||
|
# Assign an IP address to the macvlan0 interface (ensure it’s unique within your network)
|
||||||
|
sudo ip addr add 192.168.1.100/24 dev macvlan0
|
||||||
|
|
||||||
|
# Bring the macvlan0 interface up
|
||||||
sudo ip link set macvlan0 up
|
sudo ip link set macvlan0 up
|
||||||
|
|
||||||
echo "macvlan0 interface created and set up successfully."
|
echo "macvlan0 interface created and set up successfully on $WIFI_DEVICE."
|
||||||
|
|
|
@ -1,5 +1,16 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# entrypoint.sh
|
||||||
|
#
|
||||||
|
# This script is responsible for setting up and maintaining an XBee network interface within a Docker container.
|
||||||
|
# It performs several key tasks, including checking for root privileges, setting up the XBee network interface,
|
||||||
|
# configuring network bridges, and monitoring both the XBee device and Wi-Fi interface for connectivity.
|
||||||
|
# The script runs in a loop to ensure continuous operation, retrying the setup process if any steps fail.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# - This script is intended to be run as the entrypoint for a Docker container.
|
||||||
|
# - Ensure that the script has executable permissions (`chmod +x entrypoint.sh`) before running it.
|
||||||
|
|
||||||
# Source the get_connected_wifi_info.sh script
|
# Source the get_connected_wifi_info.sh script
|
||||||
source /scripts/get_connected_wifi_info.sh
|
source /scripts/get_connected_wifi_info.sh
|
||||||
|
|
||||||
|
@ -18,27 +29,27 @@ check_root() {
|
||||||
# - xbnet interface
|
# - xbnet interface
|
||||||
cleanup() {
|
cleanup() {
|
||||||
echo "Cleaning up resources..."
|
echo "Cleaning up resources..."
|
||||||
pkill -f "xbnet -d --serial-speed $XBEE0_BAUDRATE $XBEE0_PORT tap"
|
pkill -f "xbnet -d --serial-speed $XBEE_BAUDRATE $XBEE_PORT tap"
|
||||||
|
|
||||||
if ip link show br0 > /dev/null 2>&1; then
|
if ip link show br0 > /dev/null 2>&1; then
|
||||||
ip link set br0 down
|
ip link set br0 down
|
||||||
brctl delbr br0
|
brctl delbr br0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ip link show $XBEE0_NET_IFACE_NAME > /dev/null 2>&1; then
|
if ip link show $XBEE_NET_IFACE_NAME > /dev/null 2>&1; then
|
||||||
ip link set $XBEE0_NET_IFACE_NAME down
|
ip link set $XBEE_NET_IFACE_NAME down
|
||||||
ip link delete $XBEE0_NET_IFACE_NAME
|
ip link delete $XBEE_NET_IFACE_NAME
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to check if the XBee device is connected
|
# Function to check if the XBee device is connected
|
||||||
# - Ensures that the XBee device is present at the specified port before proceeding
|
# - Ensures that the XBee device is present at the specified port before proceeding
|
||||||
check_xbee_device() {
|
check_xbee_device() {
|
||||||
if [ -e "$XBEE0_PORT" ]; then
|
if [ -e "$XBEE_PORT" ]; then
|
||||||
echo "XBee device found at $XBEE0_PORT. Proceeding with setup..."
|
echo "XBee device found at $XBEE_PORT. Proceeding with setup..."
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
echo "Error: No XBee device found at $XBEE0_PORT. Please connect the device."
|
echo "Error: No XBee device found at $XBEE_PORT. Please connect the device."
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@ -48,38 +59,38 @@ check_xbee_device() {
|
||||||
# - Verifies if the interface is successfully created and returns the appropriate status code
|
# - Verifies if the interface is successfully created and returns the appropriate status code
|
||||||
start_xbnet_interface() {
|
start_xbnet_interface() {
|
||||||
echo "Starting XBee network interface..."
|
echo "Starting XBee network interface..."
|
||||||
xbnet -d --serial-speed $XBEE0_BAUDRATE $XBEE0_PORT tap &
|
xbnet -d --serial-speed $XBEE_BAUDRATE $XBEE_PORT tap &
|
||||||
|
|
||||||
# Wait until the xbnet interface is created
|
# Wait until the xbnet interface is created
|
||||||
while [ ! -d "/sys/class/net/$XBEE0_NET_IFACE_NAME" ]; do
|
while [ ! -d "/sys/class/net/$XBEE_NET_IFACE_NAME" ]; do
|
||||||
echo "Waiting for interface $XBEE0_NET_IFACE_NAME to be created..."
|
echo "Waiting for interface $XBEE_NET_IFACE_NAME to be created..."
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|
||||||
# Get the xbnet interface name (e.g., xbnet0) automatically
|
# Get the xbnet interface name (e.g., xbnet0) automatically
|
||||||
XBEE0_NET_IFACE_NAME=$(ls /sys/class/net | grep 'xbnet')
|
XBEE_NET_IFACE_NAME=$(ls /sys/class/net | grep 'xbnet')
|
||||||
|
|
||||||
# Check if the xbnet interface is found
|
# Check if the xbnet interface is found
|
||||||
if [ -z "$XBEE0_NET_IFACE_NAME" ]; then
|
if [ -z "$XBEE_NET_IFACE_NAME" ]; then
|
||||||
echo "Error: No XBee network interface found. Retrying setup..."
|
echo "Error: No XBee network interface found. Retrying setup..."
|
||||||
cleanup
|
cleanup
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
echo "XBee network interface $XBEE0_NET_IFACE_NAME created successfully."
|
echo "XBee network interface $XBEE_NET_IFACE_NAME created successfully."
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Configure the network interface and bridge
|
# Configure the network interface and bridge
|
||||||
# - Creates the network interface with the name specified by XBEE0_NET_IFACE_NAME in .env file
|
# - Creates the network interface with the name specified by XBEE_NET_IFACE_NAME in .env file
|
||||||
# - Creates a bridge interface and attaches the xbnet interface to it
|
# - Creates a bridge interface and attaches the xbnet interface to it
|
||||||
# - Brings up the bridge interface
|
# - Brings up the bridge interface
|
||||||
configure_network_and_bridge() {
|
configure_network_and_bridge() {
|
||||||
ip addr add $XBEE0_NET_SRC_IP/24 dev $XBEE0_NET_IFACE_NAME
|
ip addr add $XBEE_NET_SRC_IP/24 dev $XBEE_NET_IFACE_NAME
|
||||||
ip link set dev $XBEE0_NET_IFACE_NAME up
|
ip link set dev $XBEE_NET_IFACE_NAME up
|
||||||
|
|
||||||
brctl addbr br0
|
brctl addbr br0
|
||||||
brctl addif br0 $XBEE0_NET_IFACE_NAME
|
brctl addif br0 $XBEE_NET_IFACE_NAME
|
||||||
ip link set dev br0 up
|
ip link set dev br0 up
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,7 +103,7 @@ monitor_and_bridge_wifi() {
|
||||||
HOST_WIFI_IFACE=$(get_connected_wifi_device)
|
HOST_WIFI_IFACE=$(get_connected_wifi_device)
|
||||||
|
|
||||||
if [ -n "$HOST_WIFI_IFACE" ]; then
|
if [ -n "$HOST_WIFI_IFACE" ]; then
|
||||||
echo "Wi-Fi interface found: $HOST_WIFI_IFACE. Bridging with $XBEE0_NET_IFACE_NAME..."
|
echo "Wi-Fi interface found: $HOST_WIFI_IFACE. Bridging with $XBEE_NET_IFACE_NAME..."
|
||||||
brctl addif br0 $HOST_WIFI_IFACE
|
brctl addif br0 $HOST_WIFI_IFACE
|
||||||
|
|
||||||
iptables -t nat -A POSTROUTING -o $HOST_WIFI_IFACE -j MASQUERADE
|
iptables -t nat -A POSTROUTING -o $HOST_WIFI_IFACE -j MASQUERADE
|
||||||
|
@ -112,11 +123,11 @@ monitor_and_bridge_wifi() {
|
||||||
# - Periodically checks if the XBee device is still connected
|
# - Periodically checks if the XBee device is still connected
|
||||||
# - If the device is disconnected, triggers cleanup and restarts the setup process
|
# - If the device is disconnected, triggers cleanup and restarts the setup process
|
||||||
monitor_xbee_device() {
|
monitor_xbee_device() {
|
||||||
while [ -e "$XBEE0_PORT" ]; do
|
while [ -e "$XBEE_PORT" ]; do
|
||||||
sleep 5
|
sleep 5
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "XBee device at $XBEE0_PORT was removed. Cleaning up..."
|
echo "XBee device at $XBEE_PORT was removed. Cleaning up..."
|
||||||
cleanup
|
cleanup
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue