We’re proposing a protocol whereby controllers actively detect connectivity to adjacent members of a stack.
This means they are either down, mis-cabled, or the adjacent switch has no active controller.
In this way we improve the resiliency of the stacking functionality in FAUCET.
Valves will send messages to adjacent members of the stack by sending packets out each port configured for stacking.
The neighbouring valve will respond if able. If no response is heard in time, we treat this as a failure, and record this in the log (for now).
Both request and reply messages contain a payload with the source and destination Valve (DPID, PortID).
If they don’t match, then we’ve detected a mis-cabled link.
E.g. A sends [PING A:1 -> B:1 SEQ=X] on port 1.
B(and only B) replies [PONG A:1 -> B:1 SEQ=X+1], if it receives this on port 1, otherwise it discards the message.
Additionally, if the adjacent controller has failed, we detect that as a failed link.
We don’t want our probing packets to be processed by the pipeline so we need to be able to distinguish them from ordinary traffic. Possible options:
* Use a specific port for our protocol, a reserved IP and FAUCET_MAC for destination
* Define a new ethernet type for our protocol, and use FAUCET_MAC for destination
What does everyone think about this?
We've had a lot of contributions with PRs recently (much appreciated!).
We've also had a chance to further tidy up our developer guide (
which now recommends use of the git pre-commit hook (so you can catch most
errors in about 20s, at the git-commit stage).
If you're considering sending a PR, please do look at the developer guide.
Are the configuration tables in
https://faucet.readthedocs.io/en/latest/configuration.html generated via
script from the codebase or manually?
There is a couple of options that look wrong or are missing (in
particular hairpin & loop_protection). If its manual I'll update them.
Happy 2018! To celebrate we're releasing you some new faucet goodies in the
Highlights for this release include:
- Prometheus flow table and port status logging support. Prometheus-only
is now recommended for all Gauge monitoring
- Ryu 4.21
- Fix theoretical crash if OFA sends as a packet with no VLAN header
(should not occur anyway) - found by packet in fuzzer
- Optional ARP/ND re-resolution targeting (first ARP/ND attempt is sent
only to last known port)
- Experimental event notification has better error handling (and
rejection of multiple clients)
- Packet fuzzer performance improvements
- Optional setting to not check minimum packet size (for OVS FAUCET
tutorial to work)
- Tests all retry failed pip installs due to temporary pip CDN problems.
Another note: from this release on we are changing how we use docker tags.
The "latest" tag will now point to the latest stable version of faucet
rather than to the latest commit in git. This should allow us to ensure we
consistently deliver stable code via all our packaging mechanisms.