From fb85d96d5e4007751ec5290f64cc5f5066e0e17a Mon Sep 17 00:00:00 2001
From: Matthias Schiffer <mschiffer@universe-factory.net>
Date: Wed, 30 Nov 2016 15:27:33 +0100
Subject: [PATCH] gluon-next-node: don't require next_node.ip6

The next-node interface may be useful with IPv4 only or even just a MAC
address. This prepares merging gluon-next-node into gluon-batman-adv-core.
---
 package/gluon-next-node/check_site.lua                 |  2 +-
 .../files/lib/gluon/ebtables/250-next-node             | 10 ++++++----
 .../files/lib/gluon/upgrade/400-next-node              |  8 ++++++--
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/package/gluon-next-node/check_site.lua b/package/gluon-next-node/check_site.lua
index b38de2a41..b4d7dd2c9 100644
--- a/package/gluon-next-node/check_site.lua
+++ b/package/gluon-next-node/check_site.lua
@@ -2,6 +2,6 @@ if need_string_match('next_node.ip4', '^%d+.%d+.%d+.%d+$', false) then
 	need_string_match('prefix4', '^%d+.%d+.%d+.%d+/%d+$')
 end
 
-need_string_match('next_node.ip6', '^[%x:]+$')
+need_string_match('next_node.ip6', '^[%x:]+$', false)
 
 need_string_match('next_node.mac', '^%x[02468aAcCeE]:%x%x:%x%x:%x%x:%x%x:%x%x$')
diff --git a/package/gluon-next-node/files/lib/gluon/ebtables/250-next-node b/package/gluon-next-node/files/lib/gluon/ebtables/250-next-node
index abe297e7c..64b32859c 100644
--- a/package/gluon-next-node/files/lib/gluon/ebtables/250-next-node
+++ b/package/gluon-next-node/files/lib/gluon/ebtables/250-next-node
@@ -16,7 +16,9 @@ if next_node.ip4 then
 	rule('OUTPUT --logical-out br-client -o bat0 -p IPv4 --ip-source ' .. next_node.ip4 .. ' -j DROP')
 end
 
-rule('FORWARD --logical-out br-client -o bat0 -p IPv6 --ip6-destination ' .. next_node.ip6 .. ' -j DROP')
-rule('OUTPUT --logical-out br-client -o bat0 -p IPv6 --ip6-destination ' .. next_node.ip6 .. ' -j DROP')
-rule('FORWARD --logical-out br-client -o bat0 -p IPv6 --ip6-source ' .. next_node.ip6 .. ' -j DROP')
-rule('OUTPUT --logical-out br-client -o bat0 -p IPv6 --ip6-source ' .. next_node.ip6 .. ' -j DROP')
+if next_node.ip6 then
+	rule('FORWARD --logical-out br-client -o bat0 -p IPv6 --ip6-destination ' .. next_node.ip6 .. ' -j DROP')
+	rule('OUTPUT --logical-out br-client -o bat0 -p IPv6 --ip6-destination ' .. next_node.ip6 .. ' -j DROP')
+	rule('FORWARD --logical-out br-client -o bat0 -p IPv6 --ip6-source ' .. next_node.ip6 .. ' -j DROP')
+	rule('OUTPUT --logical-out br-client -o bat0 -p IPv6 --ip6-source ' .. next_node.ip6 .. ' -j DROP')
+end
diff --git a/package/gluon-next-node/files/lib/gluon/upgrade/400-next-node b/package/gluon-next-node/files/lib/gluon/upgrade/400-next-node
index e8ecfca4f..98dffbc9d 100755
--- a/package/gluon-next-node/files/lib/gluon/upgrade/400-next-node
+++ b/package/gluon-next-node/files/lib/gluon/upgrade/400-next-node
@@ -17,13 +17,17 @@ c:section('network', 'device', 'local_node_dev',
 	  }
 )
 
-local ip4, netmask
+local ip4, netmask, ip6
 
 if site.next_node.ip4 then
 	ip4 = site.next_node.ip4
 	netmask = ip.IPv4(site.prefix4):mask():string()
 end
 
+if site.next_node.ip6 then
+	ip6 = site.next_node.ip6 .. '/128'
+end
+
 c:delete('network', 'local_node')
 c:section('network', 'interface', 'local_node',
 	  {
@@ -31,7 +35,7 @@ c:section('network', 'interface', 'local_node',
 		  proto = 'static',
 		  ipaddr = ip4,
 		  netmask = netmask,
-		  ip6addr = site.next_node.ip6 .. '/128',
+		  ip6addr = ip6,
 	  }
 )
 
-- 
GitLab