|
2 | 2 |
|
3 | 3 | Released 2024-05-29.
|
4 | 4 |
|
5 |
| -TODO |
6 | 5 |
|
7 | 6 | Breaking changes
|
8 | 7 |
|
| 8 | +* Several common basic types (e.g. `Asn` and `Prefix`) are moved out of |
| 9 | + _routecore_ to the new _inetnum_ crate. |
| 10 | + |
| 11 | +* Refactor of PathAttributes |
| 12 | + |
| 13 | + The introduction of `PaMap` and `RouteWorkshop` (see below) required refactoring |
| 14 | + of the `PathAttributes` enum and related types. Most significantly, an entire |
| 15 | + layer in the enum was removed, changing how one matches on variants. |
| 16 | + Furthermore some of the types in those variants slightly changed. |
| 17 | + |
| 18 | +* Overhaul of address family related code |
| 19 | + |
| 20 | + The types describing address families, and related traits to parse and compose |
| 21 | + NLRI of such families, have severely changed. This eliminates any possible |
| 22 | + ambiguity regarding the address family of announcements/withdrawals in UPDATE |
| 23 | + messages at compile time. |
| 24 | + |
| 25 | + * Supported address families are now explicitly and exhaustively enumerated |
| 26 | + in the `AfiSafiType` enum. As a SAFI by itself does not carry much meaning, |
| 27 | + the separate `SAFI` enum is removed. Almost all of the code now works |
| 28 | + based on the more descriptive `AfiSafiType`. |
| 29 | + * ADD-PATH is now supported on all supported address families, i.e. the |
| 30 | + `AfiSafiType` includes `~AddPath` variants for every single AFI+SAFI |
| 31 | + combination. |
| 32 | + * This now allows for e.g. efficient iterators over NLRI that are generic |
| 33 | + over the `AfiSafiType`. |
| 34 | + But, as a possible downside, this moves the task of determining what |
| 35 | + address family a set of NLRI holds to the caller in order to then use the |
| 36 | + correctly typed iterator. The less efficient, 'easier to use' iterators |
| 37 | + returning an enum instead of a distinct NLRI type are therefore still |
| 38 | + available. |
| 39 | + |
9 | 40 | New
|
10 | 41 |
|
11 |
| -Bug fixes |
| 42 | +* RouteWorkshop / PaMap |
| 43 | + |
| 44 | + This release introduces the RouteWorkshop to create UPDATE messages based on |
| 45 | + an NLRI and a set of attributes. For creation, inspection and manipulation of |
| 46 | + those attributes, the `PaMap` is introduced. These new types work in |
| 47 | + conjunction with the existing `UpdateBuilder`. |
| 48 | + |
| 49 | +* BGP FSM (absored from _rotonda-fsm_) |
| 50 | + |
| 51 | + _routecore_ now contains the code to enable actual BGP sessions, i.e. the BGP |
| 52 | + FSM and related machinery. By pulling this in into _routecore_ allows for less |
| 53 | + dependency juggling, easier development iterations and more sensible code in |
| 54 | + all parts. |
| 55 | + |
| 56 | + The _rotonda-fsm_ crate for now is left as-is. |
| 57 | + |
| 58 | + |
| 59 | +* Route Selection ('BGP Decision Process') fundamentals |
| 60 | + |
| 61 | + This releases introduces a first attempt at providing handles to perform the |
| 62 | + BGP Decision Process as described in RFC4271, colloquially known as 'route |
| 63 | + selection' or 'best path selection'. |
| 64 | + |
| 65 | + Most of the heavy-lifting for this comes from implementing `Ord` on a wrapper |
| 66 | + struct holding a 'route' (i.e., `PaMap`) and additional information to allow |
| 67 | + tie-breaking as described in the RFC. |
| 68 | + |
| 69 | + As the tie-breaking in RFC4271 is actually broken and not totally ordered, we |
| 70 | + aim to provide a certain degree of flexibility in the tie-breaking process by |
| 71 | + means of different `OrdStrat` ordering strategies. |
| 72 | + |
12 | 73 |
|
13 | 74 | Other changes
|
14 | 75 |
|
| 76 | +* Feature flags |
| 77 | + |
| 78 | + After splitting of parts of _routecore_ into the _inetnum_ crate, the default |
| 79 | + features set resulted in an almost empty library. Therefore the `bgp` flag is |
| 80 | + now on by default, and we introduced an `fsm` flag to enable the code absorbed |
| 81 | + from _rotonda-fsm_. |
| 82 | + |
| 83 | + |
| 84 | +Known limitations |
| 85 | + |
| 86 | +* Constructed UPDATE messages are MultiProtocol-only |
| 87 | + |
| 88 | + No conventional withdrawals/announcements, IPv4 Unicast goes into MP path |
| 89 | + attributes as well. |
| 90 | + |
| 91 | + Note that this behaviour is considered preferable as it leads to somewhat more |
| 92 | + flexibility/resilience on the protocol level. The _actual_ limitation in |
| 93 | + routecore is that the `UpdateBuilder` lacks the option to use the conventional |
| 94 | + PDU sections after all. We do plan to reintroduce this, however. |
15 | 95 |
|
16 | 96 |
|
17 | 97 | ## 0.4.0
|
|
0 commit comments