Developing lightweight computation at the DSG edge

qmp_gw.sh 4.07 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
38
39
40
41
42
43
qmp_exists_gateway() {
	qmp_uci_test gateways.$1
	return $?
}

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


58
qmp_gw_search_default_ipv4() {
59
	qmp_set_gateway ignore 1 type offer network 0.0.0.0/0
60
	qmp_set_gateway ignore 0 type search network 0.0.0.0/0 maxPrefixLen 0
61
	qmp_gw_masq_wan 0
62
63
64
}

qmp_gw_search_default_ipv6() {
65
	qmp_set_gateway ignore 1 type offer network ::/0
66
	qmp_set_gateway ignore 0 type search network ::/0 maxPrefixLen 0
67
68
}

69
qmp_gw_offer_default_ipv4() {
70
	qmp_set_gateway ignore 1 type search network 0.0.0.0/0 maxPrefixLen 0
71
	qmp_set_gateway ignore 0 type offer network 0.0.0.0/0
72
	qmp_gw_masq_wan 1
73
74
75
}

qmp_gw_offer_default_ipv6() {
76
	qmp_set_gateway ignore 1 type search network ::/0 maxPrefixLen 0
77
	qmp_set_gateway ignore 0 type offer network ::/0
78
79
}

80
qmp_gw_disable_default_ipv4() {
81
	qmp_set_gateway ignore 1 type search network 0.0.0.0/0 maxPrefixLen 0
82
	qmp_set_gateway ignore 1 type offer network 0.0.0.0/0
83
84
85
86
	qmp_gw_masq_wan 0
}

qmp_gw_disable_default_ipv6() {
87
	qmp_set_gateway ignore 1 type search network ::/0 maxPrefixLen 0
88
	qmp_set_gateway ignore 1 type offer network ::/0
89
90
}

91
92
93
94
95
96
97
98
99
100
qmp_gw_default() {
	if [ -n "$2" ]
	then
		qmp_gw_$1_default_$2
	else
		qmp_gw_$1_default_ipv4
		qmp_gw_$1_default_ipv6
	fi
}

101
102
103
104
105
106
107
108
109
110
111
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"
}

112
113
114
115
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
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
142
		cfg=@zone[$wan]
143
	fi
144
145

	qmp_gw_add_interfaces_to_firewall_zone $cfg
146
147
148
149
}

qmp_gw_apply() {
	qmp_configure_bmx6
150
	bmx6 -c --configReload || /etc/init.d/bmx6 restart
151
152
153
	/etc/init.d/firewall restart
}