static-ip: make macs more random this time
This commit is contained in:
		
							parent
							
								
									8b6abdbe6f
								
							
						
					
					
						commit
						c8e86123b4
					
				| @ -1,9 +1,10 @@ | ||||
| #!/usr/bin/lua | ||||
| 
 | ||||
| local uci = require('simple-uci').cursor() | ||||
| local site = require "gluon.site" | ||||
| local site = require 'gluon.site' | ||||
| local wireless = require 'gluon.wireless' | ||||
| local ip = require "luci.ip" -- luci-lib-ip | ||||
| local ip = require 'luci.ip' -- luci-lib-ip | ||||
| local util = require 'gluon.util' | ||||
| 
 | ||||
| IPV4_PREFIX_MAX = 32 | ||||
| 
 | ||||
| @ -21,7 +22,7 @@ local function static_ip_4(name, ifname, macaddr, actually_use) | ||||
| 	if not static4 then | ||||
| 		local prefixOverflow = IPV4_PREFIX_MAX - tmp4:prefix() | ||||
| 		-- magic that turns mac into random number | ||||
| 		local ipnum = math.fmod(tonumber(macaddr:gsub(":", ""):sub(-6), 16), 2 ^ prefixOverflow) | ||||
| 		local ipnum = math.fmod(tonumber(macaddr:gsub(':', ''):sub(-6), 16), 2 ^ prefixOverflow) | ||||
| 
 | ||||
| 		-- the rare case where we get 0 or 1 as our mac based number | ||||
| 		if ipnum < 2 then | ||||
| @ -41,7 +42,7 @@ local function static_ip_4(name, ifname, macaddr, actually_use) | ||||
|     -- NOTE: wan also uses dhcp/static directly | ||||
| 		uci:set('network', name, 'proto', 'static') | ||||
| 		uci:set('network', name, 'ipaddr', ip4:host():string()) | ||||
| 		uci:set('network', name, 'netmask', ip4:mask():string()) | ||||
|     uci:set('network', name, 'netmask', ip4:mask():string()) | ||||
| 	else | ||||
| 		if uci:get('network', name, 'proto') == 'static' then | ||||
| 			uci:del('network', name, 'proto') | ||||
| @ -63,20 +64,29 @@ wireless.foreach_radio(uci, function(radio, index, config) | ||||
| 	end | ||||
| 
 | ||||
| 	use = uci:get('wifi-iface', net, 'disabled') ~= '1' | ||||
| 	static_ip_4(net, uci:get('wifi-iface', net, 'ifname'), uci:get('network', net, 'macaddr') or 'afafafafafafafaf', use) | ||||
| 	static_ip_4(net, uci:get('wifi-iface', net, 'ifname'), uci:get('wifi-iface', net, 'macaddr'), use) | ||||
| end) | ||||
| 
 | ||||
| local function apply_network(name, use) | ||||
| local function apply_network(name, use, mac) | ||||
|   if not uci:get('network', name, 'proto') then | ||||
|     print('warn: non-existent network ' .. name) | ||||
|     return | ||||
|   end | ||||
| 
 | ||||
| 	not_disabled = uci:get('network', name, 'disabled') ~= '1' | ||||
| 	if use == nil then | ||||
| 		use = not_disabled | ||||
| 	end | ||||
| 	static_ip_4(name, uci:get('network', name, 'ifname'), uci:get('network', name, 'macaddr') or 'afafafafafafafaf', use) | ||||
|   if not uci:get('network', name, 'macaddr') then | ||||
|     uci:set('network', name, 'macaddr', util.generate_mac(mac)) | ||||
|   end | ||||
| 	static_ip_4(name, uci:get('network', name, 'ifname'), uci:get('network', name, 'macaddr'), use) | ||||
| end | ||||
| 
 | ||||
| -- TODO: get actual enabled value from options | ||||
| apply_network('mesh_wan', nil) | ||||
| apply_network('mesh_vpn', nil) | ||||
| apply_network('mesh_wan', nil, 10) | ||||
| apply_network('mesh_lan', nil, 11) | ||||
| apply_network('mesh_vpn', nil, 12) | ||||
| 
 | ||||
| uci:save('gluon-static-ip') | ||||
| uci:save('network') | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user