Project

General

Profile

« Previous | Next » 

Revision bad29bc6

Added by Ermal Luçi almost 17 years ago

Backend support for bridges.

View differences:

etc/inc/interfaces.inc
117 117
        return $vlanif;
118 118
}
119 119

  
120
function interfaces_bridge_configure() {
121
        global $config;
122

  
123
        $i = 0;
124
        if (is_array($config['bridges']['bridge']) && count($config['bridges']['bridge'])) {
125
                foreach ($config['bridges']['bridge'] as $bridge) {
126
                        if(empty($bridge['bridgeif'])) {
127
                                $bridge['bridgeif'] = "bridge{$i}";
128
                        }
129
                        /* XXX: Maybe we should report any errors?! */
130
                        interface_bridge_configure($bridge);
131
                        $i++;
132
                }
133
        }
134
}
135

  
136
function interface_bridge_configure(&$bridge) {
137
        global $config, $g;
138

  
139
        if (!is_array($bridge))
140
                return -1;
141

  
142
	$members = explode(',', $bridge['members']);
143
	if (!count(members))
144
		return -1;
145
	
146
	$checklist = get_configured_interface_list();
147

  
148
	$cmd = "";
149
	foreach ($members as $member) {
150
		if (!array_key_exists($member, $checklist))
151
			continue;
152
        	$realif = get_real_wan_interface($member);
153
		$realif =  escapeshellarg($realif);
154
        	/* make sure the parent interface is up */
155
        	mwexec("/sbin/ifconfig {$realif} up");
156
		$cmd .= " addm {$realif}";
157
	}
158

  
159

  
160
        if ($g['booting'] || $bridge['bridgeif'] <> "") {
161
                mwexec("/sbin/ifconfig {$bridge['bridgeif']} destroy");
162
                mwexec("/sbin/ifconfig {$bridge['bridgeif']} create");
163
                $bridgeif = $bridge['bridgeif'];
164
        } else
165
                $bridgeif = exec("/sbin/ifconfig bridge create");
166

  
167
	/* Add interfaces to bridge */
168
        mwexec("/sbin/ifconfig {$bridgeif} {$cmd}");
169
	
170
	if (isset($bridge['enablestp'])) {
171
		/* Choose spanning tree proto */
172
		mwexec("/sbin/ifconfig {$bridgeif} proto {$bridge['proto']}");	
173
		
174
		$stpifs = explode(',', $bridge['stp']);
175
		foreach ($stpifs as $stpif) {
176
			$realif = get_real_wan_interface($stpif);
177
			mwexec("/sbin/ifconfig {$bridgeif} stp {$realif}");
178
		}
179
		if ($bridge['maxage'] <> "")
180
			mwexec("/sbin/ifconfig {$bridgeif} maxage {$bridge['maxage']}");
181
		if ($brige['fwdelay'] <> "")
182
			mwexec("/sbin/ifconfig {$bridgeif} fwddelay {$bridge['fwdelay']}");
183
		if ($brige['hellotime'] <> "")
184
                        mwexec("/sbin/ifconfig {$bridgeif} hellotime {$bridge['hellotime']}");
185
		if ($brige['priority'] <> "")
186
                        mwexec("/sbin/ifconfig {$bridgeif} priority {$bridge['priority']}");
187
		if ($brige['holdcount'] <> "")
188
                        mwexec("/sbin/ifconfig {$bridgeif} holdcnt {$bridge['holdcnt']}");
189
		$pconfig = explode(",", $bridge['ifpriority']);
190
		$ifpriority = array();
191
		foreach ($pconfig as $cfg) {
192
			$embcfg = explode(":", $cfg);
193
			foreach ($embcfg as $key => $value)
194
				$ifpriority[$key] = $value;
195
		}
196
		foreach ($ifpriority as $key => $value) {
197
			$realif = get_real_wan_interface($key);
198
			mwexec("/sbin/ifconfig ${bridgeif} ifpriority {$realif} {$value}"); 
199
		}
200
		$pconfig = explode(",", $bridges['ifpathcost']);
201
		$ifpathcost = array();
202
		foreach ($pconfig as $cfg) {
203
			$embcfg = explode(":", $cfg);
204
			foreach ($embcfg as $key => $value)
205
				$ifpathcost[$key] = $value;
206
		}
207
		foreach ($ifpriority as $key => $value) {
208
                        $realif = get_real_wan_interface($key);
209
                        mwexec("/sbin/ifconfig ${bridgeif} ifpathcost {$realif} {$value}");
210
                }
211

  
212
	}
213

  
214
	if ($bridge['maxaddr'] <> "")
215
		mwexec("/sbin/ifconfig {$bridgeif} maxaddr {$bridge['maxaddr']}");
216
        if ($bridge['timeout'] <> "")
217
                mwexec("/sbin/ifconfig {$bridgeif} timeout {$bridge['timeout']}");
218
        if ($bridge['span'] <> "") {
219
		$realif = get_real_wan_interface($bridge['span']);
220
                mwexec("/sbin/ifconfig {$bridgeif} span {$realif}");
221
	}
222
        $edgeifs = explode(',', $bridge['edge']);
223
        foreach ($edgeifs as $edgeif) {
224
		$realif = get_real_wan_interface($edgeif);
225
                mwexec("/sbin/ifconfig {$bridgeif} edge {$realif}");
226
        }
227
        $edgeifs = explode(',', $bridge['autoedge']);
228
        foreach ($edgeifs as $edgeif) {
229
                $realif = get_real_wan_interface($edgeif);
230
                mwexec("/sbin/ifconfig {$bridgeif} -autoedge {$realif}");
231
        }
232
        $ptpifs = explode(',', $bridge['ptp']);
233
        foreach ($ptpifs as $ptpif) {
234
                $realif = get_real_wan_interface($ptpif);
235
                mwexec("/sbin/ifconfig {$bridgeif} ptp {$realif}");
236
        }
237
        $ptpifs = explode(',', $bridge['autoptp']);
238
        foreach ($ptpifs as $ptpif) {
239
                $realif = get_real_wan_interface($ptpif);
240
                mwexec("/sbin/ifconfig {$bridgeif} -autoptp {$realif}");
241
        }
242
        $stickyifs = explode(',', $bridge['static']);
243
        foreach ($stickyifs as $stickyif) {
244
                $realif = get_real_wan_interface($stickyif);
245
                mwexec("/sbin/ifconfig {$bridgeif} sticky {$realif}");
246
        }
247
        $privateifs = explode(',', $bridge['private']);
248
        foreach ($privateifs as $privateif) {
249
                $realif = get_real_wan_interface($privateif);
250
                mwexec("/sbin/ifconfig {$bridgeif} private {$realif}");
251
        }
252

  
253
        mwexec("/sbin/ifconfig {$bridgeif} up");
254

  
255
        return $bridgeif;
256
}
257

  
120 258
function interfaces_gre_configure() {
121 259
        global $config;
122 260

  

Also available in: Unified diff