summaryrefslogtreecommitdiffstats
path: root/lib/nexthop_group.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #12780 from opensourcerouting/spdx-license-idDonald Sharp2023-02-171-14/+1
|\ | | | | *: convert to SPDX License identifiers
| * *: auto-convert to SPDX License IDsDavid Lamparter2023-02-091-14/+1
| | | | | | | | | | | | Done with a combination of regex'ing and banging my head against a wall. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* | lib,sharpd: add ability for sharpd to install vni labelsStephen Worley2023-02-141-10/+22
| | | | | | | | | | | | | | | | | | | | Add the ability for sharpd to install vni labels for testing. This patch is just for testing/dev work purposes with evpn. It adds some code to vty for nexthop-groups so we can explicitly add a label to nexthops and then let sharpd encode them to zebra. Signed-off-by: Stephen Worley <sworley@nvidia.com>
* | lib,zebra,bgpd,staticd: use label code to store VNI infoStephen Worley2023-02-141-4/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | Use the already existing mpls label code to store VNI info for vxlan. VNI's are defined as labels just like mpls, we should be using the same code for both. This patch is the first part of that. Next we will need to abstract the label code to not be so mpls specific. Currently in this, we are just treating VXLAN as a label type and storing it that way. Signed-off-by: Stephen Worley <sworley@nvidia.com>
* | lib: add has_label function for nexthop groupsStephen Worley2023-02-141-0/+12
|/ | | | | | | Add a function nexthop_group_has_label() for determining if even a single nexthop in the group has a label on it. Signed-off-by: Stephen Worley <sworley@nvidia.com>
* *: Add ability for daemons to notice resilience changesDonald Sharp2022-11-041-0/+7
| | | | | | | | | This patch just introduces the callback mechanism for the resilient nexthop changes so that upper level daemons can take advantage of the change. This does nothing at this point but just call some code. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
* lib, vtysh: Add ability to specify resilient nhgsDonald Sharp2022-11-041-0/+51
| | | | | | | | | | | | Add the ability to specify a resilient nexthop group nexthop-group A resilient buckets 32 idle_timer 100 unbalanced_timer 500 nexthop 192.168.100.1 enp7s0 nexthop 192.168.100.33 enp7s0 nexthop 192.168.122.1 enp1s0 Signed-off-by: Donald Sharp <sharpd@nvidia.com>
* lib, zebra: Add ability to encode/decode resilient nhg'sDonald Sharp2022-11-041-0/+1
| | | | | | | Add ability to read the nexthop group resilient linux kernel data as well as write it. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
* build, vtysh: extract vtysh commands from .xrefDavid Lamparter2022-10-261-2/+0
| | | | | | | | | | | | | | | | | | | Rather than running selected source files through the preprocessor and a bunch of perl regex'ing to get the list of all DEFUNs, use the data collected in frr.xref. This not only eliminates issues we've been having with preprocessor failures due to nonexistent header files, but is also much faster. Where extract.pl would take 5s, this now finishes in 0.2s. And since this is a non-parallelizable build step towards the end of the build (dependent on a lot of other things being done already), the speedup is actually noticeable. Also files containing CLI no longer need to be listed in `vtysh_scan` since the .xref data covers everything. `#ifndef VTYSH_EXTRACT_PL` checks are equally obsolete. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* *: Replace sockunion2str => %pSUDonatas Abraitis2022-06-211-3/+1
| | | | Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
* *: Remove unused variablesDonatas Abraitis2021-11-181-1/+0
| | | | Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
* lib: Replace inet_ntop to %pI4/6 for JSON outputsDonatas Abraitis2021-11-181-12/+4
| | | | Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
* lib: remove wrong setting of interface configured flagIgor Ryzhov2021-10-151-7/+0
| | | | | | | The fact that the interface name is used in some nexthop config doesn't mean that the interface is configured. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
* *: explicitly print "exit" at the end of every node configIgor Ryzhov2021-08-231-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There is a possibility that the same line can be matched as a command in some node and its parent node. In this case, when reading the config, this line is always executed as a command of the child node. For example, with the following config: ``` router ospf network 193.168.0.0/16 area 0 ! mpls ldp discovery hello interval 111 ! ``` Line `mpls ldp` is processed as command `mpls ldp-sync` inside the `router ospf` node. This leads to a complete loss of `mpls ldp` node configuration. To eliminate this issue and all possible similar issues, let's print an explicit "exit" at the end of every node config. This commit also changes indentation for a couple of existing exit commands so that all existing commands are on the same level as their corresponding node-entering commands. Fixes #9206. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
* *: require semicolon after DEFINE_QOBJ & co.David Lamparter2021-03-171-1/+1
| | | | | | Again, see previous commits. Signed-off-by: David Lamparter <equinox@diac24.net>
* *: require semicolon after DEFINE_MTYPE & coDavid Lamparter2021-03-171-1/+1
| | | | | | | | | | | | | | | | | Back when I put this together in 2015, ISO C11 was still reasonably new and we couldn't require it just yet. Without ISO C11, there is no "good" way (only bad hacks) to require a semicolon after a macro that ends with a function definition. And if you added one anyway, you'd get "spurious semicolon" warnings on some compilers... With C11, `_Static_assert()` at the end of a macro will make it so that the semicolon is properly required, consumed, and not warned about. Consistently requiring semicolons after "file-level" macros matches Linux kernel coding style and helps some editors against mis-syntax'ing these macros. Signed-off-by: David Lamparter <equinox@diac24.net>
* lib: Convert inet_ntoa to %pI4Donatas Abraitis2020-10-221-10/+10
| | | | Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
* lib: remove nexthop_same_firsthop() apiStephen Worley2020-10-021-1/+1
| | | | | | | | | Remove the nexthop_same_firsthop() api and just call nexthop_same(). Not entirely sure why we were using this function in the first place, but now we are just marking dupes with it so lets just call a common function and avoid issues. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
* Revert "lib,sharpd,pbrd: `set installable` nhg command"Stephen Worley2020-09-281-47/+6
| | | | This reverts commit 1844f45e30913b27cfd875036f865a0edadcf244.
* lib,sharpd,pbrd: `set installable` nhg commandStephen Worley2020-09-281-6/+47
| | | | | | | | | | | Add a command `set installable` that allows configured nexthop groups to be treated as separate/installable objects in the RIB. A callback needs to be implemented per daemon to handle installing the NHG into the rib via zapi when this command is set. This patch includes the implementation for sharpd. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
* lib,doc: add `onlink` flag to nexthop group configStephen Worley2020-09-281-13/+29
| | | | | | Add an `onlink` flag to nexthop group configuration. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
* lib: Note old ifindex on shutdownDonald Sharp2020-08-281-0/+7
| | | | | | | | | | | | | | If we have an interface configured in a daemon on shutdown store the old ifindex value for retrieval on when it is possibly recreated. This is especially important for nexthop groups as that we had at one point in time the ability to restore the configuration but it was lost when we started deleting all deleted interfaces. We need the nexthop group subsystem to also mark that it has configured an interface. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* lib: Allow nexthop simple display to take an alternate ifp nameDonald Sharp2020-08-281-6/+12
| | | | | | | | | | | The nexthop_group_write_nexthop_simple function outputs the interface name, because we've stored the ifindex. The problem is that there are ephermeal interfaces in linux that can be destroyed/recreated. Allow us to keep that data and do something a bit smarter to allow show run's and other show commands to continue to work when the interface is deleted. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* lib: break up show nexthop API a bit for reuseStephen Worley2020-08-271-3/+10
| | | | | | | | Not everything cares about the vrf and backup info. Break up the API to add a simple version to just write gateway/interface info. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
* lib: fix crash in show nexthop when vrf deletedStephen Worley2020-08-181-1/+1
| | | | | | | Fix a crash where if we issue a show run after a vrf has been deleted we would crash here due to not null checking. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
* lib: support multiple backup nexthops in nexthop group cliMark Stapp2020-07-171-29/+51
| | | | | | | Revise the nexthop-group cli to support multiple backups for a single primary nexthop. Signed-off-by: Mark Stapp <mjs@voltanet.io>
* lib,sharpd,zebra: initial support for multiple backup nexthopsMark Stapp2020-07-171-3/+4
| | | | | | | | | | Initial changes to support a nexthop with multiple backups. Lib changes to hold a small array in each primary, zapi message changes to support sending multiple backups, and daemon changes to show commands to support multiple backups. The config input for multiple backup indices is not present here. Signed-off-by: Mark Stapp <mjs@voltanet.io>
* pbrd, lib: remember to free alloc'd qobj on deleteWesley Coakley2020-07-011-0/+1
| | | | Signed-off-by: Wesley Coakley <wcoakley@nvidia.com>
* pbrd, lib, doc: fix new `show` json key semanticsWesley Coakley2020-05-271-5/+5
| | | | | | | | | | | | Revise new `show pbr` keys to be consistent with existing json in other daemons target->nexthop id->tableId (where relevant) isValid->valid isInstalled->installed Signed-off-by: Wesley Coakley <wcoakley@cumulusnetworks.com>
* pbrd, lib: verbosity++ for json `show` directivesWesley Coakley2020-05-271-6/+6
| | | | | | | Increased the verbosity of the json keys and flattened the returned structure by removing superfluous keys. Signed-off-by: Wesley Coakley <wcoakley@cumulusnetworks.com>
* pbrd, lib: opt. json for `show pbr nexthop-group`Wesley Coakley2020-05-271-0/+54
| | | | Signed-off-by: Wesley Coakley <wcoakley@cumulusnetworks.com>
* *: move CLI node names to cmd_node->nameDavid Lamparter2020-04-161-0/+1
| | | | | | | And again for the name. Why on earth would we centralize this, just so people can forget to update it? Signed-off-by: David Lamparter <equinox@diac24.net>
* *: move CLI parent data to cmd_node->parent_nodeDavid Lamparter2020-04-161-0/+1
| | | | | | | Same as before, instead of shoving this into a big central list we can just put the parent node in cmd_node. Signed-off-by: David Lamparter <equinox@diac24.net>
* *: remove second parameter on install_node()David Lamparter2020-04-161-1/+3
| | | | | | | | | | There is really no reason to not put this in the cmd_node. And while we're add it, rename from pointless ".func" to ".config_write". [v2: fix forgotten ldpd config_write] Signed-off-by: David Lamparter <equinox@diac24.net>
* *: remove cmd_node->vtyshDavid Lamparter2020-04-161-1/+0
| | | | | | | The only nodes that have this as 0 don't have a "->func" anyway, so the entire thing is really just pointless. Signed-off-by: David Lamparter <equinox@diac24.net>
* *: clean up cmd_node initializersDavid Lamparter2020-04-161-3/+3
| | | | | | ... and use named assignments everywhere (so I can change the struct.) Signed-off-by: David Lamparter <equinox@diac24.net>
* lib: support replacement in the nexthop-group cliMark Stapp2020-04-071-27/+101
| | | | | | | | | Use more limited matching logic so that nexthops within a nexthop-group are unique based only on vrf, type, and gateway. Treat configuration of a nexthop that matches an existing nexthop as a replace operation. Signed-off-by: Mark Stapp <mjs@voltanet.io>
* lib: support backup nexthops in nexthop-groups and zapiMark Stapp2020-03-271-9/+81
| | | | | | | Add vty support for backup nexthops in nexthop groups. Capture backup nexthop info in zapi route messages. Signed-off-by: Mark Stapp <mjs@voltanet.io>
* zebra,lib: use const in more apisMark Stapp2020-03-271-0/+4
| | | | | | | | Use const with some args to ipaddr, zebra vxlan, mpls lsp, and nexthop apis; add some extra checks to some nexthop-related apis. Signed-off-by: Mark Stapp <mjs@voltanet.io>
* lib: use const in nexthop_group copy apiMark Stapp2020-02-251-1/+2
| | | | | | Add some const to the nhg copy api. Signed-off-by: Mark Stapp <mjs@voltanet.io>
* Merge pull request #5600 from sworleys/NHG-Depend-CrashMark Stapp2020-01-151-4/+0
|\ | | | | zebra: can't improve efficiency for recursive depends
| * lib,zebra: tighten up the nexthop_copy/nexthop_dup APIsStephen Worley2020-01-151-4/+0
| | | | | | | | | | | | | | | | | | | | | | | | Make the nexthop_copy/nexthop_dup APIs more consistent by adding a secondary, non-recursive, version of them. Before, it was inconsistent whether the APIs were expected to copy recursive info or not. Make it clear now that the default is recursive info is copied unless the _no_recurse() version is called. These APIs are not heavily used so it is fine to change them for now. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
* | lib: assert if someone adds to nexthop list to nhgStephen Worley2020-01-151-2/+3
|/ | | | | | | | | If someone tries to add a nexthop with a list of nexthops already attached to it, let's just assert. This standardizes the API to say we assume this is an individual nexthop you are appending to a group. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
* Merge pull request #5535 from opensourcerouting/santa-elfDonald Sharp2019-12-161-1/+1
|\ | | | | *: cleanup elves were here
| * lib: make some variables staticDavid Lamparter2019-12-131-1/+1
| | | | | | | | Signed-off-by: David Lamparter <equinox@diac24.net>
* | Merge pull request #5452 from mjstapp/fix_notify_nhgDonald Sharp2019-12-131-18/+63
|\ \ | |/ |/| zebra: align dplane notify processing with nhg work
| * lib,zebra: add api to enforce nexthop sort order when copyingMark Stapp2019-12-091-18/+63
| | | | | | | | | | | | | | | | | | | | | | Add an api that creates a copy of a list of nexthops and enforces the canonical sort ordering; consolidate some nhg code to avoid copy-and-paste. The zebra dplane uses that api when a plugin sets up a list of nexthops, ensuring that the plugin's list is ordered when it's processed in zebra. Signed-off-by: Mark Stapp <mjs@voltanet.io>
* | lib: Add weight to nexthop for nexthop-group nexthopsDonald Sharp2019-12-091-20/+35
|/ | | | | | | | | | | | | | Add the ability to read in the weight of a nexthop and store/handle it appropriately nexthop-group BLUE nexthop 192.168.201.44 weight 33 nexthop 192.168.201.45 weight 66 nexthop 192.168.201.46 weight 99 Is appropriately read in and handled as appropriate. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* Merge pull request #5439 from mjstapp/nhg_add_labelsRenato Westphal2019-12-061-19/+114
|\ | | | | lib: support labelled nexthops in nexthop_groups
| * lib: support labelled nexthops in nexthop_groupsMark Stapp2019-12-031-19/+114
| | | | | | | | | | | | | | | | Add support for labelled nexthops in nexthop-group vtysh configuration. Also update the PBR doc where the cli is described. Signed-off-by: Mark Stapp <mjs@voltanet.io>