summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaria Matejka <mq@ucw.cz>2023-04-14 11:37:23 +0200
committerMaria Matejka <mq@ucw.cz>2023-04-14 11:37:23 +0200
commiteb978f3a8357e53fcfeede1caf355e80d782ca6a (patch)
tree511b3f1701c7f316fd472d37a3e392156aa5c3f0
parenta1fcd1c57a06baa99c38af4263f4845c9dba466e (diff)
parent0851fcde651301a886fefc574a4f739bf68119b9 (diff)
Merge commit '0851fcde' into thread-next-iface
-rw-r--r--Makefile.in9
-rw-r--r--doc/roadmap.md307
-rw-r--r--nest/Makefile4
3 files changed, 315 insertions, 5 deletions
diff --git a/Makefile.in b/Makefile.in
index 95ab1489..839efe24 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -161,10 +161,11 @@ $(client) $(daemon):
$(Q)$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
$(objdir)/sysdep/paths.h: Makefile
- echo >$@ "/* Generated by Makefile, don't edit manually! */"
- echo >>$@ "#define PATH_CONFIG_FILE \"@CONFIG_FILE@\""
- echo >>$@ "#define PATH_CONTROL_SOCKET \"@CONTROL_SOCKET@\""
- if test -n "@iproutedir@" ; then echo >>$@ "#define PATH_IPROUTE_DIR \"@iproutedir@\"" ; fi
+ $(E)echo GEN $@
+ $(Q)echo >$@ "/* Generated by Makefile, don't edit manually! */"
+ $(Q)echo >>$@ "#define PATH_CONFIG_FILE \"@CONFIG_FILE@\""
+ $(Q)echo >>$@ "#define PATH_CONTROL_SOCKET \"@CONTROL_SOCKET@\""
+ $(Q)if test -n "@iproutedir@" ; then echo >>$@ "#define PATH_IPROUTE_DIR \"@iproutedir@\"" ; fi
# Unit tests rules
diff --git a/doc/roadmap.md b/doc/roadmap.md
new file mode 100644
index 00000000..f6b9d475
--- /dev/null
+++ b/doc/roadmap.md
@@ -0,0 +1,307 @@
+# Project roadmap
+
+## Planned for 2023
+
+### SNMP AgentX plugin for BIRD status export
+Allow for easier status monitoring.
+
+### BGP Monitoring Protocol (BMP)
+BGP Monitoring Protocol (RFC 7854) is a protocol between a BGP speaker and
+a monitoring node, which is notified about route updates and neighbor state
+changes of the BGP speaker.
+
+### Better coverage of automatic tests
+Functionality tests should cover more possible configurations and
+combinations. Integration tests should run automatically between different OS
+versions and HW architectures. Experimental support for performance regression tests.
+
+### Release 3.0-alpha1
+Missing: MRT, merging
+
+### Show BFD sessions details
+CLI command showing detailed information about BFD sessions state
+
+### Review and merge Babel extended next hop patches (RFC 9229)
+Babel extension to allow IPv4 routes with IPv6 next hop. Patch on mailing list.
+
+### Consolidate protocol statistics
+Consolidate protocol statistics, make them useful for SNMP plugin and implement
+'show XX stats' command.
+
+### TCP-AO if it appears in Linux and BSD upstream
+Resolve whether we should or shouldn't control the kernel key management.
+Design and implement our side for both Linux and BSD.
+
+### Conditional routes (v3)
+Filters should be extended to allow conditional expressions based on a number of
+matching routes in a routing table. This would allow to specify aggregate routes
+using a static protocol and conditions like 'if there is at least 1000 routes
+from this BGP protocol, accept this default route'. This feature comes handy
+when a router needs to detect whether its BGP upstream is alive and working.
+Based of number of routes received, the router can then announce or retract a
+default route to OSPF, making multi-exit network routing simpler and more
+effective.
+
+### Aggregating routes
+Requested by customer: aggregating multiple routes by a common set of attributes.
+
+Implementation choice: the user specifies
+
+ EXPORT filter before aggregation AGGREGATE ON list of expressions to compare MERGE what to do with the remaining attributes
+
+Example usage:
+
+* aggregating information from multiple internal BGP routes into one external
+* creating a multipath route from multiple BGP routes (currently done by MERGE PATHS)
+* (in future) computing a minimal route set for kernel to make forwarding faster instead of writing the received full BGP set there
+
+### PREF64 option in RA (RFC 8781)
+Inform hosts about prefix used to synthesize NAT64 addresses. Requested in list:
+http://trubka.network.cz/pipermail/bird-users/2022-November/016401.html
+
+### Logging via UDP
+Got a patch, probably never merged. May be useful.
+http://trubka.network.cz/pipermail/bird-users/2022-January/015893.html
+
+### BGP Tunnel Encapsulation Attribute (RFC 9012)
+Packets sent to BGP next hop may be encapsulated using various tunnel
+technologies. Useful for L3VPN.
+
+### BGP AS Cones and ASPA support
+Extend the RPKI protocol with AS Cones and ASPA loading. Implement AS Cones
+and ASPA validation routines. There may be some pending patches from QRator.
+
+### DHCPv6 relay agent
+DHCPv6 relay agents (RFC 8415, RFC 8987) forward DHCPv6 messages between clients and
+servers. They also ensure that prefixes delegated by DHCPv6-PD are routable,
+i.e. they should generate routes for these prefixes.
+
+### Nexthop attributes and ECMP filtering
+Currently we have route attributes, but with ECMP routes it is necessary to
+store per-nexthop data (like weight or encapsulation). We also do not have
+proper way to manipulate with multiple nexthops from filters. Attributes should
+be extended to allow per-nexthop ones and filters should be extended to allow
+access multiple nexthops and their attributes.
+
+### Performance accounting
+Extended internal statistics about time spent in different modules of BIRD. If
+the route server admin checks why it takes 15 minutes to converge, this should
+give some basic info about performance. [MM: Internally needed by 3.0, already in progress]
+
+### MPLS support
+Finalize and merge improved MPLS infrastructure (including MPLS label allocator
+and supporting code), improve its reconfiguration support and support for
+segment routing.
+
+### BGP Segment Routing Extension (RFC 8669)
+Receive and announce Segment Identifiers (SIDs) for BGP next hops.
+
+## Backlog for following years
+
+*The order of these items is not significant.*
+
+### Flowspec attribute filtering
+Flowspec routes have many parameters, but these are not accessible from filters.
+Filters should be extended to access all these attributes, but first it is
+necessary to cleanup attribute handling in filters.
+
+### BGP Optimal Route Reflection (RFC 9107)
+Implement BGP best route selection on route reflectors to adhere to POV of
+client, not RR. Also requested by somebody, don't remember who and when.
+
+### OSPF Traffic engineering extensions (RFC 3630)
+Requested in list. May include lots of other RFC's as we have neglected this
+feature for a long time.
+http://trubka.network.cz/pipermail/bird-users/2022-January/015911.html
+
+### IPv6 preference in documentation (?)
+Address world's reluctance of legacy IPv4 deprecation by updating the
+documentation in such a way that IPv6 is preferred and first seen.
+
+### BGP local prefix leak prevention (?)
+Reject local prefixes on eBGP sessions by default to prevent leaks to public Internet.
+Unless explicitly enabled by config, of course.
+
+### Re-bogonization of 240/4 legacy range (?)
+We shouldn't believe that every operator does the
+filtering right and they could simply rely on pre-2.0.10 behavior which
+filtered this out by default.
+
+### IPv4 multicast
+Basic infrastructure for IPv4 multicast routing, including nettypes for
+multicast routes and multicast requests, multicast kernel protocol and IGMPv2
+protocol.
+
+### PIM-BIDIR
+Bidirectional PIM (RFC 5015) is a multicast routing protocol, variant of PIM-SM.
+It uses bidirectional shared trees rooted in Rendezvous Point (RP) to connect
+sources and receivers.
+
+There is an old branch containing this. We should have merged this years ago.
+
+### Improved VRF support
+BIRD has working VRF support, but it needs improvements. VRF entities should be
+first-class objects with explicit configuration, with a set of properties and
+default values (like default routing tables, or router ID) for associated
+protocols. Default kernel table ID should be autodetected. There should be
+better handling of VRF route leaking - when a route is propagated between VRFs,
+its nexthop should reflects that. Setup of VRFs in OS is out of scope.
+
+### Linux kernel nexthop abstraction
+Netlink allows setting nexthops as objects and using them in routes. It should
+be much faster than conventional route update.
+
+### Protocol attributes for filtering
+Filters can access route attributes, but sometimes it could be useful to access
+attributes of associated protocol (like neighbor-as or neighbor-ip for BGP
+protocol). But it would require to have internal object model (below) first,
+as we do not want to implement it independently for each protocol attribute.
+
+### Mutable static routes
+Extension to the static protocol that would allow to add/remove/change static
+routes from CLI.
+
+### Multipipe
+Pipe-like protocol: When a route is exported to this protocol, it runs its
+filter extended with capability to announce any number of new routes to any
+table from one filter run. Its primary purpose is to allow user-specified
+route aggregation and other non-linear operations.
+
+### BGP minimum route advertisement interval (MRAI)
+BGP specifies minimum interval between route advertisements for the same
+network. This is not implemented in BIRD. It should be implemented for 3.0 to
+avoid unnecessary re-routing spikes.
+
+### OSPF unnumbered interfaces
+The OSPFv2 protocol allows interfaces that do not have proper IP range but have
+peer IP addresses (like PtP links). It should be extended to also allow true
+unnumbered interfaces with no addresses (by using an IP address from some
+loopback device). This would require to have stricter separation between IP
+addresses and interfaces in OSPFv2.
+
+### OSPF Segment Routing Extension (RFC 8665)
+MPLS label distribution using segment routing and simple OSPF extension.
+
+### MPLS Label Distribution Protocol (LDP)
+Label Distribution Protocol (RFC 5036) is a protocol for establishing
+label-switched paths and distributing of MPLS labels between MPLS routers.
+These paths and labels are based on existing unlabeled routing information.
+
+### IPv6 multicast
+Basic infrastructure for IPv6 multicast routing, including nettypes for
+multicast routes and multicast requests, multicast kernel protocol and MLDv1
+protocol. Most of these (with the exception of MLDv1) is just a variant of
+IPv4 multicast.
+
+### IGMP/MLD multicast proxy
+A simple IGMP/MLD multicast proxy, which sends IGMP/MLD requests on a configured
+uplink interface based on received requests on downlink interfaces, and updates
+associated multicast routes.
+
+### Source-specific multicast (SSM)
+Infrastructure for multicasts should be extended to handle source-specific
+multicasts. Extend multicast nettypes to include source addresses, handle them
+in multicast kernel protocols and implement IGMPv3/MLDv2 protocols.
+
+### PIM-SSM
+PIM-SSM is a source-specific multicast routing protocol, a subset of PIM-SM
+protocol (RFC 7761). It is restricted to source-specific multicasts, which
+eliminates many problematic parts of PIM-SM.
+
+### Seamless BFD
+New version of BFD negotiation defined in RFC 7880-7886 enables faster
+continuity tests by dissemination discriminators by the governing protocols.
+
+### OSPF Graceful Link Shutdown
+To enable seamless maintenance of single links, OSPF can advertise such a link
+getting down in advance, allowing to re-route. Defined in RFC 8379.
+
+## Long-term
+
+### Internal object model
+We need to define explicit internal object model, where existing objects
+(protocols, channels, tables, routes, interfaces ...) and their properties are
+described in a way that allows introspection sufficient for implementing
+features (control protocol, CLI, filter access, perhaps reconfiguration) in a
+generic manner.
+
+### Generic configuration model
+Configuration options are implicitly defined by the configuration parsing code.
+We need to define explicit configuration model independent of the parsing code
+and generic parsing code using that model. This will allow uniform validation of
+configuration properties, generic access to configuration from control protocol
+and possibly independent configuration backends (like one for Netconf).
+
+### New control protocol
+BIRD should have a well-documented machine readable protocol. Requirements for
+such protocol are:
+
+* Generic machine readable abstract-tree representation (like CBOR)
+* Both request/reply and subscribe/notify access patterns
+* Access objects and properties using internal object model
+* In-band introspection based on internal object model
+
+From Maria's notes:
+
+* CBOR-based protocol for both control and route exports
+* Python3 library with example implementation of CLI
+* (maybe) Ansible modules
+* RFC 9164: CBOR tags for IP addresses and prefices
+* RFC 9254: YANG-CBOR mapping
+* RFC 9277: Stable storage of CBOR (files)
+
+## Perhaps
+
+### IS-IS
+IS-IS routing protocol is a nice-to-have alternative to OSPF.
+
+### BGPsec
+BGPsec (RFC 8205) is a new path security extension to BGP.
+
+### PIM-SM
+PIM-SM (RFC 7761) is a prevailing multicast routing protocol, but more
+complicated than planned PIM-BIDIR and PIM-SSM.
+
+### Netconf
+Network Configuration Protocol (RFC 6241) is a XML/JSON protocol for
+configuration management of network devices. It would benefit from generic
+configuration model (above).
+
+### NetConf overlay
+Machine-friendly config file editor daemon (standalone) with standard NetConf
+interface on one side and BIRD config file + reconfiguration requests on the
+other side. Python3 seems to be better choice than C for this kind of work.
+
+### Backend for 802.11r
+Let's assume a bunch of boxes, all having some public wifi APs and some (secure) uplinks.
+Design and implement an automatic backbone protocol to allow for simple almost-zeroconf
+setup of e.g. a conference room or train / bus public wifi or even a local home network,
+all with hostapd seamlessly transferring clients between APs via 802.11r.
+Possible collab with Turris.
+
+### BFD Multipoint Connectivity
+Checking whether multiple "receivers" can communicate with a single "sender".
+Possibly useful after merging PIM-BIDIR and implementing other PIMs. RFC 8562-8563.
+
+### BGP Link State extension
+BGP-LS allows to transport information about network topology across BGP links.
+This should help e.g. to run traffic-engineering between more confederated ASs.
+Also needed to implement Seamless BFD on BGP: RFC 9247
+
+### Locator/ID Separation Protocol
+LISP intends to break up addressing to Routing Locators and Endpoint
+Identifiers. This may help multihoming networks in future. RFC 9299-9306.
+
+### Backend for IPv6 Multihoming without BGP
+Implement and configure BIRD in such a way that local nodes are seamlessly
+connected to the Internet via multiple upstreams, using Network Prefix
+Translation and other techniques. Possible collab with Turris.
+
+## Minor
+
+* RFC 8510: OSPF LLS Extension for Local Interface ID Advertisement
+* RFC 8538: BGP Graceful Restart Hard Reset
+* RFC 8326: BGP Graceful Session Shutdown Community auto-apply
+* RFC 8962: Become part of the IETF Protocol Police
+* RFC 9072: Extended Optional Parameters Length for BGP OPEN Message
+* RFC 9339: OSPF Reverse Metric
diff --git a/nest/Makefile b/nest/Makefile
index 5b27da0c..1a71c2fb 100644
--- a/nest/Makefile
+++ b/nest/Makefile
@@ -3,7 +3,7 @@ obj := $(src-o-files)
$(all-daemon)
$(cf-local)
-$(objdir)/nest/proto-build.c: $(lastword $(MAKEFILE_LIST))
+$(o)proto-build.c: Makefile $(lastword $(MAKEFILE_LIST)) $(objdir)/.dir-stamp
$(E)echo GEN $@
$(Q)echo "#include \"lib/birdlib.h\"" > $@
$(Q)$(patsubst %,echo 'void %_build(void);' >> $@;,$(PROTO_BUILD))
@@ -11,6 +11,8 @@ $(objdir)/nest/proto-build.c: $(lastword $(MAKEFILE_LIST))
$(Q)$(patsubst %,echo ' %_build();'>>$@;,$(PROTO_BUILD))
$(Q)echo "}" >> $@
+prepare: $(o)proto-build.c
+
tests_src :=
tests_targets := $(tests_targets) $(tests-target-files)
tests_objs := $(tests_objs) $(src-o-files)