Skip to content

Commit

Permalink
Rewritten roadmap
Browse files Browse the repository at this point in the history
  • Loading branch information
tertsdiepraam committed Sep 27, 2024
1 parent 5ef93ca commit e8d1f6c
Showing 1 changed file with 80 additions and 147 deletions.
227 changes: 80 additions & 147 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,185 +5,118 @@ Roadmap
- βœ… work item complete
- πŸ¦€ work item in progress
- πŸ’€ work item not started yet
- ↑ updated version

General Features
================

RELEASED

rotonda 0.1
rotonda-fsm 0.1
roto 0.2
routecore 0.4
rotonda-store 0.3
rotoro -

- βœ… BMP listener
- βœ… BMP proxy
- βœ… single-threaded RIB implementation
- βœ… lock-free, multi-threaded RIB implementation
- βœ… client-specific runtime application with BMP ingress and RIBs
- βœ… `roto` filtering language
- βœ… BGP passive speaker
- βœ… limited systemd functionality
- πŸ¦€ ~~BGP limited active speaker~~ POSTPONED
- βœ… Documentation
- βœ… Packaging

NEXT RELEASE

↑ rotonda 0.1.x
rotonda-fsm 0.1
↑ roto 0.2.x
routecore 0.4
rotonda-store 0.3
rotoro -

- πŸ¦€ implement FilterMap (user-defined rx/tx and RIB storage type)
- πŸ¦€ implement passive external data source: RIBs

NEXT RELEASES

- πŸ’€ support more AFI/SAFIs, e.g. FlowSpec, L2VPN, MPLS
- πŸ’€ emit BGP packets as events on OutputStream
- πŸ’€ egress modified/created BGP packets (on peering sessions)
- πŸ’€ RIB split over in-memory and on-disk
- πŸ’€ refactor configuration: dynamic units reconfiguration with RESTCONF/yang+json
- πŸ’€ implement active external data sources: RTR
- πŸ’€ more ingress connectors (e.g. Kafka, MQTT, mrt)
- πŸ’€ more egress connectors (e.g. Kafka, Parquet, mrt)
- πŸ’€ create plugin system
- πŸ’€ query engine over (split) RIBs.
- πŸ’€ Rotonda shell
- πŸ’€ Distributed `rotonda`-`rotonda` setup with `rotoro` (experimental)


Development per Component
=========================
## `Rotonda`

### NEXT RELEASE 0.2: Big refactor, features similar to 0.1

- βœ… Move functionality from rotonda to rotonda-store
- πŸ¦€ Integrate changes from Routecore 0.5 & Roto 0.3
- πŸ’€ Simplify configuration format
- πŸ’€ Limited MRT import for testing

### UNRELEASED 0.3: Collector functionality

- πŸ’€ Provide passive external data sources to Roto
- πŸ’€ On-disk storage to prevent growing memory use
- πŸ’€ More ingress connectors (e.g. Kafka, mrt)
- πŸ’€ Switch to daemon-base
- πŸ’€ Store other AFI/SAFI types than unicast & multicast

### LATER RELEASES

- πŸ’€ CLI for querying RIBs
- πŸ’€ Emit BGP packets as events on OutputStream
- πŸ’€ Egress modified/created BGP packets (on peering sessions)
- πŸ’€ Refactor configuration: dynamic units reconfiguration with RESTCONF/yang+json
- πŸ’€ More egress connectors (e.g. Kafka, Parquet, mrt, (timescale) RDBMS)
- πŸ’€ BMP & BGP proxy
- πŸ’€ BMP out stream
- πŸ’€ Long-term file storage
- πŸ’€ Create experimental global registry
- πŸ’€ Snapshot/restore functionality
- πŸ’€ RIB diff functionality
- πŸ’€ Create experimental distributed Rotondas


## `Roto language`

RELEASED 0.2
### NEXT RELEASE 0.3

- βœ… language lay-out
- βœ… EBNF scheme
- βœ… create experimental parser
- βœ… create experimental compiler
- βœ… create experimental virtual machine
- βœ… implement all methods on `roto` types
- βœ… integrate into `rotonda`
- βœ… implement FilterMap (user-defined rx/tx)
- πŸ’€ ~create user-friendly error messaging~
- πŸ¦€ ~extensive stress testing
- πŸ¦€ create manual-like docs
- βœ… create high-level overview documentation
- βœ… Reimplemented as a compiled language using cranelift
- βœ… Improved parsing error messages
- βœ… Improved type checking error messages
- βœ… New type checker
- βœ… Syntax refinements
- βœ… User-defined filter-maps
- βœ… Basic types & operations (integers, bools)
- βœ… Domain-specific types (asn, ip addr, prefixes)
- βœ… Ready for hot-reload
- βœ… Record and enum types defined by Roto script
- πŸ¦€ Runtime registering of types, functions & methods
- πŸ¦€ Drop implementation for runtime types

