From e25f3bcfde4a98b0cd5e44850d3a33f3cf4bb676 Mon Sep 17 00:00:00 2001 From: Aaron Curley Date: Sun, 4 Apr 2021 12:24:07 -0700 Subject: [PATCH] udp-broadcast-relay-redux: Add package This commit is largely based on the work from Daniel Dickinson in PR #2096 which was never merged. I tweaked it in a number of ways. All bugs with this package are mine, not his. Signed-off-by: Aaron Curley --- .../Makefile | 49 ++++++++++++ .../files/udp-broadcast-relay-redux.init | 76 +++++++++++++++++++ .../files/udp_broadcast_relay_redux.config | 6 ++ 3 files changed, 131 insertions(+) create mode 100644 net/udp-broadcast-relay-redux-openwrt/Makefile create mode 100644 net/udp-broadcast-relay-redux-openwrt/files/udp-broadcast-relay-redux.init create mode 100644 net/udp-broadcast-relay-redux-openwrt/files/udp_broadcast_relay_redux.config diff --git a/net/udp-broadcast-relay-redux-openwrt/Makefile b/net/udp-broadcast-relay-redux-openwrt/Makefile new file mode 100644 index 000000000..f3854fb80 --- /dev/null +++ b/net/udp-broadcast-relay-redux-openwrt/Makefile @@ -0,0 +1,49 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=udp-broadcast-relay-redux +PKG_RELEASE:=$(AUTORELEASE) +PKG_LICENSE:=GPL-2.0 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/udp-redux/udp-broadcast-relay-redux +PKG_SOURCE_DATE:=2021-04-05 +PKG_SOURCE_VERSION:=671372938b55a186625a80516f86e8b9948c977a +PKG_MIRROR_HASH:=11cf8728f2b8e966f4f57032d817a889f680ed8e61afff35b52ca9c6789a03c6 + +include $(INCLUDE_DIR)/package.mk + +define Package/udp-broadcast-relay-redux + SECTION:=net + CATEGORY:=Network + SUBMENU:=Routing and Redirection + TITLE:=listens for packets on a specified UDP broadcast port and replays them + URL:=https://github.com/udp-redux/udp-broadcast-relay-redux +endef + +define Package/udp-broadcast-relay-redux/description + This program listens for packets on a specified UDP broadcast port. + When a packet is received, it sends that packet to all specified interfaces but + the one it came from as though it originated from the original sender. + The primary purpose of this is to allow games on machines on separated + local networks (Ethernet, WLAN) that use udp broadcasts to find each other to do so. + It also works on ppp links, so you can log in from windows boxes (e.g. using pptp) + and play LAN-based games together. Currently, you have to care about upcoming or + downgoing interfaces yourself. +endef + +define Package/udp-broadcast-relay-redux/conffiles +/etc/config/udp_broadcast_relay_redux +endef + +define Build/Compile + $(TARGET_CC) $(TARGET_CFLAGS) $(PKG_BUILD_DIR)/main.c -o $(PKG_BUILD_DIR)/$(PKG_NAME) +endef + +define Package/udp-broadcast-relay-redux/install + $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/config $(1)/etc/init.d + $(CP) $(PKG_BUILD_DIR)/$(PKG_NAME) $(1)/usr/sbin/ + $(INSTALL_CONF) ./files/udp_broadcast_relay_redux.config $(1)/etc/config/udp_broadcast_relay_redux + $(INSTALL_BIN) ./files/udp-broadcast-relay-redux.init $(1)/etc/init.d/udp-broadcast-relay-redux +endef + +$(eval $(call BuildPackage,udp-broadcast-relay-redux)) diff --git a/net/udp-broadcast-relay-redux-openwrt/files/udp-broadcast-relay-redux.init b/net/udp-broadcast-relay-redux-openwrt/files/udp-broadcast-relay-redux.init new file mode 100644 index 000000000..aa35f5546 --- /dev/null +++ b/net/udp-broadcast-relay-redux-openwrt/files/udp-broadcast-relay-redux.init @@ -0,0 +1,76 @@ +#!/bin/sh /etc/rc.common + +START=90 +STOP=10 + +USE_PROCD=1 +PROG=/usr/sbin/udp-broadcast-relay-redux +NAME=udp-broadcast-relay-redux +PIDCOUNT=0 + +validate_section_udp_broadcast_relay_redux() +{ + uci_validate_section udp_broadcast_relay_redux udp_broadcast_relay_redux "${1}" \ + 'id:uinteger' \ + 'port:port' \ + 'network:list(string)' \ + 'src_override:ip4addr' \ + 'dest_override:ip4addr' + + [ -z "$id" ] && return 1 + + [ -z "$network" ] && return 1 + + [ -z "$port" ] && return 1 + + return 0 +} + +udp_broadcast_relay_redux_instance() { + local net network ifname id port src_override dest_override + + validate_section_udp_broadcast_relay_redux "${1}" || { + echo "Validation failed" + return 1 + } + + PIDCOUNT="$((PIDCOUNT + 1))" + + procd_open_instance + procd_set_param command "$PROG" "--id" "${id}" "--port" "${port}" + + for net in $network; do + network_get_device ifname "$net" + if [ -z "$ifname" ]; then + network_get_physdev ifname "$net" + fi + if [ -n "$ifname" ]; then + procd_append_param command "--dev" "$ifname" + procd_append_param netdev "$ifname" + fi + done + + if [ -n "$src_override" ] ; then + procd_append_param command "-s" "$src_override" + fi + + if [ -n "$dest_override" ] ; then + procd_append_param command "-t" "$dest_override" + fi + + procd_add_jail ubr-${PIDCOUNT} + procd_close_instance +} + +start_service() { + . /lib/functions.sh + . /lib/functions/network.sh + + config_load udp_broadcast_relay_redux + config_foreach udp_broadcast_relay_redux_instance udp_broadcast_relay_redux +} + +service_triggers() { + procd_add_reload_trigger "udp_broadcast_relay_redux" + procd_add_validation validate_section_udp_broadcast_relay_redux +} diff --git a/net/udp-broadcast-relay-redux-openwrt/files/udp_broadcast_relay_redux.config b/net/udp-broadcast-relay-redux-openwrt/files/udp_broadcast_relay_redux.config new file mode 100644 index 000000000..f7164bd68 --- /dev/null +++ b/net/udp-broadcast-relay-redux-openwrt/files/udp_broadcast_relay_redux.config @@ -0,0 +1,6 @@ +#config udp_broadcast_relay_redux +# option id 1 +# option port 47624 +# list network lan +# list network vpnsrv +# option dest_override 10.66.2.13