Project

General

Profile

« Previous | Next » 

Revision c3a0d2a5

Added by Seth Mos almost 14 years ago

Automatically pick up on dynamic IPv6 interfaces. For Example dhcp6.

View differences:

etc/inc/gwlb.inc
321 321
	else
322 322
		$iflist = get_configured_interface_with_descr(false, true);
323 323

  
324
	/* Process/add dynamic gateways. */
324
	/* Process/add dynamic v4 gateways. */
325 325
	foreach($iflist as $ifname => $friendly ) {
326 326
		if(! interface_has_gateway($ifname))
327 327
			continue;
......
330 330
			continue;
331 331

  
332 332
		$ifcfg = &$config['interfaces'][$ifname];
333
		if (!empty($ifcfg['ipaddr']) && is_ipaddr($ifcfg['ipaddr']))
333
		if(!empty($ifcfg['ipaddr']) && is_ipaddrv4($ifcfg['ipaddr']))
334 334
			continue;
335 335

  
336 336
		$gateway = array();
337 337
		$gateway['dynamic'] = false;
338
		$gateway['ipprotocol'] = "inet";
338 339
		$gateway['gateway'] = get_interface_gateway($ifname, $gateway['dynamic']);
339 340
		$gateway['interface'] = get_real_interface($ifname);
340 341
		$gateway['friendlyiface'] = $ifname;
......
346 347
			$gateway['dynamic'] = true;
347 348
		}
348 349
		/* Loopback dummy for dynamic interfaces without a IP */
349
		if (!is_ipaddr($gateway['gateway']) && $gateway['dynamic'] == true)
350
		if (!is_ipaddrv4($gateway['gateway']) && $gateway['dynamic'] == true)
350 351
			$gateway['gateway'] = "dynamic";
351 352

  
352 353
		/* automatically skip known static and dynamic gateways we have a array entry for */
353 354
		foreach($gateways_arr as $gateway_item) {
354
			if (($ifname == $gateway_item['friendlyiface'] && $friendly == $gateway_item['name']) ||
355
				($ifname == $gateway_item['friendlyiface'] && $gateway_item['dynamic'] == true))
355
			if ((($ifname == $gateway_item['friendlyiface'] && $friendly == $gateway_item['name'])&& ($gateway['ipprotocol'] == $gateway_item['ipprotocol'])) ||
356
				($ifname == $gateway_item['friendlyiface'] && $gateway_item['dynamic'] == true) && ($gateway['ipprotocol'] == $gateway_item['ipprotocol']))
356 357
					continue 2;
357 358
		}
358 359

  
359
		if (is_ipaddr($gateway['gateway']))
360
		if (is_ipaddrv4($gateway['gateway']))
360 361
			$gateway['monitor'] = $gateway['gateway'];
361 362

  
362 363
		$gateway['descr'] = "Interface {$friendly} Dynamic Gateway";
363
		$gateways_arr[$friendly] = $gateway;
364
		$gateways_arr[$gateway['name']] = $gateway;
365
	}
366

  
367
	/* Process/add dynamic v6 gateways. */
368
	foreach($iflist as $ifname => $friendly ) {
369
		if(! interface_has_gateway($ifname))
370
			continue;
371

  
372
		if (empty($config['interfaces'][$ifname]))
373
			continue;
374

  
375
		$ifcfg = &$config['interfaces'][$ifname];
376
		if(!empty($ifcfg['ipaddrv6']) && is_ipaddrv6($ifcfg['ipaddrv6']))
377
			continue;
378

  
379
		echo "found dynamic v6 interface $ifname\n";
380

  
381
		$gateway = array();
382
		$gateway['dynamic'] = false;
383
		$gateway['ipprotocol'] = "inet6";
384
		$gateway['gateway'] = get_interface_gateway_v6($ifname, $gateway['dynamic']);
385
		$gateway['interface'] = get_real_interface($ifname);
386
		$gateway['friendlyiface'] = $ifname;
387
		$gateway['name'] = "{$friendly}_v6";
388
		$gateway['attribute'] = "system";
389
	
390
		if ($gateway['dynamic'] === "default") {
391
			$gateway['defaultgw'] = true;
392
			$gateway['dynamic'] = true;
393
		}
394

  
395
		/* Loopback dummy for dynamic interfaces without a IP */
396
		if (!is_ipaddrv6($gateway['gateway']) && $gateway['dynamic'] == true)
397
			$gateway['gateway'] = "dynamic";
398

  
399
		/* automatically skip known static and dynamic gateways we have a array entry for */
400
		foreach($gateways_arr as $gateway_item) {
401
			if ((($ifname == $gateway_item['friendlyiface'] && $friendly == $gateway_item['name']) && ($gateway['ipprotocol'] == $gateway_item['ipprotocol'])) ||
402
				($ifname == $gateway_item['friendlyiface'] && $gateway_item['dynamic'] == true) && ($gateway['ipprotocol'] == $gateway_item['ipprotocol']))
403
					continue 2;
404
		}
405
		print_r($gateway);
406

  
407

  
408
		if (is_ipaddrv6($gateway['gateway']))
409
			$gateway['monitor'] = $gateway['gateway'];
410

  
411
		$gateway['descr'] = "Interface {$friendly} Dynamic Gateway";
412
		$gateways_arr[$gateway['name']] = $gateway;
364 413
	}
365 414

  
366 415
	return($gateways_arr);

Also available in: Unified diff