This document intends to detail the change log for relatively recent work (roughly since the source code was tracked in Git).
upsnotify()
[#1590, #2136] * introduce str_upsnotify_state()
for meaningful
debug log messages; * suggest to export
NUT_QUIET_INIT_UPSNOTIFY=true
where we "will not spam more about
it" for systems that do not currently expect to have notification
support or need
on
in nut-names.txt also
ecocontrol
change description
ERR TOO-LONG
bypassauto
in info_lkp_t
eaton_input_bypass_mode_info[]
outlet.n.status
back and new one move to intro
outlet.1.protect.status
also define in cmdvartab and
/docs/nut-names.txt
outlet.1.switch.status
rename back to
outlet.1.status
switch (0-2)
for
input.eco.switchable in nut-names.txt
input.eco.switchable,outlet.n.ecocontrol
to cmdvartab and
/docs/nut-names.txt
info_lkp_t eaton_input_mode_info[]
for
input.eco.switchable
info_lkp_t outlet_eco_yes_no_info[]
to mge-hid.c
outlet_eco_yes_no_info[]
from
powerp-bin.c
*outlet_eco_yes_no_info
from mgr-hid.c
outlet_eco_yes_no_info[] error
info_lkp_t
outlet_eco_yes_no_info
and valtab_t
outlet_eco_yes_no_info
default
cases in switch
lists,
and dislikes a default
label in enum handling when all known
values are handled (and wants them all to be handled). The clash is
only resolvable by pragmas, like elsewhere in out codebase.
nut_usb_get_string()
method
[#1925, #2604]
nut_usb_get_string()
method - extend
[#1925, #2604]
nut_usb_get_string()
method [#1925,
#2604]
umount
, it works
too [#2591]
docs/config-prereqs.txt
, if a more integrated client would be
made to follow up with this idea eventually.
--enable-NUT_STRARG-always
setting have auto
detection by
default [#2585] Flips to "yes" for gcc-13.x (clang having issues
is not proven at the moment)
configure --enable-NUT_STRARG-always
setting [#2585]
localtime_r()
and gmtime_r()
[#1611, #2583]
banner_is_disabled()
to not preclude CLI
-V
printouts [#2573]
upsdrvctl
status
…) it is not pretty to see logged messages about an
unexpected connection loss. Having it coincide with a LOGOUT is
better for troubleshooting.
if
(!callback){...}
check
if
(!callback){...}
check
export
envvars which are NUT
program configuration tweaks
NUT_QUIET_INIT_BANNER
envvar support
and banner_is_disabled()
common method [balancing issues #1789
vs. #316]
VERSION_FORCED
and
VERSION_FORCED_SEMVER
files in our release rituals, we have
support anyway and want to test it in-vivo [#1949]
tools/gitlog2version.sh
now in the loop [#1949]
0x06da
(Phoenixtec) suggest trying nutdrv_qx
[#334]
ups.firmware
and input.sensitivity
These variables were tested to work fine on a CP1350EPFCLCD UPS.
ChangeLog
, we ignore the e-mail
for comparisons — and different signatures can matter!
pkg-config
--variable pc_path pkg-config
for troubleshooting
bool_t
(currently commonly hacked into many NUT sources). Using
lower-cased true
and false
values, hoping for maximum
compatibility with C99 and newer language standards (if the
compilers do implement them on whatever obscure platform NUT gets
built on, and then our new nut_bool_t
definition can be just an
alias for what the language gives us). A test case was added to
make sure it behaves as expected on different systems. Converting
the sources from their custom type definitions and usages would be
a separate step.
make
from PATH
.
init_snmp()
is called once, every use of the library initializes
some data which it then does not release, at least on the test
system here.
libnutscan
, version bumped [#2244, #2523 et al]
-m auto
[#2244, #2516]
nut-scanner -m auto
note - WIN32 is now
supported too [#2516]
-t timeout
: fix to use strtol()
not atol() [#2244]
const
as we do not change the original value anyway.
-m auto*/ADDRLEN
mode [#2244]
-m auto
discovery: use shorter
addr/mask buffers [#2244]
-m auto
: implement actually
converting discovered subnets into CIDR and adding to IP ranges for
scanning [#2244]
-m
option [#2244]
-m auto
mode with detection of configured network
interfaces
-L/opt/homebrew/Cellar/neon/0.32.5/lib
would be required for
successful discovery.
base_libname
includes path separator character(s) [#2431]
libcommonstr.la
recipe A smaller helper library than
libcommonclient.la
which is sometimes an overkill, e.g. in
nut-scanner
where the libupsclient.so/.dll
is loaded
dynamically for "Old NUT" scans and there is no specific use for
object files included into libcommonclient.la
. More use-cases
with DMF codebase (currently not yet upstreamed). Combined from a
series of commits like * 3ba6b576cd2248484eaad41a9e2a480cbd2aa6a6 *
c418728e6ed7879f4a569ca0e3fd6f38fcb27eae *
5f16b7b7c89fa341090e886e7ca5cf8d981430eb *
bc4cd957280c67778a36b49b524092dc15d1aa8b
--with-doc=dist-auto
option [#2473]
make distcheck-light-man
should test installability
of NUT-Monitor and PyNUT (even if as a co-bundle) Modernize
DISTCHECK_LIGHT_MAN_FLAGS
for 2022\+ Replicate commit
e19fa235a7cecdf5bc5752ab87c3e6db81932dac from PR
https://github.com/networkupstools/nut/pull/1504
NUT_DEBUG_SYSLOG
environment variable [#2394]
parameter
struct to avoid GCC complains about
"‘parameter.value’ may be used uninitialized in this function".
This is not a real error because, if bicker_write
is successful,
that struct is populated properly.
NULL
for discarding the results
but bicker_receive_parameter() was accessing dst->id
, effectively
preventing it. Fix that bug and improve the code: now
bicker_receive_parameter() validates the parameter id (so it can be
used freely) and it always logs debugging info about the parameter.
dst
optional in
bicker_write The dst
argument is optional in every other
function, so be consistent and make it optional also in this one.
parameter
to dst
This
should make clear that argument is just used for destination.
net start/stop
to manage Windows
services [#2446, #2455]
char
is by default signed and (as the name implies)
designed to access string characters. For accessing bytes, the
uint8_t
type is more appropriate.
libupsclient.so
was not loaded, we can not really use this
search. Seems like a copy-paste problem mis-adding the NUT
Simulation support.
test
's evaluate all
conditions first and only handle them via boolean logic later. Oh
the audacity!
install
scripts that automake uses seem to
struggle with that. Maybe just need to find a suitable automagic
keyword - but this can wait.
find "$@" -not -newer .git/HEAD
" |\|
true ) 2>/dev/null && ls -la .git/HEAD "$@" 2>/dev/null ; then SKIP
; else WORK ; fi Hopefully this takes care of corner cases: * No
.git/HEAD ⇒ WORK (may be unsuccessfully, maybe not - e.g. Git
submodules referring to parent) * rm
fails, maybe find
returns
empty ⇒ DON’T CARE, go to LS * ls
fails (one of target files is
absent - e.g. ChangeLog removed or never was there) ⇒ WORK Only
if the ChangeLog is still there after the attempt on its life, SKIP
and keep it
dump_data
to decide about foreground mode, but after
moving the -D
option handling (and this decision) upwards to
facilitate early debugging, the variable is never modified in time
anymore. Thanks for the catch to Eric Clappier and IPM/42ity team.
.txt
exception (license etc.) getting spellchecked or
prepped.
maxreport
flag for usbhid-ups
driver, vs. max_report_size
setting in code
ci_build.sh
are in quiet
mode for the first compilation attempt (usually the only one, if
all is OK) so these warnings are just not seen by build-log
analysis parser.
./autogen.sh && ./configure && make
on some (not all) platforms.
dblatex
(used in PDF generation) which treat
everything after the first dot as a file extension.
make spellcheck
which just reports a massive failure.
timegm
implementation but there is a _mkgmtime
which does the same:
https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64
_apc_modbus_date_from_nut
to use timegm
instead of
mktime
which does not add the current time zone information. This
fixes dates that are off-by-one compared to what was set.
apc_map
mariable to potentially point to the wrong register map. This can
cause the re-read of the set value at the end of the function to
fail.
apc_modbus_command_map
which defines the supported commands as a
tuple of command name, register offset and value to write. This
also adds a new instcmd status called
STAT_INSTCMD_CONVERSION_FAILED
for when conversion of values
fails. On startup all the commands are registered using
dstate_addcmd
. This also adds support for the upsdrv_shutdown
function. - For writable variables we added a new flag called
APC_VF_RW
to the existing variables that indicates a writable
variable. We added code to convert from a string to UINT/INT/STRING
variables with output in APCs register format. There is a new
_apc_modbus_setvar
function that handles setting variables and
rereading them from the device. This also adds a new setvar status
called STAT_SET_CONVERSION_FAILED
for when conversion of values
fails. Variables are now correctly set as ST_FLAG_STRING
and
ST_FLAG_RW
and we call dstate_setaux
to give a maximum length
for strings. - For outlet groups, we now have names, configurable
delays and commands per outlet group. Devices have an outlet group
called MOG (Main outlet group) that switches all the outputs of the
UPS and 1-3 SOGs (Switched outlet groups) that can be controlled
independently. Note that MOG is outlet.group.0
and the SOGs start
at outlet.group.1
. The outlet groups should have markings with
the same index at the back of the unit. - This also reduces the
length of some of the defines to make the variable maps more
readable. - It also adds a comment to when the reopen matcher is
created that clarifies why we create it.
STAT_SET_UNKNOWN
, which is
for variables that were not found, instead this should return
STAT_SET_INVALID
, which means that the variable is not writable.
make spellcheck
from different
directories (and of other-directory files) try to report the path
to text source relative to NUT source
strncpy
does not necessarily zero terminate the buffer so we
replace it with snprintf
and add error checking. This also fixes
an off-by-one in the snprintf
error checking of the
_apc_modbus_double_to_nut
and _apc_modbus_power_to_nut
functions and adds error checking to every snprintf
call.
SIZEOF_ARRAY
macro
and use where applicable This adds a new SIZEOF_ARRAY
to
common.h
and changes some code to use it.
$vendor
we can have duplicate entries.
upsid
setting [#2075]
Makefile.am
but it does not
do so relative to "$srcdir" so trying to do a configure outside of
the source directory will fail.
man nut.conf
for more info
apc_modbus
to support the APC
Modbus protocol over serial ports, TCP connections and USB ports.
For USB support to work it needs a [patched libmodbus
that has
support for the APC USB Modbus
encapsulation](https://github.com/EchterAgo/libmodbus/commits/rtu_usb).
If a libmodbus
without USB support is detected the driver will
build with just the serial and TCP/IP support.
conf/upsmon.conf.sample.in, docs/man/upsmon.conf.txt, docs/man/upsmon.txt, docs/nut.dict: upsmon(.conf) docs and samples
(top_)srcdir
and (top_)builddir
attributes, so
empty values are non-toxic
snmp_info_t
got updated to conform with pre 5d97d07 instant commands layout,
but got merged after it. Reverting 8bcf255 so that command values
are correctly in su_info_t->dfl
.
LISTEN *
handling to not fiddle with
optionality of require_IPV6_V6ONLY
for one use-case [#2013
review, #2012]
driver.state
#1767, driver reload command #1903, driver
inter-instance communications via socket #1922 and others. Also
convert remaining single-digit X.Y versions to X.<Y\+1>0
double-digits.
secLevel
is required to use non-trivial authentication [#734]
docs/new-drivers.txt
by name for
device status data definitions
docs/download.txt: update references to NUT client for VMWare ESXi
docs/download.txt: update references to NUT client for VMWare ESXi
upsd
would accept them and upscmd
can request them [#1903]
ups.conf
reloading in NUT
drivers [#1903]
(s)size_t
variables
upsdrvctl shutdown
. This
results in using that delay, instead of 1s. - Change shutdown delay
to 20s from 10s, because that seems more common, and 10s feels too
tight. - Add logging about shutdown. When run with -k
,
ups.delay.shutdown
has apparently not been initialized. Fall
back to 20, rather than 1, and log better.
allow_duplicates
flag for common
USB matching options [#1756]
./ci_build.sh inplace
operation
shortcut [#1714]
configure --enable-inplace-runtime
[#1714]
--enable-inplace-runtime
[#1714]
localcalculation
. When enabled, driver will calculate
values of battery.runtime and battery.load locally. This is for
some Riello models (iPlug and iDialog series) that provides
incorrect values. Local calculation is done according to nominal
battery capacity, nominal battery voltage, actual battery charge,
maximum and actual UPS load. Added condition to filter off
situation when battery temperature variable is incorrectly set to
variable type maximum (255) - which is typical issue of some Riello
models (iPlug and iDialog series). If incorrect value is detected
temperature is set to 0.
ifdef
HAVE_USB_H
(libusb-0.1 header)
ifdef
HAVE_USB_H
(libusb-0.1 header)
-x generic
suggestion apparently
became -x explore
later in this timeline (also -d1
to dump and
exit after one data collection loop, without requiring a valid
NUT_STATEPATH
).
PyNUTError("Always a string")
to file-heading changelog
cppnit
et al
time
! No time
: it outputs /\^sys/
- fatal
for powershell (or appveyor?) console scanner
common/common.c: get_libname(): prefer LD_LIBRARY_PATH first [#805]
make distcheck
should test installability of
NUT-Monitor and PyNUT (even if as a co-bundle)
upsc ...
" to
runcmd()
make install
for
NUT-Monitor and/or PyNUT [#1462]
waitbeforereconnect
keyword
make check
at once on same host, they now have a
decent chance to not collide (not guaranteed though)
$(<F)
is not POSIX compliant, while $(@F)
is, go figure [#1362 follow-up]
--enable-maintainer-mode
test_nutclient.py
requires an
upsd
running
echo -n
with a more portable printf
extern pDesc
is defined in libhid.h which does not
seem to be used in/along-with hidparser.{c,h} currently - but this
collision may happen later (especially with code-copying around).
./ci_build.sh spellcheck
to be more useful
make
maintainer-clean
also removes .dirstamp files
expr
- if the maths result was "0"
expr
char
su_scratch_buf[255]
(original static array moved to another file
in master branch), and bump DRIVER_VERSION
su_scratch_buf
instead of a local char[6]
buffer.
configure
example a bit friendlier for copy-pasting.
strcmp(mib,
"auto")
many times
ulimit -n
(minus known overhead)
tools/nut-ddl-dump.sh
in the same manner (issue #1111)
make spellcheck
from top dir should be quieter
(fallout from touchfiles)
systemctl restart lxc-net
after edits of /etc/lxc/dnsmasq-hosts.conf
fightwarn.*89.*
regex branch name; do
not pollute logs and analysis of "usual fightwarn" builds
[D#]
prefix impact
experimental.*
namespace
disable_weak_ssl
(currently not getting in our way, but can
change later)
phoenixtec_command()
memchr()
later in
all cases.
//
comments same way as /*...
drivers/main.c: main.c: write upsdrv_initinfo/updateinfo() logs to syslog When a NUT driver is started (via upsdrvctl start), it runs the following sequence: 1. Run as a foreground process. 2. Do some basic initialization, log to stderr. 3. If not debugging: - fork()
pkg install libgd
explicitly (needs
sudo)
make
check
with the current test case
state_delinfo()
not deleting immutable variables, comment
this near the function and log for runtime hits to help
troubleshooting.
poll_interval
in
apcupsd-ups
This commit removes the hardcoded poll-interval of
60 seconds and instead only makes sure that the user-defined
interval is greater than a minimum-interval.
dstate_delinfo()
for LB-condition variables This commit fixes
the ignorelb
flag for the apcupsd-ups
driver. Previusly
"battery.charge" and "battery.runtime" was cleared before invoking
status_commit()
which caused the LB-condition to always be
false
.
ST_FLAG_IMMUTABLE
in dstate_delinfo()
output.current
LOAD_VA ⇒ ups.power
NOMAPNT ⇒
ups.power.nominal
Closes:
https://github.com/networkupstools/nut/pull/753
im
, which is passed to
autonomy_calc(), can be equal to 4, blindly incrementing it by one,
when it’s 4, leads to an index out of bounds.
Basic homebrew UUID v4 implementation * Prefer to use static
buffer for UUID * log actual result of instcmd / setvar * Fix
tracking ID reporting due to static memory changes * upsclient:
use unsigned int for timeouts Also, explicit that upscli_cleanup()
takes no argument. * upscmd/upsrw: use unsigned int for timeout \+
our str_to_uint() for it Also, slightly reword the help message
for -t
(timeout) option, in order to clarify which is the unit
(seconds) used for the provided value. * upscmd/upsrw: don’t sleep
after receiving a non-PENDING CMDSET_STATUS Also, remove some
nesting in do_cmd() and do_set(). * net-protocol: clarify the
format of GET CMDSET_STATUS \+ <status_id> <status_id> is not
optional to get the status of a command/setvar with CMDSET_STATUS,
so drop the [square brackets] from it. Also drop "quotes" in SET
CMDSET_STATUS’s <value>, since it’s expected to be a single word.
Plus, fix markup of INSTMCD’s <cmdparam> parameter. *
sock-protocol: align case and markup of command parameters *
dstate: fix handling of INSTCMD’s optional parameters We should
still support the old INSTCMD <cmdname> [<cmdparam>]
format, and
not only consider <cmdparam> when also STATUS_ID <id>
is
provided. Also, fix the format of our sock-protocol commands
mentioned in comments, and add function names to debug info. *
common: document the recently added things * upsd: in INSTCMD/SET
handlers, also accept NULL for status_id Plus: - use a simpler
approach to test if status_id is not empty, - align the way the SET
command is built to the one used for the INSTCMD command. * upsd:
drop unnecessary/unused global * upsd: move sanity checks of
cmdset_status_get() after declaration of vars Also, drop some
nesting in that function. * Move from CMDSET_STATUS / STATUS_ID to
TRACKING This is just a big, big rename, no code changes. * upsd:
refine the tracking API Add a couple of functions to change in a
predictable way the value of the general enablement of tracking and
make it visible only inside upsd.c. Also, move the tracking type
(tracking_t) and the list of items inside upsd.c. * net-protocol:
also return TRACKING between OK and <id>, for INSTCMD/SET VAR *
dstate: really fix handling of INSTCMD’s optional parameters
Erroring out on INSTCMD <cmdname>
doesn’t seem like a good
idea… * common: massage default timeouts Rename the default
timeout used in network operations by upsclient and nut-scanner to
be more specific: from DEFAULT_TIMEOUT to DEFAULT_NETWORK_TIMEOUT.
Plus, make the default timeout used when retrieving the result of
an INSTCMD/SET VAR with TRACKING enabled a common #define’d value
(DEFAULT_TRACKING_TIMEOUT), and use it also to publish the default
value of the -t option in the help messages of upscmd and upsrw.
As suggested by Charles Lepple. * upsd: ignore case of UUID4 in
tracking API Also, remove some nesting in tracking_del(). *
libupsclient: generate manpages for
upscli_{read,send}line_timeout() To keep things simple, at least
for now, only generate manpages and not html pages (and, as such,
don’t even think of using our linkman AsciiDoc macro with those
functions, to avoid dead links). * libupsclient: bump version as
per recent changes - addition of upscli_{read,send}line_timeout(),
DELRANGE <varname> <minvalue> <maxvalue>
, not
DELRANGE <varname> "<minvalue> <maxvalue>"
, as used in
dstate_delrange(). So, fix that unused (well, at least in NUT)
function to use the correct format. Also, remove an extraneous
additional space in the command used in dstate_addrange().
auglenstestsdir
to install the augeas test_nut.aug
file
[
and ]
- no need for "
.
pollfreq
and USB interrupts Closes:
https://github.com/networkupstools/nut/issues/476
--with-usb
to choose the library
configure
appropriate
values for --with-usb-includes
and --with-usb-libs
(i.e. libusb
0.1/libusb-compat-only settings).
docs/man/Makefile.am: Some systems detect man-pages as "ASCII text"
driver.version.usb
variable Reference:
https://github.com/networkupstools/nut/issues/300
driver.version.usb
variable Reference:
https://github.com/networkupstools/nut/issues/300
driver.version.usb
variable Reference:
https://github.com/networkupstools/nut/issues/300
libusb_set_interface_alt_setting (0,
{empty}0)
(equivalent to libusb_set_altinterface(0)
in libusb 0.1), as
was done in NUT 2.7.2 and earlier. However, the libusb 1.0
implementation was still missing the related code Reference:
https://github.com/networkupstools/nut/issues/300
libusb_set_interface_alt_setting (0,
{empty}0)
(equivalent to libusb_set_altinterface(0)
in libusb 0.1), as
was done in NUT 2.7.2 and earlier. However, the libusb 1.0
implementation was still missing the related code Reference:
https://github.com/networkupstools/nut/issues/300
libusb_set_interface_alt_setting (0,
{empty}0)
(equivalent to libusb_set_altinterface(0)
in libusb 0.1), as
was done in NUT 2.7.2 and earlier. However, the libusb 1.0
implementation was still missing the related code Reference:
https://github.com/networkupstools/nut/issues/300
ASCIIDOC_VERBOSE=-v make distcheck-light
to pass. So let’s keep
it complaining but working.
--with-lib
references Credit: Paul Vermeer
docs/man/nutdrv_qx.txt, drivers/nutdrv_qx_bestups.c, drivers/nutdrv_qx_blazer-common.c, drivers/nutdrv_qx_blazer-common.h, drivers/nutdrv_qx_mecer.c, drivers/nutdrv_qx_megatec-old.c, drivers/nutdrv_qx_megatec.c, drivers/nutdrv_qx_mustek.c, drivers/nutdrv_qx_q1.c, drivers/nutdrv_qx_voltronic-qs-hex.c, drivers/nutdrv_qx_voltronic-qs.c, drivers/nutdrv_qx_zinto.c: nutdrv_qx: add ignoresab flag to support bogus devices Some UPSes incorrectly report the Shutdown Active bit (7th bit of the status byte) as always on (=1), consequently making the driver believe the UPS is nearing a shutdown (and, as a result, ups.status always contains FSD). To workaround this issue, add a new ignoresab flag that makes the driver do just what its name tells (IGNORE Status Active Bit) skipping the relative item in qx2nut tables. References: - http://lists.alioth.debian.org/pipermail/nut-upsdev/2015-March/006896.html
@
in port name Also reworded parts of the man page.
-lm
.
http://news.gmane.org/find-root.php?message_id=544515BA.4060804%40niksoggia.it
data/driver.list.in: HCL: add devices supported by nutdrv_qx - Fideltronik LUPUS 500 USB Protocol: megatec USB subdriver: fabula Reference: http://lists.alioth.debian.org/pipermail/nut-upsuser/2014-June/009059.html
MAINTAINERS, docs/man/.gitignore, docs/man/Makefile.am, docs/man/al175.txt, docs/man/index.txt, docs/man/nutupsdrv.txt, docs/new-drivers.txt, drivers/Makefile.am, drivers/al175.c: al175: updated driver, please restore it Back in 2005 I was young and idealistic, that’s why you finally marked al175 as broken, but now I understand your points (some) and that in NUT you need good portability. So this time I’ve checked that al175 compiles with CC="gcc -std=c89 -pedantic", and CC="gcc -std=c99 -pedantic" Also, I’ve tried to clean-up the driver based on feedback from 2009, but unfortunately I no longer have hardware to test and will not have any in foreseable future, so the driver was reworked to meet the project code quality criteria, without testing on real hardware. Some bugs may have crept in. Changes since last posting in 2009:
drivers/apcsmart.c: apcsmart: verify/setup fixups legacy_verify()
* scripts/java/jNut/src/main/java/org/networkupstools/jnut/Client.java, scripts/java/jNut/src/main/java/org/networkupstools/jnut/Command.java, scripts/java/jNut/src/main/java/org/networkupstools/jnut/Device.java, .../java/jNut/src/main/java/org/networkupstools/jnut/NutException.java, .../jNut/src/main/java/org/networkupstools/jnut/StringLineSocket.java, scripts/java/jNut/src/main/java/org/networkupstools/jnut/Variable.java: Fix mail address typo for javadoc.
clients/upsmon.c: Makes the call to "wall" function non blocking,