mirror of
https://github.com/billz/raspap-webgui.git
synced 2023-10-10 13:37:24 +02:00
Cleanup and fix for udev rules written for clients
Fix device type in client table
This commit is contained in:
parent
f7cef44b06
commit
300f2c2457
@ -39,39 +39,41 @@ if (isset($_POST['interface'])) {
|
|||||||
$pid=$_POST["int-pid-".$dev];
|
$pid=$_POST["int-pid-".$dev];
|
||||||
$mac=$_POST["int-mac-".$dev];
|
$mac=$_POST["int-mac-".$dev];
|
||||||
$name=trim($_POST["int-name-".$dev]);
|
$name=trim($_POST["int-name-".$dev]);
|
||||||
|
$name=preg_replace("/[^a-z0-9]/", "", strtolower($name));
|
||||||
$type=$_POST["int-type-".$dev];
|
$type=$_POST["int-type-".$dev];
|
||||||
$newtype=$_POST["int-new-type-".$dev];
|
$newtype=$_POST["int-new-type-".$dev];
|
||||||
$udevfile=$_SESSION["udevrules"]["udev_rules_file"];
|
$udevfile=$_SESSION["udevrules"]["udev_rules_file"]; // default file /etc/udev/rules.d/80-net-devices.rules";
|
||||||
// $udevfile="/etc/udev/rules.d/80-net-devices.rules";
|
|
||||||
|
|
||||||
// find the rule prototype and prefix
|
// find the rule prototype and prefix
|
||||||
$rule = "";
|
$rule = "";
|
||||||
foreach($_SESSION["udevrules"]["network_devices"] as $devt) {
|
foreach($_SESSION["udevrules"]["network_devices"] as $devt) {
|
||||||
if($devt["type"]==$newtype) {
|
if($devt["type"]==$newtype) {
|
||||||
$rule = $devt["udev_rule"];
|
$rulenew = $devt["udev_rule"];
|
||||||
$prefix = $devt["name_prefix"];
|
$prefix = $devt["name_prefix"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!empty($mac)) $rule = preg_replace("/\\\$MAC\\\$/i",$mac,$rule);
|
|
||||||
|
// check for an existing rule and delete lines with same MAC or same VID/PID
|
||||||
|
if (!empty($vid) && !empty($pid)) {
|
||||||
|
$rule = '^.*ATTRS{idVendor}==\"' . $vid . '\".*ATTRS{idProduct}==\"' . $pid . '\".*$';
|
||||||
|
exec('sudo sed -i "/'.$rule.'/Id" '.$udevfile); // clear all entries with this VID/PID
|
||||||
|
$rule = '^.*ATTRS{idProduct}==\"' . $pid . '\".*ATTRS{idVendor}==\"' . $vid . '\".*$';
|
||||||
|
exec('sudo sed -i "/'.$rule.'/Id" '.$udevfile); // clear all entries with this VID/PID
|
||||||
|
}
|
||||||
|
if (!empty($mac)) {
|
||||||
|
exec('sudo sed -i "/^.*'.$mac.'.*$/d" '.$udevfile); // clear all entries with same MAC
|
||||||
|
}
|
||||||
|
// create new entry
|
||||||
|
if ( ($type != $newtype) || !empty($name) ) { // new device type or new name
|
||||||
|
if (empty($name)) $name = $prefix."*";
|
||||||
|
if (!empty($mac)) $rule = preg_replace("/\\\$MAC\\\$/i", $mac, $rulenew);
|
||||||
if (!empty($vid)) $rule = preg_replace("/\\\$IDVENDOR\\\$/i", $vid, $rule);
|
if (!empty($vid)) $rule = preg_replace("/\\\$IDVENDOR\\\$/i", $vid, $rule);
|
||||||
if (!empty($pid)) $rule = preg_replace("/\\\$IDPRODUCT\\\$/i", $pid, $rule);
|
if (!empty($pid)) $rule = preg_replace("/\\\$IDPRODUCT\\\$/i", $pid, $rule);
|
||||||
// check for existing rule
|
|
||||||
$pre="";
|
|
||||||
if(preg_match("/^(\w+)[0-9]$/",$dev,$match)=== 1) $pre=$match[1];
|
|
||||||
$ruleold = preg_replace("/\\\$DEVNAME\\\$/i",$pre.".",$rule);
|
|
||||||
exec("grep -oP '".$ruleold."' $udevfile",$ret);
|
|
||||||
$newRule = empty($ret) || !empty($name);
|
|
||||||
// delete current entry
|
|
||||||
if(!empty($ret)) exec("sudo sed -i '/^".$ruleold."$/d' ".$udevfile);
|
|
||||||
exec('sudo sed -i "/^.*'.$mac.'.*$/d" '.$udevfile);
|
|
||||||
if($newRule) {
|
|
||||||
// create new entry
|
|
||||||
if(empty($name)) $name = $prefix."0";
|
|
||||||
if (!empty($name)) $rule = preg_replace("/\\\$DEVNAME\\\$/i",$name,$rule);
|
if (!empty($name)) $rule = preg_replace("/\\\$DEVNAME\\\$/i",$name,$rule);
|
||||||
if (!empty($rule)) exec('echo \''.$rule.'\' | sudo /usr/bin/tee -a '.$udevfile);
|
if (!empty($rule)) exec('echo \''.$rule.'\' | sudo /usr/bin/tee -a '.$udevfile);
|
||||||
}
|
}
|
||||||
$ret=print_r($ret,true);
|
$ret=print_r($ret,true);
|
||||||
$jsonData = ['return'=>0,'output'=>['Settings changed for device '.$dev ] ];
|
$jsonData = ['return'=>0,'output'=>['Settings changed for device '.$dev. '<br>Changes will only be in effect after reconnecting the device' ] ];
|
||||||
echo json_encode($jsonData);
|
echo json_encode($jsonData);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -20,16 +20,8 @@ function getClients($simple=true)
|
|||||||
}
|
}
|
||||||
foreach ($rawdevs as $i => $dev) {
|
foreach ($rawdevs as $i => $dev) {
|
||||||
$cl["device"][$i]["name"]=$dev;
|
$cl["device"][$i]["name"]=$dev;
|
||||||
if (preg_match("/^(\w+)[0-9]$/", $dev, $nam) === 1) {
|
$nam = (preg_match("/^(\w+)[0-9]$/",$dev,$nam) === 1) ? $nam=$nam[1] : "";
|
||||||
$nam=$nam[1];
|
$cl["device"][$i]["type"]=$ty=getClientType($dev);
|
||||||
} else {
|
|
||||||
$nam="none";
|
|
||||||
}
|
|
||||||
if (($n = array_search($nam, $_SESSION["net-device-name-prefix"])) === false) {
|
|
||||||
$n = count($_SESSION["net-device-types"])-1;
|
|
||||||
}
|
|
||||||
$ty = $_SESSION["net-device-types"][$n];
|
|
||||||
$cl["device"][$i]["type"]=$ty;
|
|
||||||
unset($udevinfo);
|
unset($udevinfo);
|
||||||
exec("udevadm info /sys/class/net/$dev 2> /dev/null", $udevinfo);
|
exec("udevadm info /sys/class/net/$dev 2> /dev/null", $udevinfo);
|
||||||
if ($nam == "ppp" && isset($devtty)) {
|
if ($nam == "ppp" && isset($devtty)) {
|
||||||
@ -181,6 +173,27 @@ function getClients($simple=true)
|
|||||||
return $cl;
|
return $cl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getClientType($dev) {
|
||||||
|
loadClientConfig();
|
||||||
|
// check if device type stored in DEVTYPE or raspapType (from UDEV rule) protperty of the device
|
||||||
|
exec("udevadm info /sys/class/net/$dev 2> /dev/null", $udevadm);
|
||||||
|
$type="none";
|
||||||
|
if (!empty($udevadm)) {
|
||||||
|
$type=preg_only_match("/raspapType=(\w*)/i",$udevadm);
|
||||||
|
if (empty($type)) {
|
||||||
|
$type=preg_only_match("/DEVTYPE=(\w*)/i",$udevadm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (empty($type) || array_search($type, $_SESSION["net-device-name-prefix"]) === false) {
|
||||||
|
// no device type yet -> get device type from device name
|
||||||
|
if (preg_match("/^(\w+)[0-9]$/",$dev,$nam) === 1) $nam=$nam[1];
|
||||||
|
else $nam="none";
|
||||||
|
if (($n = array_search($nam, $_SESSION["net-device-name-prefix"])) === false) $n = count($_SESSION["net-device-types"])-1;
|
||||||
|
$type = $_SESSION["net-device-types"][$n];
|
||||||
|
}
|
||||||
|
return $type;
|
||||||
|
}
|
||||||
|
|
||||||
function loadClientConfig()
|
function loadClientConfig()
|
||||||
{
|
{
|
||||||
// load network device config file for UDEV rules into $_SESSION
|
// load network device config file for UDEV rules into $_SESSION
|
||||||
|
@ -141,7 +141,7 @@
|
|||||||
foreach($_SESSION["net-device-types"] as $i => $type) {
|
foreach($_SESSION["net-device-types"] as $i => $type) {
|
||||||
$txt=$_SESSION["net-device-types-info"][$i];
|
$txt=$_SESSION["net-device-types-info"][$i];
|
||||||
$txtdisabled = in_array($type,array("ppp","tun")) ? "disabled":"";
|
$txtdisabled = in_array($type,array("ppp","tun")) ? "disabled":"";
|
||||||
if(preg_match("/^".$_SESSION["net-device-name-prefix"][$i]."[0-9]*$/",$dev["name"])===1) echo '<option '.$txtdisabled.' selected value="'.$type.'">'.$txt.'</option>';
|
if(preg_match("/^".$_SESSION["net-device-name-prefix"][$i].".*$/",$dev["type"])===1) echo '<option '.$txtdisabled.' selected value="'.$type.'">'.$txt.'</option>';
|
||||||
else echo '<option '.$txtdisabled.' value="'.$type.'">'.$txt.'</option>';
|
else echo '<option '.$txtdisabled.' value="'.$type.'">'.$txt.'</option>';
|
||||||
}
|
}
|
||||||
echo "</select></td>";
|
echo "</select></td>";
|
||||||
|
Loading…
Reference in New Issue
Block a user