input('error'); $upstream = self::getCurrentUpstream(); $current_upstream = [ 'key' => $upstream, 'label' => $config['modems'][$upstream]['label'] ]; $this->tpl->set([ 'error' => $error, 'current' => $current_upstream, 'modems' => $config['modems'], ]); $this->tpl->set_title('Маршрутизация'); $this->tpl->render_page('routing_page.twig'); } public function GET_routing_smallhome_switch() { global $config; list($new_upstream) = $this->input('upstream'); if (!isset($config['modems'][$new_upstream])) redirect('/routing/?error='.urlencode('invalid upstream')); $current_upstream = self::getCurrentUpstream(); if ($current_upstream != $new_upstream) { if ($new_upstream == 'mts-il') $new_upstream_ip = '192.168.88.1'; else $new_upstream_ip = $config['modems'][$new_upstream]['ip']; MyOpenWrtUtils::setUpstream($new_upstream_ip); } redirect('/routing/'); } public function GET_routing_ipsets_page() { list($error) = $this->input('error'); $ip_sets = MyOpenWrtUtils::ipsetListAll(); $this->tpl->set([ 'sets' => $ip_sets, 'error' => $error ]); $this->tpl->set_title('Маршрутизация: IP sets'); $this->tpl->render_page('routing_ipsets_page.twig'); } public function GET_routing_ipsets_del() { list($set, $ip) = $this->input('set, ip'); self::validateIpsetsInput($set, $ip); $output = MyOpenWrtUtils::ipsetDel($set, $ip); $url = '/routing/ipsets/'; if ($output != '') $url .= '?error='.urlencode($output); redirect($url); } public function POST_routing_ipsets_add() { list($set, $ip) = $this->input('set, ip'); self::validateIpsetsInput($set, $ip); $output = MyOpenWrtUtils::ipsetAdd($set, $ip); $url = '/routing/ipsets/'; if ($output != '') $url .= '?error='.urlencode($output); redirect($url); } public function GET_routing_dhcp_page() { $overrides = config::get('dhcp_hostname_overrides'); $leases = MyOpenWrtUtils::getDHCPLeases(); foreach ($leases as &$lease) { if ($lease['hostname'] == '?' && array_key_exists($lease['mac'], $overrides)) $lease['hostname'] = $overrides[$lease['mac']]; } $this->tpl->set([ 'leases' => $leases ]); $this->tpl->set_title('Маршрутизация: DHCP'); $this->tpl->render_page('routing_dhcp_page.twig'); } protected static function getCurrentUpstream() { global $config; $default_route = MyOpenWrtUtils::getDefaultRoute(); if ($default_route == '192.168.88.1') $default_route = $config['modems']['mts-il']['ip']; $upstream = null; foreach ($config['modems'] as $modem_name => $modem_data) { if ($default_route == $modem_data['ip']) { $upstream = $modem_name; break; } } if (is_null($upstream)) $upstream = $config['routing_default']; return $upstream; } protected static function validateIpsetsInput($set, $ip) { global $config; if (!isset($config['modems'][$set])) redirect('/routing/ipsets/?error='.urlencode('invalid set: '.$set)); if (($slashpos = strpos($ip, '/')) !== false) $ip = substr($ip, 0, $slashpos); if (!filter_var($ip, FILTER_VALIDATE_IP)) redirect('/routing/ipsets/?error='.urlencode('invalid ip/network: '.$ip)); } }