function guifi_kamikaze_files($dev, $zone) { //SOME VARIABLES $dns = guifi_get_dns($zone, 2); $lan = guifi_unsolclic_if($dev->id, 'wLan/Lan'); $lan_network = _ipcalc($lan->ipv4, $lan->netmask); switch ($dev->variable['model_id']) { case "39": // Avila GW2348-4 $wireless_model = 'atheros'; $lan_iface = 'eth0'; $lan2_iface = 'eth1'; $packages = 'ixp4xx/packages'; break; default: _outln_comment('model id not supported'); exit; } // SECTION FILES _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/config/wireless')); function wds_add($dev, $radio) { $wds_links = array(); foreach ($radio[interfaces] as $interface_id => $interface) { if ($interface[interface_type] == 'wds/p2p') { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { if ($link['link_type'] == 'wds') { $wds_links[] = $link; } } } $ifcount = 0; foreach ($wds_links as $key => $wds) { if (preg_match("/(Working|Testing|Building)/", $wds['flag'])) { $status = 'active'; print ' option \'wds_add' . $ifcount . '\' \'' . $wds['interface']['mac'] . '\'<br />'; $ifcount++; } else { $status = 'disabled'; print '# option \'wds_addX\' \'' . $wds['interface']['mac'] . '\'# ' . t($wds['flag']) . '<br />'; } } } } } function wds_network($dev, $radio) { $ifcount = '0'; foreach ($radio[interfaces] as $interface_id => $interface) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { if ($link['link_type'] == 'wds') { $wds_links = array(); $wds_links[] = $link; foreach ($wds_links as $key => $wds) { $hostname = guifi_get_hostname($wds['device_id']); if (preg_match("/(Working|Testing|Building)/", $wds['flag'])) { $status = 'active'; print ' ## wds_' . $hostname . ' config \'interface\' \'wds_' . $hostname . '\' option \'ifname\' \'ath' . $radio[radiodev_counter] . '.wds' . $ifcount . '\' option \'proto\' \'static\' '; $ifcount++; } else { $status = 'disabled'; print ' ##### ' . t($wds['flag']) . ' #### ## wds_' . $hostname . ' # config \'interface\' \'ath' . $radio[radiodev_counter] . '.wdsX\' # option \'proto\' \'none\' '; } } if ($status == 'active') { print ' option \'ipaddr\' \'' . $ipv4[ipv4] . '\' option \'netmask\' \'' . $ipv4['netmask'] . '\' '; } else { print '# option \'ipaddr\' \'' . $ipv4[ipv4] . '\' # option \'netmask\' \'' . $ipv4['netmask'] . '\' '; } } } } } } function cable_network($dev) { foreach ($dev->interfaces as $interface_id => $interface) { switch ($interface[interface_type]) { case 'vlan1': $iname = 'eth0:1'; break; case 'vlan2': $iname = 'eth1'; break; case 'vlan3': $iname = 'eth2'; break; default: $iname = $interface[interface_type]; break; } foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { $network = guifi_get_hostname($link[device_id]); if (preg_match("/(Working|Testing|Building)/", $link['flag'])) { $status = 'active'; if ($interface[interface_type] != 'wLan/Lan') { print ' ## cable_' . $network . ' config \'interface\' \'' . $network . '\' option \'ifname\' \'' . $iname . '\' '; print ' option \'proto\' \'static\' option \'ipaddr\' \'' . $ipv4[ipv4] . '\' option \'netmask\' \'' . $ipv4[netmask] . '\' '; } } else { $status = 'disabled'; print ' ##### ' . t($link['flag']) . ' #### ## cable_' . $network . ' # config \'interface\' \'' . $network . '\' # option \'ifname\' \'' . $iname . '\' '; print '# option \'proto\' \'static\' # option \'ipaddr\' \'' . $ipv4[ipv4] . '\' # option \'netmask\' \'' . $ipv4[netmask] . '\' '; } } } } } print '<pre> echo " '; if (isset($dev->radios)) { foreach ($dev->radios as $radio_id => $radio) { $mode = 'ap'; $ssid = $radio[ssid]; $channel = atheros_channel($radio); if ($channel < 14) { $band = '11b'; } else { $band = '11a'; } if (empty($radio[antenna_mode])) { $radio[antenna_mode] = '1'; } else { if ($radio[antenna_mode] != 'Main') { $radio[antenna_mode] = '2'; } else { $radio[antenna_mode] = '1'; } } if ($radio_id == '0') { $wireless_iface = 'wifi0'; $network = 'lan'; } else { $wireless_iface = 'wifi' . $radio_id; $network = 'wlan' . ($radio_id + 1); } $wireless_model = 'atheros'; $txant = 'txantenna'; $rxant = 'rxantenna'; print ' ## Radio: ' . $radio[ssid] . ' config \'wifi-device\' \'' . $wireless_iface . '\' option \'type\' \'' . $wireless_model . '\' option \'channel\' \'' . $channel . '\' option \'disabled\' \'0\' option \'hwmode\' \'' . $band . '\' option \'diversity\' \'0\' option \'' . $txant . '\' \'' . $radio[antenna_mode] . '\' option \'' . $rxant . '\' \'' . $radio[antenna_mode] . '\' option \'txpower\' \'16\' config wifi-iface option \'device\' \'' . $wireless_iface . '\' option \'network\' \'' . $network . '\' option \'agmode\' \'' . $mode . '\' option \'ssid\' \'guifi.net-' . $radio[ssid] . '\' option \'encryption\' \'none\' '; wds_add($dev, $radio); } } print ' " > /etc/config/wireless </pre> '; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/config/network')); print '<pre> echo " config interface loopback option \'ifname\' \'lo\' option \'proto\' \'static\' option \'ipaddr\' \'127.0.0.1\' option \'netmask\' \'255.0.0.0\' '; if (isset($dev->radios)) { foreach ($dev->radios as $radio_id => $radio) { if (isset($radio[interfaces])) { foreach ($radio[interfaces] as $interface_id => $interface) { if ($interface[interface_type] != 'wds/p2p') { if (isset($interface[ipv4])) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { if ($interface[interface_type] == 'wLan/Lan') { $iface = 'ath0 eth0'; $network = 'lan'; } else { $iface = 'wifi' . $radio_id; $network = 'wlan' . ($radio_id + 1); } $item = _ipcalc($ipv4[ipv4], $ipv4[netmask]); // FILE NETWORK print ' config interface ' . $network . ' option \'ifname\' \'' . $iface . '\' '; if ($interface[interface_type] == 'wLan/Lan') { print ' option \'type\' \'bridge\' '; } print ' option \'proto\' \'static\' option \'ipaddr\' \'' . $ipv4[ipv4] . '\' option \'netmask\' \'' . $ipv4[netmask] . '\' option \'dns\' \'' . $dns . '\' '; } } } } } wds_network($dev, $radio); } } cable_network($dev); print ' " > /etc/config/network </pre> '; $wds_links = array(); foreach ($dev->radios as $radio_id => $radio) { foreach ($radio[interfaces] as $interface_id => $interface) { if ($interface[interface_type] == 'wds/p2p') { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { if ($link['link_type'] == 'wds') { $wds_links[] = $link; } } } } } } foreach ($wds_links as $key => $wds) { if ($wds['routing'] == 'BGP') { $wds_bgpd = '1'; } if ($wds['routing'] == 'OSPF') { $wds_ospfd = '1'; } } $cable_links = array(); foreach ($dev->interfaces as $interface_id => $interface) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { if ($link['link_type'] == 'cable') { $cable_links[] = $link; } } } } foreach ($cable_links as $key => $cable) { if ($cable['routing'] == 'BGP') { $cable_bgpd = '1'; } if ($cable['routing'] == 'OSPF') { $cable_ospfd = '1'; } } // QUAGGA CONFIG FILES $file_zebra = ''; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/quagga/zebra.conf')); _out_file($file_zebra, '/etc/quagga/zebra.conf'); // FILE OSPFD if ($wds_ospfd == '1' || $cable_ospfd == '1') { _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/quagga/ospfd.conf')); print '<pre>mv /etc/quagga/ospfd.conf /etc/quagga/ospfd.conf.bak echo " ! interface br-lan ! router ospf ospf router-id ' . $lan->ipv4 . ' redistribute bgp '; foreach ($dev->radios as $radio_id => $radio) { foreach ($radio[interfaces] as $interface_id => $interface) { if ($interface[interface_type] == 'wLan' || $interface[interface_type] == 'wLan/Lan') { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { $network = _ipcalc($ipv4[ipv4], $ipv4[netmask]); } if (preg_match("/(Working|Testing|Building)/", $link['flag'])) { print ' network ' . $network[netid] . '/' . $network[maskbits] . ' area 0<br />'; } } } } foreach ($wds_links as $key => $wds) { $iplocal[] = $wds['interface']['ipv4']; if ($wds['routing'] == 'OSPF') { $wds_network = _ipcalc($iplocal[$key][ipv4], $iplocal[$key][netmask]); if (preg_match("/(Working|Testing|Building)/", $wds['flag'])) { print ' network ' . $wds_network[netid] . '/' . $wds_network[maskbits] . ' area 0<br />'; } } } foreach ($dev->interfaces as $interface_id => $interface) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { $item = _ipcalc($ipv4[ipv4], $ipv4[netmask]); if ($link['routing'] == 'OSPF') { if (preg_match("/(Working|Testing|Building)/", $link['flag'])) { print ' network ' . $item[netid] . '/' . $item[maskbits] . ' area 0<br />'; } } } } } print 'default-information originate ! " > /etc/quagga/ospfd.conf</pre>'; } // FILE BGPD if ($wds_bgpd == '1' || $cable_bgpd == '1') { _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/quagga/bgpd.conf')); print '<pre>mv /etc/quagga/bgpd.conf /etc/quagga/bgpd.conf.bak echo " ! interface br-lan ! router bgp ' . $dev->id . ' bgp router-id ' . $lan->ipv4 . ' '; foreach ($dev->radios as $radio_id => $radio) { foreach ($radio[interfaces] as $interface_id => $interface) { if ($interface[interface_type] == 'wLan' || $interface[interface_type] == 'wLan/Lan') { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { $network = _ipcalc($ipv4[ipv4], $ipv4[netmask]); } print ' network ' . $network[netid] . '/' . $network[maskbits] . '<br />'; } } } print 'redistribute ospf '; foreach ($wds_links as $key => $wds) { $iplocal[] = $wds['interface']['ipv4']; if ($wds['routing'] == 'BGP') { $wds_network = _ipcalc($iplocal[$key][ipv4], $iplocal[$key][netmask]); if (preg_match("/(Working|Testing|Building)/", $wds['flag'])) { print ' network ' . $wds_network[netid] . '/' . $wds_network[maskbits] . '<br />'; } } } foreach ($dev->interfaces as $interface_id => $interface) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { $item = _ipcalc($ipv4[ipv4], $ipv4[netmask]); if ($link['routing'] == 'BGP') { if (preg_match("/(Working|Testing|Building)/", $link['flag'])) { print ' network ' . $item[netid] . '/' . $item[maskbits] . '<br />'; } } } } } foreach ($dev->radios as $radio_id => $radio) { foreach ($radio[interfaces] as $interface_id => $interface) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { if ($link['routing'] == 'BGP') { if (preg_match("/(Working|Testing|Building)/", $link['flag'])) { print ' neighbor ' . $link['interface']['ipv4']['ipv4'] . ' remote-as ' . $link['device_id'] . ' '; } } } } } } foreach ($dev->interfaces as $interface_id => $interface) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { if ($link['routing'] == 'BGP') { if (preg_match("/(Working|Testing|Building)/", $link['flag'])) { print ' neighbor ' . $link['interface']['ipv4']['ipv4'] . ' remote-as ' . $link['device_id'] . ' '; } } } } } print '" > /etc/quagga/bgpd.conf</pre>'; } //FILE FIREWALL _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/config/firewall')); print '<pre> echo " config defaults option \'syn_flood\' \'1\' option \'input\' \'ACCEPT\' option \'output\' \'ACCEPT\' option \'forward\' \'ACCEPT\' '; foreach ($dev->radios as $radio_id => $radio) { foreach ($radio[interfaces] as $interface_id => $interface) { if ($interface[interface_type] == 'wLan' || $interface[interface_type] == 'wLan/Lan') { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { if ($interface[interface_type] == 'wLan/Lan') { $network = 'lan'; } else { $network = 'wlan' . ($radio_id + 1); } print ' config zone option \'name\' \'' . $network . '\' option \'input\' \'ACCEPT\' option \'output\' \'ACCEPT\' option \'forward\' \'ACCEPT\' '; } } } } if ($interface[interface_type] == 'wds/p2p') { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { if ($link['link_type'] == 'wds') { $ifcount = 0; } } } } foreach ($wds_links as $key => $wds) { $hostname = guifi_get_hostname($wds['device_id']); if (preg_match("/(Working|Testing|Building)/", $wds['flag'])) { print ' config zone option \'name\' \'wds_' . $hostname . '\' option \'input\' \'ACCEPT\' option \'output\' \'ACCEPT\' option \'forward\' \'ACCEPT\' '; } } foreach ($dev->interfaces as $interface_id => $interface) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { $hostname = guifi_get_hostname($link['device_id']); if (preg_match("/(Working|Testing|Building)/", $link['flag'])) { print ' config zone option \'name\' \'' . $hostname . '\' option \'input\' \'ACCEPT\' option \'output\' \'ACCEPT\' option \'forward\' \'ACCEPT\' '; } } } } print '" > /etc/config/firewall</pre>'; //FILE OPKG $opkg_conf = ' src/gz snapshots http://downloads.openwrt.org/snapshots/' . $packages . ' dest root / dest ram /tmp lists_dir ext /var/opkg-lists option overlay_root /jffs '; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/opkg.conf')); _out_file($opkg_conf, '/etc/opkg.conf'); $dhcp_statics = array(); $max = explode(".", $dev->ipv4); function merge_static($link, &$dhcp_statics, &$max, &$curr) { if (empty($link['interface'][mac])) { $link['interface'][mac] = 'FF:FF:FF:FF:FF:FF'; } $dhcp_statics[] = array($link['interface'][ipv4][ipv4], $link['interface'][mac], guifi_get_hostname($link['interface'][device_id])); $curr = explode(".", $link['interface'][ipv4][ipv4]); if ($curr[3] > $max[3]) { $max[3] = $curr[3]; } } $main_ip = guifi_main_ip($dev->id); $item = _ipcalc_by_netbits($main_ip[ipv4], $main_ip[maskbits]); $max = explode(".", $main_ip[ipv4]); // cable links foreach ($dev->interfaces as $interface) { foreach ($interface[ipv4] as $ipv4) { foreach ($ipv4[links] as $link) { if ($link['interface'][ipv4][ipv4] != '') { $item2 = _ipcalc($link['interface'][ipv4][ipv4], $link['interface'][ipv4][netmask]); if ($item[netid] == $item2[netid]) { merge_static($link, $dhcp_statics, $max, $cur); } } } } } // ap/client links foreach ($dev->radios as $radio) { foreach ($radio[interfaces] as $interface) { foreach ($interface[ipv4] as $ipv4) { foreach ($ipv4[links] as $link) { if ($link['link_type'] == 'ap/client' and !empty($link['interface'][ipv4][ipv4])) { merge_static($link, $dhcp_statics, $max, $cur); } } } } } $statics = count($dhcp_statics) - 1; $totalstatics = count($dhcp_statics); $first = explode(".", $item[netid]); $last = explode(".", $item[broadcast]); $limit = $last[3] - 1 - ($first[3] + 3) - $totalstatics; _outln_comment(); _outln_comment(t('File /etc/config/luci_ethers')); print 'echo "'; foreach ($dhcp_statics as $static) { print '<pre> ## Device: ' . $static[2] . ' config \'static_lease\' option \'macaddr\' \'' . $static[1] . '\' option \'ipaddr\' \'' . $static[0] . '\' </pre>'; } print '" > /etc/config/luci_ethers<br />'; // FILE DHCP _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/config/dhcp')); print '<pre> echo " config \'dnsmasq\' option \'domainneeded\' \'1\' option \'boguspriv\' \'1\' option \'filterwin2k\' \'0\' option \'localise_queries\' \'1\' option \'local\' \'/lan/\' option \'domain\' \'lan\' option \'expandhosts\' \'1\' option \'nonegcache\' \'0\' option \'authoritative\' \'1\' option \'readethers\' \'1\' option \'leasefile\' \'/tmp/dhcp.leases\' option \'resolvfile\' \'/tmp/resolv.conf.auto\' '; foreach ($dev->radios as $radio_id => $radio) { foreach ($radio[interfaces] as $interface_id => $interface) { if ($interface[interface_type] == 'wLan' || $interface[interface_type] == 'wLan/Lan') { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { if ($interface[interface_type] == 'wLan/Lan') { $iface = 'lan'; $network = 'lan'; } else { $network = 'wlan' . ($radio_id + 1); } $max = explode(".", $ipv4[ipv4]); foreach ($ipv4[links] as $link) { if ($link['link_type'] == 'ap/client' and !empty($link['interface'][ipv4][ipv4])) { $totalstaticss = count($ipv4[links]); } } $first = explode(".", $item[netid]); $last = explode(".", $item[broadcast]); $limit = $last[3] - 1 - ($first[3] + 3) - $totalstaticss; $totalstaticss = '0'; print ' config \'dhcp\' \'' . $network . '\' option \'interface\' \'' . $network . '\' option \'leasetime\' \'12h\' option \'start\' \'' . ($max[3] + 2) . '\' option \'limit\' \'' . $limit . '\' '; } } } } print '" > /etc/config/dhcp<br /></pre>'; }
function guifi_kamikaze_files($dev, $zone) { //SOME VARIABLES $dns = guifi_get_dns($zone, 2); $lan = guifi_unsolclic_if($dev->id, 'wLan/Lan'); $lan_network = _ipcalc($lan->ipv4, $lan->netmask); switch ($dev->variable['model_id']) { case "25": case "26": case "32": case "33": case "34": case "35": case "36": case "37": // NanoStationX, LiteStationX, NanoStation LocoX, Bullet $wireless_model = 'atheros'; $lan_iface = 'eth0'; $lan2_iface = 'eth1'; $packages = 'atheros/packages'; break; default: _outln_comment('model id not supported'); exit; } // SECTION FILES _outln_comment(); _outln_comment(); _outln_comment(t('Wireless Settings')); function wds_add($dev, $radio, $radio_id) { $wds_links = array(); foreach ($radio[interfaces] as $interface_id => $interface) { if ($interface[interface_type] == 'wds/p2p') { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { if ($link['link_type'] == 'wds') { $wds_links[] = $link; } } } $ifcount = 0; foreach ($wds_links as $key => $wds) { if (preg_match("/(Working|Testing|Building)/", $wds['flag'])) { $status = 'active'; print 'uci set wireless.@wifi-iface[' . $radio_id . '].wds_add' . $ifcount . '=' . $wds['interface']['mac'] . '<br />'; $ifcount++; } else { $status = 'disabled'; print '# uci set wireless.@wifi-iface[' . $radio_id . '].wds_addX=' . $wds['interface']['mac'] . ' # ' . t($wds['flag']) . '<br />'; } } } } } function wds_network($dev, $radio) { $ifcount = '0'; foreach ($radio[interfaces] as $interface_id => $interface) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { if ($link['link_type'] == 'wds') { $wds_links = array(); $wds_links[] = $link; foreach ($wds_links as $key => $wds) { $hostname = guifi_get_hostname($wds['device_id']); if (preg_match("/(Working|Testing|Building)/", $wds['flag'])) { $status = 'active'; print ' ## wds_' . $hostname . ' uci set network.wds_' . $hostname . '=interface uci set network.wds_' . $hostname . '.ifname=ath' . $radio[radiodev_counter] . '.wds' . $ifcount . ' uci set network.wds_' . $hostname . '.proto=static '; $ifcount++; } else { $status = 'disabled'; print ' ##### ' . t($wds['flag']) . ' #### ## wds_' . $hostname . ' # uci set network.wds_' . $hostname . '.ifname=ath' . $radio[radiodev_counter] . '.wdsX # uci set network.wds_' . $hostname . '.proto=none '; } } if ($status == 'active') { print 'uci set network.wds_' . $hostname . '.ipaddr=' . $ipv4[ipv4] . ' uci set network.wds_' . $hostname . '.netmask=' . $ipv4['netmask'] . ' '; } else { print '# uci set network.wds_' . $hostname . '.ipaddr=' . $ipv4[ipv4] . ' # uci set network.wds_' . $hostname . '.netmask=' . $ipv4['netmask'] . ' '; } } } } } } print '<pre>'; if (isset($dev->radios)) { foreach ($dev->radios as $radio_id => $radio) { $mode = 'ap'; $ssid = $radio[ssid]; $channel = atheros_channel($radio); if ($channel < 14) { $band = '11b'; } else { $band = '11a'; } if (empty($radio[antenna_mode])) { $radio[antenna_mode] = '1'; } else { if ($radio[antenna_mode] != 'Main') { $radio[antenna_mode] = '2'; } else { $radio[antenna_mode] = '1'; } } if ($radio_id == '0') { $wireless_iface = 'wifi0'; $network = 'lan'; } else { $wireless_iface = 'wifi' . $radio_id; $network = 'wlan' . ($radio_id + 1); } $wireless_model = 'atheros'; $txant = 'txantenna'; $rxant = 'rxantenna'; print ' ## Radio: ' . $radio[ssid] . ' uci set wireless.' . $wireless_iface . '=wifi-device uci set wireless.' . $wireless_iface . '.type=' . $wireless_model . ' uci set wireless.' . $wireless_iface . '.channel=' . $channel . ' uci set wireless.' . $wireless_iface . '.disabled=0 uci set wireless.' . $wireless_iface . '.hwmode=' . $band . ' uci set wireless.' . $wireless_iface . '.diversity=0 uci set wireless.' . $wireless_iface . '.antenna=vertical uci set wireless.' . $wireless_iface . '.txpower=16 uci set wireless.@wifi-iface[' . $radio_id . ']=wifi-iface uci set wireless.@wifi-iface[' . $radio_id . '].device=' . $wireless_iface . ' uci set wireless.@wifi-iface[' . $radio_id . '].network=' . $network . ' uci set wireless.@wifi-iface[' . $radio_id . '].mode=' . $mode . ' uci set wireless.@wifi-iface[' . $radio_id . '].ssid=guifi.net-' . $radio[ssid] . ' uci set wireless.@wifi-iface[' . $radio_id . '].encryption=none '; wds_add($dev, $radio, $radio_id); } } print '</pre>'; _outln_comment(); _outln_comment(); _outln_comment(t('Network Settings')); function cable_network($dev) { foreach ($dev->interfaces as $interface_id => $interface) { switch ($interface[interface_type]) { case 'vlan1': $iname = 'eth0:1'; break; case 'vlan2': $iname = 'eth1'; break; case 'vlan3': $iname = 'eth2'; break; default: $iname = $interface[interface_type]; break; } foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { $network = guifi_get_hostname($link[device_id]); if (preg_match("/(Working|Testing|Building)/", $link['flag'])) { $status = 'active'; if ($interface[interface_type] != 'wLan/Lan') { print ' ## cable_' . $network . ' uci set network.' . $network . '=interface uci set network.' . $network . '.ifname=' . $iname . ' uci set network.' . $network . '.proto=static uci set network.' . $network . '.ipaddr=' . $ipv4[ipv4] . ' uci set network.' . $network . '.netmask=' . $ipv4[netmask] . ' '; } } else { $status = 'disabled'; print ' ##### ' . t($link['flag']) . ' #### ## cable_' . $network . ' # uci set network.' . $network . '=interface # uci set network.' . $network . '.ifname=' . $iname . ' # uci set network.' . $network . '.proto=static # uci set network.' . $network . '.ipaddr=' . $ipv4[ipv4] . ' # uci set network.' . $network . '.netmask=' . $ipv4[netmask] . ' '; } } } } } print '<pre>'; print ' uci set network.loopback=interface uci set network.loopback.ifname=lo uci set network.loopback.proto=static uci set network.loopback.ipaddr=127.0.0.1 uci set network.loopback.netmask=255.0.0.0 '; if (isset($dev->radios)) { foreach ($dev->radios as $radio_id => $radio) { if (isset($radio[interfaces])) { foreach ($radio[interfaces] as $interface_id => $interface) { if ($interface[interface_type] != 'wds/p2p') { if (isset($interface[ipv4])) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { if ($interface[interface_type] == 'wLan/Lan') { $iface = 'ath0 eth0'; $network = 'lan'; } else { $iface = 'wifi' . $radio_id; $network = 'wlan' . ($radio_id + 1); } $item = _ipcalc($ipv4[ipv4], $ipv4[netmask]); // FILE NETWORK if ($interface[interface_type] == 'wLan/Lan') { print 'uci set network.' . $network . '.type=bridge'; } print 'uci set network.' . $network . '=interface uci set network.' . $network . '.ifname=' . $iface . ' uci set network.' . $network . '.proto=static uci set network.' . $network . '.ipaddr=' . $ipv4[ipv4] . ' uci set network.' . $network . '.netmask=' . $ipv4[netmask] . ' uci set network.' . $network . '.dns=' . $dns . ' '; } } } } } wds_network($dev, $radio); } } cable_network($dev); print ' </pre>'; $wds_links = array(); foreach ($dev->radios as $radio_id => $radio) { foreach ($radio[interfaces] as $interface_id => $interface) { if ($interface[interface_type] == 'wds/p2p') { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { if ($link['link_type'] == 'wds') { $wds_links[] = $link; } } } } } } foreach ($wds_links as $key => $wds) { if ($wds['routing'] == 'BGP') { $wds_bgpd = '1'; } if ($wds['routing'] == 'OSPF') { $wds_ospfd = '1'; } } $cable_links = array(); foreach ($dev->interfaces as $interface_id => $interface) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { if ($link['link_type'] == 'cable') { $cable_links[] = $link; } } } } foreach ($cable_links as $key => $cable) { if ($cable['routing'] == 'BGP') { $cable_bgpd = '1'; } if ($cable['routing'] == 'OSPF') { $cable_ospfd = '1'; } } //FILE FIREWALL _outln_comment(); _outln_comment(); _outln_comment(t('Firewall Settings')); print '<pre>'; print ' uci set firewall.@defaults[0]=defaults uci set firewall.@defaults[0].syn_flood=1 uci set firewall.@defaults[0].input=ACCEPT uci set firewall.@defaults[0].output=ACCEPT uci set firewall.@defaults[0].forward=ACCEPT '; foreach ($dev->radios as $radio_id => $radio) { foreach ($radio[interfaces] as $interface_id => $interface) { if ($interface[interface_type] == 'wLan' || $interface[interface_type] == 'wLan/Lan') { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { if ($interface[interface_type] == 'wLan/Lan') { $network = 'lan'; } else { $network = 'wlan' . ($radio_id + 1); } $zid = 0; print ' uci set firewall.@zone[' . $zid . ']=zone uci set firewall.@zone[' . $zid . '].name=' . $network . ' uci set firewall.@zone[' . $zid . '].input=ACCEPT uci set firewall.@zone[' . $zid . '].output=ACCEPT uci set firewall.@zone[' . $zid . '].forward=ACCEPT '; } } } } if ($interface[interface_type] == 'wds/p2p') { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { if ($link['link_type'] == 'wds') { $ifcount = 0; } } } } foreach ($wds_links as $key => $wds) { $hostname = guifi_get_hostname($wds['device_id']); if (preg_match("/(Working|Testing|Building)/", $wds['flag'])) { $zid++; print ' uci set firewall.@zone[' . $zid . ']=zone uci set firewall.@zone[' . $zid . '].name=' . $hostname . ' uci set firewall.@zone[' . $zid . '].input=ACCEPT uci set firewall.@zone[' . $zid . '].output=ACCEPT uci set firewall.@zone[' . $zid . '].forward=ACCEPT '; } } foreach ($dev->interfaces as $interface_id => $interface) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { $hostname = guifi_get_hostname($link['device_id']); if (preg_match("/(Working|Testing|Building)/", $link['flag'])) { $zid++; print ' uci set firewall.@zone[' . $zid . ']=zone uci set firewall.@zone[' . $zid . '].name=' . $hostname . ' uci set firewall.@zone[' . $zid . '].input=ACCEPT uci set firewall.@zone[' . $zid . '].output=ACCEPT uci set firewall.@zone[' . $zid . '].forward=ACCEPT '; print '</pre>'; } } } } $dhcp_statics = array(); $max = explode(".", $dev->ipv4); function merge_static($link, &$dhcp_statics, &$max, &$curr) { if (empty($link['interface'][mac])) { $link['interface'][mac] = 'FF:FF:FF:FF:FF:FF'; } $dhcp_statics[] = array($link['interface'][ipv4][ipv4], $link['interface'][mac], guifi_get_hostname($link['interface'][device_id])); $curr = explode(".", $link['interface'][ipv4][ipv4]); if ($curr[3] > $max[3]) { $max[3] = $curr[3]; } } $main_ip = guifi_main_ip($dev->id); $item = _ipcalc_by_netbits($main_ip[ipv4], $main_ip[maskbits]); $max = explode(".", $main_ip[ipv4]); // cable links foreach ($dev->interfaces as $interface) { foreach ($interface[ipv4] as $ipv4) { foreach ($ipv4[links] as $link) { if ($link['interface'][ipv4][ipv4] != '') { $item2 = _ipcalc($link['interface'][ipv4][ipv4], $link['interface'][ipv4][netmask]); if ($item[netid] == $item2[netid]) { merge_static($link, $dhcp_statics, $max, $cur); } } } } } // ap/client links foreach ($dev->radios as $radio) { foreach ($radio[interfaces] as $interface) { foreach ($interface[ipv4] as $ipv4) { foreach ($ipv4[links] as $link) { if ($link['link_type'] == 'ap/client' and !empty($link['interface'][ipv4][ipv4])) { merge_static($link, $dhcp_statics, $max, $cur); } } } } } $statics = count($dhcp_statics) - 1; $totalstatics = count($dhcp_statics); $first = explode(".", $item[netid]); $last = explode(".", $item[broadcast]); $limit = $last[3] - 1 - ($first[3] + 3) - $totalstatics; // FILE DHCP _outln_comment(); _outln_comment(); _outln_comment(t('DHCP Settings')); print '<pre>'; print ' uci set dhcp.@dnsmasq[0]=dnsmasq uci set dhcp.@dnsmasq[0].domainneeded=1 uci set dhcp.@dnsmasq[0].boguspriv=1 uci set dhcp.@dnsmasq[0].filterwin2k=0 uci set dhcp.@dnsmasq[0].localise_queries=1 uci set dhcp.@dnsmasq[0].local=/lan/ uci set dhcp.@dnsmasq[0].domain=lan uci set dhcp.@dnsmasq[0].expandhosts=1 uci set dhcp.@dnsmasq[0].nonegcache=0 uci set dhcp.@dnsmasq[0].authoritative=1 uci set dhcp.@dnsmasq[0].readethers=1 uci set dhcp.@dnsmasq[0].leasefile=/tmp/dhcp.leases uci set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.auto '; foreach ($dev->radios as $radio_id => $radio) { foreach ($radio[interfaces] as $interface_id => $interface) { if ($interface[interface_type] == 'wLan' || $interface[interface_type] == 'wLan/Lan') { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { if ($interface[interface_type] == 'wLan/Lan') { $iface = 'lan'; $network = 'lan'; } else { $network = 'wlan' . ($radio_id + 1); } $max = explode(".", $ipv4[ipv4]); foreach ($ipv4[links] as $link) { if ($link['link_type'] == 'ap/client' and !empty($link['interface'][ipv4][ipv4])) { $totalstaticss = count($ipv4[links]); } } $first = explode(".", $item[netid]); $last = explode(".", $item[broadcast]); $limit = $last[3] - 1 - ($first[3] + 3) - $totalstaticss; $totalstaticss = '0'; print ' uci set dhcp.' . $network . '=dhcp uci set dhcp.' . $network . '.interface=' . $network . ' uci set dhcp.' . $network . '.leasetime=12h uci set dhcp.' . $network . '.start=' . ($max[3] + 2) . ' uci set dhcp.' . $network . '.limit=' . $limit . ' '; } foreach ($dhcp_statics as $static) { print ' ## Device: ' . $static[2] . ' uci set luci_ethers.@static_lease[0]=static_lease uci set luci_ethers.@static_lease[0].macaddr=' . $static[1] . ' uci set luci_ethers.@static_lease[0].ipaddr=' . $static[0] . ' '; } print '</pre>'; } } } // QUAGGA CONFIG FILES $file_zebra = ''; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/quagga/zebra.conf')); _out_file($file_zebra, '/etc/quagga/zebra.conf'); // FILE OSPFD if ($wds_ospfd == '1' || $cable_ospfd == '1') { _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/quagga/ospfd.conf')); print '<pre>'; print ' mv /etc/quagga/ospfd.conf /etc/quagga/ospfd.conf.bak echo " ! interface br-lan ! router ospf ospf router-id ' . $lan->ipv4 . ' redistribute bgp '; foreach ($dev->radios as $radio_id => $radio) { foreach ($radio[interfaces] as $interface_id => $interface) { if ($interface[interface_type] == 'wLan' || $interface[interface_type] == 'wLan/Lan') { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { $network = _ipcalc($ipv4[ipv4], $ipv4[netmask]); } if (preg_match("/(Working|Testing|Building)/", $link['flag'])) { print ' network ' . $network[netid] . '/' . $network[maskbits] . ' area 0<br />'; } } } } foreach ($wds_links as $key => $wds) { $iplocal[] = $wds['interface']['ipv4']; if ($wds['routing'] == 'OSPF') { $wds_network = _ipcalc($iplocal[$key][ipv4], $iplocal[$key][netmask]); if (preg_match("/(Working|Testing|Building)/", $wds['flag'])) { print ' network ' . $wds_network[netid] . '/' . $wds_network[maskbits] . ' area 0<br />'; } } } foreach ($dev->interfaces as $interface_id => $interface) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { $item = _ipcalc($ipv4[ipv4], $ipv4[netmask]); if ($link['routing'] == 'OSPF') { if (preg_match("/(Working|Testing|Building)/", $link['flag'])) { print ' network ' . $item[netid] . '/' . $item[maskbits] . ' area 0<br />'; } } } } } print 'default-information originate ! " > /etc/quagga/ospfd.conf '; print '</pre>'; } // FILE BGPD if ($wds_bgpd == '1' || $cable_bgpd == '1') { _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/quagga/bgpd.conf')); print '<pre>'; print ' mv /etc/quagga/bgpd.conf /etc/quagga/bgpd.conf.bak echo " ! interface br-lan ! router bgp ' . $dev->id . ' bgp router-id ' . $lan->ipv4 . ' '; foreach ($dev->radios as $radio_id => $radio) { foreach ($radio[interfaces] as $interface_id => $interface) { if ($interface[interface_type] == 'wLan' || $interface[interface_type] == 'wLan/Lan') { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { $network = _ipcalc($ipv4[ipv4], $ipv4[netmask]); } print ' network ' . $network[netid] . '/' . $network[maskbits] . '<br />'; } } } print 'redistribute ospf '; foreach ($wds_links as $key => $wds) { $iplocal[] = $wds['interface']['ipv4']; if ($wds['routing'] == 'BGP') { $wds_network = _ipcalc($iplocal[$key][ipv4], $iplocal[$key][netmask]); if (preg_match("/(Working|Testing|Building)/", $wds['flag'])) { print ' network ' . $wds_network[netid] . '/' . $wds_network[maskbits] . '<br />'; } } } foreach ($dev->interfaces as $interface_id => $interface) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { $item = _ipcalc($ipv4[ipv4], $ipv4[netmask]); if ($link['routing'] == 'BGP') { if (preg_match("/(Working|Testing|Building)/", $link['flag'])) { print ' network ' . $item[netid] . '/' . $item[maskbits] . '<br />'; } } } } } foreach ($dev->radios as $radio_id => $radio) { foreach ($radio[interfaces] as $interface_id => $interface) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { if ($link['routing'] == 'BGP') { if (preg_match("/(Working|Testing|Building)/", $link['flag'])) { print ' neighbor ' . $link['interface']['ipv4']['ipv4'] . ' remote-as ' . $link['device_id'] . ' '; } } } } } } foreach ($dev->interfaces as $interface_id => $interface) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { if ($link['routing'] == 'BGP') { if (preg_match("/(Working|Testing|Building)/", $link['flag'])) { print ' neighbor ' . $link['interface']['ipv4']['ipv4'] . ' remote-as ' . $link['device_id'] . ' '; } } } } } print '" > /etc/quagga/bgpd.conf '; print '</pre>'; } //FILE OPKG $opkg_conf = ' src/gz snapshots http://downloads.openwrt.org/snapshots/' . $packages . ' dest root / dest ram /tmp lists_dir ext /var/opkg-lists option overlay_root /jffs '; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/opkg.conf')); _out_file($opkg_conf, '/etc/opkg.conf'); }
function guifi_kamikaze_files($dev, $zone) { //SOME VARIABLES foreach ($dev->radios[0]['interfaces'] as $interface_id => $interface) { foreach ($interface['ipv4'] as $ipv4_id => $ipv4) { if (isset($ipv4['links'])) { foreach ($ipv4['links'] as $key => $link) { if ($link['link_type'] == 'ap/client') { $gateway = $link['interface']['ipv4']['ipv4']; } } } } } $wan = guifi_unsolclic_if($dev->id, 'Wan'); $dns = guifi_get_dns($zone, 2); list($ntp1, $ntp2) = explode(' ', guifi_get_ntp($zone, 2)); $ntp[] .= $ntp1; $ntp[] .= $ntp2; $apssid = 'guifi.net-' . guifi_get_ap_ssid($link['interface']['device_id'], $link['interface']['radiodev_counter']); $wireless_model = 0; $wireless_iface = 0; switch ($dev->variable['model_id']) { case "1": case "15": case "16": case "17": case "18": // WRT54Gv1-4, WHR-HP-G54, WHR-G54S (BUFFALO), WRT54GL, WRT54GSv1-2, WRT54GSv4 $wireless_model = 'broadcom'; $wireless_iface = 'wl0'; $vlans = 'config switch eth0 option vlan0 \\"1 2 3 4 5*\\" option vlan1 \\"0 5\\" '; $mode = NULL; $lan_iface = 'eth0.0'; $wan_iface = 'eth0.1'; $txant = 'txant'; $rxant = 'rxant'; $packages = 'broadcom/packages'; break; default: _outln_comment('model id not supported'); exit; } if (empty($dev->radios[0][antenna_mode])) { $dev->radios[0][antenna_mode] = 'Main'; } if ($dev->radios[0][antenna_mode] != 'Main') { $dev->radios[0][antenna_mode] = '1'; } else { $dev->radios[0][antenna_mode] = '0'; } // SECTION FILES // FILE NETWORK $file_network = ' ' . $vlans . ' config interface loopback option \'ifname\' \'lo\' option \'proto\' \'static\' option \'ipaddr\' \'127.0.0.1\' option \'netmask\' \'255.0.0.0\' config interface lan option \'ifname\' \'' . $lan_iface . '\' option \'type\' \'bridge\' option \'proto\' \'static\' option \'ipaddr\' \'192.168.1.1\' option \'netmask\' \'255.255.255.0\' option \'dns\' \'' . $dns . '\' config interface wan option \'ifname\' \'' . $wan_iface . '\' option \'proto\' \'static\' option \'ipaddr\' \'' . $wan->ipv4 . '\' option \'netmask\' \'' . $wan->netmask . '\' option \'gateway\' \'' . $gateway . '\' option \'dns\' \'' . $dns . '\' '; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/config/network')); _out_file($file_network, '/etc/config/network'); // FILE WIRELESS $file_wireless = ' config \'wifi-device\' \'' . $wireless_iface . '\' option \'type\' \'' . $wireless_model . '\' option \'disabled\' \'0\' option \'' . $txant . '\' \'' . $dev->radios[0][antenna_mode] . '\' option \'' . $rxant . '\' \'' . $dev->radios[0][antenna_mode] . '\' ' . $mode . ' config wifi-iface option \'device\' \'' . $wireless_iface . '\' option \'network\' \'wan\' option \'mode\' \'sta\' option \'ssid\' \'' . $apssid . '\' option \'encryption \'none\' '; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/config/wireless')); _out_file($file_wireless, '/etc/config/wireless'); //FILE FIREWALL $firewall = ' config defaults option \'syn_flood\' \'1\' option \'input\' \'ACCEPT\' option \'output\' \'ACCEPT\' option \'forward\' \'REJECT\' config zone option \'name\' \'lan\' option \'input\' \'ACCEPT\' option \'output\' \'ACCEPT\' option \'forward\' \'REJECT\' config zone option \'name\' \'wan\' option \'output\' \'ACCEPT\' option \'input\' \'ACCEPT\' option \'forward\' \'REJECT\' option \'masq\' \'1\' config forwarding option \'src\' \'lan\' option \'dest\' \'wan\' config rule option \'dst\' \'wan\' option \'src_dport\' \'22\' option \'target\' \'ACCEPT\' option \'protocol\' \'tcp\' config rule option \'dst\' \'wan\' option \'src_dport\' \'80\' option \'target\' \'ACCEPT\' option \'protocol\' \'tcp\' config rule option \'dst\' \'wan\' option \'src_dport\' \'161\' option \'target\' \'ACCEPT\' option \'protocol\' \'udp\' '; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/config/firewall')); _out_file($firewall, '/etc/config/firewall'); //FILE OPKG $opkg_conf = ' src/gz guifi http://ausa.guifi.net/drupal/files/openwrt/client/' . $packages . ' dest root / dest ram /tmp lists_dir ext /var/opkg-lists '; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/opkg.conf')); _out_file($opkg_conf, '/etc/opkg.conf'); }
function guifi_kamikaze_files($dev, $zone) { //SOME VARIABLES foreach ($dev->radios[0]['interfaces'] as $interface_id => $interface) { foreach ($interface['ipv4'] as $ipv4_id => $ipv4) { if (isset($ipv4['links'])) { foreach ($ipv4['links'] as $key => $link) { if ($link['link_type'] == 'ap/client') { $gateway = $link['interface']['ipv4']['ipv4']; } } } } } $wan = guifi_unsolclic_if($dev->id, 'Wan'); $dns = guifi_get_dns($zone, 2); list($ntp1, $ntp2) = explode(' ', guifi_get_ntp($zone, 2)); $ntp[] .= $ntp1; $ntp[] .= $ntp2; $apssid = 'guifi.net-' . guifi_get_ap_ssid($link['interface']['device_id'], $link['interface']['radiodev_counter']); $wireless_model = 0; $wireless_iface = 0; switch ($dev->variable['model_id']) { case "25": case "26": case "32": case "33": case "34": case "35": case "36": case "37": // NanoStationX, LiteStationX, NanoStation LocoX, Bullet $wireless_model = 'atheros'; $wireless_iface = 'wifi0'; $vlans = NULL; $mode = NULL; if ($dev->variable['model_id'] == 25 || $dev->variable['model_id'] == 32 || $dev->variable['model_id'] == 34 || $dev->variable['model_id'] == 36) { $mode = 'option \'hwmode\' \'11b\''; } else { $mode = 'option \'hwmode\' \'11a\''; } $lan_iface = 'eth0'; $wan_iface = 'ath0'; $txant = 'txantenna'; $rxant = 'rxantenna'; $packages = 'atheros/packages'; break; default: _outln_comment('model id not supported'); exit; } if (empty($dev->radios[0][antenna_mode])) { $dev->radios[0][antenna_mode] = 'Main'; } if ($dev->radios[0][antenna_mode] != 'Main') { $dev->radios[0][antenna_mode] = '1'; } else { $dev->radios[0][antenna_mode] = '0'; } // SECTION FILES // FILE NETWORK $file_network = ' ' . $vlans . ' config interface loopback option \'ifname\' \'lo\' option \'proto\' \'static\' option \'ipaddr\' \'127.0.0.1\' option \'netmask\' \'255.0.0.0\' config interface lan option \'ifname\' \'' . $lan_iface . '\' option \'type\' \'bridge\' option \'proto\' \'static\' option \'ipaddr\' \'192.168.1.1\' option \'netmask\' \'255.255.255.0\' option \'dns\' \'' . $dns . '\' config interface wan option \'ifname\' \'' . $wan_iface . '\' option \'proto\' \'static\' option \'ipaddr\' \'' . $wan->ipv4 . '\' option \'netmask\' \'' . $wan->netmask . '\' option \'gateway\' \'' . $gateway . '\' option \'dns\' \'' . $dns . '\' '; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/config/network')); _out_file($file_network, '/etc/config/network'); // FILE WIRELESS $file_wireless = ' config \'wifi-device\' \'' . $wireless_iface . '\' option \'type\' \'' . $wireless_model . '\' option \'disabled\' \'0\' option \'diversity\' \'0\' option \'' . $txant . '\' \'' . $dev->radios[0][antenna_mode] . '\' option \'' . $rxant . '\' \'' . $dev->radios[0][antenna_mode] . '\' ' . $mode . ' option \'txpower\' \'16\' config wifi-iface option \'device\' \'' . $wireless_iface . '\' option \'network\' \'wan\' option \'mode\' \'sta\' option \'ssid\' \'' . $apssid . '\' option \'encryption\' \'none\' '; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/config/wireless')); _out_file($file_wireless, '/etc/config/wireless'); //FILE FIREWALL $firewall = ' config defaults option \'syn_flood\' \'1\' option \'input\' \'ACCEPT\' option \'output\' \'ACCEPT\' option \'forward\' \'REJECT\' config zone option \'name\' \'lan\' option \'input\' \'ACCEPT\' option \'output\' \'ACCEPT\' option \'forward\' \'REJECT\' config zone option \'name\' \'wan\' option \'output\' \'ACCEPT\' option \'input\' \'ACCEPT\' option \'forward\' \'REJECT\' option \'masq\' \'1\' config forwarding option \'src\' \'lan\' option \'dest\' \'wan\' config rule option \'dst\' \'wan\' option \'src_dport\' \'22\' option \'target\' \'ACCEPT\' option \'protocol\' \'tcp\' config rule option \'dst\' \'wan\' option \'src_dport\' \'80\' option \'target\' \'ACCEPT\' option \'protocol\' \'tcp\' config rule option \'dst\' \'wan\' option \'src_dport\' \'161\' option \'target\' \'ACCEPT\' option \'protocol\' \'udp\' '; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/config/firewall')); _out_file($firewall, '/etc/config/firewall'); //FILE OPKG $opkg_conf = ' src/gz snapshots http://downloads.openwrt.org/snapshots/' . $packages . ' dest root / dest ram /tmp lists_dir ext /var/opkg-lists option overlay_root /jffs '; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/opkg.conf')); _out_file($opkg_conf, '/etc/opkg.conf'); }
function guifi_kamikaze_files($dev, $zone) { //SOME VARIABLES $lan = guifi_unsolclic_if($dev->id, 'wLan/Lan'); $wan = guifi_unsolclic_if($dev->id, 'Wan'); $dns = guifi_get_dns($zone, 2); $wireless_model = 0; $wireless_iface = 0; switch ($dev->variable['model_id']) { case "1": case "15": case "16": case "17": case "18": // WRT54Gv1-4, WHR-HP-G54, WHR-G54S (BUFFALO), WRT54GL, WRT54GSv1-2, WRT54GSv4 $wireless_model = 'broadcom'; $wireless_iface = 'wl0'; $vlans = 'config switch eth0 option vlan0 \\"1 2 3 4 5*\\" option vlan1 \\"0 5\\" '; $lan_iface = 'eth0.0'; $wan_iface = 'eth0.1'; $txant = 'txant'; $rxant = 'rxant'; $packages = 'broadcom/packages'; break; default: _outln_comment('model id not supported'); exit; } if (empty($dev->radios[0][antenna_mode])) { $dev->radios[0][antenna_mode] = 'Main'; } if ($dev->radios[0][antenna_mode] != 'Main') { $dev->radios[0][antenna_mode] = '1'; } else { $dev->radios[0][antenna_mode] = '0'; } $wds_links = array(); $wds_str = ''; foreach ($dev->radios as $radio_id => $radio) { foreach ($radio[interfaces] as $interface_id => $interface) { if ($interface['interface_type'] == 'wds/p2p') { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $key => $link) { if ($link['link_type'] == 'wds') { $wds_links[] = $link; } $iplocal[] = $ipv4; $iflocal[] = $interface; } } } } } if (count($wds_links) == 0) { return; } // SECTION FILES // FILE NETWORK $lan_network = _ipcalc($lan->ipv4, $lan->netmask); $file_network = ' ' . $vlans . ' config interface loopback option \'ifname\' \'lo\' option \'proto\' \'static\' option \'ipaddr\' \'127.0.0.1\' option \'netmask\' \'255.0.0.0\' config interface lan option \'ifname\' \'' . $lan_iface . '\' option \'type\' \'bridge\' option \'proto\' \'static\' option \'ipaddr\' \'' . $lan->ipv4 . '\' option \'netmask\' \'' . $lan->netmask . '\' option \'gateway\' \'0.0.0.0\' option \'dns\' \'' . $dns . '\' config interface wan option \'ifname\' \'' . $wan_iface . '\' option \'proto\' \'none\' '; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/config/network')); _out_file($file_network, '/etc/config/network'); // FILE WIRELESS $file_wireless = ' config \'wifi-device\' \'' . $wireless_iface . '\' option \'type\' \'' . $wireless_model . '\' option \'channel\' \'' . $dev->radios[0][channel] . '\' option \'disabled\' \'0\' option \'' . $txant . '\' \'' . $dev->radios[0][antenna_mode] . '\' option \'' . $rxant . '\' \'' . $dev->radios[0][antenna_mode] . '\' config wifi-iface option \'device\' \'' . $wireless_iface . '\' option \'network\' \'lan\' option \'mode\' \'ap\' option \'ssid\' \'guifi.net-' . guifi_to_7bits($dev->radios[0][ssid]) . '\' option \'encryption \'none\' '; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/config/wireless')); _out_file($file_wireless, '/etc/config/wireless'); // WDS Links $ifcount = 1; foreach ($wds_links as $key => $wds) { $hostname = guifi_get_hostname($wds['device_id']); if (preg_match("/(Working|Testing|Building)/", $wds['flag'])) { $status = 'active'; if ($wds['routing'] == 'BGP') { $bgpd = '1'; } if ($wds['routing'] == 'OSPF') { $ospfd = '1'; } $ifcount++; $wds_won = 'option \'bssid\' \'' . $wds['interface']['mac'] . '\''; $wds_non = 'option \'proto\' \'static\' option \'ifname\' \'wds0.' . ($key + 1) . '\' option \'ipaddr\' \'' . $iplocal[$key][ipv4] . '\' option \'netmask\' \'' . $iplocal[$key][netmask] . '\''; } else { $status = 'disabled'; $wds_won = 'option \'bssid\' \'00:00:00:00:00:00\''; $wds_non = 'option \'proto\' \'none\''; } $wds_network = 'config \'interface\' \'wds_' . $hostname . '\' ' . $wds_non . ' '; $wds_wireless = 'config \'wifi-iface\' option \'device\' \'wl0\' option \'network\' \'wds_' . $hostname . '\' option \'mode\' \'wds\' option \'encryption\' \'none\' ' . $wds_won . ' '; _outln_comment(); _outln_comment('WDS ' . $hostname . ''); _outln_comment('Routing: ' . $wds['routing'] . ''); _outln_comment('Status: ' . $status . ''); print '<pre>echo "' . $wds_network . ' " >> /etc/config/network </pre>'; print '<pre>echo "' . $wds_wireless . ' " >> /etc/config/wireless </pre>'; } if (count($wds_links) >= 5) { return; } // QUAGGA CONFIG FILES $file_zebra = ''; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/quagga/zebra.conf')); _out_file($file_zebra, '/etc/quagga/zebra.conf'); // FILE OSPFD if ($ospfd == '1') { _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/quagga/ospfd.conf')); print '<pre>mv /etc/quagga/ospfd.conf /etc/quagga/ospfd.conf.bak echo " ! interface br-lan ! router ospf ospf router-id ' . $lan->ipv4 . ' redistribute bgp network ' . $lan_network[netid] . '/' . $lan_network[maskbits] . ' area 0<br />'; foreach ($wds_links as $key => $wds) { if ($wds['routing'] == 'OSPF') { $wds_network = _ipcalc($iplocal[$key][ipv4], $iplocal[$key][netmask]); print ' network ' . $wds_network[netid] . '/' . $wds_network[maskbits] . ' area 0<br />'; } } print 'default-information originate ! " > /etc/quagga/ospfd.conf</pre>'; } // FILE BGPD if ($bgpd == '1') { _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/quagga/bgpd.conf')); print '<pre>mv /etc/quagga/bgpd.conf /etc/quagga/bgpd.conf.bak echo " ! interface br-lan ! router bgp ' . $dev->id . ' bgp router-id ' . $lan->ipv4 . ' network ' . $lan_network[netid] . '/' . $lan_network[maskbits] . '<br />'; foreach ($wds_links as $key => $wds) { if ($wds['routing'] == 'BGP') { $wds_network = _ipcalc($iplocal[$key][ipv4], $iplocal[$key][netmask]); print ' network ' . $wds_network[netid] . '/' . $wds_network[maskbits] . '<br />'; } } print 'redistribute ospf '; foreach ($dev->radios as $radio_id => $radio) { foreach ($radio[interfaces] as $interface_id => $interface) { foreach ($interface[ipv4] as $ipv4_id => $ipv4) { foreach ($ipv4[links] as $link_id => $link) { if ($link['routing'] == 'BGP') { print 'neighbor ' . $link['interface']['ipv4']['ipv4'] . ' remote-as ' . $link['device_id'] . ' '; } } } } } print '" > /etc/quagga/bgpd.conf</pre>'; } //FILE FIREWALL $firewall = ' config defaults option \'syn_flood\' \'1\' option \'input\' \'ACCEPT\' option \'output\' \'ACCEPT\' option \'forward\' \'ACCEPT\' config zone option \'name\' \'lan\' option \'input\' \'ACCEPT\' option \'output\' \'ACCEPT\' option \'forward\' \'ACCEPT\' '; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/config/firewall')); _out_file($firewall, '/etc/config/firewall'); //FILE OPKG $opkg_conf = ' src/gz guifi http://ausa.guifi.net/drupal/files/openwrt/ap/' . $packages . ' dest root / dest ram /tmp lists_dir ext /var/opkg-lists '; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/opkg.conf')); _out_file($opkg_conf, '/etc/opkg.conf'); $dhcp_statics = array(); $max = explode(".", $dev->ipv4); function merge_static($link, &$dhcp_statics, &$max, &$curr) { if (empty($link['interface'][mac])) { $link['interface'][mac] = 'FF:FF:FF:FF:FF:FF'; } $dhcp_statics[] = array($link['interface'][ipv4][ipv4], $link['interface'][mac], guifi_get_hostname($link['interface'][device_id])); $curr = explode(".", $link['interface'][ipv4][ipv4]); if ($curr[3] > $max[3]) { $max[3] = $curr[3]; } } $main_ip = guifi_main_ip($dev->id); $item = _ipcalc_by_netbits($main_ip[ipv4], $main_ip[maskbits]); $max = explode(".", $main_ip[ipv4]); // cable links if (!empty($dev->interfaces)) { foreach ($dev->interfaces as $interface) { if (!empty($interface[ipv4])) { foreach ($interface[ipv4] as $ipv4) { if (!empty($ipv4[links])) { foreach ($ipv4[links] as $link) { if ($link['interface'][ipv4][ipv4] != '') { $item2 = _ipcalc($link['interface'][ipv4][ipv4], $link['interface'][ipv4][netmask]); if ($item[netid] == $item2[netid]) { merge_static($link, $dhcp_statics, $max, $cur); } } } } } } } } // ap/client links if (!empty($dev->radios)) { foreach ($dev->radios as $radio) { if (!empty($radio[interfaces])) { foreach ($radio[interfaces] as $interface) { if (!empty($interface[ipv4])) { foreach ($interface[ipv4] as $ipv4) { if (!empty($ipv4[links])) { foreach ($ipv4[links] as $link) { if ($link['link_type'] == 'ap/client' and !empty($link['interface'][ipv4][ipv4])) { merge_static($link, $dhcp_statics, $max, $cur); } } } } } } } } } $statics = count($dhcp_statics) - 1; $totalstatics = count($dhcp_statics); $first = explode(".", $item[netid]); $last = explode(".", $item[broadcast]); $limit = $last[3] - 1 - ($first[3] + 3) - $totalstatics; if ($statics == -1) { _outln_comment(); _outln_comment(t('File /etc/config/luci_ethers')); _outln_nvram('dhcp_start', $max[3] + 2); } _outln_comment(); _outln_comment(t('File /etc/config/luci_ethers')); print 'echo "'; foreach ($dhcp_statics as $static) { print '<pre> ## Device: ' . $static[2] . ' config \'static_lease\' option \'macaddr\' \'' . $static[1] . '\' option \'ipaddr\' \'' . $static[0] . '\' </pre>'; } print '" > /etc/config/luci_ethers<br />'; // FILE DHCP $file_dhcp = ' config \'dnsmasq\' option \'domainneeded\' \'1\' option \'boguspriv\' \'1\' option \'filterwin2k\' \'0\' option \'localise_queries\' \'1\' option \'local\' \'/lan/\' option \'domain\' \'lan\' option \'expandhosts\' \'1\' option \'nonegcache\' \'0\' option \'authoritative\' \'1\' option \'readethers\' \'1\' option \'leasefile\' \'/tmp/dhcp.leases\' option \'resolvfile\' \'/tmp/resolv.conf.auto\' config \'dhcp\' \'lan\' option \'interface\' \'lan\' option \'leasetime\' \'12h\' option \'start\' \'' . ($max[3] + 2) . '\' option \'limit\' \'' . $limit . '\' '; _outln_comment(); _outln_comment(); _outln_comment(t('File /etc/config/dhcp')); _out_file($file_dhcp, '/etc/config/dhcp'); }