From c1843da8e8a13de5bf7941f1da4c58132f073ae7 Mon Sep 17 00:00:00 2001 From: adityachooramani Date: Mon, 29 Dec 2025 17:26:56 +0530 Subject: [PATCH 1/3] falter-bird-utils: add UCI translator for Bird2 --- net/falter-bird-utils/Makefile | 0 net/falter-bird-utils/files/bird.config | 0 net/falter-bird-utils/files/bird.init | 0 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 net/falter-bird-utils/Makefile create mode 100644 net/falter-bird-utils/files/bird.config create mode 100644 net/falter-bird-utils/files/bird.init diff --git a/net/falter-bird-utils/Makefile b/net/falter-bird-utils/Makefile new file mode 100644 index 00000000..e69de29b diff --git a/net/falter-bird-utils/files/bird.config b/net/falter-bird-utils/files/bird.config new file mode 100644 index 00000000..e69de29b diff --git a/net/falter-bird-utils/files/bird.init b/net/falter-bird-utils/files/bird.init new file mode 100644 index 00000000..e69de29b From 54ae73ac16fadbab475883186243ea8c2483ce0f Mon Sep 17 00:00:00 2001 From: adityachooramani Date: Mon, 29 Dec 2025 17:50:43 +0530 Subject: [PATCH 2/3] falter-bird-utils: include README and update logic --- net/falter-bird-utils/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 net/falter-bird-utils/README.md diff --git a/net/falter-bird-utils/README.md b/net/falter-bird-utils/README.md new file mode 100644 index 00000000..31f09e26 --- /dev/null +++ b/net/falter-bird-utils/README.md @@ -0,0 +1,12 @@ +# falter-bird-utils + +This package provides a UCI-to-Bird2 configuration translator for Falter mesh nodes. + +## Features +- **Procd Integration:** Automatically regenerates Bird2 config and reloads the daemon on UCI changes. +- **Dynamic Router ID:** Automatically detects the primary IPv4 address (e.g., from `br-lan`). +- **Memory Optimized:** Writes configuration to `/var/etc` to protect flash storage. +- **Link-Local Support:** Handles IPv6 interface scoping for BGP neighbors. + +## UCI Configuration +The configuration is managed via `/etc/config/bird`. \ No newline at end of file From b17c0099622128f400be3c9bb0ff469f59237ded Mon Sep 17 00:00:00 2001 From: adityachooramani Date: Mon, 29 Dec 2025 17:55:53 +0530 Subject: [PATCH 3/3] falter-bird-utils: fix empty files and sync final logic --- net/falter-bird-utils/Makefile | 31 ++++++++++ net/falter-bird-utils/files/bird.config | 9 +++ net/falter-bird-utils/files/bird.init | 82 +++++++++++++++++++++++++ 3 files changed, 122 insertions(+) diff --git a/net/falter-bird-utils/Makefile b/net/falter-bird-utils/Makefile index e69de29b..80e6af19 100644 --- a/net/falter-bird-utils/Makefile +++ b/net/falter-bird-utils/Makefile @@ -0,0 +1,31 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=falter-bird-utils +PKG_VERSION:=1.0.0 +PKG_RELEASE:=1 +PKG_MAINTAINER:=Aditya Chooramani - adityaxchooramani@gmail.com + +include $(INCLUDE_DIR)/package.mk + +define Package/falter-bird-utils + SECTION:=net + CATEGORY:=Network + TITLE:=UCI-to-Bird2 Translator for Falter + DEPENDS:=+bird2 +ip-full +endef + +define Package/falter-bird-utils/description + Automates Bird2 configuration for Falter Mesh Nodes using UCI. +endef + +define Build/Compile +endef + +define Package/falter-bird-utils/install + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/bird.init $(1)/etc/init.d/bird + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_DATA) ./files/bird.config $(1)/etc/config/bird +endef + +$(eval $(call BuildPackage,falter-bird-utils)) \ No newline at end of file diff --git a/net/falter-bird-utils/files/bird.config b/net/falter-bird-utils/files/bird.config index e69de29b..4268430f 100644 --- a/net/falter-bird-utils/files/bird.config +++ b/net/falter-bird-utils/files/bird.config @@ -0,0 +1,9 @@ +config global 'global' + option local_as '65001' + +config bgp_peer 'my_backbone' + option address 'fe80::1' + option remote_as '65000' + option interface 'eth0' + option import_filter 'all' + option export_filter 'all' \ No newline at end of file diff --git a/net/falter-bird-utils/files/bird.init b/net/falter-bird-utils/files/bird.init index e69de29b..336b08a0 100644 --- a/net/falter-bird-utils/files/bird.init +++ b/net/falter-bird-utils/files/bird.init @@ -0,0 +1,82 @@ +#!/bin/sh /etc/rc.common + +USE_PROCD=1 +START=70 +STOP=10 + +BIRD_BIN="/usr/sbin/bird" +BIRD_CONF="/var/etc/bird.conf" +BIRD_PID_FILE="/var/run/bird.pid" + +. /lib/functions.sh + +write_header() { + local as_num r_id + + config_load bird + + # Universal IP detection: Finds first global IPv4 that isn't loopback + r_id=$(ip -4 addr show | grep inet | grep -v '127.0.0.1' | awk '{print $2}' | cut -d/ -f1 | head -n1) + [ -z "$r_id" ] && r_id="1.1.1.1" + + config_get as_num global local_as "65001" + + echo "log syslog all;" + echo "router id $r_id;" + echo "define MY_AS = $as_num;" + + echo "protocol kernel { ipv6 { export all; }; }" + echo "protocol device {}" +} + +handle_peer() { + local section="$1" + local addr remote_as iface imp exp + + config_get addr "$section" address + config_get remote_as "$section" remote_as + config_get iface "$section" interface + config_get imp "$section" import_filter "all" + config_get exp "$section" export_filter "all" + + [ -z "$addr" ] || [ -z "$remote_as" ] && return + + echo "protocol bgp $section {" + echo " local as MY_AS;" + echo " neighbor $addr as $remote_as;" + [ -n "$iface" ] && echo " interface \"$iface\";" + + echo " ipv6 {" + echo " import $imp;" + echo " export $exp;" + echo " };" + echo "}" +} + +generate_conf() { + mkdir -p /var/etc + write_header > $BIRD_CONF + config_load bird + config_foreach handle_peer bgp_peer >> $BIRD_CONF +} + +start_service() { + generate_conf + mkdir -p /var/run + procd_open_instance + procd_set_param command $BIRD_BIN -f -c $BIRD_CONF -P $BIRD_PID_FILE + procd_set_param stdout 1 + procd_set_param stderr 1 + procd_set_param respawn + procd_close_instance +} + +service_triggers() { + procd_add_reload_trigger "bird" +} + +reload_service() { + generate_conf + procd_send_signal bird +} +