Add basic BIER elements
This PR adds basic elements for BIER packets processing.
First, it adds the Bier Forwarding Table (BIFT) which is implemented as the IPv6 forwarding table. That is, Fastclick is extended with a 'biertable' that defines the basic operations on the BIFT. The 'bierroutetable' element defines handlers allowing external interactions and the 'lookupbiertable' is the element representing the BIFT.
Second, two simple filtering elements are added, (i) 'checkbierheader' that verifies the header of a BIER packet and (ii) 'checkbierin6header' that filters IPv6 packet to detect BIERin6 encapsulated BIER packets.
TODO
- [ ] Batch routes addition
- [ ] Allow routes suppression via handler
- [ ] Add elements documentation
- [ ] (Support Bitstring length greater than 256 bits)
Well, everything seems good and 'standard' to me so far.
Thanks for the review! I will open the PR for merge once I have a functional BIER data-plane.
One thing you can also do is add a few tests (see the tests folder). So you're sure elements behave as expected. The easiest is probably to use some FromIPSum.* (look at other examples) so you can easily add some payload and verify what you get. Unit testing is done through specific Test element in elements/tests. For such a big project it's generally a good idea.
Rebase on 91a3454b9755e38e84e4872ae6286539e1f45b36.
I will add some tests in subsequent commits but in the current state of the PR, the BIFT is correctly populated by the holo control-plane and the duplication as well as the forwarding works as expected on a simple test topology.