From 44bb27b323e231b3e6bba24fcd40dc9205d820cb Mon Sep 17 00:00:00 2001 From: Tom Herbers <mail@tomherbers.de> Date: Fri, 15 Dec 2023 17:11:23 +0100 Subject: [PATCH] ff-mesh-vpn-tunneldigger: init This is a dump of the former core package gluon-mesh-vpn-tunneldigger: https://github.com/freifunk-gluon/gluon/tree/c2dc338abfbebb34dcf62124dc09be85fa88f8ef/package/gluon-mesh-vpn-tunneldigger Only neccesary changes have been made. --- ff-mesh-vpn-tunneldigger/Makefile | 16 +++++++ ff-mesh-vpn-tunneldigger/README.md | 13 ++++++ ff-mesh-vpn-tunneldigger/check_site.lua | 2 + .../lib/gluon/mesh-vpn/provider/tunneldigger | 0 .../lib/gluon/reload.d/310-tunneldigger-stop | 2 + .../lib/gluon/reload.d/790-tunneldigger-start | 2 + .../usr/lib/micron.d/tunneldigger-watchdog | 1 + .../gluon/upgrade/400-mesh-vpn-tunneldigger | 19 ++++++++ .../luasrc/usr/bin/tunneldigger-watchdog | 31 +++++++++++++ .../gluon/mesh-vpn/provider/tunneldigger.lua | 46 +++++++++++++++++++ 10 files changed, 132 insertions(+) create mode 100644 ff-mesh-vpn-tunneldigger/Makefile create mode 100644 ff-mesh-vpn-tunneldigger/README.md create mode 100644 ff-mesh-vpn-tunneldigger/check_site.lua create mode 100644 ff-mesh-vpn-tunneldigger/files/lib/gluon/mesh-vpn/provider/tunneldigger create mode 100755 ff-mesh-vpn-tunneldigger/files/lib/gluon/reload.d/310-tunneldigger-stop create mode 100755 ff-mesh-vpn-tunneldigger/files/lib/gluon/reload.d/790-tunneldigger-start create mode 100644 ff-mesh-vpn-tunneldigger/files/usr/lib/micron.d/tunneldigger-watchdog create mode 100755 ff-mesh-vpn-tunneldigger/luasrc/lib/gluon/upgrade/400-mesh-vpn-tunneldigger create mode 100755 ff-mesh-vpn-tunneldigger/luasrc/usr/bin/tunneldigger-watchdog create mode 100644 ff-mesh-vpn-tunneldigger/luasrc/usr/lib/lua/gluon/mesh-vpn/provider/tunneldigger.lua diff --git a/ff-mesh-vpn-tunneldigger/Makefile b/ff-mesh-vpn-tunneldigger/Makefile new file mode 100644 index 0000000..f421a51 --- /dev/null +++ b/ff-mesh-vpn-tunneldigger/Makefile @@ -0,0 +1,16 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=ff-mesh-vpn-tunneldigger +PKG_VERSION:=0.0.1 +PKG_RELEASE:=1 + +PKG_LICENSE:=BSD-2-Clause + +include $(TOPDIR)/../package/gluon.mk + +define Package/$(PKG_NAME) + TITLE:=Support for connecting meshes via tunneldigger/L2TPv3 pseudowire + DEPENDS:=+gluon-core +gluon-mesh-vpn-core +tunneldigger +simple-tc +endef + +$(eval $(call BuildPackageGluon,$(PKG_NAME))) diff --git a/ff-mesh-vpn-tunneldigger/README.md b/ff-mesh-vpn-tunneldigger/README.md new file mode 100644 index 0000000..50a0f4e --- /dev/null +++ b/ff-mesh-vpn-tunneldigger/README.md @@ -0,0 +1,13 @@ +# ff-mesh-vpn-tunneldigger + +This package is based on the former core gluon package [gluon-mesh-vpn-tunneldigger](https://github.com/freifunk-gluon/gluon/tree/c2dc338abfbebb34dcf62124dc09be85fa88f8ef/package/gluon-mesh-vpn-tunneldigger). + +It you want to keep using tunneldigger you need to take the following steps: + +- `modules`: add this repo as described in the [README.md](../README.md#using-this-repository) +- `image-customization.lua`: remove the `mesh-vpn-tunneldigger` feature +- `image-customization.lua`: add the `config-mode-mesh-vpn` feature: + `features({'config-mode-mesh-vpn'})` + Not needed if you don't use the config mode or don't want to enable configuration of VPN settings via the config mode. +- `image-customization.lua`: add the `ff-mesh-vpn-tunneldigger` package: + `packages({'ff-mesh-vpn-tunneldigger'})` diff --git a/ff-mesh-vpn-tunneldigger/check_site.lua b/ff-mesh-vpn-tunneldigger/check_site.lua new file mode 100644 index 0000000..77ea83c --- /dev/null +++ b/ff-mesh-vpn-tunneldigger/check_site.lua @@ -0,0 +1,2 @@ +need_string_array(in_domain({'mesh_vpn', 'tunneldigger', 'brokers'})) +need_number({'mesh_vpn', 'tunneldigger', 'mtu'}) diff --git a/ff-mesh-vpn-tunneldigger/files/lib/gluon/mesh-vpn/provider/tunneldigger b/ff-mesh-vpn-tunneldigger/files/lib/gluon/mesh-vpn/provider/tunneldigger new file mode 100644 index 0000000..e69de29 diff --git a/ff-mesh-vpn-tunneldigger/files/lib/gluon/reload.d/310-tunneldigger-stop b/ff-mesh-vpn-tunneldigger/files/lib/gluon/reload.d/310-tunneldigger-stop new file mode 100755 index 0000000..651530b --- /dev/null +++ b/ff-mesh-vpn-tunneldigger/files/lib/gluon/reload.d/310-tunneldigger-stop @@ -0,0 +1,2 @@ +#!/bin/sh +/etc/init.d/tunneldigger stop diff --git a/ff-mesh-vpn-tunneldigger/files/lib/gluon/reload.d/790-tunneldigger-start b/ff-mesh-vpn-tunneldigger/files/lib/gluon/reload.d/790-tunneldigger-start new file mode 100755 index 0000000..9b174f1 --- /dev/null +++ b/ff-mesh-vpn-tunneldigger/files/lib/gluon/reload.d/790-tunneldigger-start @@ -0,0 +1,2 @@ +#!/bin/sh +/etc/init.d/tunneldigger start diff --git a/ff-mesh-vpn-tunneldigger/files/usr/lib/micron.d/tunneldigger-watchdog b/ff-mesh-vpn-tunneldigger/files/usr/lib/micron.d/tunneldigger-watchdog new file mode 100644 index 0000000..c4ae3bc --- /dev/null +++ b/ff-mesh-vpn-tunneldigger/files/usr/lib/micron.d/tunneldigger-watchdog @@ -0,0 +1 @@ +*/5 * * * * /usr/bin/tunneldigger-watchdog diff --git a/ff-mesh-vpn-tunneldigger/luasrc/lib/gluon/upgrade/400-mesh-vpn-tunneldigger b/ff-mesh-vpn-tunneldigger/luasrc/lib/gluon/upgrade/400-mesh-vpn-tunneldigger new file mode 100755 index 0000000..9888d87 --- /dev/null +++ b/ff-mesh-vpn-tunneldigger/luasrc/lib/gluon/upgrade/400-mesh-vpn-tunneldigger @@ -0,0 +1,19 @@ +#!/usr/bin/lua + +local site = require 'gluon.site' +local util = require 'gluon.util' +local vpn_core = require 'gluon.mesh-vpn' + +local uci = require('simple-uci').cursor() + + +uci:section('tunneldigger', 'broker', 'mesh_vpn', { + uuid = util.node_id(), + interface = vpn_core.get_interface(), + bind_interface = 'br-wan', + group = 'gluon-mesh-vpn', + broker_selection = 'usage', + address = site.mesh_vpn.tunneldigger.brokers(), +}) + +uci:save('tunneldigger') diff --git a/ff-mesh-vpn-tunneldigger/luasrc/usr/bin/tunneldigger-watchdog b/ff-mesh-vpn-tunneldigger/luasrc/usr/bin/tunneldigger-watchdog new file mode 100755 index 0000000..0f1e560 --- /dev/null +++ b/ff-mesh-vpn-tunneldigger/luasrc/usr/bin/tunneldigger-watchdog @@ -0,0 +1,31 @@ +#!/usr/bin/lua + +local uci = require('simple-uci').cursor() + +local function restart_tunneldigger() + os.execute('logger -t tunneldigger-watchdog "Restarting Tunneldigger."') + os.execute('/etc/init.d/tunneldigger restart') +end + +local function has_mesh_vpn_neighbours() + local handle = io.popen('batctl o', 'r') + if not handle then + return false + end + for line in handle:lines() do + if line:find('mesh%-vpn') then + handle:close() + return true + end + end + handle:close() + return false +end + +if uci:get_bool('tunneldigger', 'mesh_vpn', 'enabled') then + if not has_mesh_vpn_neighbours() then + os.execute('logger -t tunneldigger-watchdog "No vpn-mesh neighbours found."') + restart_tunneldigger() + return + end +end diff --git a/ff-mesh-vpn-tunneldigger/luasrc/usr/lib/lua/gluon/mesh-vpn/provider/tunneldigger.lua b/ff-mesh-vpn-tunneldigger/luasrc/usr/lib/lua/gluon/mesh-vpn/provider/tunneldigger.lua new file mode 100644 index 0000000..9ae6753 --- /dev/null +++ b/ff-mesh-vpn-tunneldigger/luasrc/usr/lib/lua/gluon/mesh-vpn/provider/tunneldigger.lua @@ -0,0 +1,46 @@ +local uci = require('simple-uci').cursor() + +local site = require 'gluon.site' +local vpn_core = require 'gluon.mesh-vpn' + +local M = {} + +function M.public_key() + return nil +end + +function M.enable(val) + uci:set('tunneldigger', 'mesh_vpn', 'enabled', val) + uci:save('tunneldigger') +end + +function M.active() + return site.mesh_vpn.tunneldigger() ~= nil +end + +function M.set_limit(ingress_limit, egress_limit) + if ingress_limit ~= nil then + uci:set('tunneldigger', 'mesh_vpn', 'limit_bw_down', ingress_limit) + else + uci:delete('tunneldigger', 'mesh_vpn', 'limit_bw_down') + end + + if egress_limit ~= nil then + uci:section('simple-tc', 'interface', 'mesh_vpn', { + ifname = vpn_core.get_interface(), + enabled = true, + limit_egress = egress_limit, + }) + else + uci:delete('simple-tc', 'mesh_vpn') + end + + uci:save('tunneldigger') + uci:save('simple-tc') +end + +function M.mtu() + return site.mesh_vpn.tunneldigger.mtu() +end + +return M -- GitLab