summaryrefslogtreecommitdiff
path: root/nest
AgeCommit message (Collapse)Author
2024-07-05Wireguard: Initial commitMikael Magnusson
Use 51820 (default wireguard port) as default tunnel type.
2024-07-05TunnelEncaps: Initial commitMikael Magnusson
2024-06-27Additional CLI sockets may now be restrictedMaria Matejka
This allows to have one main socket for the heavy operations very restricted just for the appropriate users, whereas the looking glass socket may be more open. Implemented an idea originally submitted and requested by Akamai.
2024-06-27Additional CLI sockets can be now configured in the config fileMaria Matejka
If the user has such a need, they may configure additional sockets in the config file. This may work for e.g. some advanced access control.
2024-06-27CLI now has a configuration structureMaria Matejka
2024-05-29Lib: Use access() function attributeOndrej Zajicek
2024-05-28BFD: Fix build when BFD is disabledOndrej Zajicek
Move bfd_opts grammar inside BFD parser code to avoid dependences between nest and BFD grammars, which breaks when BFD build is disabled. Add dummy bfd_opts grammar rule, so protocols can use this nonterminal even with BFD disabled. Thanks to Yuri Honegger for the bugreport.
2024-04-16BFD: Set password per sessionKaterina Kubecova
2024-04-04OSPF: Allow loopback nexthop in OSPFv3-IPv4Ondrej Zajicek
In OSPFv3-IPv4 there is no requirement that link-local next hop announced in Link-LSA must be in interface address range. Therefore, for interfaces that do not have IPv4 address we can use some loopback IP address and announce it as a next hop. Also we should accept such address.
2024-03-25ASPA: checks done in filters; no autoreload yetMaria Matejka
2024-03-25ASPA: basic data structures and Static protocol supportMaria Matejka
2024-03-25Expanded usage of stdbool.h to the whole BIRDMaria Matejka
2024-03-05Client: Add support for completion of command optionsOndrej Zajicek
We can easily extend command completion to handle also keywords for command options. Help for command options is not yet supported.
2024-03-05Filter: Add route attribute gw_mpls_stackOndrej Zajicek
Add route attribute gw_mpls_stack to make MPLS stack of route nexthop accessible from filters. Its type is T_CLIST, which is really not correct (as it is a list, while T_CLIST is a set). Therefore, we keep this attribute *undocumented* and it will be *changed* without further notice. Based on a patch from Trisha Biswas <tbiswas@fastly.com>, thanks!
2024-02-14Filter: Add support for string route attributeOndrej Zajicek
2024-02-07BGP: Allow multiple EBGP neighbors with the same peer.Alexander Zubkov
We can distinguish BGP sessions if at least one side uses a different IP address. Extend olock mechanism to handle local IP as a part of key, with optional wildcard, so BGP sessions could local IP in the olock and not block themselves.
2024-01-27Nest: Fix bug in recursive routes with MPLS-labeled nexthopsOndrej Zajicek
When a recursive route with MPLS-labeled nexthop was exported to kernel and read back, the nexthop_same() failed due to different labels_orig field and kernel protocol reinstalled it unnecessarily. For comparing hext hops, route cache has to distinguish ones with different labels_orig, but KRT has to ignore that, so we need two nexthop compare functions. Thanks to Marcel Menzel for the bugreport.
2023-12-13Nest: Fix memory alignment in attribute cacheOndrej Zajicek
In attribute cache, adata structures were stored densely in one memory block, without regard to alignment. Let's force at least u32 alignment.
2023-12-08Merge commit 'bb094fb6'Maria Matejka
2023-12-08Refactoring also net_roa_checkMaria Matejka
Having 4 functions doing almost the same is more mess than three macros.
2023-12-08Merge commit '54ddf90f'Maria Matejka
2023-12-07Conf: debug tablesMaria Matejka
For now just a dummy config but it is needed for forward compatibility with v3.
2023-12-07Refactoring of net_routeMaria Matejka
2023-12-07Table: Adding route refresh begin and end debug messagesMaria Matejka
2023-10-25Nest: Minor fixes in MPLSOndrej Zajicek
2023-10-24Use RTA_MAX_SIZE in rta_do_cow()Ondrej Zajicek
This allows to modify MPLS label stack in filters. Fixes a bug in handling of 'gw_mpls' attribute.
2023-10-16MPLS: Fix issue with recursive MPLS routesOndrej Zajicek
Recursive MPLS routes used hostentry from the original route, which triggered different table than MPLS table, and therefore were not updated.
2023-10-05MPLS: Handle compatibility with old configsOndrej Zajicek
Old configs do not define MPLS domains and may use a static protocol to define static MPLS routes. When MPLS channel is the only channel of static protocol, handle it as a main channel. Also, define implicit MPLS domain if needed and none is defined.
2023-10-04MPLS: Update to support and use 64bit source idOndrej Zajicek
2023-10-04MPLS: Implement FEC map reconfigurationOndrej Zajicek
This allows changing label policy or label range without restart.
2023-10-04MPLS: Handle label allocation failuresOndrej Zajicek
2023-10-04MPLS: Improve handling of static label allocationsOndrej Zajicek
Use mpls_new_label() / mpls_free_label() also for static labels, to keep track of allocated labels and to enforce label ranges. Static label allocations always use static label range, regardless of configured label range.
2023-10-04Static: Add syntax for static MPLS labelsOndrej Zajicek
Instead of just using route attributes, static routes with static MPLS labels can be defined just by e.g.: route 10.1.1.0/24 mpls 100 via 10.1.2.1 mpls 200;
2023-10-04MPLS: Label range non-intersection checkOndrej Zajicek
2023-10-04MPLS: Improve label range reconfigurationOndrej Zajicek
Allow to shorten label range over unused area.
2023-10-04MPLS: Add command 'show mpls ranges'Ondrej Zajicek
Add command to show MPLS label ranges and their stats.
2023-10-04Nest: Fix missing RTS_* values in filtersOndrej Zajicek
2023-10-04L3VPN: BGP/MPLS VPNs using MPLS backboneOndrej Zajicek
The L3VPN protocol implements RFC 4364 BGP/MPLS VPNs using MPLS backbone. It works similarly to pipe. It connects IP table (one per VRF) with (global) VPN table. Routes passed from VPN table to IP table are stripped of RD and filtered by import targets, routes passed in the other direction are extended with RD, MPLS labels and export targets in extended communities. A separate MPLS channel is used to announce MPLS routes for the labels.
2023-10-04MPLS: Add support for per-VRF labeling policyOndrej Zajicek
The new labeling policy MPLS_POLICY_VRF assigns one label to all routes (from the same FEC map associated with one VRF), while replaces their next hops with a lookup to a VRF table. This is useful for L3VPN protocol.
2023-10-04MPLS subsystemOndrej Zajicek
The MPLS subsystem manages MPLS labels and handles their allocation to MPLS-aware routing protocols. These labels are then attached to IP or VPN routes representing label switched paths -- LSPs. There was already a preliminary MPLS support consisting of MPLS label net_addr, MPLS routing tables with static MPLS routes, remote labels in next hops, and kernel protocol support. This patch adds the MPLS domain as a basic structure representing local label space with dynamic label allocator and configurable label ranges. To represent LSPs, allocated local labels can be attached as route attributes to IP or VPN routes with local labels as attributes. There are several steps for handling LSP routes in routing protocols -- deciding to which forwarding equivalence class (FEC) the LSP route belongs, allocating labels for new FECs, announcing MPLS routes for new FECs, attaching labels to LSP routes. The FEC map structure implements basic code for managing FECs in routing protocols, therefore existing protocols can be made MPLS-aware by adding FEC map and delegating most work related to local label management to it.
2023-10-02Nest: Expand rte_src.private_id to u64Ondrej Zajicek
In general, private_id is sparse and protocols may want to map some internal values directly into it. For example, L3VPN needs to map VPN route discriminators to private_id. OTOH, u32 is enough for global_id, as these identifiers are dense.
2023-09-26Basic route aggregationIgor Putovny
Add a new protocol offering route aggregation. User can specify list of route attributes in the configuration file and run route aggregation on the export side of the pipe protocol. Routes are sorted and for every group of equivalent routes new route is created and exported to the routing table. It is also possible to specify filter which will run for every route before aggregation. Furthermore, it will be possible to set attributes of new routes according to attributes of the aggregated routes. This is a work in progress. Original work by Igor Putovny, subsequent cleanups and finalization by Maria Matejka.
2023-09-12Conf: Symbol manipulation gets its context explicitlyMaria Matejka
2023-09-12Conf: Symbol hashes for all scopesMaria Matejka
This is a backport cherry-pick of commits 165156beeb2926472bbceca3c103aacc3f81a8cc cce974e8ea992d0e6d2f649eca7880b436d91d71 from the v3.0 branch as we need symbol hashes directly inside their scopes for more general usage than before.
2023-08-25Conf: Allow keywords to be redefined by user symbolsOndrej Zajicek
Most syntactic constructs in BIRD configuration (e.g. protocol options) are defined as keywords, which are distinct from symbols (user-defined names for protocols, variables, ...). That may cause backwards compatibility issue when a new feature is added, as it may collide with existing user names. We can allow keywords to be shadowed by symbols in almost all cases to avoid this issue. This replaces the previous mechanism, where shadowable symbols have to be explictly added to kw_syms.
2023-08-25Nest: Fix missing bar in kw_symOndrej Zajicek
Thanks to Alexander Zubkov for the notice.
2023-08-24Conf: Use nonterminal bytestring instead of BYTETEXTOndrej Zajicek
Nonterminal bytestring allows to provide expressions to be evaluated in places where BYTETEXT is used now: passwords, radv custom option. Based on the patch from Alexander Zubkov <green@qrator.net>, thanks!
2023-08-24Filter: Use more generic approach for intra-config expressionsAlexander Zubkov
Replace f_eval_int() function with a type-generic variant: cf_eval(). Implement similar fuction: cf_eval_int() via inline call to cf_eval().
2023-08-24Filter: Add bytestring typeAlexander Zubkov
- Rename BYTESTRING lexem to BYTETEXT, not to collide with 'bytestring' type name - Add bytestring type with id T_BYTESTRING (0x2c) - Add from_hex() filter function to create bytestring from hex string - Add filter test cases for bytestring type Minor changes by committer.
2023-08-23Nest: Treat VRF interfaces as inside respective VRFsOndrej Zajicek
Despite not having defined 'master interface', VRF interfaces should be treated as being inside respective VRFs. They behave as a loopback for respective VRFs. Treating the VRF interface as inside the VRF allows e.g. OSPF to pick up IP addresses defined on the VRF interface. For this, we also need to tell apart VRF interfaces and regular interfaces. Extend Netlink code to parse interface type and mark VRF interfaces with IF_VRF flag. Based on the patch from Erin Shepherd, thanks!