#!/usr/bin/lua local uci = require('simple-uci').cursor() local util = require 'gluon.util' local sutil = require 'ffs-set-segment.util' local lockfilename = '/var/lock/ffs-set-segment.lock' sutil.lock(lockfilename) if not uci:get_bool("gluon", "mesh_vpn", "enabled") then io.stdout:write("VPN disabled!" .. '\n') os.exit(0) end if uci:get_bool("gluon", "mesh_vpn_backbone", "auto_segment") == "0" then io.stdout:write("auto_segment disabled!" .. '\n') os.exit(0) end if not sutil.has_batman_gw() and tonumber(util.readfile('/proc/uptime'):match('^([^ ]+) ')) < 60 then sutil.log("out", "Waiting for gateway...") end local macaddr = uci:get("network", "bat0", "macaddr") assert(macaddr, "could not get nodeid") local nodeid = string.gsub(macaddr, ':', '') local pubkey = sutil.fastd_public_key():sub(0, 12) local gitseg = sutil.get_segment_from_dns(nodeid, pubkey) local batseg = sutil.get_segment_from_batman() if not batseg then sutil.log("out", "Could not get segment from BATMAN") end if not gitseg then sutil.log("out", "Could not get segment from DNS - exit") os.exit(1) end if batseg and not batseg == gitseg then sutil.log("out", "Avoiding shortcut " .. batseg .. " - " .. gitseg) gitseg = 99 else if gitseg == 99 then sutil.log("out", "Node not registered") else sutil.log("out", "Node is in Segment " .. gitseg) end end local port = gitseg + 10200 sutil.set_fastd_remotes(port, gitseg)