#!/usr/bin/php -q /dev/null"); if ($bonding = $ini['eth0']['BONDING']=='yes') { $ini['eth0']['BONDNICS'] = str_replace(',',' ',$ini['eth0']['BONDNICS']); $bond0 = explode(' ',trim(str_replace('eth0','',$ini['eth0']['BONDNICS']))); // ensure additional NICs in bond are set free if ($run && $set=='eth0') foreach ($bond0 as $nic) { if (isset($old['SYSNICS'])) $nic = ifname($nic); if ($nic && $nic!=$ifname) exec("/etc/rc.d/rc.inet1 {$nic}_stop >/dev/null"); } } if ($bridging = $ini['eth0']['BRIDGING']=='yes') { $ini['eth0']['BRNICS'] = str_replace(',',' ',$ini['eth0']['BRNICS']); $br0 = explode(' ',trim(str_replace('eth0','',$ini['eth0']['BRNICS']))); // ensure additional NICs in bridge are set free if ($run && $set=='eth0' && !$bonding) foreach ($br0 as $nic) { if (isset($old['SYSNICS'])) $nic = ifname($nic); if ($nic && $nic!=$ifname) exec("/etc/rc.d/rc.inet1 {$nic}_stop >/dev/null"); } } // create configuration file for all available interfaces $i = 0; $new = []; $new[] = "# Generated settings:"; foreach ($ini as $name => $port) { if ($bonding && in_array($name,$bond0)) continue; if ($bridging && in_array($name,$br0)) continue; $bridge = $port['BRIDGING']=='yes'; $trunk = $port['TYPE']=='trunk'; $j = 0; $x0 = 0; $iface = $bridge ? $port['BRNAME'] : ($bonding && $name=='eth0' ? $port['BONDNAME'] : $name); $new[] = "IFNAME[$i]=\"$iface\""; if ($set==$name) $ifname = $iface; foreach ($port as $key => $val) { if (preg_match('/^(TYPE|BONDING$|BRIDGING)/',$key)) continue; if (!$bonding && preg_match('/^(BONDING_MODE|BONDING_MIIMON|BONDNICS|BONDNAME)/',$key)) continue; if (!$bridge && preg_match('/^(BRSTP|BRFD|BRNICS|BRNAME)/',$key)) continue; list($item,$x) = explode(':',$key,2); if ($trunk && $x>0 && preg_match('/^(VLANID|USE_DHCP|IPADDR|NETMASK|DESCRIPTION)/',$key)) { if ($x0 != $x) {$x0 = $x; $j++;} $vlan = ",$j]"; } else $vlan = ''; if (!$vlan && preg_match('/^VLANID/',$key)) continue; $new[] = $item.(preg_match('/^(GATEWAY|DNS_SERVER|DHCP_KEEPRESOLV)/',$key)?'':'['.$i.($vlan?'':']')).$vlan."=\"$val\""; } if ($trunk) $new[] = "VLANS[$i]=\"".($j+1)."\""; $i++; } $new[] = "SYSNICS=\"$i\""; file_put_contents($cfg,implode("\r\n",$new)."\r\n"); // start interface with updated (new) configuration // don't execute when only interface description has changed if ($run) exec("/etc/rc.d/rc.inet1 {$ifname}_start >/dev/null"); exit(0); ?>