From 3463517ff571fd38da7efe4bcfca2828e1dc6fa6 Mon Sep 17 00:00:00 2001 From: paulr Date: Tue, 4 Oct 2011 03:52:18 +1100 Subject: [PATCH] working on the interfaces page --- doco/commands.txt | 2 + doco/configs.txt | 6 ++- libcbfwr/config.php | 62 +++++++++++++++++++----- libcbfwr/fwui.php | 113 ++++++++++++++++++++++-------------------- unittests/deletechanges.php | 2 +- var/fw.conf | 2 +- var/fw.conf.example | 2 +- 7 files changed, 118 insertions(+), 71 deletions(-) diff --git a/doco/commands.txt b/doco/commands.txt index 9619cf8..58b2f12 100644 --- a/doco/commands.txt +++ b/doco/commands.txt @@ -15,6 +15,8 @@ interace dev devname address6 addr/mask interace dev devname zone zonename interace dev devname mtu|speed|duplex ... +interface name devname address[46]|zone|mtu|speed|duplex + interface lag name with .... interface vlan name from diff --git a/doco/configs.txt b/doco/configs.txt index 1ba570c..55db8a2 100644 --- a/doco/configs.txt +++ b/doco/configs.txt @@ -21,11 +21,13 @@ config layout is like this: [mtu] = mtu [speed] = speed [duplex] = duplex + + -[lag][][] = interface +[interface][lag][][] = interface [description] = desc -[bridge][][] = interface +[interface][bridge][][] = interface [description] [route4][default|][address] = gateway diff --git a/libcbfwr/config.php b/libcbfwr/config.php index e0b4f37..c0c43d1 100644 --- a/libcbfwr/config.php +++ b/libcbfwr/config.php @@ -63,10 +63,20 @@ class Config { } fclose($fp); } - if(file_exists("/sys/class/net/$fname/mtu")) $this->config["hardware"]["netdev"][$fname]["mtu"] = file_get_contents("/sys/class/net/$fname/mtu"); - if(file_exists("/sys/class/net/$fname/address")) $this->config["hardware"]["netdev"][$fname]["hwaddress"] = file_get_contents("/sys/class/net/$fname/address"); + if(file_exists("/sys/class/net/$fname/mtu")) $this->config["hardware"]["netdev"][$fname]["mtu"] = trim(file_get_contents("/sys/class/net/$fname/mtu")); + if(file_exists("/sys/class/net/$fname/address")) $this->config["hardware"]["netdev"][$fname]["hwaddress"] = trim(file_get_contents("/sys/class/net/$fname/address")); if(file_exists("/sys/class/net/$fname/bonding")) $this->config["hardware"]["netdev"][$fname]["bonding"] = true; if(file_exists("/sys/class/net/$fname/bridge")) $this->config["hardware"]["netdev"][$fname]["bridge"] = true; + if(file_exists("/sys/class/net/$fname/duplex")) { + $myval = trim(file_get_contents("/sys/class/net/$fname/duplex")); + if($myval == null) $myval = "default"; + $this->config["hardware"]["netdev"][$fname]["duplex"] = $myval; + } + if(file_exists("/sys/class/net/$fname/speed")) { + $myval = trim(file_get_contents("/sys/class/net/$fname/speed")); + if($myval == null) $myval = "default"; + $this->config["hardware"]["netdev"][$fname]["speed"] = $myval; + } } } } @@ -112,6 +122,27 @@ class Config { } } + function resolveInterfaceName($name) + { + // $config only ever contains real interface names + if(isset($this->config["interface"]["dev"][$name])) return $name; + + if(isset($this->config["interface"])) { + foreach($this->config["interface"]["dev"] as $key => $var) { + if(isset($var["name"])) { + if($var["name"] == $name) { + return $key; + } + } + } + } else { + // have to assume its a hardware name and check /sys + if(file_exists("/sys/class/net/$name")) return $name; + } + + return null; + } + function addConfigLine($line, $lineno=0) { $line_n = trim($line); @@ -211,33 +242,40 @@ class Config { case "interface": switch($expl[1]) { case "dev": - $int = $expl[2]; - + $int = $this->resolveInterfaceName($expl[2]); + + if($int != $expl[2]) { + error_log("resolved int as $int from ".$expl[2]); + } + if($int == null) { + error_log("got config for interface ".$expl[2]." but i cannot find it, i will assume its hardware for now"); + $int = $expl[2]; + } if($hasdescription) { - $this->config["interface"][$int]["description"] = $description; + $this->config["interface"]["dev"][$int]["description"] = $description; } switch($expl[3]) { case "address4": - $this->config["interface"]["$int"]["address4"] = $expl[4]; + $this->config["interface"]["dev"]["$int"]["address4"] = $expl[4]; break; case "address6": - $this->config["interface"]["$int"]["address6"] = $expl[4]; + $this->config["interface"]["dev"]["$int"]["address6"] = $expl[4]; break; case "name": - $this->config["interface"]["$int"]["name"] = $expl[4]; + $this->config["interface"]["dev"]["$int"]["name"] = $expl[4]; break; case "status": - $this->config["interface"]["$int"]["status"] = $expl[4]; + $this->config["interface"]["dev"]["$int"]["status"] = $expl[4]; break; case "mtu": - $this->config["interface"]["$int"]["mtu"] = $expl[4]; + $this->config["interface"]["dev"]["$int"]["mtu"] = $expl[4]; break; case "zone": - $this->config["interface"]["$int"]["zone"] = $expl[4]; + $this->config["interface"]["dev"]["$int"]["zone"] = $expl[4]; break; case "speed": - $this->config["interface"]["$int"]["speed"] = $expl[4]; + $this->config["interface"]["dev"]["$int"]["speed"] = $expl[4]; break; case "duplex": $this->config["interface"]["$int"]["duplex"] = $expl[4]; diff --git a/libcbfwr/fwui.php b/libcbfwr/fwui.php index 63c6613..da324e8 100644 --- a/libcbfwr/fwui.php +++ b/libcbfwr/fwui.php @@ -246,9 +246,16 @@ function CBFWInterfacesPageDisplay() global $BASE_URL, $MENU_ITEMS; $comms = new Comms(); - $config = $comms->getConfig(0); + $config = getWebUserConfig(); $boot_config = $comms->getConfig(1); + // at the top, we put in the creation bits + echo "

Create Interface

"; + echo "
  • Link Aggregation Group (bonded/teamed interfaces)
    "; + echo "
  • VLAN Tagged Sub Interfaces
    "; + echo "
  • Bridged Interfaces
    "; + echo "
    "; + // now build an interface table $table = array(); foreach($boot_config["hardware"]["netdev"] as $key=>$val) { @@ -266,89 +273,87 @@ function CBFWInterfacesPageDisplay() // current mtu if(isset($val["mtu"])) $table[$key]["mtu"] = $val["mtu"]; - } - - foreach($config["hardware"]["netdev"] as $key=>$val) { - $ename = $key; - if(isset($config["interface"]["$key"]["name"])) $table[$key]["name"] = $config["interface"]["$key"]["name"]; - $table[$key]["address4"] = null; - $table[$key]["address6"] = null; - - if(isset($config["interface"][$table[$key]["name"]]["address4"])) { - $table[$key]["address4"] = $config["interface"][$table[$key]["name"]]["address4"]; - } - - if(isset($config["interface"][$table[$key]["name"]]["address6"])) { - $table[$key]["address6"] = $config["interface"][$table[$key]["name"]]["address6"]; - } - - if(isset($config["interface"][$table[$key]["name"]]["mtu"])) { - $table[$key]["mtu"] = $config["interface"][$table[$key]["name"]]["mtu"]; - } else { - $table[$key]["mtu"] = "1500"; // TODO: this needs to actually come from somewhere - } - if(isset($config["interface"][$table[$key]["name"]]["speed"])) { - $table[$key]["speed"] = $config["interface"][$table[$key]["name"]]["speed"]; - } else { - $table[$key]["speed"] = null; - } - - if(isset($config["interface"][$table[$key]["name"]]["duplex"])) { - $table[$key]["duplex"] = $config["interface"][$table[$key]["name"]]["duplex"]; - } else { - $table[$key]["duplex"] = null; - } + // speed + if(isset($val["speed"])) $table[$key]["speed"] = $val["speed"]; + else $table[$key]["speed"] = "default"; - if(isset($config["interface"][$table[$key]["name"]]["zone"])) { - $table[$key]["zone"] = $config["interface"][$table[$key]["name"]]["zone"]; - } else { - $table[$key]["zone"] = null; - } + // duplex + if(isset($val["duplex"])) $table[$key]["duplex"] = $val["duplex"]; + else $table[$key]["duplex"] = "default"; } + foreach($config["interface"]["dev"] as $key => $val) { + // TODO construction zone + error_log("doing $key"); + if(isset($val["name"])) $table[$key]["name"] = $val["name"]; + if(isset($val["address4"])) $table[$key]["address4"] = $val["address4"]; + if(isset($val["address6"])) $table[$key]["address6"] = $val["address6"]; + if(isset($val["description"])) $table[$key]["description"] = $val["description"]; + if(isset($val["zone"])) $table[$key]["zone"] = $val["zone"]; + } + - echo ""; + echo "

    Interfaces

    DeviceZoneTypeMAC AddressAddressMTUSpeed/DuplexControl
    "; foreach($table as $key =>$val) { if($val["realname"] == $val["name"]) $name = $val["name"]; else $name = $val["name"]." (".$val["realname"].")"; // zone - if($val["zone"] == null) $zone = "-"; - else $zone = $val["zone"]; + if(isset($val["zone"])) { + if($val["zone"] == null) $zone = "-"; + else $zone = $val["zone"]; + } else $zone = "-"; // mtu - $mtu = $val["mtu"]; + if(isset($val["mtu"])) { + $mtu = $val["mtu"]; + } else $mtu = "-"; // driver type - $type = $val["type"]; + if(isset($val["type"])) { + $type = $val["type"]; + } else $type = "-"; // hardware address - $mac = $val["hwaddress"]; + if(isset($val["hwaddress"])) { + $mac = $val["hwaddress"]; + } else $mac = "-"; // speed and duplex - if($val["duplex"] == null) $dup = "default"; - else $dup = $val["duplex"]; + if(isset($val["duplex"])) { + if($val["duplex"] == null) $dup = "default"; + else $dup = $val["duplex"]; + } //else $dup = "default"; // TODO: needs to go away in fav of hardware setting - if($val["speed"] == null) $spd = "default"; - else $spd = $val["speed"]; + if(isset($val["speed"])) { + if($val["speed"] == null) $spd = "default"; + else $spd = $val["speed"]; + } //else $spd = "default"; // TODO: needs to go away inf av of hardware setting $spanddu = "$spd/$dup"; // network address - if($val["address4"]!=null && $val["address6"]!=null) { + if(isset($val["address4"]) && isset($val["address6"])) { $address = $val["address4"]."
    ".$val["address6"]; - } else if($val["address4"] != null) { + } else if(isset($val["address4"])) { $address = $val["address4"]; - } else if($val["address6"] != null) { + } else if(isset($val["address6"])) { $address = $val["address6"]; } else { $address = "-"; } - echo ""; + if(isset($val["description"])) $desc = $val["description"]; + else $desc = "-"; + + echo ""; } echo "
    DeviceZoneTypeMAC AddressAddressMTUSpeed/DuplexDescriptionControl
    $name$zone$type$mac$address$mtu$spandduEdit
    $name$zone$type$mac$address$mtu$spanddu$descEdit
    "; + + echo "config:
    ";
    +	print_r($config);
    +	echo "
    "; } function CBFWObjectsPage($urls) @@ -516,8 +521,8 @@ Description

    Add Access

    -From either "any", an address (1.2.3.4) or a network (1.2.3.4/23)
    -Interface +From
    +Interface Protocols HTTP HTTPS SSH

    diff --git a/unittests/deletechanges.php b/unittests/deletechanges.php index 088bb28..f2cc4a0 100644 --- a/unittests/deletechanges.php +++ b/unittests/deletechanges.php @@ -20,7 +20,7 @@ glcas_pluginLoader(); $comms = new Comms(); $comms->deleteConfig(3); - +$comms->deleteConfig(5); $config["status"] = "nochange"; $comms->putConfig($config, 3); diff --git a/var/fw.conf b/var/fw.conf index 0cc139a..2ec5fe3 100644 --- a/var/fw.conf +++ b/var/fw.conf @@ -10,5 +10,5 @@ zone name internet # this is a description interface dev eth0 name twatter # twatter is our outbound interface interface dev twatter address4 10.172.192.10/24 +interface dev twatter address6 2001:23:1004:dead::1/64 interface dev twatter zone internet - diff --git a/var/fw.conf.example b/var/fw.conf.example index 2302bad..65fda05 100644 --- a/var/fw.conf.example +++ b/var/fw.conf.example @@ -15,7 +15,7 @@ interface dev eth0 name twatter # twatter is our outbound interface interface dev eth1 name mixer interface dev twatter address4 10.172.192.10/24 -interface dev twatter address6 2003:12:12:12::1/64 +interface dev eth0 address6 2003:12:12:12::1/64 interface dev twatter zone internet admin allowed on dev twatter from object/network/any via http https ssh -- 1.7.0.4