summaryrefslogtreecommitdiff
path: root/lib/libfrr.c
AgeCommit message (Collapse)Author
2020-04-16Merge pull request #5451 from opensourcerouting/rcu-logSantosh P K
logging subsystem rewrite
2020-04-03lib, tools: silence harmless warnings in the northbound toolsRenato Westphal
Our two northbound tools don't have embedded YANG modules like the other FRR binaries. As such, ly_ctx_set_module_imp_clb() shouldn't be called when the YANG subsystem it being initialized by a northbound tool. To make that possible, add a new "embedded_modules" parameter to the yang_init() function to control whether libyang should look for embedded modules or not. With this fix, "gen_northbound_callbacks" and "gen_yang_deviations" won't emit "YANG model X not embedded, trying external file" warnings anymore. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2020-04-01lib: rewrite zlog lock-free & TLS-bufferedDavid Lamparter
This is a full rewrite of the "back end" logging code. It now uses a lock-free list to iterate over logging targets, and the targets themselves are as lock-free as possible. (syslog() may have a hidden internal mutex in the C library; the file/fd targets use a single write() call which should ensure atomicity kernel-side.) Note that some functionality is lost in this patch: - Solaris printstack() backtraces are ditched (unlikely to come back) - the `log-filter` machinery is gone (re-added in followup commit) - `terminal monitor` is temporarily stubbed out. The old code had a race condition with VTYs going away. It'll likely come back rewritten and with vtysh support. - The `zebra_ext_log` hook is gone. Instead, it's now much easier to add a "proper" logging target. v2: TLS buffer to get some actual performance Signed-off-by: David Lamparter <equinox@diac24.net>
2020-03-04*: Use true/false instead of 1/0 when assigning variable for bool typeDonatas Abraitis
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2019-12-06lib: new defaults logicDavid Lamparter
Since we've been writing out "frr version" and "frr defaults" for about a year and a half now, we can now actually use them to manage defaults. Signed-off-by: David Lamparter <equinox@diac24.net>
2019-12-06lib: add frr_version_cmp()David Lamparter
This just compares 2 version strings. Signed-off-by: David Lamparter <equinox@diac24.net>
2019-12-06lib: rename memory_vty.c to lib_vty.cDavid Lamparter
And memory_init() to lib_cmd_init(). Signed-off-by: David Lamparter <equinox@diac24.net>
2019-10-11lib: optimize loading of the startup configurationRenato Westphal
Load the startup configuration directly into the CLI shared candidate configuration instead of loading it into a private candidate configuration. This way we don't need to initialize the shared candidate separately later as a copy of the running configuration, which is a potentially expensive operation. Also, make the northbound process SIGHUP correctly even when --tcli is not used. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-09-18Revert "lib: introduce a read-write lock for northbound configurations"Renato Westphal
Adding a lock to protect the global running configuration doesn't help much since the FRR daemons are not prepared to process configuration changes in a pthread that is not the main one (a whole lot of new protections would be necessary to prevent race conditions). This means the lock added by commit 83981138 only adds more complexity for no benefit. Remove it now to simplify the code. All northbound clients, including the gRPC one, should either run in the main pthread or use synchronization primitives to process configuration transactions in the main pthread. This reverts commit 83981138fe8c1e0a40b8dede74eca65449dda5de.
2019-09-16lib: handle frr_pthread_init/fini in libfrr initQuentin Young
Make sure we are always cleaning init'ing and cleaning up pthread infra. Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-08-19*: Fix spelling errors pointed out by debian packagingDonald Sharp
Debian packaging when run finds a bunch of spelling errors: I: frr: spelling-error-in-binary usr/bin/vtysh occurences occurrences I: frr: spelling-error-in-binary usr/lib/frr/bfdd Amount of times Number of times I: frr: spelling-error-in-binary usr/lib/frr/bgpd occurences occurrences I: frr: spelling-error-in-binary usr/lib/frr/bgpd recieved received I: frr: spelling-error-in-binary usr/lib/frr/isisd betweeen between I: frr: spelling-error-in-binary usr/lib/frr/ospf6d Infomation Information I: frr: spelling-error-in-binary usr/lib/frr/ospfd missmatch mismatch I: frr: spelling-error-in-binary usr/lib/frr/pimd bootsrap bootstrap I: frr: spelling-error-in-binary usr/lib/frr/pimd Unknwon Unknown I: frr: spelling-error-in-binary usr/lib/frr/zebra Requsted Requested I: frr: spelling-error-in-binary usr/lib/frr/zebra uknown unknown I: frr: spelling-error-in-binary usr/lib/x86_64-linux-gnu/frr/libfrr.so.0.0.0 overriden overridden This commit fixes all of them except the bgp `recieved` issue due to it being part of json output. That one will need to go through a deprecation cycle. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-07-31lib: RCUDavid Lamparter
Please refer to doc/developer/rcu.rst for documentation. Signed-off-by: David Lamparter <equinox@diac24.net>
2019-07-29vtysh: only show error codes onceQuentin Young
When using `show error` commands, show errors shared between multiple daemons only once. Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-06-19lib,vtysh: Add vtysh commands for log-filterStephen Worley
Add vtysh commands to add/del/clear/show filters across all daemons and independently on each one. Add automake and clippy boilerplate for those commands as well. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2019-06-04*: Convert over to all -N namespace to change DAEMON_VTY_DIRDonald Sharp
When the user specifies -N namespace allow it to influence the frr_vtydir(DAEMON_VTY_DIR) to have namespace in it's path like so: $frrstate_dir/<namespace> Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-06-04lib: Allow -N to modify the zapi domain socketDonald Sharp
When using -z, allow that to override the zapi domain socket path. If using -N add the namespace name to the path to $frr_statedir/<namespace>/zserv.api. If you don't specify the -N or -z option then it is $frr_statedir/zserv.api Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-06-03No log commands (#3581)David Lamparter
No log commands
2019-05-31lib: Add '--command-log-always` to all daemons startupDonald Sharp
Add 'no log commands' cli and at the same time add a --command-log-always to the daemon startup cli. If --command-log-always is specified then all commands are auto-logged and the 'no log commands' form of the command is now ignored. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-05-31lib: vtypath_default could be overwrittenDonald Sharp
The vtypath_default variable had a possibility of being overwritten due to size constraints. This fixes this issue. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-05-29Merge pull request #4393 from donaldsharp/debug_allRenato Westphal
Debug all
2019-05-29lib: fix helpstring truncationQuentin Young
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-05-29lib: remove some strcpy, strcatQuentin Young
Replace with strlcpy, strlcat Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-05-28lib: Separate out the debug_init apiDonald Sharp
Separate out the debug_init api to have 2 functions: 1) Function to register a callback 2) Function to initiate the cli. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-04-26lib: introduce a read-write lock for northbound configurationsRenato Westphal
The upcoming gRPC-based northbound plugin will run on a separate pthread, and it will need to have access to the running configuration global variable. Introduce a rw-lock to control concurrent access to the running configuration. Add the lock inside the "nb_config" structure so that it can be used to protect candidate configurations as well (this might be necessary depending on the threading scheme of future northbound plugins). Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-04-18lib: don't initialize the northbound database in the unit testsRenato Westphal
Move call to nb_db_init() from nb_init() to frr_init() so that only the FRR daemons will initialize the northbound database. This should fix a few warnings when running some unit tests. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-02-25*: use proper bool initializers & fix comparisonsQuentin Young
- bools should be initialized with true/false - bools do not need to be compared Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-12-07lib: add support for confirmed commitsRenato Westphal
Confirmed commits allow the user to request an automatic rollback to the previous configuration if the commit operation is not confirmed within a number of minutes. This is particularly useful when the user is accessing the CLI through the network (e.g. using SSH) and any configuration change might cause an unexpected loss of connectivity between the user and the managed device (e.g. misconfiguration of a routing protocol). By using a confirmed commit, the user can rest assured the connectivity will be restored after the given timeout expires, avoiding the need to access the router physically to fix the problem. When "commit confirmed TIMEOUT" is used, a new "commit" command is expected to confirm the previous commit before the given timeout expires. If "commit confirmed TIMEOUT" is used while there's already a confirmed-commit in progress, the confirmed-commit timeout is reset to the new value. In the current implementation, if other users perform commits while there's a confirmed-commit in progress, all commits are rolled back when the confirmed-commit timeout expires. It's recommended to use the "configure exclusive" configuration mode to prevent unexpected outcomes when using confirmed commits. When an user exits from the configuration mode while there's a confirmed-commit in progress, the commit is automatically rolled back and the user is notified about it. In the future we might want to prompt the user if he or she really wants to exit from the configuration mode when there's a pending confirmed commit. Needless to say, confirmed commit only work for configuration commands converted to the new northbound model. vtysh support will be implemented at a later time. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27lib: introduce new northbound APIRenato Westphal
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-04Merge pull request #3098 from opensourcerouting/watchfrr-delayQuentin Young
tools/frr + watchfrr spring cleaning (southern hemisphere)
2018-10-02watchfrr, lib: cleanup & delay detachingDavid Lamparter
This cleans up watchfrr to be more "normal" like the other daemons in terms of what it does in main(), i.e. using the full frr_*() call set. Also, this changes the startup behaviour on watchfrr to stay attached on the daemon's parent process until startup is really complete. This should allow removing the "watchfrr.started" hack at some point. Signed-off-by: David Lamparter <equinox@diac24.net>
2018-10-02lib: print version information in libfrr.soDavid Lamparter
This makes libfrr.so executable to print its version info. This is useful if you need to check your libfrr.so matches your daemons. Signed-off-by: David Lamparter <equinox@diac24.net>
2018-09-22Revert "lib: Ensure FRR detects running of the second instance of a FRR ↵Donald Sharp
daemon, doesnot allow it to run." This reverts commit 6e23e5e9e16fb16aafb4ef05ceb3514a02147a21.
2018-09-13*: style for EC replacementsQuentin Young
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-09-13*: LIB_[ERR|WARN] -> EC_LIBQuentin Young
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-09-12Merge remote-tracking branch 'frr/master' into warningsDavid Lamparter
Conflicts: zebra/if_ioctl_solaris.c zebra/rtread_getmsg.c Signed-off-by: David Lamparter <equinox@diac24.net>
2018-09-11lib: whitespace/spelling fixDavid Lamparter
Signed-off-by: David Lamparter <equinox@diac24.net>
2018-09-06lib: Convert libfrr.c to use new error code systemDonald Sharp
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-09-06lib: Ensure FRR detects running of the second instance of a FRR daemon, ↵Biswajit Sadhu
doesnot allow it to run. Solution : The following procedures would be performed : 1. Verify if the pid file for each daemon is present or not. If the file is not present, that means the daemon is getting instantiated for the first time. So let it go ahead. If the file is present proceed to point ‘2’. 2. Try fetching the properties of the pid file. 3. If it has RW lock, that means one instance of this the daemon is already running. So stop moving ahead and do exit() else let it go ahead.
Please note all above procedure happen at the initial state of daemon’s instantiation, much before it starts any session with other process/allocates resources etc.. and this verification do not have any impact of any operations done later, if the verification succeeds. Signed-off-by: bisdhdh sadhub@vmware.com
2018-08-14*: rename ferr_zlog -> flog_err_sysQuentin Young
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-14*: rename ferr_ref -> log_refQuentin Young
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-14*: rename zlog_fer -> flog_errQuentin Young
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-14lib: remove still reachable blocks in ferr.cQuentin Young
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-14*: stop double initialization of ferrQuentin Young
* Stop double init of ferr * Fixup bugs in zebra ferr * Add missing init in ospfd Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-14lib: Cleanup some missed LIB_ERR_SYSTEM_CALLDonald Sharp
libfrr.c had some detection for system call issues. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-14lib, bgpd: Add code to make lib auto create the ferr infrastructureDonald Sharp
Add code to auto-create the ferr infrastructure as well as add some initial error handling for vrf.c Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-07-29lib: Set proper write file when using backup configDonald Sharp
When we read in a backup file, we should save the original host.config so that we can put it back to the correct original location after we read in the backup config. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-25lib: check return value (Coverity 1453456)paco
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-19lib: Add --log-level to daemonsDonald Sharp
Add the ability to specify the designated log level at startup. --log-level <emergencies|alerts|critical|errors|warnings|notifications|informational|debugging> Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-19lib: Remove special case code to use syslogDonald Sharp
Remove the special case code to use syslog for Cumulus. They can specify this via startup now instead of having a special compile flag for this option. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-19lib: Add new cli to specify where to output logs on startupDonald Sharp
When we are starting a daemon, allow the user to specify: --log <stdout|syslog|file:file_name> This can be used on early startup to put the log files where the end user wants them to show up. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>