Developing lightweight computation at the DSG edge

qmp_gw.sh 4.16 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/sh
#    Copyright (C) 2011 Fundacio Privada per a la Xarxa Oberta, Lliure i Neutral guifi.net
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License along
#    with this program; if not, write to the Free Software Foundation, Inc.,
#    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
#    The full GNU General Public License is included in this distribution in
#    the file called "COPYING".
20
21
22
23
#
# Contributors:
#	Simó Albert i Beltran
#
24
25
26
27

QMP_PATH="/etc/qmp"
SOURCE_GW=1

28
29
30
31
32
if [ -z "$SOURCE_OPENWRT_FUNCTIONS" ]
then
	. /lib/functions.sh
	SOURCE_OPENWRT_FUNCTIONS=1
fi
33
[ -z "$SOURCE_COMMON" ] && . $QMP_PATH/qmp_common.sh
34
[ -z "$SOURCE_FUNCTIONS" ] && . $QMP_PATH/qmp_functions.sh
35

36
37
qmp_exists_gateway()
{
38
39
40
	qmp_uci_test gateways.$1
	return $?
}
41

42
43
44
45
46
47
48
49
50
51
52
# set a gateway with given name and values
# <name> <search|offer> [arg1name arg1value] [arg2name arg2value] ...
qmp_set_gateway()
{
	local name="$1"
	shift
	local type="$1"
	shift
	
	qmp_uci_set_raw gateways.$name=$type
		
53
54
	while [ $# -ge 2 ]
	do
55
		qmp_uci_set_raw gateways.$name.$1="$2"
56
57
58
		shift
		shift
	done
59
	qmp_uci_commit gateways
60
61
}

62
qmp_gw_search_default_ipv4() {
63
64
	qmp_set_gateway inet4 offer ignore 1 network 0.0.0.0/0
	qmp_set_gateway inet4 search ignore 0 network 0.0.0.0/0 maxPrefixLen 0
65
	qmp_gw_masq_wan 0
66
67
68
}

qmp_gw_search_default_ipv6() {
69
70
	qmp_set_gateway inet6 offer ignore 1 network ::/0
	qmp_set_gateway inet6 search ignore 0 network ::/0 maxPrefixLen 0
71
72
}

73
qmp_gw_offer_default_ipv4() {
74
75
	qmp_set_gateway inet4 search ignore 1 network 0.0.0.0/0 maxPrefixLen 0
	qmp_set_gateway inet4 offer ignore 0 network 0.0.0.0/0
76
	qmp_gw_masq_wan 1
77
78
79
}

qmp_gw_offer_default_ipv6() {
80
81
	qmp_set_gateway inet6 search ignore 1 network ::/0 maxPrefixLen 0
	qmp_set_gateway inet6 offer ignore 0 network ::/0
82
83
}

84
qmp_gw_disable_default_ipv4() {
85
86
	qmp_set_gateway inet4 search ignore 1 network 0.0.0.0/0 maxPrefixLen 0
	qmp_set_gateway inet4 offer ignore 1 network 0.0.0.0/0
87
88
89
90
	qmp_gw_masq_wan 0
}

qmp_gw_disable_default_ipv6() {
91
92
	qmp_set_gateway inet6 search ignore 1 network ::/0 maxPrefixLen 0
	qmp_set_gateway inet6 offer ignore 1 network ::/0
93
94
}

95
96
97
98
99
100
101
102
103
104
qmp_gw_default() {
	if [ -n "$2" ]
	then
		qmp_gw_$1_default_$2
	else
		qmp_gw_$1_default_ipv4
		qmp_gw_$1_default_ipv6
	fi
}

105
106
107
108
109
110
111
112
113
114
115
qmp_gw_add_interfaces_to_firewall_zone() {
	local cfg=$1
	local $virtual_interfaces
	for interface in $(qmp_get_devices wan)
	do
		[ -n "$virtual_interfaces" ] && virtual_interfaces="$virtual_interfaces "
		virtual_interfaces="$virtual_interfaces$(qmp_get_virtual_iface $interface)"
	done
	qmp_uci_set_raw firewall.$cfg.network="$virtual_interfaces"
}

116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
qmp_gw_masq_wan() {
	#First parameter is 1/0 (enable/disable masquerade). Default is 1
	[ -z "$1" ] && masq=1 || masq=$1
	j=0
	v="nothing"
	wan=""

	#Looking for a firewall zone with name wan
	while [ ! -z "$v" ]; do
		v=$(qmp_uci_get_raw firewall.@zone[$j].name)
		[ "$v" == "wan" ] && { wan=$j; break; }
		j=$(( $j +1 ))
	done

	if [ -z "$wan" ]; then
	#if not found, we are going to create it
		cfg="$(qmp_uci_add_raw_get_cfg firewall zone)"
		qmp_uci_set_cfg firewall.$cfg.input=ACCEPT
		qmp_uci_set_cfg firewall.$cfg.output=ACCEPT
		qmp_uci_set_cfg firewall.$cfg.forward=ACCEPT
		qmp_uci_set_cfg firewall.$cfg.name=wan
		qmp_uci_set_cfg firewall.$cfg.masq=$masq
		qmp_uci_commit firewall

	else
	#if found we just change parameters
		qmp_uci_set_raw firewall.@zone[$wan].input=ACCEPT
		qmp_uci_set_raw firewall.@zone[$wan].output=ACCEPT
		qmp_uci_set_raw firewall.@zone[$wan].forward=ACCEPT
		qmp_uci_set_raw firewall.@zone[$wan].masq=$masq
146
		cfg=@zone[$wan]
147
	fi
148
149

	qmp_gw_add_interfaces_to_firewall_zone $cfg
150
151
152
153
}

qmp_gw_apply() {
	qmp_configure_bmx6
154
	bmx6 -c --configReload || /etc/init.d/bmx6 restart
155
156
157
	/etc/init.d/firewall restart
}