diff --git a/emhttp/plugins/dynamix/include/Wrappers.php b/emhttp/plugins/dynamix/include/Wrappers.php index 9a9adf114..d969236d8 100644 --- a/emhttp/plugins/dynamix/include/Wrappers.php +++ b/emhttp/plugins/dynamix/include/Wrappers.php @@ -86,7 +86,7 @@ function port_name($port) { return substr($port,-2)!='n1' ? $port : substr($port,0,-2); } function exceed($value, $limit, $top=100) { - return $limit>0 ? ($value>$limit && $value<=$top) : false; + return is_numeric($value) && $limit>0 ? ($value>$limit && $value<=$top) : false; } function ipaddr($ethX='eth0', $prot=4) { global $$ethX; diff --git a/emhttp/plugins/dynamix/nchan/update_2 b/emhttp/plugins/dynamix/nchan/update_2 index c0d0a6a65..ccb68565f 100755 --- a/emhttp/plugins/dynamix/nchan/update_2 +++ b/emhttp/plugins/dynamix/nchan/update_2 @@ -163,7 +163,7 @@ function device_status(&$disk, &$error, &$warning) { function device_temp(&$disk, &$red, &$orange) { global $display; $spin = strpos(_var($disk,'color'),'blink')===false; - $temp = _var($disk,'temp','*'); + $temp = _var($disk,'temp'); $dev = _var($disk,'device'); $nvme = _var($disk,'transport')=='nvme'; [$hotNVME,$maxNVME] = $nvme ? get_nvme_info($dev,'temp') : [-1,-1]; @@ -171,12 +171,12 @@ function device_temp(&$disk, &$red, &$orange) { $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($maxNVME>=0 ? $maxNVME : (_var($disk,'rotational',1)==0 && $display['maxssd']>=0 ? $display['maxssd'] : $display['max'])); $top = $display['top'] ?? 120; $color= 'green'; - if (exceed($temp,$max,$top)) { + if (exceed($temp,$max,$top) || (is_numeric($temp) && $temp<0)) { $color = 'red'; $red++; } elseif (exceed($temp,$hot,$top)) { $color = 'orange'; $orange++; } - return (($spin && $temp>0) ? "".my_temp($temp)."" : "*").($nvme ? my_power($dev) : ""); + return ($spin ? "".my_temp($temp)."" : "*").($nvme ? my_power($dev) : ""); } function device_smart(&$disk, &$fail, &$smart) { global $numbers,$saved; @@ -192,7 +192,8 @@ function device_smart(&$disk, &$fail, &$smart) { $text = _('healthy'); $color = 'green'; $file = "state/smart/$name"; - if (file_exists("$file") && exec("grep -Pom1 '^SMART.*: \K[A-Z]+' ".escapeshellarg($file)." |tr -d '\n' 2>/dev/null", $ssa) && in_array("$ssa",$failed)) { + $ssa = file_exists($file) ? exec("grep -Pom1 '^SMART.+: \K[A-Z]+' ".escapeshellarg($file)) : ""; + if (in_array($ssa,$failed)) { $title = _('SMART health-check failed')."\n"; $thumb = 'thumbs-o-down'; $color = 'red'; $text = 'fail'; $fail++; } else { if (empty($saved["smart"]["$named.ack"])) { diff --git a/etc/rc.d/rc.inet1 b/etc/rc.d/rc.inet1 index fe73721a1..62241f160 100755 --- a/etc/rc.d/rc.inet1 +++ b/etc/rc.d/rc.inet1 @@ -66,7 +66,10 @@ # - added interface carrier check before assigning IP address (DHCP or static) # - added "status" command -# Bergware - modified for Unraid OS, October 2023 +# Adapted by Bergware for use in Unraid OS - December 2023 +# - added functions to remove leading zeros in IPv4 and IPv6 addresses + +# Bergware - modified for Unraid OS, December 2023 ########### # LOGGING # @@ -137,6 +140,19 @@ lo_down(){ # INTERFACE FUNCTIONS # ####################### +# function to remove leading zeros in IPv4 address +unzero(){ + local M Q + echo -n $(for Q in ${1//./ }; do printf "$M%x" "0x$Q"; M=.; done) +} + +# function to remove leading zeros in IPv6 address +unzero6(){ + local A M Q + A=${1/::/:-:} + echo -n $(for Q in ${A//:/ }; do [[ $Q != - ]] && printf "$M%x" "0x$Q" || printf ":"; M=:; done) +} + # function to get link mtu size get_mtu(){ ip link show $1 | grep -Po 'mtu \K\d+' @@ -377,14 +393,14 @@ ipaddr_up(){ [[ $j -eq 0 ]] && ADDR=${IPADDR[$i]} || ADDR=${IPADDR[$i,$j]} if [[ -n $ADDR ]]; then [[ $j -eq 0 ]] && MASK=${NETMASK[$i]} || MASK=${NETMASK[$i,$j]} - [[ -n $MASK ]] && run ip -4 addr add $ADDR/$MASK dev $IFACE metric 1 + [[ -n $MASK ]] && run ip -4 addr add $(unzero $ADDR)/$MASK dev $IFACE metric 1 fi fi if [[ $IP != ipv4 ]]; then [[ $j -eq 0 ]] && ADDR6=${IPADDR6[$i]} || ADDR6=${IPADDR6[$i,$j]} if [[ -n $ADDR6 ]]; then [[ $j -eq 0 ]] && MASK6=${NETMASK6[$i]} || MASK6=${NETMASK6[$i,$j]} - [[ -n $MASK6 ]] && run ip -6 addr add $ADDR6/$MASK6 dev $IFACE metric 1 + [[ -n $MASK6 ]] && run ip -6 addr add $(unzero6 $ADDR6)/$MASK6 dev $IFACE metric 1 [[ -n $PRIV6 && -d $CONF6/$IFACE ]] && echo 0 >$CONF6/$IFACE/use_tempaddr fi fi diff --git a/etc/rc.d/rc.libvirt b/etc/rc.d/rc.libvirt index 41236c822..c6a3935a7 100755 --- a/etc/rc.d/rc.libvirt +++ b/etc/rc.d/rc.libvirt @@ -181,14 +181,15 @@ libvirtd_start(){ return 1 fi # convert libvirt 1.3.1 w/ eric's hyperv vendor id patch to how libvirt does it in libvirt 1.3.3+ - sed -ri "s///g" /etc/libvirt/qemu/*.xml &>/dev/null + sed -ri "s///g" /etc/libvirt/qemu/*.xml 2>/dev/null # remove from xml because libvirt + virlogd + virlockd has an issue with locked - sed -ri "//d" /etc/libvirt/qemu/*.xml &>/dev/null + sed -ri "//d" /etc/libvirt/qemu/*.xml 2>/dev/null # Remove "" if reverting from later release. . /etc/unraid-version - [[ $(version $version) -le $(version "6.12") ]] && sed -ri "//d" /etc/libvirt/qemu/*.xml &>/dev/null + [[ $(version $version) -le $(version "6.12") ]] && sed -ri "//d" /etc/libvirt/qemu/*.xml 2>/dev/null # update interface section((s) of VM configuration files for XML in /etc/libvirt/qemu/*.xml; do + [[ -f "$XML" ]] || continue # get all interface sections ROW=($(grep -nhP '