summaryrefslogtreecommitdiff
path: root/lib/northbound.h
AgeCommit message (Collapse)Author
2025-04-10lib: nb: add list_entry_done() callback to free resourcesChristian Hopps
The existing iteration callback only allows for a daemon to return a pointer to objects that must already exist and must continue to exists indefinitely. To allow the daemon to return allocated iterator objects and for locking it's container structures we need a callback to tell the daemon when FRR is done using the returned value, so the daemon can free it (or unlock etc) That's what list_entry_done() is for. Signed-off-by: Christian Hopps <chopps@labn.net>
2025-02-26lib: nb: notification add locking support for multi-threadingChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2025-02-24lib: northbound: support pre-built oper state in libyang treeChristian Hopps
This also fixes a bug with specific (position specified) queries on keyless lists. If the `get_next` callback is using the parent entry it will probably crash as the code is passing the list_entry as both parent and child in the specific lookup case. There may currently be no code that uses the parent entry if the child entry is non-NULL, though. Signed-off-by: Christian Hopps <chopps@labn.net>
2025-02-14lib: nb: call child destroy CBs when YANG container is deletedChristian Hopps
Previously the code was only calling the child destroy callbacks if the target deleted node was a non-presence container. We now add a flag to the callback structure to instruct northbound to perform the rescursive delete for code that wishes for this to happen. - Fix wrong relative path lookup in keychain destroy callback Signed-off-by: Christian Hopps <chopps@labn.net>
2025-01-18lib: mgmt_be_client handles datastore notification using CBsChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2025-01-14lib: northbound/mgmtd: add backend model supportChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2025-01-13mgmtd: add notify selectors to filter datastore notificationsChristian Hopps
- Additionally push the selectors down to the backends Signed-off-by: Christian Hopps <chopps@labn.net>
2025-01-13lib: notify on datastore (oper-state) changesChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2025-01-13lib: northbound: add basic oper-state update functionsChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2025-01-07Merge pull request #17772 from LabNConsulting/chopps/fix-oper-walkDonald Sharp
improve error handling of operational state walk callback
2025-01-07lib: northbound: add new get() callback to add lyd_node direcltyChristian Hopps
This allows eliminating the superfluous yang_data object (which is getting created used to call lyd_new_term then deleted). Instead just call lyd_new_term() in the callback directly. Signed-off-by: Christian Hopps <chopps@labn.net>
2025-01-06lib: change and improve walk finish callback function APIChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2024-10-07lib: add flag to have libyang load internal ietf-yang-library moduleChristian Hopps
Mgmtd makes use of libyang's internal ietf-yang-library module to add support for said module to FRR management. Previously, mgmtd was loading this module explicitly; however, that required that libyang's `ietf-yang-library.yang` module definition file be co-located with FRR's yang files so that it (and ietf-datastore.yang) would be found when searched for by libyang using FRRs search path. This isn't always the case depending on how the user compiles and installs libyang so mgmtd was failing to run in some cases. Instead of doing it the above way we simply tell libyang to load it's internal version of ietf-yang-library when we initialize the libyang context. This required adding a boolean to a couple of the init functions which is why so many files are touched (although all the changes are minimal). Signed-off-by: Christian Hopps <chopps@labn.net>
2024-09-17mgmtd: add ietf-yang-library supportChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2024-09-17lib: mgmtd: add `changed` and `created` to edit-reply msgChristian Hopps
- This is used for various return values in RESTCONF Signed-off-by: Christian Hopps <chopps@labn.net>
2024-09-17lib: mgmtd: cleanup error value for native messagingChristian Hopps
- Now if positive it's libyang LY_ERR, otherwise it's `-errno` value. Signed-off-by: Christian Hopps <chopps@labn.net>
2024-08-27lib: common debug config outputIgor Ryzhov
Implement common code for debug config output and remove daemon-specific code that is duplicated everywhere. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-08-27lib: rework debug initIgor Ryzhov
The debug library allows to register a `debug_set_all` callback which should enable all debugs in a daemon. This callback is implemented exactly the same in each daemon. Instead of duplicating the code, rework the lib to allow registration of each debug type, and implement the common code only once in the lib. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-04-22lib: rework northbound RPC callbackIgor Ryzhov
Change input/output arguments of the RPC callback from lists of (xpath/value) tuples to YANG data trees. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-04-22Merge pull request #15468 from idryzhov/mgmt-native-editChristian Hopps
mgmtd: add support for native 'edit' operation
2024-03-26mgmtd: add support for native 'edit' operationIgor Ryzhov
This operation basically implements support for RESTCONF operations. It receives an xpath and a data tree in JSON/XML format, instead of a list of (xpath, value) tuples as required by the current protobuf interface. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-03-15*: remove confd pluginIgor Ryzhov
ConfD is not supported anymore and its use is discouraged by developers: https://discuss.tail-f.com/t/confd-premium-no-longer-available-future-of-confd/4552/6 Remove the code and all mentions of ConfD from the documentation. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-02-15lib: always call new notification hooks tooChristian Hopps
- call the new notification hooks when backends call the old notification posting API. Signed-off-by: Christian Hopps <chopps@labn.net>
2024-02-11lib, mgmtd: rework processing of yang notificationsIgor Ryzhov
Currently, YANG notification processing is done using a special type of callbacks registered in backend clients. In this commit, we start using regular northbound infrastructure instead, because it already has a convenient way of registering xpath-specific callbacks without the need for creating additional structures for each necessary notification. We also now pass a notification data to the callback, instead of a plain JSON. This allows to use regular YANG library functions for inspecting notification fields, instead of manually parsing the JSON. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-01-30lib: mgmtd: add YANG notification supportChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2024-01-28lib, mgmtd, zebra: cleanup of zebra conversion to mgmtdIgor Ryzhov
- use `apply_finish` callback when possible to avoid multiple applies per commit - move table range working to the CLI handler - remove unnecessary conditional compilation - remove unnecessary boolean conversion Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-01-28lib: add support for "features" when loading YANG modulesIgor Ryzhov
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-01-23lib: remove leaf-list xpath hack from northboundIgor Ryzhov
Currently, when editing a leaf-list, `nb_candidate_edit` expects to receive it's xpath without a predicate and the value in a separate argument, and then creates the full xpath. This hack is complicated, because it depends on the operation and on the caller being a backend or not. Instead, let's require to always include the predicate in a leaf-list xpath. Update all the usages in the code accordingly. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-01-19mgmtd: remove heavy duplication in mgmtd config readChristian Hopps
Previously each container created all it's decendents before descending into the children and repeating the process. Signed-off-by: Christian Hopps <chopps@labn.net>
2024-01-19lib: better conditionalize leaf-list predicate xpath additionChristian Hopps
If we're in the backend we already have the predicate added by mgmtd -- don't add it again. Signed-off-by: Christian Hopps <chopps@labn.net>
2024-01-12Merge pull request #14542 from idryzhov/nb-op-cb-splitChristian Hopps
Add more northbound operation types
2024-01-11lib, mgmtd: rename ignore_cbs to ignore_cfg_cbsIgor Ryzhov
Setting this variable to true makes NB ignore only configuration-related callbacks. CLI-related callbacks are still loaded and executed, so rename the variable to make it clearer. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-01-11lib: explain semantics of northbound operationsIgor Ryzhov
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-01-11mgmt, lib: implement REPLACE operationIgor Ryzhov
Replace operation removes the current data node configuration and sets the provided value. As current northbound code works only with one xpath at a time, the operation only makes sense to clear the config of a container without deleting it itself. However, the next step is to allow passing JSON-encoded complex values to northbound operations which will make replace operation much more useful. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-01-11mgmt, lib: differentiate DELETE and REMOVE operationsIgor Ryzhov
Currently, there's a single operation type which doesn't return error if the object doesn't exists. To be compatible with NETCONF/RESTCONF, we should support differentiate between DELETE (fails when object doesn't exist) and REMOVE (doesn't fail if the object doesn't exist). Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-01-11mgmtd, lib: implement CREATE_EXCL operationIgor Ryzhov
Currently, there's no difference between CREATE and MODIFY operations. To be compatible with NETCONF/RESTCONF, add new CREATE_EXCL operation that throws an error if the configuration data already exists. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-01-11lib: split nb_operation into two typesIgor Ryzhov
Currently, nb_operation enum means two different things - edit operation type (frontend part), and callback type (backend part). These types overlap, but they are not identical. We need to add more operation types to support NETCONF/RESTCONF integration, so it's better to have separate enums to identify different entities. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-01-07lib: mgmtd: implement full XPath 1.0 predicate functionalityChristian Hopps
Allow user to specify full YANG compatible XPath 1.0 predicates. This allows for trimming results of generic queries using functions and other non-key predicates from XPath 1.0 Signed-off-by: Christian Hopps <chopps@labn.net>
2024-01-04lib: remove unused/replaced oper-state iteration codeChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2023-12-28lib: northbound: add yielding and batching to oper-state queriesChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2023-12-28lib: create and use libyang tree during oper-state walkChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2023-11-12lib, mgmtd: respect base xpath in mgmtdIgor Ryzhov
`nb_cli_apply_changes` can be called with base xpath which should be prepended to xpaths of every change in a transaction. This base xpath is respected by regular northbound CLI but not by mgmtd. This commit fixes the problem. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2023-10-06mgmt: delete candidate scratch bufferIgor Ryzhov
The code doesn't work at all. It tries to use libyang operation metadata in a regular (not diff) data tree, and regular data trees don't provide this data. Also, for destroy operations, it searches for nodes in the running config, which may not have the deleted nodes if we're not using implicit commits. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2023-03-24*: Convert event.h to frrevent.hDonald Sharp
We should probably prevent any type of namespace collision with something else. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-03-24*: Convert `struct event_master` to `struct event_loop`Donald Sharp
Let's find a better name for it. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-03-24*: Convert struct thread_master to struct event_master and it's ilkDonald Sharp
Convert the `struct thread_master` to `struct event_master` across the code base. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-03-24*: Rename thread.[ch] to event.[ch]Donald Sharp
This is a first in a series of commits, whose goal is to rename the thread system in FRR to an event system. There is a continual problem where people are confusing `struct thread` with a true pthread. In reality, our entire thread.c is an event system. In this commit rename the thread.[ch] files to event.[ch]. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-03-22lib: staticd: vtysh: apply frrbot style requirementsChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2023-03-21mgmtd: Add MGMT Transaction FrameworkYash Ranjan
This commit introduces the MGMT Transaction framework that takes management requests from one (or more) frontend client sessions, translates them into transactions and drives them to completion in co-oridination with one (or more) backend client daemons involved in the request. This commit includes the following functionalities in the changeset: 1. Introduces the actual Transaction module. Commands added related to transaction are: a. show mgmt transaction all 2. Adds support for commit rollback feature which stores upto the 10 commit buffers. Each commit has a commit-id which can be used to rollback to the exact configuration state. Commands supported for this feature are: a. show mgmt commit-history b. mgmt rollback commit-id COMMIT_ID 3. Add hidden commands to enable record various performance metrics: a. mgmt performance-measurement b. mgmt reset-statistic Co-authored-by: Pushpasis Sarkar <pushpasis@gmail.com> Co-authored-by: Abhinay Ramesh <rabhinay@vmware.com> Co-authored-by: Ujwal P <ujwalp@vmware.com> Signed-off-by: Yash Ranjan <ranjany@vmware.com>
2023-03-21mgmtd: Add MGMT Backend Interface FrameworkChristian Hopps
This commit introduces the MGMT Backend Interface which can be used by back-end management client daemons like BGPd, Staticd, Zebra to connect with new FRR Management daemon (MGMTd) and utilize the new FRR Management Framework to let any Frontend clients to retrieve any operational data or manipulate any configuration data owned by the individual Backend daemon component. This commit includes the following functionalities in the changeset: 1. Add new Backend server for Backend daemons connect to. 2. Add a C-based Backend client library which can be used by daemons to communicate with MGMTd via the Backend interface. 3. Maintain a backend adapter for each connection from an appropriate Backend client to facilitate client requests and track one or more transactions initiated from Frontend client sessions that involves the backend client component. 4. Add the following commands to inspect various Backend client related information a. show mgmt backend-adapter all b. show mgmt backend-yang-xpath-registry c. show mgmt yang-xpath-subscription Co-authored-by: Pushpasis Sarkar <pushpasis@gmail.com> Co-authored-by: Abhinay Ramesh <rabhinay@vmware.com> Co-authored-by: Ujwal P <ujwalp@vmware.com> Signed-off-by: Yash Ranjan <ranjany@vmware.com>