UNRELEASED 0.2.x
### UNRELEASED 0.4

- πŸ¦€ complete passive external data sources for RIBS
- πŸ’€ Schemas and dynamic types in Roto functions
- πŸ’€ Borrowed data in Roto
- πŸ’€ Complete passive external data sources for RIBS
- πŸ’€ Create dev documentation
- πŸ’€ Create reference-level documentation
- πŸ’€ Create namespaces / modules system

NEXT RELEASES
### LATER RELEASES

- πŸ’€ implement more passive external data sources
- πŸ’€ implement active external data sources: RTR
- πŸ¦€ create reference-level documentation
- πŸ’€ create namespaces / modules system
- πŸ’€ create user-configurable graph DSL for units
- πŸ’€ create user-configurable query DSL
- πŸ’€ create dev documentation


## `Rotonda-fsm`

RELEASE 0.1

- βœ… BMP state machine
- βœ… BGP state machine
- βœ… BGP passive speaker (session management)

UNRELEASED 0.2

- πŸ¦€ BGP active speaker


## `Routecore`

RELEASE 0.4
### NEXT RELEASE 0.5

- βœ… prefix types
- βœ… route record example types
- βœ… Prefix types in `inetnum`
- βœ… Route record example types
- βœ… BGP/BMP types for parsing
- βœ… Create BGP packet editor & route workshop
- βœ… Partial FlowSpec parser
- βœ… Best path selection
- πŸ¦€ Revamped AFI/SAFI with AddPath support

UNRELEASED 0.5
### UNRELEASED 0.6

- πŸ¦€ create BGP packet builder
- πŸ’€ partial FlowSpec parser
- πŸ’€ Optimizations

NEXT RELEASES
### LATER RELEASES

- πŸ’€ BGPsec parser
- πŸ’€ More AFI/SAFI types
- πŸ’€ Move BMP FSM from Rotonda to Routecore
- πŸ’€ Refactor BGP FSM with BoQ in mind
- πŸ’€ Type-aware wire format path attributes


## `Rotonda`

RELEASE 0.1

- βœ… setup `tokio` skeleton with logging etc.
- βœ… setup BMP listener
- βœ… REST API setup
- βœ… MQTT OutputConnector
- βœ… integrate BGP passive listener (BGP EventSource)
- βœ… virtual RIB experimental implementation
- βœ… installation and usage documentation
- βœ… limited packaging
- βœ… limited `systemd` integration

UNRELEASED 0.1.x

- πŸ¦€ passive external data sources: RIBs
- πŸ¦€ implement FilterMap (user-defined rx/tx and RIB storage type)

NEXT RELEASES

- πŸ’€ emit BGP packets as events on OutputStream
- πŸ’€ egress modified/created BGP packets (on peering sessions)
- πŸ’€ improved daemon functionality: drop privileges
- πŸ¦€ refactor configuration: dynamic units reconfiguration with RESTCONF/yang+json
- πŸ¦€ implement tracing
- πŸ’€ RIB split over in-memory and on-disk
- πŸ’€ namespaces / modules support
- πŸ’€ more ingress connectors (e.g. Kafka, mrt)
- πŸ’€ more egress connectors (e.g. Kafka, Parquet, mrt, (timescale) RDBMS)
- πŸ¦€ BMP proxy
- πŸ’€ create experimental global registry
- πŸ’€ snapshot/restore functionality
- πŸ’€ RIB diff functionality
- πŸ’€ create experimental distributed units


## `Rotoro`
## `Rotonda-store`

MVP
### NEXT RELEASE 0.4

- πŸ¦€ design wire protocol and select a layout (AVRO?)
- πŸ’€ create experimental de/serialization
- πŸ’€ experimental integration in `rotonda-runtime`
- βœ… Multi-unique ID implemented (replacing MergeUpdate from rotonda 0.1)
- βœ… Best path selection with caching
- βœ… Optimization of route status using roaring bitmaps
- πŸ¦€ Optimizations: better hashing, cache padding, etc.

### UNRELEASED 0.5

## `Rotonda-store`
- πŸ’€ On-disk storage integration

0.3

- βœ… stabilize single-threaded store
- βœ… stabilize multi-threaded store
- βœ… robust error handling (get rid of all the unwraps)
## `Rotoro`

NEXT RELEASES
### MVP

- πŸ¦€ stabilize API
- πŸ¦€ benchmarks matrix IPv4/IPv6 `local_array`/`local_vec`
- πŸ¦€ unit tests & acceptance tests matrix
- πŸ’€ optimizations: implement QSBR (replace Ref Counting on update)
- πŸ’€ optimizations: better hashing, cache padding, etc.
- πŸ’€ fuzzer IPv4/IPv6
- πŸ¦€ Design wire protocol and select a layout (AVRO?)
- πŸ’€ Create experimental de/serialization
- πŸ’€ Experimental integration in `rotonda`

0 comments on commit e8d1f6c

Please sign in to comment.