CHANGES
=======

1.9.4
-----

* README 1.9.4
* Workaround for https://www.traviscistatus.com/incidents/kyf149kl6bvp?u=3g7kt113nmgs
* Unconditionally delete all groups on Aruba as unreferenced groups steal resources from regular flowmods
* Move tunnel rule generation to stack port state changes
* Minimum necessary change to support same-DP tunnels
* Remove more redundant 8021X native VLAN code
* Use common \_reset\_dot1x\_port\_flood()
* Move del\_native\_vlan
* Min. fix for bad 8021x flowdel
* Verify flowdels
* Missed VID reference
* More hardcoded VIDs
* Correct VID order
* More hardcoded VIDs
* Don't hardcode high VLAN VID which can't be used on some platforms
* drop\_lldp appears to be an old leftover artifact
* More strict tunnel verification
* Detect coredumps after tests
* Update debian/control
* Upgrade eventlet for later distros (see also https://github.com/openstack/requirements/commit/377dcbb8b267447920739412dc03490013fa5062)
* setup.cfg to 1.9.4
* Loop protect test has hard coded port

1.9.3
-----

* Upgrade images used for docker compose
* Downgrade pi-gen to 2018-11-13-raspbian-stretch
* Bump README 1.9.3
* Add a new option to the hw\_switch\_config.yaml to be able to use the IPv6 of the CPN interface
* Simplify tunnel rule parsing and fix bug where vlan\_vid update is missed
* Update pytype from 2019.4.19 to 2019.4.26
* Re-enable for hardware
* special case for NUM\_DPS == 2
* TunnelTest order
* Correct ranges for non\_host\_ports
* String needs MAX\_HOSTS
* Use non\_host\_ports() consistently
* Hardcoded ports in FaucetSingleStackStringOfDPTaggedTest
* Another FaucetSingleStackAclControlTest hardcoded port
* TODO for acl\_port\_in
* TunnelTest hardcoded port
* FaucetSingleStackAclControlTest hardcoded ports
* ACL\_IN\_DP hardcoded
* Remove hard coding of string remote ports
* one\_stack\_port\_down() handles offset
* Remove unused port\_map\_rev
* Incremental support for stack/offset port numbering
* Verify empty caps is more verbose
* Add offset for stacking
* Fix two broken switch vendor URLs in the docs
* Handle empty yaml\_conf
* Add explicit switch start\_port
* Remove diag prints
* Remap function should actually only annotate
* Set minimum performance bar at 100M
* Mirror packets with consistent perspective based on mirrored port
* Add mirror perf tests
* Update pytype from 2019.4.12 to 2019.4.19
* changed a few too many
* event notif no longer experimental; closes #1312
* fixes #2913
* pin to the latest pip
* Change faucet\_config\_hash\_info label format
* faucet\_config\_applied: fraction of DPs we've tried to program

1.9.2
-----

* Refactor faucet\_dot1x.py
* Fix port for reload trigger
* Check "/" not in label for filename
* Quote Prom labels for info
* add dynamic vlan to unit test
* remove empty test\_untagged from 8021XBaseTest class
* extract 8021x base test class. find a free udp port for radius
* change signature for chewie v0.15
* remove eth\_dst flows for the dynamic vlan
* tidy up a couple of things
* remove dynamic vlan on port down
* remove learning rules
* add documentation for dynamic 1x vlan
* dot1x get native vlan from radius
* change 802.1x event checks to not check order
* Update pytype from 2019.4.5 to 2019.4.12
* Update sphinx from 2.0.0 to 2.0.1
* Update pika from 1.0.0 to 1.0.1
* Add smoke unit test for dot1x\_acl functionality
* 802.1x ACLs
* add expected events to new dot1x tests
* Remove unneeded CONFIG\_HASH global/module variable
* Add faucet\_config\_hash\_{info,func} and test
* use chewie v0.0.15
* add tests for periodic reauthentication, and when id request on port up
* change rule priority level for static dot1x rules
* add dot1x event test checks
* change dot1x event structure
* Preversion 1.9.3
* Release version 1.9.2
* Update ryu from 4.30 to 4.31
* Update pytype from 2019.3.27 to 2019.4.5
* add event notifications for 802.1x
* add option to configure log level during tests
* fix pytype issue
* add requirements file for rabbitmq for tests
* minor linting
* Rename first\_external to use\_external
* heartbeat\_interval has been deprecated
* Cleanup PR, no logging
* Update pytype from 2019.3.21 to 2019.3.27
* Update sphinx from 1.8.5 to 2.0.0
* Update pika from 0.13.1 to 1.0.0
* Fix loop\_protect\_external
* Breaking test for multi-port exclusion
* Fix for stack2 external\_loop\_protect flooding
* Clean up test
* Only create loop devices if they don't exist

1.9.1
-----

* prevsion 1.9.2
* README 1.9.1
* Need to check for Prometheus thread exceptions
* Unused import
* Check for dead threads
* Remove force fail
* Update pytype from 2019.3.15 to 2019.3.21
* Using local fix
* Failed fixes
* Mark DP disconnected when explicitly closing it
* Working test
* Flap configuraiton and test again
* Update with comprehensive tests
* More test-case tweaks
* pytype
* Ensure to\_conf() dict keys are always strings. Ensure IP addresses of any kind converted to strings
* Remove datadiff
* Switch to difflib
* New test
* Make to\_conf() much smarter so we can remove datadiff library

1.9.0
-----

* Duplicate, duplicate VLAN check
* Multiple router VLAN test needs to support policy route
* Clarify LLDP beacon service comments about stacking and spanning tree
* Support router configuration that just connects BGP to a VLAN in another router (and check multiple routers can't control same VLAN)
* Pre-version faucet 1.9.1
* More thorough checks for partial BGP config that could cause BGP to be disabled
* Add header row to BGP configuration table
* Add release notes for faucet 1.9.0
* VLAN name
* Correct formatting/missing fields for BGP. Allow a router to be configured without top-level VLANs (BGP only)
* pylint
* Need to check BGP is enabled
* config test case for BGP
* Update BGP docs for bgp dict
* BGP sub-dict
* Remove broken bgp\_neighbor aliases
* Remove unused dp BGP attributes
* set\_defaults() can set defaults for sub-dicts
* Docs for routing tutorial
* Docs for router
* Re-enable BGP config checks for DP
* pylint
* Incremental bgp\_vlan to remove BGP entirely from VLANs
* bgp\_vlans()
* coldstart\_conf() needs to handle routers
* Re order VLAN BGP attributes
* Remove unused bgp\_local\_address
* Incremental migration of BGP config to Router
* Add BGP attributes to Router
* Move IP checks to conf.py
* pytype
* Should use yaml.safe\_load()
* Remove dl\_dst output action from ACLs (which did not work anymore anyway)
* Use relative time comparison profiling config parsing performance
* Update pytype from 2019.3.8 to 2019.3.15
* Prevent running faucet on python versions earlier than 3.5
* Update apt package to require faucet versions 1.9+
* Make apt package depend on python 3.5+
* Prevent installation on python versions earlier than 3.5
* Remove installation documentation for debian jessie
* Disable unit testing on python 3.4
* Release faucet 1.9.0
* Correct typo in documentation
* pylint
* placate pytype
* Travis is even slower than that
* Travis is horribly slow (increase profile timeout)
* Reduce config reload time for 100 interfaces from ~3s to 0.5s
* pylint
* Avoid generating per-port flood flowmod if flood actions same as VLAN
* Upgrade faucet VM image to Ubuntu Bionic

1.8.37
------

* Ensure vlan\_pcp is 0 when loop protection enabled
* Handle permanent learn case
* Remove unnecessary double call to \_configure\_tables(). Return flag for cache update needed when learning, to remove unnecessary duplicate L2\_LEARN events
* Preversion 1.8.38
* README 1.8.37
* pylint/coverage improvements for dot1x
* syntax
* except syntax
* Handle NotSequence exception from datadiff
* Update pytype from 2019.3.1 to 2019.3.8
* Update sphinx from 1.8.4 to 1.8.5
* Update pika from 0.13.0 to 0.13.1
* Standardize stack host tests
* Make verify\_no\_bcast\_to\_self() more efficient to reduce test runtime
* Increase garbage collection timeout for controller processes
* Enable LLDP always for stacking ports
* new method needs longer timeout for travis
* Add wait\_for\_prometheus\_var() helper
* pylint
* Reduce time taken by stacking tests due to inefficient LLDP block check
* Need to set on: tags: true for travis to deploy tag rather than branch

1.8.36
------

* Increase number of shards now that we make more efficient use of Travis
* Upgrade to grafana 6.0.0
* Need to handle disappearing wpa control socket race condition
* Need to handle potential errors from lsof/kill resetting 802.1x state
* Some 8021X tests require the supplicant to be left running for additional state checks
* Missing sig option to kill
* Suppress pyup for scapy which needs to be 2.4.0 for test suite
* Upgrade to pytype 2019.3.1
* Cleanup wpa supplicant state between tests
* Preversion 1.8.37
* README .36
* pylint, fix no-else-raise
* Update docker run documentation for test suite
* Further retries/timeouts for slow/lossy 8021x
* LACP down should delete all hosts learned on the down port
* Simply 8021X tests, re-enable all LACP tests
* FaucetStringOfDPLACPUntaggedTest not working for hardware to incorrect delete of port flows when LACP expired
* Increase timeout/retries for 8021x mirroring
* Filter all config writes through port remapper, remove hard coded port name/descriptions
* Migrate .readthedocs.yml to version 2.0 syntax
* Skip running a script to speed up pypi deploys
* Move codechecks back inside docker
* Run deploy build stage as python instead of the default (ruby)

1.8.35
------

* Optimize travis runs
* Workaround ping -I behavior change, and add retries resolving down nexthops and comparing VLAN/port learn counters
* Allow 8021x tests to work with freeradius 2 and 3
* Run unit tests in parallel
* Standardise parallel arguments
* Default to python 3.6
* exact mask check needs to check value is string
* Handle OFAs that don't drop redundant exact masks from matches
* pylint & pytype
* 2to3 no longer needed
* Don't need to explicitly install python-debian any longer
* If available, run tests in virtual env
* Preversion 1.8.36
* Update control
* README 1.8.35
* port up not automatically called by StringDP based test. Need to defeat automatic hardware port remapping for TunnelTest
* Update test-requirements.txt
* Add SVG version of faucet-pipeline diagram
* valve: add miss\_goto table to next\_tables label
* Remove table numbers from pipeline diagram
* Update prometheus\_client from 0.5.0 to 0.6.0
* Update scapy from 2.4.0 to 2.4.2
* valve: add next\_tables label to config\_table\_names
* docs/developer\_guide: more files to copy
* docs/architecture: remove table numbers
* Correct non port 1-4 references in TunnelTest
* check auth doesnt occur via wpa status and ping fail
* pytype multiple syntax
* pytype
* Update test-requirements.txt
* Update scapy from 2.4.0 to 2.4.2
* Update pytype from 2019.1.30 to 2019.2.13
* Update python-debian from 0.1.33 to 0.1.34
* Update sphinx\_rtd\_theme from 0.4.2 to 0.4.3
* Add a method for querying prometheus in code
* developer\_guide: document env cmdline setup
* tutorial/nfv\_services: add tcpdump example
* fix, so 1x falp test runs on software

1.8.34
------

* Preversion 1.8.35
* Upgrade to sphinx 1.8.4
* README 1.8.34
* Update debian/control for new Prometheus
* Upgrade prometheus\_client to 0.5.0
* Consistently use correct tcpdump output string
* CDP and friends should not be flooded
* Rename to faucet\_config\_load\_error
* Implement error signal in Prometheus for invalid config
* Placate pytype
* Remove redundant Valve name in log message
* Fix specification of table config for tunnelling ACLs. Validate set\_fields and match\_types on table configs to prevent this kind of bug in future
* \_configure\_tables() should be last step
* Tunnel tests missing hw\_dpid arg to build\_net, so wrong vendor is selected
* Convert RST images to figures
* Improve documentation for running hardware test suite
* Update architecture diagram

1.8.33
------

* Preversion 1.8.34
* Bump README version to 1.8.33
* Relax OF counter synchronization window pending better method
* Downgrade python-debian to make packaging unit tests pass again
* Fix code that reads debian/control
* Need more patience for hw based tests
* Update faucet\_dot1x.py
* Update chewie to 0.0.13 in debian/control
* Upgrade to Chewie 0.0.13
* Consistently consider port status when calculating flooding rules
* Handle LACP peer signaling 1->0 synchronization
* Handle LACP actor state transition 1 to 0
* Missing flowdel return
* pytype 2019.1.30
* Fix LACP expiry case
* Hardware LACP test needs much longer timeout for port recovery
* Fix Prometheus tests for hardware
* Test might miss cold start counter increment if DP happens to be down
* Ensure DP status 1 at end of reload in case restart count incremented multiply
* Need to retry change counter
* Reload tests need to be smarter for new potentially double cold starts
* Force switch OF reconnection on a cold start. This ensures that FAUCET and the switch have the same list of ports. Previously we could be desynchronized (e.g. adding a port, but we don't know its oper status). Add internal API change to allow a Valve to request a switch OF reconnection
* s/ebt/ebtables/
* Need ebt module as well
* Need to retry host retry check
* Some dockers need --cap-add=NET\_ADMIN for ebtables to work
* port can be None
* Skip null nexthops
* test\_port\_down\_flow\_gone should be in separate test
* Expire nexthops on port down event
* Test that eth dst flows are garbage collected when port goes down
* Use tunnel\_type for consistency
* pytype
* pylint
* pylint false trigger on comment
* parallel in test image is 2014 era so needs different halt flag
* Scapy >2.4.0 broken
* Fix coverage holes for LACP active/flap cases. Ensure remaining event handlers can return ofmsgs for multiple valves. Refactor to allow setting loop protection field
* External loop protection + stacking needs to set loop protect field in VLAN table
* Fix LACP active test for hardware
* Allow setting of loop protect field on output
* Explicitly dedupe action list for flooding rules
* Use ebtables to block traffic from test host interface to switch
* Adding port up check
* Don't check non-harpin ports
* make a port's lacp state up before rebuilding flood rules
* test should wait for lacp port to come up
* Need to merge ofmsgs from previous Valve service call
* fix incorrect logging on LAG port
* test to confirm lacp to reprogram flood rules when port fails
* lacp should pick a working member with lowest port\_no for broadcast
* remove unused method
* Valve services functions can return ofmsgs for multiple Valves
* Port status handler and packet in handler can return flows for multiple Valves
* Upgrade to prometheus:v2.6.1 and grafana:5.4.3
* Automatically lookup ubuntu/debian releases for CI package push
* Kill even unhealthy controllers
* Ensure \_start\_faucet() not multiply called
* unintended array copy can cause hardware tests for stacking to fail due to using the wrong hardware ports
* check\_config\_file should handle no file
* Log print enhancement. 1.yaml format; 2.involve skipped cases; 3.involve sanity test results
* ftctl should andle bad URL or content
* Make ValvePipeline aware of hairpinning flag
* Move port status handler to ValvesManager
* Split up packet receive handler
* update pika version; use alpine image for management
* Upgrade to pytype 2019.1.18
* Lack of explicit LACP down messages is confusing. Explicitly test flapping LACP
* More tutorial tidyups
* Add svg2pdfconverter so that SVGs can be rendered in LaTeX
* Update faucet tutorial series for LCA2019
* pylint
* VLAN internal reservation
* Valve tests with fakeOFtable
* tunnel acl flowmods created by acl manager
* pylint
* Add Faucet port tunnel ACL implementation, packets from a port can be sent to a port on another DP via the tunnel path

1.8.32
------

* Preversion 1.8.33
* README 1.8.32
* Test that flows for newly added port are sent
* Need to track op status for all ports the DP reports, even if they are not configured currently. The user might configure them later and we need their opstatus to decide whether to program flows for new ports
* ping -> macvlan\_ping
* Wrap net.ping() and net.pingAll() so they have reasonable timeouts (decrease test run time)
* sphinx==1.8.3
* Control dot1x acls using acl manager
* Use acl\_manager to add and remove authed\_mac addresses
* Include acl\_manager in valve members
* use manager to install port acls
* Use acl manager to install vlan acls
* Create acl manager and use it to install dp acls
* pytype upgrade to 2018.12.21
* Explicitly explain that running hardware tests under virtualization is not supported
* Use pipeline for accept instructions in acls

1.8.31
------

* Missed .orig
* Implement external switch loop protection (standalone and stacking). Also fixes non hardware ports 1-4 tests and decline in test coverage due to dot1x
* Add LACP to mismatch message
* Better regexp for LACP mismatch
* Detect and log remote LACP actor system ID mismatch
* Preversion 1.8.32
* Bump README
* Flood table needs more flows after bug fix for double-mirroring of flooded packets
* BUGFIX: Chewie port never comes back up
* Guard against missing config file
* Remove references to eth\_src table from flood manager
* include priority offsets for filter and select
* Unit test that overlapping entries are never added to flow table
* dbuilder image is now based on debian stretch
* Run unittests on debian package build
* Explicitly test config content\_changed()
* Do not pass target table when filtering packets
* Use priority values from valve\_manager\_base
* Include unit test to catch faulty instructions
* change formatter for ports < 65535
* Generate prometheus metric tables better
* Need sphinx 1.8
* Import new apidoc main()
* Fix table overflow/wrapping issue in rtd theme with CSS
* Use more appropriate table column sizes

1.8.30
------

* Upgrade to chewie 0.0.12
* Preversion 1.8.31
* README 1.8.30
* allow dot1x to run on < 65535 ports per dp
* pylint
* Remove unnecessary 2to3 list() syntax
* Update interface mirroring documentation interaction with ACL mirroring
* handle removal of permanent learn flows with ValveHostManager
* Add method for the removal of filters from classification table
* Re-enable groups for stacking. Don't send group with same actions but different ID for unicast flooding (may cause hash collision). Add more port flap tests to stacking
* remove no-op deletes
* make valve\_pipeline responsible for deleting flows from egress\_table
* Add del\_port and del\_vlan commands to ValveManagers

1.8.29
------

* fix indentation
* groups silently disabled when stacking until better tested
* remove no longer needed references to tables
* Preversion 1.8.30
* README 1.8.29
* Upgrade to chewie 0.0.11
* use pipeline for building goto instructions
* add accept\_to\_classification function to ValvePipeline
* Test VLAN PCP match and set
* Upgrade docker images
* Remove more Zodiac references
* Prometheus metrics of type counter now end with \_total
* Update packaging metadata
* Enable group support for stacking
* Remove ZodiacFX tests, which were never really used (and Zodiac switches now not commercially supported)
* Mark groups and stacking together not yet supported
* Flood manager should only send port specific rules, if those roles differ from broadcast rules
* update supported EAP Types in docs
* user port\_no# instead of hardcoded number
* initialise egress\_table in ValvePipeline
* move override output port initialising to ValveHostManager
* include add\_port in ValveManagerBase
* Tweak codecov settings
* use self.port\_labels() instead of constructing dict by hand
* debugging, reorder order of success checks
* rename prometheus variable to match the best practice for counters
* retry the prometheus poll 5 times
* Notify Chewie of port status events
* BUGFIX - Deny Port on 802.1x Failure
* Hash config files for changes if stat didn't change
* Preversion 1.8.29

1.8.28
------

* README 1.8.28
* Update Vendor page for AT products
* Remove more hardcoded port maps in 8021X tests
* Remove hard coded port assignments in 802.1x
* Mount /var/lib/docker on host to avoid docker-in-docker fs problems
* Upgrade travis VM to xenial
* port\_labels() needs to be smart enough to remap ports for hardware
* Always use latest version of docker-ce
* Move run-travis-test.sh to travis directory
* pytype issue #133 is now fixed
* Refresh grafana dashboards
* pylint
* Disable mirror port in group test which implicitly disables group mode
* When flooding to a port that is being mirrored, the mirrored packet must not have a tag if the mirrored port is untagged
* Require combinatorial flood rules when mirroring VLAN
* pylint
* Set flood flow priority consistently for bridge local/bcast
* Specify flood priorities based on mask
* Sent flowsadds/mods with priority in priority order
* pylint
* Reduce rules sent by stacking/flooding
* Incremental refactor to condense flooding rule calculation
* Sent flowsadds/mods with priority in priority order
* pylint
* Reduce rules sent by stacking/flooding
* Incremental refactor to condense flooding rule calculation
* Common VLAN flood actions
* stack ports must use "b" convention
* Ports always begin with b
* Use boilerplate config where possible
* dp.port\_labels()
* dp.base\_prom\_labels()
* Missed base\_prom\_labels() in faucet\_dot1x
* base\_prom\_labels needed in BGP
* Mock port\_labels()
* Gauge port\_name references
* port\_labels()
* Revert "Influx diag."
* Update prometheus rules
* Upgrade Prometheus client
* debian/control
* debian/control
* Update Prometheus rules for OF counters
* debian/control
* Debian control for Prometheus client
* Var rename
* Send CONFIG\_CHANGE success message
* Decode OFERROR type/codes
* pylint
* Update installation documentation
* Add prometheus metric documentation
* Support pi-gen 2018-11-13-raspbian-stretch
* Update port stats dashboard for faucet 1.8.27
* Preversion 1.8.28

1.8.27
------

* Type check DB parameters for Watchers and check file path is writable
* Bump README version
* Remove unnecessary unit test for chewie
* Build the 8021X ACL
* undo unneeded changes
