olsr2
This commit is contained in:
		
							parent
							
								
									b85135467b
								
							
						
					
					
						commit
						d78d521a40
					
				
							
								
								
									
										1
									
								
								contrib/ci/olsr-site/i18n
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								contrib/ci/olsr-site/i18n
									
									
									
									
									
										Symbolic link
									
								
							| @ -0,0 +1 @@ | |||||||
|  | ../minimal-site/i18n | ||||||
							
								
								
									
										1
									
								
								contrib/ci/olsr-site/modules
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								contrib/ci/olsr-site/modules
									
									
									
									
									
										Symbolic link
									
								
							| @ -0,0 +1 @@ | |||||||
|  | ../minimal-site/modules | ||||||
							
								
								
									
										161
									
								
								contrib/ci/olsr-site/site.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								contrib/ci/olsr-site/site.conf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,161 @@ | |||||||
|  | -- This is an example site configuration for Gluon v2018.2+ | ||||||
|  | -- | ||||||
|  | -- Take a look at the documentation located at | ||||||
|  | -- https://gluon.readthedocs.io/ for details. | ||||||
|  | -- | ||||||
|  | -- This configuration will not work as is. You're required to make | ||||||
|  | -- community specific changes to it! | ||||||
|  | { | ||||||
|  |   -- Used for generated hostnames, e.g. freifunk-abcdef123456. (optional) | ||||||
|  |   -- hostname_prefix = 'freifunk-', | ||||||
|  | 
 | ||||||
|  |   -- Name of the community. | ||||||
|  |   site_name = 'Continious Integration', | ||||||
|  | 
 | ||||||
|  |   -- Shorthand of the community. | ||||||
|  |   site_code = 'ci', | ||||||
|  | 
 | ||||||
|  |   -- 32 bytes of random data, encoded in hexadecimal | ||||||
|  |   -- This data must be unique among all sites and domains! | ||||||
|  |   -- Can be generated using: echo $(hexdump -v -n 32 -e '1/1 "%02x"' </dev/urandom) | ||||||
|  |   domain_seed = 'e9608c4ff338b920992d629190e9ff11049de1dfc3f299eac07792dfbcda341c', | ||||||
|  | 
 | ||||||
|  |   -- Prefixes used within the mesh. | ||||||
|  |   -- prefix6 is required, prefix4 can be omitted if next_node.ip4 | ||||||
|  |   -- is not set. | ||||||
|  |   prefix6 = 'fdff:cafe:cafe:cafe::/64', | ||||||
|  | 
 | ||||||
|  |   -- [olsr] prefix configuration | ||||||
|  |   node_prefix6 = 'fdff:cafe:cafe:cafe::/64', | ||||||
|  | 
 | ||||||
|  |   -- Timezone of your community. | ||||||
|  |   -- See https://openwrt.org/docs/guide-user/base-system/system_configuration#time_zones | ||||||
|  |   timezone = 'CET-1CEST,M3.5.0,M10.5.0/3', | ||||||
|  | 
 | ||||||
|  |   -- List of NTP servers in your community. | ||||||
|  |   -- Must be reachable using IPv6! | ||||||
|  |   --  ntp_servers = {'1.ntp.services.ffxx'}, | ||||||
|  | 
 | ||||||
|  |   -- Wireless regulatory domain of your community. | ||||||
|  |   regdom = 'DE', | ||||||
|  | 
 | ||||||
|  |   -- Wireless configuration for 2.4 GHz interfaces. | ||||||
|  |   wifi24 = { | ||||||
|  |     -- Wireless channel. | ||||||
|  |     channel = 1, | ||||||
|  | 
 | ||||||
|  |     -- ESSID used for client network. | ||||||
|  |     ap = { | ||||||
|  |       ssid = 'gluon-ci-ssid', | ||||||
|  |       -- disabled = true, -- (optional) | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     mesh = { | ||||||
|  |       -- Adjust these values! | ||||||
|  |       id = 'ueH3uXjdp', -- usually you don't want users to connect to this mesh-SSID, so use a cryptic id that no one will accidentally mistake for the client WiFi | ||||||
|  |       mcast_rate = 12000, | ||||||
|  |       -- disabled = true, -- (optional) | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   -- Wireless configuration for 5 GHz interfaces. | ||||||
|  |   -- This should be equal to the 2.4 GHz variant, except | ||||||
|  |   -- for channel. | ||||||
|  |   wifi5 = { | ||||||
|  |     channel = 44, | ||||||
|  |     outdoor_chanlist = '100-140', | ||||||
|  |     ap = { | ||||||
|  |       ssid = 'gluon-ci-ssid', | ||||||
|  |       owe_ssid = "owe.gluon-ci-ssid", | ||||||
|  |       owe_transition_mode = false, | ||||||
|  |     }, | ||||||
|  |     mesh = { | ||||||
|  |       -- Adjust these values! | ||||||
|  |       id = 'ueH3uXjdp', | ||||||
|  |       mcast_rate = 12000, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   -- The next node feature allows clients to always reach the node it is | ||||||
|  |   -- connected to using a known IP address. | ||||||
|  |   next_node = { | ||||||
|  |     -- anycast IPs of all nodes | ||||||
|  |     name = { 'nextnode.location.community.example.org', 'nextnode', 'nn' }, | ||||||
|  |     ip4 = '10.0.0.1', | ||||||
|  |     ip6 = 'fd::1', | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   mesh = { | ||||||
|  |     vxlan = true, | ||||||
|  |     -- [olsr] OLSR configuration with v1/v2 parallel mesh | ||||||
|  |     olsrd = { | ||||||
|  |       v2 = { | ||||||
|  |         enable = true, | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   mesh_vpn = { | ||||||
|  |     -- enabled = true, | ||||||
|  |     mtu = 1312, | ||||||
|  | 
 | ||||||
|  |     fastd = { | ||||||
|  |       -- Refer to https://fastd.readthedocs.io/en/latest/ to better understand | ||||||
|  |       -- what these options do. | ||||||
|  | 
 | ||||||
|  |       -- List of crypto-methods to use. | ||||||
|  |       methods = {'salsa2012+umac'}, | ||||||
|  |       -- configurable = true, | ||||||
|  |       -- syslog_level = 'warn', | ||||||
|  | 
 | ||||||
|  |       groups = { | ||||||
|  |         backbone = { | ||||||
|  |           -- Limit number of connected peers to reduce bandwidth. | ||||||
|  |           limit = 1, | ||||||
|  | 
 | ||||||
|  |           -- List of peers. | ||||||
|  |           peers = { | ||||||
|  |           }, | ||||||
|  | 
 | ||||||
|  |         }, | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     bandwidth_limit = { | ||||||
|  |       -- The bandwidth limit can be enabled by default here. | ||||||
|  |       enabled = false, | ||||||
|  | 
 | ||||||
|  |       -- Default upload limit (kbit/s). | ||||||
|  |       egress = 200, | ||||||
|  | 
 | ||||||
|  |       -- Default download limit (kbit/s). | ||||||
|  |       ingress = 3000, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   autoupdater = { | ||||||
|  |     -- Default branch. Don't forget to set GLUON_BRANCH when building! | ||||||
|  |     branch = 'stable', | ||||||
|  | 
 | ||||||
|  |     -- List of branches. You may define multiple branches. | ||||||
|  |     branches = { | ||||||
|  |       stable = { | ||||||
|  |         name = 'stable', | ||||||
|  | 
 | ||||||
|  |         -- List of mirrors to fetch images from. IPv6 required! | ||||||
|  |         mirrors = {'http://1.updates.services.ffhl/stable/sysupgrade'}, | ||||||
|  | 
 | ||||||
|  |         -- Number of good signatures required. | ||||||
|  |         -- Have multiple maintainers sign your build and only | ||||||
|  |         -- accept it when a sufficient number of them have | ||||||
|  |         -- signed it. | ||||||
|  |         good_signatures = 2, | ||||||
|  | 
 | ||||||
|  |         -- List of public keys of maintainers. | ||||||
|  |         pubkeys = { | ||||||
|  |         }, | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | } | ||||||
							
								
								
									
										57
									
								
								contrib/ci/olsr-site/site.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								contrib/ci/olsr-site/site.mk
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | |||||||
|  | ##	gluon site.mk makefile example
 | ||||||
|  | 
 | ||||||
|  | ##	GLUON_FEATURES
 | ||||||
|  | #		Specify Gluon features/packages to enable;
 | ||||||
|  | #		Gluon will automatically enable a set of packages
 | ||||||
|  | #		depending on the combination of features listed
 | ||||||
|  | 
 | ||||||
|  | GLUON_FEATURES := \
 | ||||||
|  | 	autoupdater \
 | ||||||
|  | 	ebtables-filter-multicast \
 | ||||||
|  | 	ebtables-filter-ra-dhcp \
 | ||||||
|  | 	ebtables-limit-arp \
 | ||||||
|  | 	mesh-olsrd \
 | ||||||
|  | 	mesh-vpn-fastd \
 | ||||||
|  | 	respondd \
 | ||||||
|  | 	status-page \
 | ||||||
|  | 	web-advanced \
 | ||||||
|  | 	web-wizard | ||||||
|  | 
 | ||||||
|  | GLUON_FEATURES_standard := \
 | ||||||
|  |   wireless-encryption-wpa3 | ||||||
|  | 
 | ||||||
|  | ##	GLUON_SITE_PACKAGES
 | ||||||
|  | #		Specify additional Gluon/OpenWrt packages to include here;
 | ||||||
|  | #		A minus sign may be prepended to remove a packages from the
 | ||||||
|  | #		selection that would be enabled by default or due to the
 | ||||||
|  | #		chosen feature flags
 | ||||||
|  | 
 | ||||||
|  | GLUON_SITE_PACKAGES := iwinfo | ||||||
|  | 
 | ||||||
|  | ##	DEFAULT_GLUON_RELEASE
 | ||||||
|  | #		version string to use for images
 | ||||||
|  | #		gluon relies on
 | ||||||
|  | #			opkg compare-versions "$1" '>>' "$2"
 | ||||||
|  | #		to decide if a version is newer or not.
 | ||||||
|  | 
 | ||||||
|  | DEFAULT_GLUON_RELEASE := 0.6+exp$(shell date '+%Y%m%d') | ||||||
|  | 
 | ||||||
|  | # Variables set with ?= can be overwritten from the command line
 | ||||||
|  | 
 | ||||||
|  | ##	GLUON_RELEASE
 | ||||||
|  | #		call make with custom GLUON_RELEASE flag, to use your own release version scheme.
 | ||||||
|  | #		e.g.:
 | ||||||
|  | #			$ make images GLUON_RELEASE=23.42+5
 | ||||||
|  | #		would generate images named like this:
 | ||||||
|  | #			gluon-ff%site_code%-23.42+5-%router_model%.bin
 | ||||||
|  | 
 | ||||||
|  | GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE) | ||||||
|  | 
 | ||||||
|  | # Default priority for updates.
 | ||||||
|  | GLUON_PRIORITY ?= 0 | ||||||
|  | 
 | ||||||
|  | # Region code required for some images; supported values: us eu
 | ||||||
|  | GLUON_REGION ?= eu | ||||||
|  | 
 | ||||||
|  | # Languages to include
 | ||||||
|  | GLUON_LANGS ?= en de | ||||||
							
								
								
									
										25
									
								
								package/gluon-mesh-olsrd/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								package/gluon-mesh-olsrd/Makefile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | |||||||
|  | include $(TOPDIR)/rules.mk | ||||||
|  | 
 | ||||||
|  | PKG_NAME:=gluon-mesh-olsrd | ||||||
|  | PKG_VERSION=1 | ||||||
|  | 
 | ||||||
|  | include ../gluon.mk | ||||||
|  | 
 | ||||||
|  | define Package/gluon-mesh-olsrd | ||||||
|  |   TITLE:=olsrd mesh | ||||||
|  |   DEPENDS:= \
 | ||||||
|  | 		+gluon-core \
 | ||||||
|  | 		+kmod-macvlan \
 | ||||||
|  | 		@IPV6 \
 | ||||||
|  | 		+oonf-olsrd2 \
 | ||||||
|  | 		+firewall \
 | ||||||
|  | 		+ip-full \
 | ||||||
|  | 		+gluon-mmfd \
 | ||||||
|  | 		+gluon-l3roamd \
 | ||||||
|  | 		+gluon-radvd \
 | ||||||
|  | 		+lua-jsonc | ||||||
|  |   PROVIDES:=gluon-mesh-provider | ||||||
|  | endef | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | $(eval $(call BuildPackageGluon,gluon-mesh-olsrd)) | ||||||
							
								
								
									
										5
									
								
								package/gluon-mesh-olsrd/check_site.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								package/gluon-mesh-olsrd/check_site.lua
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | need_string_match(in_domain({'next_node', 'ip6'}), '^[%x:]+$', false) | ||||||
|  | need_string_match(in_domain({'next_node', 'ip4'}), '^%d+.%d+.%d+.%d+$', false) | ||||||
|  | 
 | ||||||
|  | need_boolean({'mesh', 'olsrd', 'v2', 'enable'}, false) | ||||||
|  | need_table({'mesh', 'olsrd', 'v2', 'config'}, nil, false) | ||||||
| @ -0,0 +1,10 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | 
 | ||||||
|  | reload_running() { | ||||||
|  |   if [ -x /etc/init.d/"$1" ] && /etc/init.d/"$1" enabled && /etc/init.d/"$1" running; then | ||||||
|  |     echo "(post-setup.d:$IFNAME) Reloading $1..." | ||||||
|  |     /etc/init.d/"$1" reload | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | reload_running olsrd2 | ||||||
							
								
								
									
										10
									
								
								package/gluon-mesh-olsrd/files/lib/gluon/core/mesh/teardown.d/70-reload-olsr
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										10
									
								
								package/gluon-mesh-olsrd/files/lib/gluon/core/mesh/teardown.d/70-reload-olsr
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | 
 | ||||||
|  | reload_running() { | ||||||
|  |   if [ -x /etc/init.d/"$1" ] && /etc/init.d/"$1" enabled && /etc/init.d/"$1" running; then | ||||||
|  |     echo "(teardown.d:$IFNAME) Reloading $1..." | ||||||
|  |     /etc/init.d/"$1" reload | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | reload_running olsrd2 | ||||||
| @ -0,0 +1 @@ | |||||||
|  | mmfd | ||||||
							
								
								
									
										7
									
								
								package/gluon-mesh-olsrd/files/usr/lib/autoupdater/abort.d/10olsrd
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								package/gluon-mesh-olsrd/files/usr/lib/autoupdater/abort.d/10olsrd
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | 
 | ||||||
|  | . /lib/gluon/autoupdater/lib.sh | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | start_enabled olsrd2 | ||||||
|  | wifi up | ||||||
							
								
								
									
										7
									
								
								package/gluon-mesh-olsrd/files/usr/lib/autoupdater/upgrade.d/10olsrd
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								package/gluon-mesh-olsrd/files/usr/lib/autoupdater/upgrade.d/10olsrd
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | 
 | ||||||
|  | . /lib/gluon/autoupdater/lib.sh | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | stop olsrd2 | ||||||
|  | wifi down | ||||||
| @ -0,0 +1,95 @@ | |||||||
|  | #!/usr/bin/lua | ||||||
|  | 
 | ||||||
|  | local uci = require('simple-uci').cursor() | ||||||
|  | local site = require "gluon.site" | ||||||
|  | 
 | ||||||
|  | uci:section('firewall', 'zone', 'l3roamd', { | ||||||
|  | 	name = 'l3roamd', | ||||||
|  | 	input = 'ACCEPT', | ||||||
|  | 	output = 'ACCEPT', | ||||||
|  | 	forward = 'REJECT', | ||||||
|  | 	device = 'l3roam+', | ||||||
|  | 	log = '1', | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | uci:section('firewall', 'zone', 'mmfd', { | ||||||
|  | 	name = 'mmfd', | ||||||
|  | 	input = 'REJECT', | ||||||
|  | 	output = 'accept', | ||||||
|  | 	forward = 'REJECT', | ||||||
|  | 	device = 'mmfd+', | ||||||
|  | 	log = '1', | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | -- forwardings and respective rules | ||||||
|  | uci:section('firewall', 'forwarding', 'fcc', { | ||||||
|  | 	src = 'loc_client', | ||||||
|  | 	dest = 'loc_client', | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | uci:section('firewall', 'forwarding', 'fcm', { | ||||||
|  | 	src = 'loc_client', | ||||||
|  | 	dest = 'mesh', | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | uci:section('firewall', 'forwarding', 'fmc', { | ||||||
|  | 	src = 'mesh', | ||||||
|  | 	dest = 'loc_client', | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | uci:section('firewall', 'forwarding', 'fmm', { | ||||||
|  | 	src = 'mesh', | ||||||
|  | 	dest = 'mesh', | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | uci:section('firewall', 'forwarding', 'flc', { | ||||||
|  | 	src = 'l3roamd', | ||||||
|  | 	dest = 'loc_client', | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | uci:section('firewall', 'forwarding', 'fcl', { | ||||||
|  | 	src = 'loc_client', | ||||||
|  | 	dest = 'l3roamd', | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | uci:section('firewall', 'rule',  'mesh_respondd_mcast_ll', { | ||||||
|  | 	src = 'mesh', | ||||||
|  | 	src_ip = 'fe80::/64' , | ||||||
|  | 	dest_port = '1001', | ||||||
|  | 	proto = 'udp', | ||||||
|  | 	target = 'ACCEPT', | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | uci:section('firewall', 'rule',  'mesh_respondd_mcast2', { | ||||||
|  | 	src = 'mesh', | ||||||
|  | 	src_ip = site.node_prefix6() or site.prefix6(), | ||||||
|  | 	dest_port = '1001', | ||||||
|  | 	proto = 'udp', | ||||||
|  | 	target = 'ACCEPT', | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | uci:section('firewall', 'rule',  'mmfd_respondd_ll', { | ||||||
|  | 	src = 'mmfd', | ||||||
|  | 	src_ip = 'fe80::/64', | ||||||
|  | 	dest_port = '1001', | ||||||
|  | 	proto = 'udp', | ||||||
|  | 	target = 'ACCEPT', | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | uci:section('firewall', 'rule',  'mmfd_respondd_mesh', { | ||||||
|  | 	src = 'mmfd', | ||||||
|  | 	src_ip = site.node_prefix6() or site.prefix6(), | ||||||
|  | 	dest_port = '1001', | ||||||
|  | 	proto = 'udp', | ||||||
|  | 	target = 'ACCEPT', | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | uci:section('firewall', 'rule',  'mesh_mmfd', { | ||||||
|  | 	src = 'mesh', | ||||||
|  | 	src_ip = 'fe80::/64', | ||||||
|  | 	dest_port = '27275', | ||||||
|  | 	proto = 'udp', | ||||||
|  | 	target = 'ACCEPT', | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | uci:save('firewall') | ||||||
| @ -0,0 +1,187 @@ | |||||||
|  | #!/usr/bin/lua | ||||||
|  | 
 | ||||||
|  | local uci = require('simple-uci').cursor() | ||||||
|  | local site = require 'gluon.site' | ||||||
|  | local util = require 'gluon.util' | ||||||
|  | local wireless = require 'gluon.wireless' | ||||||
|  | 
 | ||||||
|  | local mesh_interfaces = util.get_role_interfaces(uci, 'mesh') | ||||||
|  | local uplink_interfaces = util.get_role_interfaces(uci, 'uplink') | ||||||
|  | local client_interfaces = util.get_role_interfaces(uci, 'client') | ||||||
|  | 
 | ||||||
|  | local mesh_interfaces_uplink = {} | ||||||
|  | local mesh_interfaces_client = {} | ||||||
|  | local mesh_interfaces_other = {} | ||||||
|  | for _, iface in ipairs(mesh_interfaces) do | ||||||
|  | 	if util.contains(uplink_interfaces, iface) then | ||||||
|  | 		table.insert(mesh_interfaces_uplink, iface) | ||||||
|  | 	elseif util.contains(client_interfaces, iface) then | ||||||
|  | 		table.insert(mesh_interfaces_client, iface) | ||||||
|  | 	else | ||||||
|  | 		table.insert(mesh_interfaces_other, iface) | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | local intf = { | ||||||
|  | 	wired_mesh = {}, | ||||||
|  | 	vpn_mesh = {}, | ||||||
|  | 	radio_mesh = {}, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | intf.all_intfs = {} | ||||||
|  | 
 | ||||||
|  | for _, l in ipairs({ intf.wired_mesh, intf.vpn_mesh, intf.radio_mesh }) do | ||||||
|  | 	for _, n in ipairs(l) do | ||||||
|  | 		table.insert(intf.all_intfs, n) | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | -- get all mesh radios and mesh lans and then add them to olsrd | ||||||
|  | wireless.foreach_radio(uci, function(radio, _, _) | ||||||
|  | 	local radio_name = radio['.name'] | ||||||
|  | 	table.insert(intf.radio_mesh, 'mesh_' .. radio_name) | ||||||
|  | end) | ||||||
|  | 
 | ||||||
|  | if pcall(function() require 'gluon.mesh-vpn' end) then | ||||||
|  | 	local vpn_core = require 'gluon.mesh-vpn' | ||||||
|  | 
 | ||||||
|  | 	if vpn_core.enabled() then | ||||||
|  | 		-- mesh_vpn is a interface that has the right ifname | ||||||
|  | 		-- we can't use mesh-vpn (dash instead of underscore) since it's not a uci interface | ||||||
|  | 		table.insert(intf.vpn_mesh, 'mesh_vpn') | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | table.insert(intf.wired_mesh, 'loopback') | ||||||
|  | 
 | ||||||
|  | local has_uplink_mesh = false | ||||||
|  | local has_other_mesh = false | ||||||
|  | 
 | ||||||
|  | for _,i in pairs(mesh_interfaces) do | ||||||
|  | 	if util.contains(uplink_interfaces, i) then | ||||||
|  | 		has_uplink_mesh = true | ||||||
|  | 	else | ||||||
|  | 		has_other_mesh = true | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | if has_uplink_mesh then | ||||||
|  | 	-- use uplink with macvlan so we do not have traffic leaks | ||||||
|  | 	uci:section('network', 'device', 'm_uplink', { | ||||||
|  | 		name = 'm_uplink', | ||||||
|  | 		type = 'macvlan', | ||||||
|  | 		ifname = 'br-wan', | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	uci:section('network', 'interface', 'mesh_uplink', { | ||||||
|  | 	  ifname = 'm_uplink', | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	table.insert(intf.wired_mesh, 'mesh_uplink') | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | if has_other_mesh then | ||||||
|  | 	table.insert(intf.wired_mesh, 'mesh_other') | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | uci:delete_all('olsrd2', 'interface') | ||||||
|  | 
 | ||||||
|  | if site.mesh.olsrd.v2() ~= nil and site.mesh.olsrd.v2.enable(false) then | ||||||
|  | 	os.execute('/etc/init.d/olsrd2 enable') | ||||||
|  | 
 | ||||||
|  | 	local addrs = { } | ||||||
|  | 	local lan = { } | ||||||
|  | 	local cfg = site.mesh.olsrd.v2 | ||||||
|  | 	local config = uci:get_first("olsrd2", "olsrv2") | ||||||
|  | 
 | ||||||
|  | 	-- set global config | ||||||
|  | 	local olsr2Config = { | ||||||
|  | 		failfast = 'no', | ||||||
|  | 		pidfile = '/var/run/olsrd2.pid', | ||||||
|  | 		lockfile = '/var/lock/olsrd2' | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	local extraConf = cfg.config() | ||||||
|  | 	if extraConf then | ||||||
|  | 		for k, _ in pairs(extraConf) do | ||||||
|  | 			olsr2Config[k] = extraConf[k] | ||||||
|  | 		end | ||||||
|  | 	end | ||||||
|  | 
 | ||||||
|  | 	uci:delete_all('olsrd2', 'global') | ||||||
|  | 	uci:section('olsrd2', 'global', nil, olsr2Config) | ||||||
|  | 
 | ||||||
|  | 	uci:delete_all('olsrd2', 'telnet') | ||||||
|  | 	uci:section('olsrd2', 'telnet', 'telnet', { | ||||||
|  | 
 | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	uci:delete_all('olsrd2', 'http') | ||||||
|  | 	uci:section('olsrd2', 'http', 'http', { | ||||||
|  | 
 | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	if cfg.lan() then | ||||||
|  | 		lan = cfg.lan() | ||||||
|  | 	end | ||||||
|  | 
 | ||||||
|  | 	if site.prefix6() and not cfg.ip4_exclusive_mode(false) then | ||||||
|  | 		table.insert(lan, site.prefix6()) | ||||||
|  | 	end | ||||||
|  | 
 | ||||||
|  | 	table.insert(addrs, 'default_accept') | ||||||
|  | 
 | ||||||
|  | 	uci:set("olsrd2", config, "originator", addrs) | ||||||
|  | 	uci:set("olsrd2", config, "lan", lan) | ||||||
|  | 
 | ||||||
|  | 	if #intf.wired_mesh then | ||||||
|  | 		uci:section('olsrd2', 'interface', 'wired_mesh', { | ||||||
|  | 			ifname = intf.wired_mesh, | ||||||
|  | 			bindto = addrs, | ||||||
|  | 		}) | ||||||
|  | 	end | ||||||
|  | 
 | ||||||
|  | 	if #intf.vpn_mesh then | ||||||
|  | 		uci:section('olsrd2', 'interface', 'vpn_mesh', { | ||||||
|  | 			ifname = intf.vpn_mesh, | ||||||
|  | 			bindto = addrs, | ||||||
|  | 		}) | ||||||
|  | 	end | ||||||
|  | 
 | ||||||
|  | 	if #intf.radio_mesh then | ||||||
|  | 		uci:section('olsrd2', 'interface', 'radio_mesh', { | ||||||
|  | 			ifname = intf.radio_mesh, | ||||||
|  | 			bindto = addrs, | ||||||
|  | 		}) | ||||||
|  | 	end | ||||||
|  | 
 | ||||||
|  | 	uci:section('olsrd2', 'interface', 'loopback', { | ||||||
|  | 		ifname = { 'loopback' }, | ||||||
|  | 		bindto = addrs, | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	uci:section('firewall', 'rule', 'allow_olsr2_mesh', { | ||||||
|  | 		-- src = 'mesh', | ||||||
|  | 		-- HACK: this is a temporary hack because firewall doesn't want to work | ||||||
|  | 		src = '*', | ||||||
|  | 		dest_port = '269', | ||||||
|  | 		proto = 'udp', | ||||||
|  | 		target = 'ACCEPT', | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	uci:section('firewall', 'rule', 'allow_olsr2_wired_mesh', { | ||||||
|  | 		src = 'wired_mesh', | ||||||
|  | 		dest_port = '269', | ||||||
|  | 		proto = 'udp', | ||||||
|  | 		target = 'ACCEPT', | ||||||
|  | 	}) | ||||||
|  | else | ||||||
|  | 	-- site.mesh.olsrd.v2.enable false | ||||||
|  |   os.execute('/etc/init.d/olsrd2 disable') | ||||||
|  | 	uci:delete('firewall', 'allow_olsr2_mesh') | ||||||
|  | 	uci:delete('firewall', 'allow_olsr2_wired_mesh') | ||||||
|  | end | ||||||
|  | uci:save('olsrd2') | ||||||
|  | uci:save('firewall') | ||||||
|  | uci:save('network') | ||||||
| @ -0,0 +1,10 @@ | |||||||
|  | #!/usr/bin/lua | ||||||
|  | 
 | ||||||
|  | local uci = require('simple-uci').cursor() | ||||||
|  | 
 | ||||||
|  | uci:section('network', 'interface', 'mmfd', { | ||||||
|  | 	proto = 'static', | ||||||
|  | 	ifname = 'mmfd0', | ||||||
|  | 	ip6addr = 'fe80::1/64' | ||||||
|  | }) | ||||||
|  | uci:save('network') | ||||||
| @ -59,6 +59,8 @@ config('KERNEL_SECCOMP', false) | |||||||
| -- use try_config, so enabling the package is still possible | -- use try_config, so enabling the package is still possible | ||||||
| try_config('PACKAGE_kmod-mt7915e', false) | try_config('PACKAGE_kmod-mt7915e', false) | ||||||
| 
 | 
 | ||||||
|  | try_config('OONF_GENERIC_HTTP', true) | ||||||
|  | 
 | ||||||
| config('COLLECT_KERNEL_DEBUG', true) | config('COLLECT_KERNEL_DEBUG', true) | ||||||
| 
 | 
 | ||||||
| config('TARGET_MULTI_PROFILE', true) | config('TARGET_MULTI_PROFILE', true) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user