summaryrefslogtreecommitdiffhomepage
path: root/contrib/package/ffluci-splash/src/luci_splash.init
blob: a7bb4abeb4c7155fd5d19e4725347fe02b377126 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/bin/sh /etc/rc.common
START=70

iface_add() {
	local cfg="$1"
	
	config_get net "$cfg" network
	[ -n "$net" ] || return 0
	
	config_get iface "$net" ifname
	[ -n "$iface" ] || return 0
	iface="${iface%%:*}"
	
	config_get ipaddr "$net" ipaddr
	[ -n "$ipaddr" ] || return 0
	
	config_get netmask "$net" netmask
	[ -n "$netmask" ] || return 0
	
	eval "$(ipcalc.sh $ipaddr $netmask)"
	
	iptables -t nat -A luci_splash -i "$iface" -s "$IP/$PREFIX" -j luci_splash_portal
	iptables -t nat -A luci_splash_portal -i "$iface" -s "$IP/$PREFIX" -d "$ipaddr" -p tcp --dport 80 -j RETURN  
}

blacklist_add() {
	local cfg="$1"
	
	config_get mac "$cfg" mac
	[ -n "$mac" ] && iptables -t nat -A luci_splash_portal -m mac --mac-source "$mac" -j DROP
}

whitelist_add() {
	local cfg="$1"
	
	config_get mac "$cfg" mac
	[ -n "$mac" ] && iptables -t nat -A luci_splash_portal -m mac --mac-source "$mac" -j RETURN
}

start() {
	### Read chains from config
	include /lib/network
	scan_interfaces
	config_load luci_splash
	
	### Create subchains
	iptables -t nat -N luci_splash
	iptables -t nat -N luci_splash_portal
	iptables -t nat -N luci_splash_leases
	
	### Build the main and portal rule
	config_foreach blacklist_add blacklist
	config_foreach whitelist_add whitelist
	config_foreach iface_add iface
	
	### Build the portal rule
	iptables -t nat -A luci_splash_portal -p udp --dport 53 -j RETURN
	iptables -t nat -A luci_splash_portal -j luci_splash_leases
	
	### Build the leases rule
	iptables -t nat -A luci_splash_leases -p tcp --dport 80 -j REDIRECT --to-ports 8082
	iptables -t nat -A luci_splash_leases -j DROP
	
	### Start the splash httpd
	httpd -c /etc/luci_splash_httpd.conf -p 8082 -h /usr/lib/luci-splash/htdocs
	
	### Sync leases
	/usr/lib/luci-splash/sync.lua
	
	### Hook in the chain
	iptables -t nat -A prerouting_rule -j luci_splash
}

stop() {
	### Hook out the chain
	iptables -t nat -D prerouting_rule -j luci_splash
	
	### Clear subchains
	iptables -t nat -F luci_splash_leases
	iptables -t nat -F luci_splash_portal
	iptables -t nat -F luci_splash	
	
	### Delete subchains
	iptables -t nat -X luci_splash_leases
	iptables -t nat -X luci_splash_portal
	iptables -t nat -X luci_splash
}