Commit Briefs
convert all command handlers to variadic functions (varargs)
Resolves dozens of: warning: passing arguments to a function without a prototype is deprecated in all versions of C and is not supported in C2x In traditional C the empty argument list () indicates that a function accepts an arbitrary amount of arguments of arbitary types. A function which takes no arguments must be declared with a (void) prototype instead. nsh has been making elaborate use of this feature by defining command handlers with () and passing arbitrary arguments to handlers depending on the use case. This coding style is not future-proof. In C++, () means "no arguments", the same as (void), and clang is now warning about this C feature going away in C2x, aligning C with C++. Make nsh future-proof by using variadic function prototypes (...) instead of () prototypes. Every handler now uses (int argc, char **argv, ...) as prototype: the argument count, an argument vector, followed by arbitrary arguments which can be extracted using the va_arg(3) function from stdarg.h. The variadic part of the argument list can be used to pass arguments of types other than char * without needing to convert them to strings and back. Using () as function prototype defeats type-checking done by the compiler, and the same is true for variadic arguments. We still need to manually make sure that the correct amount and types of arguments are passed in the variadic part of the handler's argument list. Many handlers already use the argument count + argument vector approach and do not need internal changes, just a new prototype. Some handlers now require use of va_start/va_arg/va_end to access additional arguments. For example, the interfaces handlers were passing an interface name and file descriptor before the argument count/vector. The order of arguments is now swapped, such that interface name and file descriptor get passed as part of the variable argument list.
update K&R-C-style prototypes in kroute.c to modern C
Fixes warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C2x
implement 'clear' command in interface/bridge mode
resolves warning: unused function 'int_clear' [-Wunused-function]
fix initialization of systatcs sentinel in commands.c
Repairs the following compile-time warning: nsh/commands.c:403:17: warning: suggest braces around initialization of subobject [-Wmissing-braces] { 0, 0, 0, 0 } ^~~~ { }
if.c - vlan parent devices automatically disable
disable the child interface and change parent and enable interface after the change made... issue reported by Tom... fix authored by stsp tested by Tom and reviewed OK Tom and OK Chris
preserve only manually added ndp table entries in startup config
nsh was mistakenly adding all ndp table entries to startup-config when the configuration was saved with write-config. This results in spurious 'permanent' ndp entries when the written config is loaded. If you find spurious permanent ndp entries on your system these entries must be removed via 'no ndp <IPv6 address>', then use 'write-config' to save the fixed the configuration. Alternatively, remove all lines which set unwanted permanent NDP entries from /etc/nshrc and reboot. Problem reported and fix tested by Tom. ok Tom
Merge pull request #164 from smytht/systat-feature
add show system-stats commands Ok Stsp@
Update cmdargs.c
Use proper english :) initialised not initalized and give an informative error
add show system-stats commands
This is to allow nsh users to avail of systat functionality useful for queue stats and pf stats added full suite of systat features except nfs as I dont think those features are as interesting for a network appliance
version bump for release 1.2.3 (tags/v1.2.3)
don't skip empty lines in rules which store file contents
When file contents were stored in /etc/nshrc in a rules directive, such as contents of /etc/motd or sshd_config, empty lines were being stripped. ok Tom
make the rtable command actually update the rtable of the nsh process
The assumption that nsh always runs in rdomain 0 is invalid. Stop assuming that cli_rtable is set to zero by default, and switch the nsh process rdomain accordingly as needed. Tests + ok Tom
on startup, initialize cli_rtable to the current rdomain
Fixes behaviour when nsh starts in a non-default rdomain. We used to assume to start out in rdomain 0, which is not necessarily the case. ok Tom