Installation
Prerequisites
The Raspberry Pi shall have been initialized with a basic OS.
Download and install the Raspberry Pi Imager on your laptop.
Insert the Micro SD card into your laptop.
- Launch Raspberry Pi Imager:
Device: Raspberry Pi 5
Operating System: Raspberry Pi OS (64-bit)
Storage: Your Micro SD card
- Customize OS settings:
Hostname : limenurse.local
Set username, password
Configure Wi-Fi and locale
Enable SSH through password
Flash the card and verify.
limenurse.local is the name to use to access the PI through wifi. Any other name can be used, as long as it’s not limelight.local which we will use later on on the USB interface. The installation script will adapt to the chosen name by readiing hostname from the PI installation
Insert the Micro SD card into the Raspberry Pi 5, connect to the Pi through your wifi.
Configuration
Clone this repository locally
Setup the target gateway IP addresses for the pi usb0 and eth0 interfaces in conf/env.
Here is an example of the env file to modify if needed
export USB_IP_GATEWAY_LINUX=172.30.0.1
export USB_IP_ADDRESSES_LINUX=172.30.0.10,172.30.0.20,255.255.255.0
export USB_IP_GATEWAY_WINDOWS=172.31.0.1
export USB_IP_ADDRESSES_WINDOWS=172.31.0.10,172.31.0.20,255.255.255.0
export ETH_IP_GATEWAY=172.40.0.1
export ETH_IP_ADDRESSES=172.40.0.10,172.40.0.20,255.255.255.0
IP address should be something like 172.XXX.0.1 with XXX not being 29 to avoid IP conflict with the real limelight inside the Pi.
Data Link Layer Deployment
This first step will configure the PI to provide limelight like USB gadget services on its usb0 interface. It’s performed by a bash script which will reboot the PI once and has to be relaunched to finalize the USB gadget configuration
sudo scripts/01-configure-gadget.sh
Enable USB device mode in the Raspberry Pi firmware
Load necessary kernel modules (dwc2)
Set device-tree overlays
Install the limelight-gadget.sh script to mock limelight USB descriptors on both ecm on usb0 and rndis on usb1 interfaces
Install the systemd limelight-gadget.service to start and persist the script
Network Layer Deployment
The second step is to deploy network management services on both eth0 and usb0
sudo scripts/02-configure-network.sh
Install the name_resolver.py script to manage name resolution on usb and ethernet interfaces
Configure dnsmasq to offer DHCP services on both interfaces and allow laptop to communicate sith those interfaces by getting an IP address on thei network
Restrict the current Pi name mangement system to the wifi wlan0 interface
Publish limelight.local name on usb0 gateway and limelight.eth.local on eth0 gateway using a custom python script
After the reboot, the PI is accessible from wifi, ethernet and usb gadget interfaces with different names :
The wifi wlan0 interface keeps the name configured at Pi installation : limenurse.local
The ethernet eth0 interface gets limelight.eth.local name
The USB gadget usb0 interface gets limelight.local name to fully mock the PI
Transport Layer Deployment
The third step is to launch forward data between interfaces
sudo scripts/03-configure-routing.sh
Install the udp_forwarder.py script to manage udp broadcast network data
Install the limelight-routing.sh script to configure iptables for unicast data transfer between interfaces and udp_forwarder start
Install the systemd limelight-routing.service to start and persist the script