CHANGES
=======

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
* 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
* Common VLAN flood actions
* 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()
* Missed ref to self.\_stat\_port\_name
* Use common code for Prometheus port labels
* Revert "Influx diag."
* Influx diag
* Use common code for Prometheus port labels
* 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
* Remove diags
* Var rename
* Var rename
* Sample object
* fctl diags
* Specify 0.4.2
* Specify Prometheus version 0.0.42
* Upgrade Prometheus client
* 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
* pytype 2018.11.6
* Replace netils.build\_byte\_string() with bytes.fromhex()
* Update ryu from 4.29 to 4.30
* Require chewie 0.0.10
* pylint
* Restrict testing of metadata to OVS (only platform currently supporting it)
* Don't allow all\_dps and dps to be set together
* Update sphinx from 1.8.1 to 1.8.2
* Detect requirement-only changes and ensure docker tests are run
* FaucetMaxHostsPortTest assert args
* Fall back to unmapped port if necessary
* Test docs if anything changed
* remap port numbers for port labels consistently
* Use port\_labels()
* FaucetUntaggedMultiMirrorTest test warm starts
* Updating pystyle URL
* Need to handle remapped ports
* More port\_descriptions
* More port\_descriptions for stacking
* Faucet8021XFailureTest needs port\_description
* Loop test needs port\_description
* Need to handle port variables with new labels
* Need port\_description on more tests
* Gauge should use port not port\_name for consistency with FAUCET
* Add port\_description to port variables
* Add port\_description to Gauge variables
* Preversion 1.8.27

1.8.26
------

* Bump version for release
* start\_watchers() test
* Test of\_port\_curr\_speed is present for all ports
* Bootstrap port state, state on DP connection
* Build the 8021X ACL
* Test should backup config file when it changes for later diagnostics
* VLAN representation requires ports be sorted consistently and distinguish tagged/untagged
* undo unneeded changes
* undo unneeded changes
* undoing debugging logs
* pylint & fix display\_packet\_crash
* revert the default port acl pipeline
* attempting to get 802.1X tests to run on hardware
* Add test cases for config parsing errors #2606 & #2607
* Fix #2609, Get correct attribute when displaying error
* Fix #2608, Force router \_\_str\_\_ method to return a string
* Fix #2607, Check ACL rules form dicts
* Fix #2606, stack priority value check
* afl restarts properly ontop of the old data if >25mins of fuzzing data is present
* Fix error with packet fuzzer crashing on startup #2591
* Test interfaces could be assigned incorrectly out of order when hardware testing
* Handle YAML ambiguity in "rule" style ACL with no actions
* check\_faucet\_config should print all DPs
* Run all tests on Travis on new branch
* Handle YAML ambiguity in "rule" style ACL with no actions
* add pydoc. trying to trigger travis-ci.org/bairdo build
* fix syntax error
* Correct handling when 802.1X nfv port changes state
* Revert "Only do travis builds on master and tags."
* Preversion 1.8.26
* replace assertion catching with throwing on ping success
* Only do travis builds on master and tags
* Fix raspbian builds

1.8.25
------

* Bump version for release
* add 8021x diagram
* Own repo TravisCI recommendation not requirement
* fix ping fail check
* actually block unauthenticated traffic
* added 802.1x documentation
* Update images in docker-compose.yaml files
* ValveTableConfig for \*\_acl tables should use sorted tuples
* Clarify when pre-change issue log is recommended
* Don't reply to bogon ARP/ND
* Initial proposal for PR process handling
* Catch exceptions from BGP events. Check for an unresolved VLAN at runtime (e.g. when we get a route from BGP that we can't find a VLAN for)
* Extraneous BGP check for connected network
* Add explicit test for global routing and BGP together. BGP routing should be smart enough to find nexthops in other VLANs in the same router
* change import path
* Upgrade to ryu 4.29
* src\_files.sh should be more helpful expanding pathnames if supplied
* bash syntax
* Only run pylint/pytype on changed files
* diff check sense
* git diff
* Log commit range
* bash syntax
* Log TRAVIS vars
* Commit range #2
* log commit range
* bash syntax
* Use TRAVIS\_COMMIT\_RANGE
* Don't run heavy docker tests if no python changed
* Update pytype.sh
* Update pytype.sh
* Update setup.cfg
* >2 parallel pytypes still too much
* Use python3.6, and own temporary directory per file
* pytype uses python3.6
* Limit pytype parallel runs to 2
* Travis parallel doesn't have minfree
* Per https://github.com/google/pytype/issues/133, pytype needs an importlab upgrade
* Pre-version 1.8.25

1.8.24
------

* Revert back to ryu 4.27
* Revert Ryu from 4.29 to 4.27
* Update debian/control for ryu 4.29
* Update ryu from 4.27 to 4.29
* update chewie library to v0.0.9
* Revert "Upgrade to Ryu 4.29."
* Upgrade to Ryu 4.29
* Update sphinx\_rtd\_theme from 0.4.1 to 0.4.2
* <0.4.0 style
* Prometheus 0.4.0 introduces breaking changes to metric naming
* Switch cisco docs to standarized OpenFlow port number
* unexpressed VID needs a mask
* Add of\_unexpected\_packet\_in counter, and don't try to learn from VLANs that are not expressed on a datapath
* pylint
* pylint
* pylint
* remove print
* fix
* Remove outdated deployment map
* Add note to HPe vendor doc to not configure IPv6 management
* patch lowlevel network interface calls
* patch open\_socket
* update after merge
* Fix hard coded port assignments in FaucetUntaggedHostPermanentLearnTest test
* Pre-version 1.8.24

1.8.23
------

* Revert "Try again to upgrade to pytype 2018.9.26 now using /var/tmp."
* Some OFAs require minimum idle time so add config check
* Try again to upgrade to pytype 2018.9.26 now using /var/tmp
* ND timer config message
* Implement idle\_eth workaround for broken idle time reset on flow refresh, and test
* Bail out of pytype early if one fails
* 2018.9.26 OOMs
* Avoid /tmp which may be RAM
* pytype upgrade and use temporary directory
* Revert "Allow 0-idle on dst rules."
* Revert "Need idle\_dst in slots."
* use add\_vlan in valve\_flood when initialising a vlan flood rules
* initialise VIPs in ValveRouteManagers
* add add\_vlan function for initialising a vlan in managers
* tidying and lint
* Initialise eth\_src table in valve\_host
* refactor initialise\_tables to use base class
* create base class for ValveManager objects
* Need idle\_dst in slots
* Allow 0-idle on dst rules
* Initialise flood table in ValveFloodManager
* Initialise classification table in valve\_pipeline
* remove unnecessary reference to classification\_table
* Use valve\_pipeline to manage egress table
* Pipeline manager manages hosts
* wait\_for\_route\_as\_flow() needs to be more patient (10s sometimes not enough to wait for unresponsive nexthops while re-resolving during test)
* Move pytype options to setup.cfg
* Pipeline manager controls L3 flows
* Add valve\_pipeline class, and goto\_this() table method
* FaucetUntaggedHostPermanentLearnTest
* Revert "delete\_existing always."
* delete\_existing always
* Revert "Remember idle\_timeout and jitter it."
* Remember idle\_timeout and jitter it
* nd\_neighor\_timeout
* pylint
* Better default for cache guard timer
* ARP/ND timeout check
* Default ARP timeout should be much lower
* Update table definitions
* Bump version for release
* Take opportunity learn L3 source when proactive learning
* Common call to proactive resolver
* Improve wait for flow diagnostics
* Incremental python3 cleanup
* Incremental python3-cleanup
* flowdel() return type inconsistent
* pylint
* Simplify dot1x reset
* tcpdump\_helper() uses terminate not kill
* flowdump diagnostics
* pylint
* Verify length of IPv6 RA
* Add random shuffle for packet out ports always (in case sent in same packet out)
* Rand VID test might pick same VID
* Group test needs to reset combinatorial\_port\_flood
* Exclude multiple LACP members from controller initiated flooding
* Consistently enable combinatorial flooding for special cases
* Don't add no-op pop vlan if no untagged ports to flood to
* pylint
* pylint
* pylint
* Two state Prometheus filter
* flow dumper now requires table ID always, and keeps most recent table dump
* Use Prometheus not log scraping for StackRingTest
* readd only
* Build VM images on gitlab
* Pre-version 1.8.23

1.8.22
------

* Move LACP active to fast\_advertise()
* Rename services, reduce slow advertise to 15s
* Add config for fast interval, incremental refactor
* Revert "Refactor into fast/regular expiry/advertise."
* Refactor into fast/regular expiry/advertise
* Bump version for release
* LACP can cause a loop
* Right size LACP packet on receipt
* debug log LACP
* LACP active should set active flag
* Some OFAs can't get mask on eth\_dst rule
* Avoid unnnecessary flowmods cold starting LACP port. Strictly verify LACP packet size
* LACP content change
* Rate limit LACP response
* Reply to LACP packets if different at all, or only after 1s if the same
* Only attempt to set non-0 metadata fields in TFM
* Disable metadata write/match if egress pipeline not in use
* Increase max len for LACP
* Use actor sync flag for LACP state not local
* test lacp\_active both sides
* Basic test for active LACP
* Clear last LACP packet
* pylint
* pylint
* Don't set LACP sync until received a packet
* Check defaults/types is synchronized
* Missing default type for lacp\_timeout
* fix logic in metadata mask writing
* pylint
* pylint
* dependencies upgrade
* pylint
* finalize() compact syntax
* test\_gauge mock confusion
* pylint
* ACL change reporting
* Deconflict port ACLs and 802.1x
* finalizing must be recursive
* Disable 8021X success test until fix for conflict with ACL change detection
* pylint
* ACL logging
* More efficient OrderedDict init
* Handle dict with any kind of key
* Dict ordering affects conf hash
* Simplify 8021x config check
* Add ACL change logging
* EAPOL constant
* Consistent 8021X ACLs
* pylint
* Attempt more shards to reduce worst case straggler runtime
* OTT check that new config has been written
* with syntax config file write
* Revert "del\_auth\_mac() returns a list."
* Chewie won't do IPv6 yet
* Test coverage for dot1x config. Free RADIUS uses IPv6 port
* Chewie format MAC addresses
* coverage
* del\_auth\_mac() returns a list
* Reorder 8021x wait
* 8021X test cleanup
* Send LACP packet on port startup only after flap
* Test active LACP, send LACP on port startup
* verify\_traveling\_dhcp\_mac() should retry slower
* Deflake 8021x test
* pkt\_meta.port
* Experimental active LACP
* Defaults for LACP packet
* Allow multi\_out: False (one packet out per port)
* Allow strict cookie check to be disabled
* ARP min/max are different
* ARP reply is bigger
* Don't require barriers for flow adds/mods and packet outs
* Aggressively right size ICMPv4 echo messages
* Able to aggressively right size packets by eth type
* faucet\_metrics definition consistency
* Update Makefile to reflect new codebase
* bad find and replace I guess
* lint
* add egress table to full pipeline config test
* Improve readability
* Use egress table for output
* Allow metadata writing and matching in fakeoftable
* Install output flows in egress table
* Include vlan\_vid in egress\_table matches
* allow inclusion of metadata when constructing matches
* Create faucet\_metadata.py for metadata related functions
* refactor \_port\_add\_vlans
* include egress table in pipeline when configured
* Add egress table to pipeline
* Add egress\_pipeline configuration option
* fix typo
* Increase ICMP size for IPv4
* Include METADATA\_MASK constants
* Include metadata\_match and \_write in ValveTableConfig
* fix rebase
* make classification table optional
* Move permanent learn rules into classification table
* Remove fib from eth\_src next\_tables
* Move bogons to classification\_table
* Move RouteManagers to use classification table
* Build classification table on datapaths
* include classification table in pipeline
* Convert magic numbers to increments in faucet\_pipeline
* remove acls from nfv
* nfv sw port can now be set. Each valve should be able to have a different value
* Preversion 1.8.22

1.8.21
------

* Use newer grafana and prometheus versions
* Allow iperf retry on client connect failure
* Add mirroring to global router test
* Remove iperf diags
* static gw workaround by address family
* static neigh workaround
* Add static router neighbor for global router test
* Add more iperf diagnostics for client
* Dump logs for failed tests
* More iperf diagnostics
* iperf diagnostics where iperf client or server does not start
* docstring
* docstring
* test dot1x works after conf reload
* Re-enable FaucetTaggedGlobalIPv6RouteTest with increased timeout
* Increase timeout for iperf client connection
* Revert "unit test with chewie"
* Hairpinning a port disables eth\_dst refresh optimization (because either eth\_dst or eth\_dst\_hairpin might not be used)
* Bump version for release
* allow port status to be changed - dot1x
* Revert "Add random fraction of a second to thread schedule jitter."
* Revert "Run stack link expiry less often."
* pylint
* Add Generic valve type (all defaults)
* Run stack link expiry less often
* Global IPv6 route test still failing under CI
* Add random fraction of a second to thread schedule jitter
* Allow config exclusion of meters for OVS
* Reenable Global IPv6 test
* Disable meter support for OVS while troubleshooting
* Skip tagged global test for further troubleshooting
* Add valve\_service processing time
* Allow setting ping timeout
* Update sphinx from 1.7.9 to 1.8.0
* Enable FaucetTaggedGlobalIPv6RouteTest
* pylint
* pylint
* Skip IPv6 global route test for now
* IPv6 Global router test. Fix IPv6 tuple test
* No need for HOSTPREFIX
* Use ipaddress.ip\_interface()
* Template ping/fping
* Global routing constants
* scapy template
* More efficient drop rule accounting
* Use eth type constants
* Incremental change to Global routing test for IP independence
* Implement port stats stale flag
* Need to track port by VLAN cache add time
* pytype
* pytype
* Smarter avoiding of updating Prometheus learned\_macs on a port
* Avoid updating Prometheus learned\_macs if learned\_macs did not change
* Relax default learn jitter further
* Utilize OF capability to multiply output packet on many ports
* Relax learn jitter further to spread L2 relearn load
* \_controller\_and\_flood()
* IP version independant handling of interception/flooding of IP versus ICMP traffic to VIPs
* Don't not direct ICMP to controller, otherwise we can't use it for learning
* cache guard time must be an int always
* idle timeout on eth\_dst rules should always be greater, not the same, as src idle timeout to avoid unnecessary flooding
* Do not idle timeout hairpin flows
* Stricter ARP diversion to controller
* Explicitly drop unhandled ICMPv6 that was unicast to FAUCET
* Remove no-op check for valve\_packet.IPV6\_ALL\_NODES
* Revert "Remove no-op IPV6\_ALL\_NODES."
* Remove no-op IPV6\_ALL\_NODES
* refresh rules distinct from delete\_existing
* Avoid needlessly refreshing eth\_dst rules if a host remains on the same port
* cache guard time should be much more relaxed (to avoid rule thrash caused by link local IPv6 NS/reachability)
* Test NS for link local address
* Avoid multicasted ICMPv6 NSs for non FAUCET VIPs to controller
* vip table should check eth\_dst for ICMPv6
* btos() no longer needed now all python3
* cache\_update\_guard\_time default up to 17s from 7
* Ignore all nodes messages in control plane earlier without reparsing packet
* add acl for dot1x based on port's dot1x flag
* Test adding a VLAN
* Trivial port metadata fuzzing
* pylint
* pylint
* Test deletion of a port
* Test coverage for deleting VLAN
* Test coverage for ACL changes
* Test coverage changing ACL on a port
* Add test infrastructure to check config reload type
* prom\_inc() check incorrect
* test\_valve.py header
* pylint
* check flows added
* declare var before use
* change import style after rebase
* radius options
* remove exception catch
* unit test for chewie
* test chewie interface
* test chewie interface
* FaucetTaggedGlobalIPv4RouteTest needs NETNS
* Since we are apparently limited to creating one netns at a time, serialize netns based tests
* Workaround the apparently limit of one netns per test by cleaning up netns whether a test passes or fails
* Shorten timeout for ping
* get\_host\_netns() needs to be precise
* Rewrite test should use private MAC addresses
* Pre-version 1.8.21
* get\_netns\_list() can include other test hosts

1.8.20
------

* Don't need to verify flow since verifying functionality
* Verify hairpin routing
* Mark ZodiacGX testable with meters
* macvlan mode default should be vepa
* Simplify hairpin test
* add\_macvlan() allows configuration of mode
* Bump version for release
* Global router test verifies routing performance between VLAN/subnets
* Use macvlan VEPA mode in global test for MAC address diversity and enable verification of routing flow counters
* Revert "https://github.com/google/pytype/issues/133 is fixed so don't have to run under parallel."
* Revert "Run pytype by top level directory to limit memory usage."
* Revert "Still need to use parallel for pytype as pytype uses lots of memory."
* Still need to use parallel for pytype as pytype uses lots of memory
* Run pytype by top level directory to limit memory usage
* https://github.com/google/pytype/issues/133 is fixed so don't have to run under parallel
* Update pytype from 2018.8.10 to 2018.9.7.1
* Update sphinx from 1.7.8 to 1.7.9
* verify push\_vlan()
* ACLs should verify set\_fields
* Revert "ACLs also verify set\_fields."
* ACLs also verify set\_fields
* set\_field() should verify table config
* Verify all goto\_tables()
* Verify goto table/miss table config
* Fix unit tests for goto fix
* Set eth\_dst/hairpin/vip consistently
* Global router pylint
* Add link to pytype issue
* pass extra options for chewie v0.0.7
* removed catch exception
* Revert "Pregenerate pyi for mainline faucet."
* Pregenerate pyi for mainline faucet
* Global router test should have hairpin\_unicast enabled
* missed next table for port\_acl
* Port ACLs can skip VLAN validation
* Need to check py3 version later
* build matrix python 3.[46], but run docker tests under 3.6 only
* Log resolution attempt for non-connected network
* Handle packet not in faucet\_vip network
* pylint
* Add hairpin\_unicast config
* Add config for hairpin table size
* Configure next tables for hairpinning
* Port hairpinning now uses hairpin table
* Make DP output table dynamic
* eth\_dst\_hairpin should match on VLAN also (so same MAC in different VLANs handled)
* Further reservation of eth\_dst\_hairpin table
* route manager doesn't need to know flood table
* Reserve eth\_dst\_hairpin table
* revert - revert dot1x tests with chewie v0.0.5 (radius & statehandlers)
* revert - revert chewie-multivalves
* WIP dot1x rules setup
* Pre-version 1.8.20

1.8.19
------

* Revert "Merge pull request #2377 from Bairdo/chewie-radius"
* Rollback to chewie 0.0.2
* Revert "Merge pull request #2380 from Bairdo/chewie-multi-valves"
* Chewie 0.0.7
* chewie 0.0.6
* Preversion 1.8.19

1.8.18
------

* Need to key off of table\_name, not ID
* pylint
* Confusion of missing/unregistered tags
* chewie version 0.0.6
* run dot1x tests in parallel
* Log labels incorrect for diagnosis
* Fix unit test for VIP table
* TFM autosizer more generous with VLAN table
* Rightsize L3 test
* VIP table can goto flood
* next tables must be iterable
* Rightsize scale L2/L3 tests for mostly TCAM hardware
* chewie config options for radius server ip/port/secret & chewie id
* maybe fix pytype error?
* Only flood down one member of LACP bundle
* vip table can forward to eth\_dst
* missed reference to new\_tables
* Actually use the next tables
* Bump README for release
* Handle configuration of very short maximum backoff interval
* Need to share state on table based variables so labels can be synchronized across all DPs
* handle cases where dot1x not enabled on first (or any) DPs
* Add random jitter to nexthop retry time
* Test delayed resolution
* Make resolution\_due() clearer
* pylint
* Use common resolution\_due() method for nexthops
* Update sphinx from 1.7.7 to 1.7.8
* Targeted nexthop resolution uses unicast address
* IPv6 neighbor timeout should be much shorter
* Use different IPv6 neighbor timeout
* Revert "Revert "Separate timer for ND from ARP.""
* Need to check next retry time on unresolved nexthop
* Revert "Separate timer for ND from ARP."
* Simplify multicast address calculation
* Test repeated NS
* Separate timer for ND from ARP
* pylint
* pylint
* IPv6 hop limit critical
* Hop limit in advert must be 255
* Rename arp\_neighbor\_timeout to generic
* Don't reset cache entry every time when proactively resolving
* Missed ref. to cache gaurd time
* Reset ND timeout to 250s Allow configuration of L2 cache guard time
* need main() in check\_faucet\_config
* Make IPv6 ND timeout separate from ARP
* Set RA hop limit to 64 not 255
* pylint
* Raise min lint score to 9.4
* pylint
* pylint
* Spelling
* pylint
* pylint
* pylint
* pylint
* pylint
* pylint
* FAUCET should reply to unicast ARP requests
* missed reference to new\_tables
* pylint
* pylint.,
* pylint
* pylint
* pylint
* pylint
* pylint
* Actually use the next tables
* pylint
* pylint
* pylint
* Raise min lint to 9.3
* pylint
* pylint
* Move minimal pipeline definition to faucet\_pipeline. pylint
* update to chewie v0.0.5
* Should not have tags/metrics as class attribute
* lint
* Handle switch sending us unknown VLAN ID in FAUCET MAC when global routing is enabled
* dot1x on multiple ports
* Add tests for configuring next\_tables
* next\_tables must be tuples
* get table\_id and next\_tables from default for acls
* Have easily accessible default configs
* Tidy FAUCET\_PIPELINE
* Include next\_tables in valve\_table\_config
* Include table\_id in ValveTableConfig
* calculate vlan\_port\_factor when needed
* Add config tests validating dp.tables
* Dont build table config options for tables that wont be used
* include vlan and port match in acl.build
* Move all table configuration into \_configure\_tables
* Store matches, set\_fields and meter in acl object
* remove mininet pty workaround (fixed upstream)
* Test name was too long. Timeout flow removed check. Start radius in setup
* dot1x tests with chewie v0.0.3 (radius & state handlers). Tests check all dot1x prometheus variables
* Should use next retry time, primarily when considering resolving
* Use cached nexthop type deque
* Pre-version 1.8.18

1.8.17
------

* copy canonical table config
* flow is most likely a packet out so check that first
* global\_routing
* Make \_stateful\_gw() cheaper
* Only log ND/ARP activity if causes a state change
* Simplify icmpv6 checks
* Simplify CPN checks
* Reuse of gw advertisement
* Protocol independant VIP response handler
* Reuse resolve\_gw\_on\_vlan/port
* Add support for pip versions >= 10
* move part of valve.\_inc\_var() to faucet\_metrics.inc\_var()
* rename valve.\_port\_labels() valve.port\_labels()
* More use of ip\_pkt()
* Re-use \_ip\_pkt()
* Add dp & port metrics for failure/logoff/success. Add handlers for failure/logoff. Add partial test for logoff
* Catch problem with resolver not trying to resolve a gateway from coldstart
* Redo avoid double lookups
* Should check that cache entry is placeholder when resolving
* Revert "Avoid double lookup."
* Fix versions to match requirements.txt
* Add packaging test for comparing versions
* Test mirror port resolution
* use hex to remind me that this is a dictionary not a list
* validate valid mac validation
* Add test\_override\_port object validation
* Avoid double lookup
* Provoke default route add
* Mark 8021X test software only
* Remove notify event for 8021X
* 8021X test cleanup
* pylint
* Yakkety and zesty are EOL
* Recursively include requirements.txt in test-requirements.txt
* add a 1x success/failure counter
* distlib, packaging et al still fail
* Force deterministic python version for pytype
* Bump version for release
* pytype
* pylint
* Don't skip test\_packaging.py (works fine when -V3.5 is specified)
* Update sphinx from 1.7.6 to 1.7.7
* pytype
* Remove resolve request from pending list if we received a response recently
* Unnecessary condition for nexthop sorter
* Make nexthop refresh check cheaper
* More efficient nexthop fresh
* Use "instant" for grafana table
* Reduce calls to dedupe\_ofmsgs()
* Missing unresolved\_gateways
* Packet outs are always output in random order
* list/list()
* Minimum version for ZodiacGX
* Use no-op packet in to clear resolver queue
* Keep unresolved gateway list in VLAN
* Revert "Use no-op packet in as opportunity to clear resolver queue."
* Use no-op packet in as opportunity to clear resolver queue
* Shuffle nexthop retries always no matter how many retries
* pylint
* Import cleanup
* Need to preserve DP status across reloads
* DPID variables incorrectly set to 0 on config reload
* add \_get\_dps\_as\_dict and tests for stack config
* Verify DP, Port and Vlan objects with basic config
* List ZodiacGX in vendor documentation
* wildcard\_table used by multiple conf objects
* check eapol host receives success/failure message
* remove no longer used methods/classes from dp.py
* increase tcpdump timeout to 30s, and removed print tcpdump
* remove sleep from test
* Initial ZodiacGX docs
* Another ignore of stale descriptor
* Don't worry about OSError on socket when cleaning up
* Move config failure tests to the end of config tests
* NoviFlow Valve must use barriers
* Preversion 1.8.17
* Reduce repetition; add timing for tests
* Run IPv6 test\_fuzz\_controller() as long as we can

1.8.16
------

* Set locale to keep python read() happy
* Verify ICMPv6 payload type
* Add missing dependencies
* ipaddress only required for python2 which we don't support
* Fix case
* Add unit test for testing packaging
* Don't check test\_packaging:
* Handle attempt to dump a binary log file
* Version bump
* Now python3, so need to force UTF-8 locale
* Don't need to check route manager active
* host route expiry/re-resolution can run much less often
* host\_fib()
* ofa\_match
* is\_host\_fib\_route()
* Move is\_host\_fib\_route() to vlan
* Don't lookup faucet\_vip when resolving until needed
* Disable ofa\_match for route test as not supported all hardware
* add test for 802.1x that fails (wrong password)
* unit test for chewie+faucet. Added new variable for setting a hosts 'inNamespace'
* Alternate drop rule verifier
* Revert "Avoid even trying to apply mask to arp\_tpa."
* Avoid even trying to apply mask to arp\_tpa
* Remove match\_exact verifier, not used
* Fix hardware test selector
* Revert "Revert "Remove group\_table\_routing (which was incomplete - did not handle removal of nexthops in particular - and has no advantage of the existing exact-match eth\_dst).""
* Revert "Remove group\_table\_routing (which was incomplete - did not handle removal of nexthops in particular - and has no advantage of the existing exact-match eth\_dst)."
* Expand global router test to 64 VLANs
* pylint
* stateful gateway for V4
* \_stateful\_gw for IPv4
* More checks packet source/dest is a valid stateful gateyway
* Remove group\_table\_routing (which was incomplete - did not handle removal of nexthops in particular - and has no advantage of the existing exact-match eth\_dst)
* FaucetUntaggedNSLoopTest
* Migrate mininet-based integration tests to python 3
* pytype
* Add workaround to disable ofamatch for port mask matches
* Fix FaucetTaggedICMPv6ACLTest
* IP tuple test matches
* FaucetConfigReloadTest matches
* ACL tests need OFA required fields
* Now that we use OFA based matching, must specify proto
* pytype
* ofctl implements table/match pre-filtering
* Allow passing table\_id to ofctl
* Avoid more json conversion
* yaml safe\_load
* Avoid json dumps/loads
* Unnecessary reparse\_ip()
* Avoid unnecessary ARP field reparsing
* Move link\_and\_other\_vips to vlan
* More use of is\_link\_local
* Use ipaddress is\_link\_local
* Move global VLAN encoder/decoders to valve\_packet
* Reduce number of times packet complete needs to be checked
* pylint
* Add profiling helper
* Preversion 1.8.16

1.8.15
------

* Remove proactive\_learn which is now the default
* Update PyCharm docs to support newer versions
* Bump version
* Redundant call to parse VLAN header
* Avoid reparsing packet headers on packet in
* Increase GlobalRouter test to 32 VLANs
* Allow per-Valve GROUPS flag
* Allow configuration of minimum and maximum wildcard table sizes
* Better scale minimums for L2/L3 nexthops
* Better table scale tests
* Better estimation of table sizes for TFM
* Fix note
* TFM pipeline loader doesn't need to be a class
* Split faucet and gauge unit tests
* miss\_table\_name
* flowmod()
* miss\_goto
* Miss rules configured from pipeline definition
* Updated NoviFlow documentation to use GenericTFM starting from NW400.5.4
* A stack edge, receiving a non-broadcast packet from the root, can assume the root has learned it
* Log age of last LLDP received
* Don't run unit tests twice in sanity shard
* Remove out of data faucet\_bgp tests (already tested by test\_valve.py)
* Update unittests to be more robust on internal data type changes
* Remove config unittests
* Add main methods to all unittest files
* Refactor ACL validation so it is performed by ACL object
* pylint fixes to work on new test base image
* Make pip cache usage less confusing
* Update test instructions when using a cache
* missing import
* lint
* verify types before accessing values in ACL init
* Add test for configuring acls without 'rule' key
* tidy acl initialisation
* Fix acl configuration interference
* clean up acl actions resolution
* Preversion 1.8.15
* Fix doc header

1.8.14
------

* Fix rpi image tutorial
* Global routing test includes down nexthops
* Bidirectional checks in global router test
* Don't provision non-global VIP FIB entries, when global routing enabled
* Bump version
* Stricter checks in proactive learning
* Can only responded to RS from link local
* Support SOFTWARE\_ONLY tests
* Obsolete TFM comments
* Assume ARP packet first. Verify local VLAN switching performance
* TFM loader needs to know if switch can do DEC\_TTL
* Common PacketMeta log packet function
* Speed up globl routing test
* Skip routing handler entirely up front if routing not configured on VLAN
* Correct vip\_map result
* vip\_map tuple, faster global routing test setup
* Need to check faucet\_vip None
* Remove vip\_map tree from VLAN
* pylint
* pylint
* Don't iterate on VLANs if no route managers
* pylint
* PacketMeta should use slots. Stricter ARP header checking
* Make control plane handler more efficient
* Make vip\_maps IP version specific
* Make global router VLAN lookup less expensive
* Make VIP lookups less expensive
* Make routed\_vlans() less expensive
* More basic Prom var testing
* Test basic prom vars
* Don't need to copy() tables
* verify LACP status
* Remove class attributes from tests
* attributes
* Don't use class attributes on Conf objects
* pylint
* Move RouteManager to slots
* Move NextHop to \_\_slots\_\_
* Move HostCacheEntry to slots
* correct \_\_slots\_\_ for Valve
* Move Valve to \_\_slots\_\_
* frozenset
* Fixing pylint error
* Fix mutable static class variables and port status
* When global routing, encode source VLAN in eth\_dst, so we don't need to look it up
* Log port when receiving ND advert
* Preversion 1.8.14

1.8.13
------

* Better GlobalRouting test
* Disable global routing optimzation by default
* Clarify ND advert log message
* Don't need in port match on table 7, static pipeline
* Dump table IDs, correct NF static pipeline
* pytype
* pylint
* Bump version
* Add TODO for optimization
* Limit global router test
* /Enable global router test
* skeleton FaucetTaggedGlobalIPv4RouteTest
* Clean up ScaleTest
* Update pytype from 2018.6.19 to 2018.8.10
* index out of range exception
* Correct port\_acl enabled test
* skip port\_acl if not configured
* pylint
* Don't configure port\_acl table if not present
* true -> True
* proactive learn v4 true
* \_global\_routing
* Docs
* Conflict with scale test
* Only bootstrap VLAN from VIP if using global router VID
* ipaddresses need to be strings for notify
* ND solicit handler should consider src\_ip
* self.dp.global\_vlan
* Make global\_vlan configurable
* Incremental global router implementation
* use clib\_mininet\_tests.py after rename
* Add placeholder AnyVLAN
* Don't flap port state yet for LACP
* Should wait for port down before confirming LACP status
* flap switch ports during LACP test
* Fix broken port\_lacp\_status Prometheus variable
* verify\_no\_bcast\_to\_self() should check NSs aren't looped
* Wider use of unicast loop test
* Wider broadcast test
* pytype false positive on FileNotFoundError
* Disable state keeping for LINK\_LOCAL unless a host is a gateway
* Add faucet Raspberry Pi image documentation/tutorial
* Revert "Maintain link local FIB, but do not write FIB entries to DP - we don't want to provide a routing service."
* Maintain link local FIB, but do not write FIB entries to DP - we don't want to provide a routing service
* Stack destinations must be learned at root
* Add traveling MAC test to stacks
* Can't verify output of scapy
* TODO for traveling mac test
* Implement traveling DHCP request (host moves between all ports)
* Use scapy template
* Speed up test startup
* Handle missed down event on a port flap
* Unnecessary port down before port up, on port that was already down previously. Log port description with state changes
* pylint
* Check for overlapping VIP subnets in routers
* Rename clib
* Move stacked hosts around
* Don't package TFM files
* Tidy unneeded TFM items from documentation
* Revert "Disable live changes to stack topology."
* Revert "Rollback stack topology calculation."
* Preversion 1.8.13

1.8.12
------

* Rollback stack topology calculation
* Disable live changes to stack topology
* Need to merge masks where mask present overrides always
* LINK\_LOCAL for v4
* Bump version for release
* Add link local VIPs to FaucetUntaggedIPv6InterVLANRouteTest
* Do not inter-VLAN route IPv6 link local subnets
* More thorough check that a dst\_ip is not a VIP on any VLAN
* Add comment re future eth\_type table
* JSON files gone
* Move TFM table size configuration in to DP. Remove obsolete per-Valve JSON
* Update ryu from 4.26 to 4.27
* Update ryu from 4.26 to 4.27
* Make eth\_dst exact match
* eth\_dst is now exact match
* Simplify MAC learning
* Configure miss flow for eth\_dst to flood
* coverage for get\_config\_dict()
* Remove unused all\_valve\_tables()
* Delete unused TFM parser
* All TFM properties now dynamically generated
* Remove more OFPTFPT\_APPLY\_ACTIONS
* Simplify verify\_flowmod()
* Fix priority 0 flowmod check
* pylint
* OFPTFPT\_APPLY\_ACTIONS automatically generated
* ACLs can enable meter TFM
* Handle TypeError from ofctl
* Run time check for exact match tables
* Move coverage file location
* Clean up by IPV helpers, remove unnecessary dyn attributes
* Conf objects make more attributes immutable
* Use metrics helper
* Use readlink -f
* Move LLDP code out of valve.py
* Type check FAUCET LLDP TLVs
* Test for stack islands
* pylint
* Port ACL table could unnecessarily require VLAN VID match
* Incorrect set\_fields set for VLAN ACL table
* allow: 1 should work with output: ACL actions
* update unit test
* Mininet test for the correctness of stack loop prevention
* extend string of stack topo to support ring topo
* update unit tests
* Remove "has\_changed" state
* Do not update stack-graph on dp connect/disconnect events
* Test on stack graph update on topology changes
* Add port option to rcv\_lldp
* Update stack graph upon link-state events
* Call Valves to update stack graph
* Add methods to update stack graph
* Need a method to add/remove stack link to/from the stack graph
* Explicitly drop ECTP (eth type 0x9000). q.v. https://mail.openvswitch.org/pipermail/ovs-dev/2016-June/316970.html
* Don't delete flows for ports in the same LACP controlled LAG
* remove duplicate VID VLANs
* Revert "Revert "Prevent duplicate VLAN VID.""
* Fix missing ACL log message
* Fix compatibility with sphinx 1.7.6+
* Reduce min coverage to 92
* Preversion 1.8.12

1.8.11
------

* Use copy of generated tables
* Use copy of FAUCET\_PIPELINE
* Bump README version
* Revert "Prevent duplicate VLAN VID."
* fib table fix
* Prevent duplicate VLAN VID
* Fix unit test wrapper to run from base dir for PBR. Increase coverage back to 93%
* dp.dp -> dp
* Simpifiy use of ValveTableConfig
* More generic detection of pipeline change
* Duplicate acls.append(self.acls[acl])
* Update sphinx\_rtd\_theme from 0.4.0 to 0.4.1
* Update sphinx from 1.7.5 to 1.7.6
* Break/fix
* Break/fix
* Pylint
* Pylint
* Use override table config pattern
* Clean up table\_config
* OFPTFPT\_APPLY\_SETFIELD dynamically generated
* OFPTFPT\_APPLY\_SETFIELD is now dynamically generated
* Test coverage
* Simply ACL reload test
* test coverage for DP ACLs
* vlan\_match\_tables not used
* Test coverage
* Break/fix
* Expand ValveTableConfig
* pylint
* Prime another reload test for TFM switches
* Prime TFM based switches for ACL tests
* pylint
* Use frozenset for dynamic attributes
* More tuple references
* Make tagged\_vlans() a tuple
* Unnecessary lists for tagged/untagged ports
* Make more DP attributes immutable
* Make more VLAN attributes immutable
* Missed reference to dyn\_running
* Make some more attributes immutable
* TODO for mutable attrs on Confs
* Enforce not setting attribures on finalized Conf objects
* Avoid DP attributes for pipeline
* All tables now get TFM matches
* TupleTest should require no wild cards
* Add exact\_match attribute to table
* Add note that matches are automatically configured
* Disable METER
* pytype
* Re enable test\_flow\_stats
* Fix IPv4 tuple test fields
* pylint
* pylint
* tuple test primes pipeline
* pylint
* missing TFM wildcards
* Non TFM pipelines have no TFM flows
* Temporarily disable test\_flow\_stats
* Log pipeline changes
* Log VIP IPs and pipeline matches
* Incorrect sense for TFM ACL match change
* Improve config debug messages
* Always provision in\_port for table 0
* Dynamically generate ACL TFM matches
* Only build raspbian image on git tag
* DP object parses matches from ACLs
* Wait longer for flow counters to update
* ofctl port stats/desc should actually use port no
* host port stats returns stats for all ports
* Avoid batching of port status change by ofctl
* Retry set port status. Rename tests to SameVlan/DiffVlan
* max\_loadavg() must be int
* Log include file inclusions
* Increase parallel test over subscription
* IPv6 verify\_invalid\_bgp\_route() REs
* verify\_bgp\_invalid\_route() REs
* More log REs
* Fix REs for log lines
* Make test failure message when OFErrors logged more helpful
* Stage name changes, cd simplify & image version number
* Faucet raspbian image with gitlab CI
* Add tests for new vlan route format
* configuration inconsistency fix #1836
* Preversion 1.8.11

1.8.10
------

* Enable barriers for OVS
* Revert "Make VIP priority depend on VLAN VID."
* Revert "Avoid arp\_tpa."
* Avoid arp\_tpa
* Make VIP priority depend on VLAN VID
* FAUCET VIPs added before flood
* Revert "Disable stack edge optimization."
* mac\_addr\_is\_unicast() incorrect for 34 prefix
* Disable stack edge optimization
* Min coverage 92
* TFM now sent by datapath\_connect()
* Avoid switch reconfig on cold start config change
* Move delete all flows to switch\_features
* Version bump for release
* Skip eventlet for pyup per https://github.com/pyupio/pyup/issues/273 (Ryu needs eventlet pinned)
* If learning for a stack edge, we can learn immediately
* ofproto\_to\_ryu.json no longer needed as a file
* Remove more TFM boilerplate
* Improve OF pcap text output parser
* Remove test directory if empty
* Synchronize TFM set\_field
* Remove unnecessary VLAN actions
* Remove unnecessary set\_field from VLAN table
* Remove unnecessary actions from destination table
* Ethernet source table doesn't set set\_fields
* Fix generation of OFPInstructionId
* OFPTFPT\_INSTRUCTIONS is now automatically generated for TFM
* pylint
* OF match TFM automatically generated for non-ACL tables
* Don't statically configure matches
* Bracket pipeline reprogramming with disabling port status changes/packet ins
* Synchronize TFM pipeline
* Support skipping of dynamically generated TFM features
* Synchronize Aruba pipeline config with verified FAUCET pipeline config
* vlan table also needs eth\_dst mask
* Fix eth\_dst mask in eth\_src
* Verify flow mask flags
* Add mask field to pipeline definition
* Docs tidy
* Fix for unhashable key in config found during fuzzing
* Make ROUNDS a variable
* Document faucet\_mac
* Fuzzers don't need python2
* Preversion 1.8.10

1.8.9
-----

* pytype
* Bump version for release
* Add Bob Lantz
* pylint
* Somewhat generalize star-stack topology implementation
* Make pip install quiet again
* Special case for 2 layer stacks - leverage DP-local flooding
* Compute longest path to root length
* pytype
* pylint
* Remove dependency on Ryu for python2
* pytype noise
* pytype noise
* mininet library check needs to more flexible
* ConnectionError conflict
* pylint
* Restore min pylint to 9.2
* pylint
* pylint
* pylint
* pylint
* pylint
* pylint
* pylint
* Reset min pylint
* Reset min pylint to 9.0
* pylint
* pylint
* Reduce lint score for py3 based lint
* py2 doesn't need ryu
* Re-enable external pip cache
* Move influxdb dependency check for py3
* Reduce dependencies for py2
* Fix pip/pip3
* Split py2 requirements
* Remove astroid from test-requirements.txt
* Disable pip quiet
* Disable pip cache
* FaucetSimpleTest should support hardware
* Update the capabilities for the Cisco C9K switch
* Use more efficient wildcard delete for in\_port
* Log active table IDs, and use more efficient wildcard delete command
* vlan\_match\_tables() needs to be a set
* Don't try to delete unconfigured tables for VLAN match
* Missed call to self.dp.reset\_refs() causes VLAN associations to be lost if all ports change
* Preversion 1.8.9

1.8.8
-----

* Fix duplicate output when a port mirrors more than one other port
* Use warm start for MultiMirror test
* Test case where both ports are mirrored
* Version bump
* SanityTest misreports conflicting processes running on ::1
* InfluxDB test fails on hardware that has unsupported counters (report value as 0)
* Test InfluxDB server has to be IPv4
* InfluxDB python client doesn't support IPv6 addresses
* Reduce parallel test max by half
* Move Prometheus and ofctl test traffic to ::1 from 127.0.0.1
* Leave TCP config alone. Don't set self.net to None on stop
* Use recycle not reuse
* Don't start any controllers on a remap switch for hardware testing
* Deconfigure switch controllers before net.stop()
* update version of grafana
* update version of influxdb
* fuzzer pylint
* Improve pylint score for fuzz\_packet.py
* Add AFL
* Improve pylint score for display\_packet\_crash.py
* Remove debug statements from MultiDB test. Implement LISTPORTS command for test port server
* src\_files should use find, which is smarter than ls
* Disambiguate test port names with PID
* explicitly throw errors if they occur
* valve test file moved
* Add experimental API test app back to unit tests
* Pin docker-ce 18.03.1~ce-0~ubuntu
* Revert to 17.09.1~ce-0~ubuntu
* Dump travis docker-ce versions
* Pin docker to 17.12.1
* Pin docker version
* Update path to unit tests in documentation
* Rename/reorganize test scripts
* Non hardware switches in software stack should be OVS
* Clean up our gitlab CI build script
* Preversion 1.8.8

1.8.7
-----

* Bump README version
* Handle reconfiguration after not receiving any routes from BGP peer
* BGP should re-add routes it has learned on VLAN reconfiguration
* Atomic replacement of BGP speaker structure
* Incremental refactoring to make BGP warm starts safe
* Revert "Revert "Don't need to apt-get locales now in base docker test image.""
* Clean up BGP config time checks
* Avoid eventlet 0.23 for Ryu
* Revert "Don't need to apt-get locales now in base docker test image."
* Don't need to apt-get locales now in base docker test image
* Update ryu from 4.25 to 4.26
* Update ryu from 4.25 to 4.26
* Update HPE Aruba documentation for 5400R
* Upgrade docker images
* Explicitly mention raspbian in install docs
* Exception handling when a file is not found
* Preversion 1.8.7

1.8.6
-----

* version bump
* pytype
* Stacking tests should remap hardware interfaces
* Stacking should allow port references
* Update pytype from 2018.6.18 to 2018.6.19
* Simplify packet in handler
* Update config\_parser\_util.py
* Update config\_parser\_util.py
* Re-enable FaucetUntaggedRandomVidTest test
* Update note for MultiConf test
* Revert "Retry multiconf test."
* Retry multiconf test
* update pika library to latest
* Greater order
* Re-enable FaucetTaggedScaleTest with relaxed learn count requirements
* "p"
* Need to force UTF8 locale for pytype
* Try pytype in V2.7 mode only
* Attempt pytype 2018.06.18
* Dump pytype header
* Run pytype without parallel
* Don't parallelize pytype
* Attempt pytype upgrade by skipping mininet
* Disable ScaleTest while investigating flakes.≈y
* Temporarily disable FaucetUntaggedRandomVidTest to investigate flakes
* Add rasp pi docker-compose for rabbitmq adaptor
* Add simple VLAN scale test
* Cabling counters should be counters, not gauges
* Need to run apt-get update in case base image is out of date
* Preversion 1.8.6

1.8.5
-----

* Bump version number
* Don't try to send LLDP for stack ports if LLDP is not enabled
* Don't automatically enable LLDP for stack ports
* Double check lldp\_beacon
* Log DP name as well as ID
* Cleanup used of namedtuple
* Improving diagnostic error message
* Should not edit LLDP config at run time
* Support hardware testing for stacking
* Incremental support for hardware switch testing with stacking
* Use same class to associate hardware switch (incremental support for hardware switches in stacking)
* Speed up LLDP blocked tests
* Temporarily disable stack cabling counter for FaucetSingleStackStringOfDPTaggedTest
* Re-verify cable errors for FaucetSingleStackStringOfDPTaggedTest
* Revert "Don't verify cabling counters for FaucetSingleStackStringOfDPTaggedTest."
* Don't verify cabling counters for FaucetSingleStackStringOfDPTaggedTest
* Add tagged/untagged group test
* Don't verify block rule on other tagged host/stack case
* Don't verify untagged block rule when tagged hosts in use
* Further stack connectivity testing
* Verify cabling only applies to stacks
* All stacking tests should verify there are no cabling errors
* Test LLDP probes and LLDP from hosts are not flooded
* Test that stack hosts don't see LLDP probes
* Revert "Diagnostic change to exact match LLDP."
* Diagnostic change to exact match LLDP
* Drop LLDP/group if it somehow makes it into a stacked VLAN
* Log DP name in case of mismatch
* Explicitly drop untagged traffic on stack ports
* Fix log message for stack down due to incorrect cabling
* Add debian package dependency on chewie
* 802.1x logging and ACL names
* Incremental test support for Chewie
* Add wpa\_supplicant test helper
* Incremental Chewie stub implementation
* Correct NFV interface RE
* Implment NFV test helper
* pylint
* shuffle file order for pylint/pytype
* It's been 2018 for a while, reflect this in copyright notices
* Don't multiply trigger incorrect cabling event
* Add Prometheus variable for stacking state on a port
* Stack cabling errors should be actioned immediately. Make LLDP logging less verbose
* Cleanup FAUCET LLDP parser further
* Recommend -i flag for integration testing on hardware (faster)
* Make documentation more generic
* Adding dynamic docker network option
* Attempt non -Z pytype
* Extraneous \n
* Pin pytype to 2018.5.22.1 for -Z flag
* Pin pytype, reenable parallel
* Re-enable pytype with -Z, due to excessive memory use
* Update the cisco TFM file to follow some recent changes in faucet
* pylint
* Temporarily disable pytype for python3
* Reduce job count for pytype (memory hog)
* Automatically do pytype for python2 if mininet is imported
* workaround for mininet\_test.py
* pytype workarounds
* name-error -> attribute-error
* Reduce memory usage
* Unpin pytype
* Set pytype python version
* pytype workarounds
* Install pytype via pip
* Preversion 1.8.5

1.8.4
-----

* Bump 1.8.4
* Workaround lack of availability of typing library on python3.4

1.8.3
-----

* Test stacking where redundant links are down/root dp is unreachable, to begin with
* Few minor lint fixes, make tests acutally fail
* Randomize ACL cookies
* Randomize DP cookies
* Handle stacking port state not an int
* Clean up lldp\_handler
* Bump version for release
* pylint
* Update sphinx\_rtd\_theme from 0.3.1 to 0.4.0
* Prep methods for handling stack events
* Make pip quieter
* Correct codecov
* Run unit tests before other checks
* Unpin pylint
* Work around codecov not working under docker
* Use common pip\_deps.sh install script
* Pass CODECOV token for Travis
* Docker tests can use external cache (e.g from Travis)
* FAUCETTESTS -> FAUCET\_TESTS
* Fix delim for parallel
* Absolute paths from src\_files.sh
* Incorrect : for else clause
* Non standard use of string compare
* Revert "Retry apt-get update with install."
* wrong docker run args
* Retry apt-get update with install
* diags for test runner
* avoid egg cache dir collision
* Simplify sanity shard decision
* Encode list of src files in one place
* Use pip cache dir default
* Wrong "-d" flag passed to docker tests
* Use external script for pytype-ing
* Use parallel with --bar
* RUNTESTS scope
* Move codecov inside docker
* Revert "Attempt not installing OVS."
* Correct sense of sanity shard test
* Attempt not installing OVS
* Attempt parallel pytype
* Don't run build docs test twice. Don't depend on Travis worker for pylint
* Add docs requirements, too
* Quote pip3 install
* Install test-requirements explicitly in .travis.yml
* pin pylint
* wrap pip3 install as well with retry
* Retry quote
* Wrap apt-get install with retry
* Incorrect order to preserve discovered\_up\_port\_nos
* Improve stacking logging
* Keep dynamic op status state
* Need to maintain list of up DP ports over cold/restarts
* Only reprovision known up ports on self-initiated cold start
* Only provision configured ports
* Revert "Only provision up ports."
* Simply LLDP stacking handler
* Only provision up ports
* typos
* We don't support different output port numbers with a single ACL
* Drop traffic from test host MACs
* Make my life easier by not hard coding versions
* lint check in mininet test, is redundant
* Not practical to require disabling all listening processes, but we can warn about them
* Improve test coverage
* Add check to make sure no processes using test interfaces
* Fix typo in README\_Cisco.rst
* When stack probe, should not check port.running
* Add test stack probe
* Stack port down when remote port is down
* Pre-version 1.8.3
* typos
* typos

1.8.2
-----

* Default proactive limit should be 2\*max\_hosts
* Implement periodic probing stack ports
* Add note to deconfigure Avahi
* A thread that periodically call stack probe service
* Add helper methods to check and set stack port state
* Define a threshold for probing packet loss
* Update stack port info upon receiving a LLDP packet
* Add current time (now) param to lldp\_handler method
* Add stack FSM TLV to lldp beacons on ports with stacking enabled
* Add a TLV for stack FSM  and a helper method to build the TLV
* Add a dict to hold stack probing info
* Set initial stack port state to DOWN
* Define state machine for stack ports
* Upgrade to Ryu 4.25
* Update ryu from 4.24 to 4.25
* Update ryu from 4.24 to 4.25
* Update sphinx from 1.7.4 to 1.7.5
* Expand use of mypy in pre-commit
* pytype checking for clib
* Improve clib pytype
* Increase min lint score
* pytype/pylint
* pylint/pytype fix
* enable pytype on unit tests
* Add set\_field api to valve\_of
* pylint
* Use default priority transit goto flow
* Only learn for locally expressed VLANs, and support transit stacking (where a stacked switch might not have any locally expressed VLANs)
* Add support for the Cisco Systems Catalyst 9000 Family Switches
* Pylint cleanup
* Attempt standard install method for apt dependencies
* Remove now empty gitlab build stage
* Revert "Run apt-update."
* Run apt-update
* Making docker tests actually run
* Implement dp\_acls with test
* Initial dp\_acls field support
* Refresh encrypted travis deploy password
* Wrong usage of tempfile
* Of course, config should be updated with a write/rename, not in place
* write conf files unbuffered
* Wait longer for conf file to be written
* LLDP processing should be enabled always for stacking links, and LLDP probes on stacking links should not be ratelimited
* Add missing multiarch hook for docker CI
* Tidy up tutorials
* Preversion 1.8.2

1.8.1
-----

* Gauge package should use /var/log/faucet for logging
* Fix example configuration to remove ambiguity
* Fix line under heading
* Update VM documentation
* Switch VM build from python packages to debian packages
* Bump version
* Add config test/doc for force\_port\_vlan
* Update docker documentation
* Remove old faucet-yaml.dot
* Skip tests on armhf docker builds
* Split gNMI into it's own repo
* Remove CI Dockerfile
* Removing documentation on how to manually build faucet dockers
* Add hook for docker cloud to allow cross compiling
* Upgrade grafana
* Simplify gitlab ci setup
* Attempt to tame our Dockerfile problem
* Run pylint on clib as well
* Add clib path to git hook
* pylint
* pylint
* Add lint checking of test directory
* pylint
* Wrong test sense, for nonblocking test
* pylint
* test\_tcpdump\_nextline can fail becaise ping only tries twice, and might exit before the test can terminate it
* Handle invalid UTF-8 in ofdesc messages
* Add note that test interfaces should be unmanaged to avoid conflict with tests
* Add beka dependancy to debian/control
* update docs for running only a single int test
* Common tmpdir method for test results
* Should use common test result base class
* Move test results to "tests" json blob
* use stat based reload for RandVlan test
* Revert "Report test output in json format."
* Report test output in json format
* Log result of SanityTest
* Add jsonreport option to tests
* Randomized VID test
* Stricter checking of eth\_dst when receiving LLDP
* Fix BRIDGE\_GROUP\_MASK
* Use 5 byte mask for bridge addresses
* Don't flood 01:80:c2:00:00:00 to 0f addresses per 802.1D
* Drop LLDP/BDPUs in flood table, enabling bridge local traffic to be learned
* Removing gasket Dockerfiles which are not useful yet
* Revert "pylint."
* Revert "Fix match.match."
* Fix match.match
* pylint
* pylint
* Pre-version 1.8.1

1.8.0
-----

* Bump version to 1.8.0
* Fix group\_id check
* Condense GroupTable tests
* Test IPv6 VIPs are inconsistent
* Make FaucetGroupTableUntaggedIPv6RouteTest unreliable
* Missing group\_id
* tcpdump\_helper fix
* pylint
* pylint
* pylint
* pylint
* FaucetConfigStatReloadAclTest should not hup
* Simplify FaucetUntaggedHUPTest
* verify\_faucet\_func() can take list of callables
* Fix tabs\_are\_bad()
* change\_port\_config() missing arg
* reload\_conf() arg cleanup
* reload\_conf needs to pass verify arguments
* verify\_faucet\_reconf() should check warm/cold start counters
* cleanup reload\_conf()
* Revert "Use reload\_conf args consistently."
* Revert "verify\_faucet\_reconf smarter, verifies reconf type."
* verify\_faucet\_reconf smarter, verifies reconf type
* Use reload\_conf args consistently
* spacing
* Rename verify\_hup\_faucet to verify\_faucet\_reconf
* configure isn't smart enough to glob a path
* DPDK 18.02.1 has a slightly different install path and needs python-six
* More predictable tcpdump test
* Fixing flaky tcpdump behavior
* Upgrade Beka to 0.3.3
* Don't provision VIP table either, if no routing configured
* OFPTFPT\_NEXT\_TABLES is automatically generated
* Don't provision unused tables on TFM switches
* Rewrite OFPTableFeaturePropNextTables
* Don't provision unused routing tables
* Send switch\_features() handler on every cold start
* Use route manager active flag
* Revert "virtual method for \_update."
* virtual method for \_update
* Reload test can use same config
* Hide common test classes from unittest discovery. Test coverage for stack edges
* Test coverage for valves\_manager
* Minimum test coverage to 93%
* Coverage for watchers.py
* Test coverage for ValveIPv6RouteManager
* Test coverage for bad ACL match
* Remove deprecated dl\_dst output rewriting
* bgp\_route\_handler
* Test coverage for bgp\_neighbor\_addresses
* Gauge smoke test coverage
* Test coverage
* Test coverage for bgp\_neighbor\_addresses
* Simply config checker
* verify\_flooding handles stack edges
* Rename StackRoot test
* Coverage for to\_conf()
* Test invalid BGP server address
* Re-enable koe
* Add coverage for ACL multiple ports
* Test connect\_or\_disconnect\_handler
* Increase default docker startup timeout
* Test include optional doesn't exist
* Adding capabilities to tcpdump
* Ignore virtual methods
* Test reconnect method
* init arg order
* Don't use threads for testing
* Test event server loop
* Fix use of context manager
* Use context manager pattern
* Should use eventlet's Queue
* Reorder test methods for consistency
* Incremental coverage for valve\_route
* Increase minimum coverage to 92%
* Exclude virtual functions from coverage
* Test FIB route expiry
* Remove valve\_route's use of time.time()
* Remove more use of time.time()
* Verify state expiry
* Valve handlers take now as argument for better testing
* Test coverage for group\_table\_routing
* Revert "Test coverage for stack non-roots."
* Revert "Fix test class introspection."
* Fix test class introspection
* Test coverage for stack non-roots
* Test coverage for loop protection
* test proactive learn for IPv6
* Test coverage for host banning
* Test coverage for meters
* Upgrade to Beka 0.3.2
* Implement group unit test support. Test coverage for hairpin mode
* Simplify is\_output()
* Handle combinatorial port flood
* Add FaucetBgp speaker count tests
* Verify flooding can check hairpin
* pylint
* Simplify is\_output()
* Keep track of group entries
* Validate flow message types sent to fake OF tables
* FaucetConfigReloadAclTest can flake
* move tutorials to own folder
* add new tutorials to index
* merged in bairdo/faucetTutorial into local tree
* Pulled in bairdo/faucetTutorial
* cleaned up diagrams, vlans
* cleaned up diagrams, vlans
* Add files via upload
* add build your own outline. added section headers
* Add files via upload
* Moving images to \_static folder. More updates to content
* Create NFV-services-tutorial.md
* Updated diagrams. Updated routing
* Update routing.md Update nfv-services-tutorial.md
* correct link, simplified static routing
* Update vlan\_tutorial.md
* Add ACLs, routing tutorial. add tutorial images
* Create vlan\_tutorial.md
* Dual stack BGP support
* Avoid softswitching
* add in missing keywords for ping tests
* Update Beka to 0.3.1
* Revert "Revert "Swap out Ryu BGPSpeaker for Beka""
* Update Dockerfile.base-tests
* DPDK directory acquired "stable" in the name
* Preversion 1.7.8

1.7.7
-----

* Bump README version
* Increase minimum coverage to 91%
* Standardize test peer BGP AS
* Use 32b ASN for testing
* Revert "Bump version number."
* Revert "Swap out Ryu BGPSpeaker for Beka"
* Bump version number
* pylint
* pylint
* pylint
* pylint
* pylint
* Revert "Test can't remove socket path."
* Test can't remove socket path
* Always queue events
* Test delete port/vlan
* Test bad fields to packet in
* Test LLDP receiving
* Decode state in Valve not Faucet
* Test port status modify/unknown
* Make LACP timeout configurable
* Upgrade to DPDK 18.02.1
* Swap out Ryu BGPSpeaker for Beka
* Don't hardcode LACP ports
* Verify LACP port state
* Add prom var checking helper. Add LACP state variable
* Implement require\_running check for DP
* pylint
* test should be less than minimum, not also equal
* pylint
* Handle deconfigured VLAN while BGP active
* Better pick unused vid
* Pick unused VID
* Don't use an unused port to force cold start
* Add test for \_\_dict\_\_ on port/vlan/dp
* Config test for DP
* It's better to use the generic set\_fields modifier
* Fix typo
* Grafana doesn't call this "proxy" anymore
* ACLs should be rejected when output port can't be resolved
* Add Port unit tests
* Add more VLAN unit tests
* Must resolve all ports
* Adding tcpdump\_helper unit-test
* Add Sam Russell to authors
* Fix VLAN.to\_conf() for faucet\_vips
* Fix VLAN.to\_conf() route format
* Port.to\_conf() serialises VLAN names correctly
* Make test\_gauge quiet
* Make test\_fctl.py quieter
* Work-around for docker users missing from system
* Testability update to check\_faucet\_config.py
* Upgrade grafana images to 5.1.x
* LLDP test did not handle long DPIDs
* use rst's note
* Add documentation on developing faucet with PyCharm
* added configration documentation for meters
* return value not correct
* pylint
* Use common resolve\_handler callable
* Simplify dead nexthop expiry
* Should not use max\_age for nexthop dead ness
* Reduce number of cache lookups getting list of not fresh nexthops
* Fix initial retry counter not incremented when proactively resolving
* Incremental simplification of nexthop resolution
* Simplify dead nexthop implementation
* Adding docker host capability and test
* Reduce boilerplate event scheduling code
* We have migrated from travis-ci.org to travis-ci.com
* Verify packet in counter
* Increase minimum test coverage to 90%
* Add smoke test for group support
* Add test for port override output port
* Test coverage for get\_tables()
* Remove unused method
* pylint
* Test API call for config
* Remove unused method
* Learn on stack port
* Add test coverage for stack edge learning
* Increase test coverage to 88%
* Test coverage for LACP
* Incremental coverage for LACP
* Standardize how coverage reporting is run
* Coverage reporting uses wrong directory
* Run unit tests with coverage tool to accurately include module imports
* git pre-commit hook now runs coverage tests
* pylint
* Test ofdesc handler
* Test packet in rate limit
* Add test for reconnect handler
* Test scrape http failure
* Test coverage for test\_check\_config
* logging level always set
* Test coverage for check\_faucet\_config.py
* Test no dp conf
* Increase test coverage to 85%
* Test coverage for push/pop VLAN config
* Add test coverage for ACL config
* Smoke test for idle needs correct table ID
* Increase coverage for idle algorithm (flow\_timeout())
* Increase test coverage to 84%
* Can't use parallel to run pytype due to multiple egg cache access
* Smoke test BGP route handler
* Smoke test coverage for the idle-flow based learning manager
* Preversion 1.7.7

1.7.6
-----

* Bump README version
* Use last\_retry\_time from cache entry
* Max proactive limit needs to be same as test
* pytype check for is None for a nexthop cache entry
* Reduce default limit on proactive ARP/ND further (more sane limit)
* last\_retry time must be last
* Simplify ICMPv6 handler
* Delete host routes that are too old, as well has that have been retried too many times
* Don't send delete flows for host routes where the host was never learned
* Update RE for expiring host route log message
* Incremental simplification of ICMPv6 handler
* Prioritize route gateways in host resolution
* refactor to route host/route ip\_gws separately
* Update sphinx\_rtd\_theme from 0.3.0 to 0.3.1
* Add error messages and remove try/catch
* Replace use of assert statements in valve\_of.py
* Replace use of assert statements in valve\_acl.py
* Replace use of assert statements in router.py
* Replace use of assert statements in vlan.py
* Replace use of assert statements in port.py
* Replace use of assert statements in acl.py
* Replace use of assert statements in dp.py
* Replace use of assert statements in conf.py & config\_parser.py
* pylint
* Increase min lint score to 9.2
* Increase min lint score to 9.1
* pylint
* pylint
* Increase test coverage to 83%
* Gauge should use ryu\_event timestamp
* More test coverage for ryu\_event handlers
* Test coverage for ryu\_event handlers
* Test coverage for faucet.py
* Add test coverage directly, for experimental API
* Increase test coverage minimum to 82%
* Test notifier check\_path()
* Move logging to gauge\_poller
* pylint
* More common RyuApp start()
* reload\_config() is in common
* Config file stating uses common functions between FAUCET and Gauge
* Revert "Protect event handlers where DP is required to be running."
* Simplify Gauge OF reply handler
* Protect event handlers where DP is required to be running
* Use common datapath config
* Common datapath connect/disconnect/reconnect handlers
* Use common \_CONTEXT
* Use common handler to manage datapath objects for both FAUCET and Gauge
* ofmsgs overridden on warm start
* ofmsgs missing reference
* Add events for config reloads
* \_get\_valve() normalizes ryu\_event contents
* Rearrange args for \_get\_valve()
* Lock onto ubuntu 16.04 to allow builds on docker cloud
* Preversion 1.7.6

1.7.5
-----

* pylint
* Exercise code path for repeat host learning
* Enable max\_hosts: 1 on a port
* Add clib unit test submodule
* Enable LLDP receiving
* Don't run any LLDP sender code if LLDP not enabled
* Don't reference LLDP chassis ID/TTL where LLDP not enabled
* Randomize ARP/ND/RA flood port order
* Interface range with single port as an int doesn't parse
* Randomize LLDP beacon port order
* Pretty print cache entries
* Add L2\_EXPIRE event
* Bump version number
* Update sphinx from 1.7.2 to 1.7.4
* Initial commit
* valve\_flowreoder preserves original order within each partition
* Make unused flow\_timeout handler shorter
* Increase minimum test coverage to 81%
* Incremental test coverage for Prometheus flow table export
* Test valid Gauge config
* Move Gauge smoke test to test\_gauge
* Minimum test coverage is now 80%
* Smoke test config reload
* Smoke test reload config
* Test more initializers
* Use test registry
* Smoke test metrics initialization
* Gauge missing call to override registry
* Revert "Prometheus client can take a registry argument, so can be initialized in test."
* Revert "Smoke test reload\_config()."
* Revert "Restrict test registry scope."
* Restrict test registry scope
* Use REGISTRY not core.REGISTRY
* Smoke test reload\_config()
* Prometheus client can take a registry argument, so can be initialized in test
* Allow Prometheus client to take registry argument
* Test coverage for version
* Test coverage for \_\_main\_\_.py
* Run loop\_protect in unit test
* instantiate FaucetExperimentalAPI
* Implement of\_vlan\_packet\_ins
* Move more services out of \_\_init\_\_ to start()
* Revert "Revert "Avoid initializing Prometheus client in \_\_init\_\_().""
* Revert "Avoid initializing Prometheus client in \_\_init\_\_()."
* Increase minimum test coverage to 79%
* Avoid initializing Prometheus client in \_\_init\_\_()
* Smoke test for Gauge
* Smoke test Faucet class
* Start BGP in unit tests
* placate pylint
* Pre-version 1.7.5

1.7.4
-----

* Bump version to 1.7.4
* Don't upgrade pip (best practice as of pip 10)
* Preversion 1.7.4

1.7.3
-----

* Bump README version
* with freeradius3 tls-sockets cannot be used when in 'single server' mode. otherwise this is the same as '-X'
* Refactor tcpdump\_helper into separate class
* mv hw\_switch\_config.yaml to higher level to make it available to multiple test modules
* Adding -i test flag for integration tests only
* Add utility script for local testing
* freeradius 3.0 for gasket
* Use test WSGI server
* eventlet monkey\_patch needs to come first
* BGP speaker apparently needs eventlet monkey patch
* Missed another call to send\_flows() in BGP
* pylint
* Missed warm start reload call
* Increase minimum test coverage
* Remove redundant calls to \_get\_valve()
* Configure controller meter in unit tests
* Fix logger leak in test case, increase test coverage for flow reordering
* hostapd now uses alpine
* sorintg out dockerfile.hostapd first
* Update sphinx\_rtd\_theme from 0.2.4 to 0.3.0
* add myself to authors; alphabetize
* Bump readme version
* removed unneed packages
* copied hostapd files from gasket repo
* install library needed for pyyaml cloader
* Use a yaml based syntax for describing config tree tables
* Add documentation for LLDP configuration
* Add test for configuring lldp with interface\_ranges
* LLDP org\_tlv fields can be bytearray or int
* Bad prometheus\_addr default
* Clarify stacking flooding comments
* Add sane proactive learning limit (4096, rather than unlimited)
* Adding test-base dependeny for doing docker-in-docker hosts
* update versions of prometheus and grafana
* Update ryu from 4.23 to 4.24
* Update ryu from 4.23 to 4.24
* Restore faucet\_mininet\_test.py wrapper
* Refactor tests module to make reusable test library component
* Update gNMI target config
* Avoid errors in  gNMI cert generation
* Preversion 1.7.3
* larger tables required for FaucetSingleL2LearnMACsOnPortTest

1.7.2
-----

* Move sample grafana dashboards to avoid symlink
* pip trips up on symlinks, delete docs earlier to avoid
* preversion 1.7.2

1.7.1
-----

* Bump readme version
* move config/async to switch\_features()
* Order TFM messages after deletes with a barrier
* for TFM switches, delete all flows before sending TFM
* Test that required events are present in event log
* Fix compatibility with sphinx 1.7.1+
* Implement PORTS\_STATUS message at startup
* Update sphinx from 1.7.0 to 1.7.2
* Tidy python3-faucet package
* Make user/group creation more robust
* Tidy debian/control
* Fix some mistakes in documentation
* Add a tutorial for first time faucet users
* Apply config changes to down DPs, fix OFError correlation, pylint
* pylint
* Verify unicast not looped back
* self.verify\_port1\_unicast() missed
* FaucetTaggedAndUntaggedVlanTest verifies broadcast behavior on tagged and untagged hosts
* verify\_port1\_unicast() doesn't make sense now that combinatorial\_port\_flood is False by default
* Remove explict combinatorial\_port\_flood
* Special case FaucetUntaggedVLanUnicastFloodTest
* pylint
* Need to exclude hairpin mode
* SwapVid needs explicit combinatorial\_port\_flood: False
* Still test failures combinatorial\_port\_flood: False
* combinatorial\_port\_flood default False
* Allow builds to happen a second time
* Push built packages to raspbian suites
* Preversion 1.7.1

1.7.0
-----

* Bump to 1.7.0
* Add release notes for 1.7.0
* Apply correct docker image to deploy-package job
* FaucetUntaggedMultiConfVlansOutputTest still doesn't pass under Travis (base OVS too old?)
* Enable OVS multiple tags and tests
* Revert "Enable FaucetUntaggedMultiConfVlansOutputTest."
* Enable FaucetUntaggedMultiConfVlansOutputTest
* Update log and config directories in documentation
* Update paths used by VM builder
* Log which configuration file we used on startup
* By default load our ryu.conf on faucet start if it exists
* Document environment variable usage
* Complete FaucetUntaggedOutputOverrideTest
* Incremental test of output override
* Incremental implementation of override\_output\_port
* Check undefined override\_output\_port
* Add config for Override output port
* Tidy gitlab ci
* Preversion 1.7.0
* Enable use of YAML CLoader
* comments for Cloader
* bast -> bcast
* Test that broadcasts to mirrored port are mirrored
* Incremental fix for port mirroring - broadcasts to a mirrored port were not mirrored, and an extra copy of packets broadcast from a mirrored port were sent
* Make YAML duplicate key checker more efficient
* Optimize flooding rules for stacking, if combinatorial\_port\_flood is disabled
* Add log message when host moves ports
* Allow DP type decision for whether to use barriers
* Use more consistent cache refresh time
* Increase probability of L2 rule refresh
* Test broadcast not flooded back to self
* Use correct allow instructions for VLAN ACLs
* gitlab-ci.yaml added
* Use SwapVid feature to smash a packet into another VLAN
* Adding debian packaging support to faucet
* Add DP config option, combinatorial\_port\_flood (default True). If False, we use only one flood rule for all ports on a VLAN (using OpenFlow spec implied behavior, if a rule says in\_port=n,output:n,x,y, packet is sent to x and y only, because OFPP\_IN\_PORT was not specified)
* Make in\_port filtering optional when building a flood rule
* Incremental implementation of force\_port\_vlan in ACLs
* Refactor to support force\_port\_vlan
* pylint
* Even uglier flow dedupe
* Only dedupe ofmsgs if deletes
* Ugly but necessary dupe flows helper
* De-duplicate all OF messages sent to dataplane
* Preversion 1.6.28
* Crash clearing cache when port has permanent learn enabled

1.6.27
------

* PIP typo
* Version bump
* pip claims setuptools not installed, when install request is on same command line as ryu. Make ryu a seperate install command
* Preversion 1.6.27

1.6.26
------

* Pre-install Ryu in base-test image
* Version bump
* Test coldstart safety with BGP
* Clarify BGP limitations even further
* New pytype throws pyi-error for os
* pytype
* Switch from getopt to argparse
* \_set\_port\_status()
* discovered\_ports
* Synchronize Prometheus port state with DP at connect time
* Revert "Update sphinx from 1.7.0 to 1.7.1"
* Update sphinx from 1.7.0 to 1.7.1
* Test suite and documentation fixes
* Parse FAUCET LLDP messages
* Parse LLDP helper
* Add LLDP receiving TODOs
* Enable logging of LLDP
* Need to disable LLDP receiving incrementally
* Incremental support for receiving LLDP
* faucet\_dp\_mac
* Move LACP match to VLAN table
* We need to handle packets without a VLAN tag (control plane traffic)
* Revert "Move LACP match to VLAN table."
* Move LACP match to VLAN table
* LACP/LLDP packets should use separately configurable MAC rather than native VLAN's
* Move default FAUCET\_MAC to valve\_packet.py
* Encode DPID in LLDP packets
* Stack ACL test needs to be single, because uses static port
* ACL stack test needs to trigger learning
* Don't need to verify no error deconfiguring addresses for switch interfaces
* bcast\_blocked should fail with one try if we see a packet
* Stacking broadcast tests should retry as necessary
* Don't learn hosts with broadcast destinations from stacking port
* Flood manager needs eth\_src table
* Add Ethernet broadcast tests
* Log L3 dst address also when learning. Test broadcast connectivity when stacking
* OVS switch interfaces should not have any IP config
* Rate limit update\_metrics() only on packet in, not in background
* Revert "MaxPorts tests both need update metric rate 0."
* MaxPorts tests both need update metric rate 0
* Still cannot 1Hz update yet
* 1Hz updates except for ban test
* Install dsniff
* Revert "Rate limit metric updates to 1Hz by default."
* Make Prom scraper more efficient
* Rate limit metric updates to 1Hz by default
* reduce pps for learning test to avoid kernel load
* kernel ARP processing on many macvlans overloads test environment
* Disable IPv6 on L2 scaling test (kernel overload)
* Add hook to allow simplification of host interfaces
* Use common sysctls for tests
* Need to handle ReadTimeout
* Update Ryu to 4.23
* Simplify scrape Prometheus
* splitlines()
* Server side limit export of prometheus variables
* Disable dump\_packet\_counters()
* update NoviFlow docs to have larger tables for test automation
* Remove final dump\_counters, increase scale again to 4096
* Reduce L2 to 2048 because Travis cannot handle more
* Increase metric update interval to 3s
* Need to break from L2 when non power of 2
* Reduce L2 to 3072 (need to select correct max if not power of 2)
* Increase L2 scale to 4096
* Make update metrics rate limiter configurable
* Reduce L2 scale from 4096 to 3072
* Rate limit counter updates to 0.5Hz
* Need to relax L2 disagree retry
* Rate limit metric updates to 1Hz
* Increase L2 scale test to 4096
* Make learned\_macs updates less expensive
* resolve\_ports()
* Adding stacked ACL reachability test
* resolve\_port\_numbers()
* Enable multi-port output ACL actions
* Stack tests need OVS\_TYPE
* Attempt flood ping after meter applied
* Default to kernel based OVS unless using meters
* OVS 2.9.0 supports meters, so test them and switch to netdev based bridges to get access to them
* Documentation cleanup for output dict
* Only call update\_metrics() for ports that were updated
* With lots of hosts, learned\_macs and counters can be temporarily desynchronized while being updated
* Add prometheus rule for creating instance\_dpid:ignored\_packet\_ins:rate1m
* Preversion 1.6.26

1.6.25
------

* Update version
* Better explain vlan\_neighbors variable
* Workaround stale netns
* dps -> dp
* Dead nexthop cache entries need to be expired
* total\_port\_vlan\_hosts\_count doesn't account for stacking
* Make faucet\_bgp cold/warm/start safe
* Revert "Remove vlan total hosts/by port count run time check."
* add\_cache\_host() didn't handle existing entry on different port
* Remove vlan total hosts/by port count run time check
* Revert mesh tests
* Runtime consistency checks for learning metrics
* Don't verify learn counters in mesh test yet
* HostCacheEntry incorrectly used cache\_time in key
* verify learn counters in IPv4 and 6 routing meshes
* Helper to verify learning counters
* Test vlan\_hosts\_learned == port\_vlan\_hosts\_learned
* Explicitly decode of\_dp\_desc\_stats labels as UTF8
* bgp handler should use keys for DP ID and VLAN
* diagnostic changes for faucet\_bgp (and re-enable bgp\_connect\_mode paramater)
* Correct default for Gauge Prometheus address
* Default Gauge Prometheus address
* Preversion 1.6.25

1.6.24
------

* Build faucet-event-adapter-rabbitmq-pi on pi build cluster
* Need to rollback coldstart check for BGP as well, because with faucet\_bgp rollback, it's not safe again
* Roll back faucet\_bgp due to https://github.com/faucetsdn/faucet/issues/1706
* Use PromGauge, not Gauge
* Rename test thread param
* Need to use threads when testing
* Remove confusing PromGauge reference
* Configure IPv4 BGP peers first
* Add TODO to make MAC table updates less expensive
* Add TODO to rate limit update\_metrics() calls
* Revert "Don't call update\_metrics() at all on packet in."
* Add config time check for BGP peer families
* Don't call update\_metrics() at all on packet in
* Delete FaucetUntaggedBGPIPv46RouteTest
* Allow config of BGP config mode
* Don't double add/del prefixes on BGP peer config/deconfig
* Disable MP-BGP
* Add FaucetUntaggedBGPIPv46RouteTest
* Fix log handler
* V46 test not ready yet, and log peer up/down
* local\_as
* minor BGP refactor
* Multiple adds of VAN routes
* Version bump
* Add documentation builds to test suite
* Revert 16eb309
* add get\_sys\_prefix (copied from valve\_util), for when running in a virtual environment
* Update sphinx from 1.7.0 to 1.7.1
* FaucetMaxHostsPortTest needs to check for cleared MAC address
* Increase L2 scale test to 2048
* Make MAC table export less expensive
* Increase L2/L3 test limits to 1024
* ping\_all\_when\_learned() causes CPU spike in verify\_learning() don't call update\_metrics on every packet in, only when flows emitted
* Rate limit connectivity test
* Make counting hosts learned on port less expensive
* Run int tests using test source directory, not pip3 installed version
* remove unneeded variables
* pylint
* need to convert set to list
* pylint
* Make host cache access by port less expensive
* dyn\_host\_cache accessed only from vlan.py
* Reduce L2/L3 test scale limit to 512, valve\_order smarter (do not attempt reordering if no deletes)
* L2 test should not have a VIP
* Increase inter-learn fping time to 25ms
* Increase inter-learn fping time
* Resolver shouldn't return on cache missing. Increase L3 scale test to 1024
* Set L2 scale test to 1024
* Increase L2 scale test to 2048
* Reduce L2 expiry runtime by only expiring when we know oldest host is due to expire
* Avoid resetting BGP session where BGP config didn't change (less vulnerable to Ryu BGP speaker bugs)
* Reduce L2 learn max to 512
* Increase learn rate pps to 20
* Make L2/L3 learn testing more configurable
* Make learn rate configurable
* fping\_prefix
* fping\_prefix
* unverified\_ips
* unverified\_ips
* endswith
* Make learn retry timer dependant on number of not learned hosts
* IP address generation more readable
* remove diag print
* Avoid confusing fping with addresses that might look like broadcast addresses
* Fix inheritance for L2/L3 tests
* Need to synchronize on state with BGP speaker
* allow 0,1, or path to be specified
* add a dockerfile for rabbitmq-adapter on raspberry pi
* Correct L3 test name
* L2 and L3 test names swapped
* rabbitmq adapter use FAUCET\_EVENT\_SOCK as path
* Relax test OF echo interval
* Restricting .gitignore to appropriate subdirectory
* Add L3 integration test
* Minor docs update for missing table header
* Revert tc on controller
* Add tc for controller interface
* Revert "Experimental increase of learning test to 1024."
* Experimental increase of learning test to 1024
* Upgrade to DPDK 18.02 (though can't be built with -j)
* Simplify DPDK build
* reset BGP neighbor before deconfiguring
* Support multiple BGP VLANs (work around single Ryu BGP speaker limitation)
* Document Ryu only supports one BGP speaker. Determine BGP VLAN by looking up peer IP address
* native\_vlan
* Warm start of BGP is not yet safe
* Fix RE for Prometheus values
* Pin OVS to v2.9.0 (from master)
* Verify that changing a VLAN not involved in routing, should be a warm start only
* Fix double shutdown of BGP speaker when BGP deconfigured
* Fix double shutdown of BGP speaker, if BGP was deconfigured
* pytype
* Add TODO for PBR performance
* Handle failure to open log files more cleanly
* Correct exact\_match test
* Add test for multiple DP/ACLs with mirroring
* pylint
* Add test for inconsistent exact\_match in ACLs
* Move mirror\_destinations parse state out of ACL conf
* Fix dp\_init() not called when cold starting
* Completely re-initialize DP state managers whenever config changes
* Using @google account for AUTHORS
* pre-version

1.6.23
------

* Bump versions
* Improve performance of resolver with inverse index of routing table (gateways to destinations), and fix incorrect type for IPv6 NA IP address
* Incremental add/del route wrappers for VLANs
* Incremental implementation take #2 for routing table
* sanity restore
* routes -> routing\_table
* Revert "Move ip\_gw lists to RoutingTable."
* Revert "prefixlen."
* Revert "Routing table reference."
* Revert "pylint."
* pylint
* Routing table reference
* prefixlen
* Move ip\_gw lists to RoutingTable
* routes -> routing\_table
* Incremental implementation of IP routing table
* Add TODO for FIB rate limiting
* Reduce default packet in rate limit. rate
* Move packet in rate limiter to earliest possible point in handler chain
* Reduce number of times L3 headers are parsed
* Add counter for ignored packet ins
* Add test for oferror
* Adding myself to AUTHORS file
* Add curr\_speed and max\_speed to gauge prom poller
* Sphinx 1.7 changes how main arguments are parsed
* remove debugging print statement
* Allow faucet configuration to be specified in gauge.yaml
* pylint
* Should use extend
* pytype
* pylint
* Move OFError handler and send\_flows() to Valve implementation (and more efficient recent flow queue)
* Remove couchdb from architecture diagram
* Remove more CouchDB dependencies
* remove more couchdb dependencies
* Remove support for CouchDB
* Comments for flow\_timeout()
* Configure switch not to send us flow removed messages if not needed (default case)
* Test coverage to 76%
* Test IPv6 NA
* Test coverage for IPv6 FIB route
* Add test for ARP reply from host
* Test case for ICMPv6 RAs
* Can't use ofp.OFPP\_LOCAL as a test interface
* couple minor changes:
* use delete\_strict in Valve.lacp\_up()
* LACP intercept length should be longer
* Use common signal\_handler/start
* Common event should be in valve\_ryuapp
* Use common base signal handler
* Use same config\_stat method
* Gauge can use ConfigWatcher()
* Use common ConfigWatcher implementation
* Pre-version

1.6.22
------

* Fix ln -s for pre-commit
* Update version
* Revert "Upgrade DPDK to 18.02."
* Upgrade DPDK to 18.02
* Docs for ACL mirror action
* TODOs
* Put faucet pipeline config in own file
* Use common start/stop watchers
* Start watchers
* Add start/stop watcher helpers
* Switch from coveralls to codecov
* Revert "Faucet and Gauge can use same signal handler."
* Revert "RyuAppBase."
* RyuAppBase
* Faucet and Gauge can use same signal handler
* Still a list
* Still incorrect watchers iterator
* Watchers is a dict itself
* Revert "enumerate order."
* enumerate order
* Gauge should hang up on unknown DPs
* Increase min test coverage
* Add coverage for add/del route
* Test coverage for add/del route
* Test coverage for datapath disconnect
* Test coverage for learn FIB route from packet
* Provide initial configuration for pyup
* Increase min coverage
* MirrorACL test case fix
* Test coverage for TFM
* Only call learn\_hosts() where necessary
* pylint
* Remove unnecessary test attributes
* Reorganize Valve tests to base class without tests
* Re-enable pytype
* pytype
* pytype
* pytype
* Revert test\_valve.py change to base class
* Revert pytype
* Revert "Revert "pytype.""
* Disable pytype to investigate coverage decrease
* Revert "pytype."
* pytype
* pytype
* Revert "pytype."
* pytype
* Pre-version v1.6.21

1.6.21
------

* Release v1.6.21
* appease 2to3
* Add --display-labels option to fctl
* Exclude base class from testing
* pylint
* Test LLDP results in packet outs
* Remove unused matches
* Remove unneeded ryuapp variables
* Move common initializers to valve\_ryuapp.py
* Miss call to self.get\_setting()
* Setting needs to be upper
* Move get\_setting() method to valve\_ryuapp.py
* Revert "Move more common features to valve\_ryuapp.py."
* Revert "Move common logging/setting parsing to valve\_ryuapp."
* Move common logging/setting parsing to valve\_ryuapp
* Move more common features to valve\_ryuapp.py
* Use common RyuApp class
* Test request\_reload\_config()
* Increase test coverage for valves manager loads\_configs()
* Add testing for valve managers load\_configs()
* Move hard to test code out of faucet.py
* reload\_config() doesn't need to return cold start flag
* Add coveralls.io badge
* Increase minimum test coverage
* Increase test coverage for fctl
* Reparse args for testability
* Test new\_valve()
* pylint
* Add test coverage for main
* Increase minimum test coverage
* Don't have to hardcode astroid
* Test coverage for fctl
* pytype found corner case with no resolver flows
* New pytype workaround
* Prevsion 1.6.21

1.6.20
------

* Revert "Test new\_valve()."
* Version bump for release
* Test config file change detection
* Test new\_valve()
* Test parse\_configs()
* Move new\_valve to valves manager
* pylint
* Fix ofdescstats handler
* Increase minimum unit test coverage
* Use port state helper
* Add port state decoder
* Move ofdescstats\_handler to valve
* Move more un-unit testable code out of faucet.py
* Test valve packet in
* More test coverage for valves manager
* Need to give callable to valves manager so can send flows to DP by ID
* Initial coverage for valves manager
* faucet.py no longer needs config hashes
* Move config change stat to valves\_manager
* BGP gets metrics as initializer
* Incremental move of BGP to valves manager
* Incremental move of update\_metrics to valves\_manager
* Incremental move faucet.py state to valves\_manager
* Add ValvesManager class (incremental change)
* Ryu 4.22
* Need to reset nexthop retries if we get more packets for long-term dead nexthop
* Clarify ACL change detection
* Test other valves which may not be stacked
* Verify stacking flooding
* Clarify flooding test messages further
* Clarify messages from flooding test
* Run docker pull explicitly to avoid Travis timeout
* Increase test coverage handling packet in
* pylint
* Move pkt\_meta parsing to valve
* Test handling of unknown port number
* Check port number is known for port status handling messages
* Use common mirroring actions implementation
* Fix port name reference in interface mirroring
* Simplify use of resolve\_port()
* dp ref
* Consider only other stacked values
* Updated configuration docs with new config changes
* Fixed controller crash on using port names instead of number
* Updated documentation to include PKI Setup
* Resolves issue #1547. Mirror interface supports more than one port. Modified config to allow single mirror port and list. Added unit tests to check multi port mirroring
* Learn test tuning
* Increase minimum coverage
* Force initialization of test stack
* Update minimum code coverage threshold
* Coverage for update\_config\_metrics
* Add valve\_flood coverage
* pylint
* Sanity check stacking
* Test coverage for mirroring
* More adaptive timeout for Learn test. Add coverage for Prometheus config variables
* pytype for check\_faucet\_config.py
* Add coverage for ofchannel\_log
* Quiten test\_check\_config.py
* Add test coverage for check\_faucet\_config
* Fix Learn test
* Add coverage for valve\_flowreorder()
* Test up to 1024 L2 hosts
* Connect to notify socket
* git hook path
* pre-commit update
* pre-commit update
* Doc changes to recommend pre-commit hook
* Fail int tests if code coverage drops below minimum
* Test ping unknown neighbor
* Add route for which gateway unresolvable
* Test run of event notifier
* Test LLDP beacon
* Add coverage for logging and event notification
* Fix unclosed file warning
* Sanity test TFM parser
* Test GenericTFM
* ipv4 ping controller
* Correct test packet layer build order, and test that L3 packets in result in L3 packets out
* Add support for lists of acls\_in
* Reduce Learn test pace slightly (unrealistically low latency)
* Pre-version 1.6.20

1.6.19
------

* Re-install blackhole FIB routes periodically
* Bump versions for release
* Clean up documentation on installing and running faucet
* Test stack and non stack DPs
* Allow Prometheus variables to be tested
* pylint
* Correct P2 MAC
* Test IPv6 ND
* pylint
* Add IP payload to test packets consistently
* Cold start learning optimization (don't need to delete entries for host we have not learned before, if we know no hosts expired since we cold started)
* Refactor \_is\_host\_fib\_route()
* Add jitter to FIB blackhole time
* Rate limiter shouldn't apply to route manager control plane messages
* More time for FIB blackhole
* Add nmap
* router -> routed
* Proactive resolver did not install temporary blackhole-pending-resolution FIB routes in all VLANs
* Ban rules have to be processed early
* Move test suite onto new faucet start script
* Simplify L3 packet handling
* Simplify packet in path and short circuit unexpected stack packet check
* Further fix for loop protection
* Loop protect logic needs cache age check
* Simplify loop protection logic. When L2 learning, refresh flows less often, and refresh only (do not delete flows) if L2 re-learning a host on the same port
* Simple test of L2 learning up to 512 hosts
* Moves documentation and sample scripts to new faucet start script
* Add optional ryu arguments to startup script
* Tests for LLDP defaults
* Provide sensible defaults for LLDP TLVs
* Use empty list rather than None when missing config option is a list
* Update arch diagram to reflect new event subsystem
* Swap dockerfiles to use "faucet" start script
* Add documentation for running docker with additional args
* Add verbose and TLS control channel args to start script
* Move VM documentation to Sphinx
* Fix config parsing for meters
* Noviflow docs: icmpv6 match moved to table 6 instead of 3
* avoid hardcoded port in FaucetDeleteConfigReloadTest
* Test opstatus\_reconf
* Add port level config item opstatus\_reconf, default True. If False, the pipeline is not reconfigured if operational state of the port changes
* Pre-version

1.6.18
------

* version numbers for release
* Test routing still works after cold start
* Explicit reset neighbor cache as well as host cache on a cold start
* When a port is mirroring another port, it cannot have any VLANs assigned to it (would result in duplicate packets being flooded, if the mirroring port was a member of the same VLAN as the mirrored port)
* Comments clarifying mirror usage and interface ranges
* Support stack and non-stack DPs in same config file
* Add LLDP port\_descr
* Add support for system\_name LLDP TLV
* pylint
* test\_gauge.py less noisy
* Run test\_gauge.py in presubmit
* pre-commit can be a symlink
* If org\_tlv info isn't a hex string, conveniently interpret as bytes
* more git hook fixes
* More git hook fixes
* Add type annotations so that pre-commit works on faucet.py
* pylint
* Allow configuration of orginzationally specific LLDP TLVs
* Keep 2to3 happy
* Fix typo in OVS command
* Make pytype happy with use of stack config
* Clarify use of LLDP beacon service (and simplfy helper functions)
* Test LLDP beacon service
* Valve ACL module should skip description field
* Incremental LLDP implementation
* Add lldp\_beacon
* Add better config checks for stacking, add config for LLDP beacon/checking
* Add helper that allows sending an LLDP beacon packet
* Update readthedocs URL
* Prevsion 1.6.18

1.6.17
------

* Bump versions for release
* Run Influx TooSlow single process so flow stats don't time out under load
* Influx timeout test is impatient, when stats request to switch times out
* Add test for multiple DBs in gauge
* Allow the same stat to be collected into a single db
* Re-merge
* Revert "Pi builder script should only tag latest if the image is the latest."
* Pi builder script should only tag latest if the image is the latest
* Use common function for version parsing, and allow manual building/pushing of tags
* Allow configuration of OFPP\_LOCAL
* Rework order of docker tag operations
* Prevsion 1.6.17

1.6.16
------

* Need to allow packets from VLAN 101 on SwapVID mirror test, and set right tcpdump host
* Test deferred apply actions
* Defer ACL actions to instruction
* Bump version numbers for release
* pylint
* Test unknown port key
* Use config key consistently
* Verify port key must be same as number or name
* Don't need to verify meter name
* Check unknown DP key
* VLAN key must match VID or name
* Don't use set() yet for VLAN attributes
* Drop packets that are not stacked and are not in the right VLAN
* Test trying to share BGP VLAN across DPs
* Use common reset\_refs() function
* Incremental fix to re-resolve ports after warm start
* Verify packet in has reason OFPR\_ACTION (resulted from a flow specifying packet in)
* Move tag/untagged config check to Port
* Log consistently
* Log port state changes verbosely
* reparse\_ip() already has eth\_type
* reparse\_ip() already has eth\_type
* Simplify IP header size checking (don't use Ryu to calculate header size - hard code)
* Revert "Really should just check if untagged, directly."
* Really should just check if untagged, directly
* Don't need build\_port\_out\_inst() any more
* Test cannot have same VLAN tagged and native on same port
* Move implementation to build output actions on a VLAN to a common function
* metermod add are sent before barrier
* meter\_mod delete sent before barrier in valve\_flowreorder
* Fix ConfigReload tests
* More explicitly cause all ports change detection to trigger
* Test addition of router causes cold start restart
* Explicitly test native and tagged\_vlans on same port
* Disable warm start optimization on router change
* pylint
* pylint
* Add check for unreferenced routers
* Add output\_only type check
* Test bad cookie value
* Add description field for ACL rules
* Stricter type checking of ACLs and watchers
* increase max\_len for ICMPv6 echo from 96 to 128 (MAX\_LEN)
* Add faucet and gauge console scripts
* Work-around 2to3 issue
* Clarify port up/down versus configuration
* Test output\_only drop flow is present
* Test output\_only: True
* Implement output\_only attribute for ports (if True, drop all input packets on a port)
* Proof of concept for faucet launcher script
* Make source mypy compatible and run mypy in presubmit
* Ignore .mypy\_cache
* Fix ACL cookies (not actually tested as get\_port\_match\_flow() was never called)
* fix FaucetTaggedTargetedResolutionIPv4RouteTest
* Correct resolve\_gw\_on\_port()
* Move packet out tag or untagged implementation to VLAN, out of valve\_route
* pylint
* Re-enable pytype
* Limit range of ACL rule cookie
* Fix test\_gauge with cookie value
* Test additional of cookie to ACL rule
* Allow cookie to be set on ACL rules
* Flow table loggers now log cookie value
* Safe to reduce MIN\_PORT\_AGE max to 10s from 30
* Don't validate ACLs on a DP that doesn't use them
* Revert "Revert "Workaround stale pytype.""
* Revert "Workaround stale pytype."
* Workaround stale pytype
* Verify set\_fields (and entire ACLs) can be serialized at config parsing time
* Implement set\_fields in ACL output (so any OF field can be set)
* Update documentation to reflect how docker tags work for us now
* Update rasp pi build script to use our new docker tag system
* Preversion 1.6.16

1.6.15
------

* Explicitly require both msgpack and msgpack-python, to workaround msgpack package renaming
* Fix #1462
* Fix #1460
* Fix #1463 and Fix #1461
* Bump to 1.6.15
* Fix #1464
* Improve test cases and packet fuzzing now runs in persistent mode
* Introduce debug setting on VLANs, to disable the minimum IP packet size check
* Update the generic pipeline so that the faucet test suite will pass if 'GenericTFM' is used as hardware type  - Add missing match capabilities in table 0 (Port ACL)  - Add missing action capabilities in table 4 and 5 (IPv4/IPv6 FIB)
* Revert "Use VLAN pkt\_out helper consistently."
* Use VLAN pkt\_out helper consistently
* Disable targeted resolution by default, and test it
* Add comment for targeted gateway resolution
* Convenient pkt out helper method for VLAN
* Incremental targeted gateway resolution implementation
* comments addressed
* Add port\_state watcher for Prometheus, and recommend Prometheus-only monitoring
* Suggest Prometheus instead of InfluxDB monitoring as an example
* Use common FROOT
* Use common install script for building FAUCET
* Retry pip/pip3
* Retry pip/pip3
* Revert "Revert "Retry pip install (Travis fails occasionally due to connectivity reasons).""
* Revert "Retry pip install (Travis fails occasionally due to connectivity reasons)."
* Retry pip install (Travis fails occasionally due to connectivity reasons)
* Ryu 4.21
* push up base and python3 images for docker-compose
* Fix issue 1421: Decode port change reasons
* Event server should reject multiple clients, and also keep only most recent N events when the queue is full
* All hosts must have nonzero eth\_dst counters
* Add retries for flow tables in Prometheus
* Add test for Prometheus flow logging
* Add unit tests for gauge config
* dps shouldn't be a required key for gauge.yaml #1441
* Reduce dimensions for Prometheus flow table logging
* Prometheus/Influx now logs DP ID
* Initial implementation of Prometheus flow table counters
* Incremental implementation of flow table counters for Prometheus
* map old OF match names to new
* Update faucet\_mininet\_test\_base.py
* Update faucet\_mininet\_test\_base.py
* Update faucet\_mininet\_test\_base.py
* Need to translate back to old matches for Ryu ofctl
* Remove old style unsupported tp\_dst match
* Add flow counters for Gauge Prometheus
* Drop support for old style OF1.0 matches (nw\_src, nw\_dst et al)
* Run more unit tests in pre-commit hook
* Pre-version 1.6.15

1.6.14
------

* Release faucet 1.6.14
* pylint
* Better check for bad include format and fix errors
* Fix typo
* Fix #1414
* Fix #1412
* Fix #1415
* Fix #1410 and #1411
* Fix #1409 and #1408
* Fix #1407 and #1406
* Fix #1405 and #1401
* Fix #1404
* Fix #1403
* Fix #1402
* Fix #1398
* Fix #1400
* Fix #1399
* Update docker documentation
* Add note that only one client is supported
* Allocate new port if iperf client or server fail to start
* typo
* Explicitly set iperf client IP
* Revert "Revert "Add routing IPv6 routing test address by loopback interface.""
* Revert "Add routing IPv6 routing test address by loopback interface."
* Add routing IPv6 routing test address by loopback interface
* TODO to fix IPv6 test host addresses for consistent ND
* Revert "IPv6 routing tests can fail occasionally because we don't find the FAUCET VIP in the IPv6 neighbor table."
* IPv6 routing tests can fail occasionally because we don't find the FAUCET VIP in the IPv6 neighbor table. This is because the source address of the neighbor discovery request was not predictable and FAUCET might not reply to it
* FaucetConfigReloadAclTest should verify port 4 can't be learned as well
* FaucetConfigReloadAclTest less redundant
* FaucetConfigReloadAclTest can fail due to hosts learned check before Prometheus updated
* FaucetConfigReloadAclTest might expire a host under load
* Remove logs every controller start attempt, log prom output from both FAUCET and Gauge automatically
* More thorough check that FAUCET is listening on Prometheus port
* Check controller health again after test start/switch connection
* Revert "Temporarily add .fuzz to enable deletion of orphan repo on Dockerhub."
* Temporarily add .fuzz to enable deletion of orphan repo on Dockerhub
* Remove exception logs before restarting test
* New pylint catches missing returns
* workaround pylint bug
* Put default for FAUCET\_EVENT\_SOCK in get\_setting()
* Fix console command
* Fix acl
* Rebase
* Add fuzz testing for faucet packet handling\
* Move gnmi dockerfile into the gnmi directory
* Update pi builder script to build new base images
* adjust entrypoint permissions; add group
* add /var/run/faucet
* add in from @gizmoguy
* lock pytype to a commit that works
* docs should clarify usage is an env for docker run
* fixing requested changes
* rework dockerfiles using su-exec in a base image
* put sudo back
* extra dependencies, ovs lock requires root
* set ipv6 conf
* simplify build time for tests
* build the base-tests along with the tests
* switch Dockerfiles mostly to non-root; fixes #1391
* remove section that is no longer accurate
* update DPDK to 17.11
* Preversion 1.6.14

1.6.13
------

* Release 1.6.13
* Add link to Poseidon tutorial
* Clean up pydoc strings
* Fix error logging
* Add additional sanity checking over state of event socket\_path
* Add docker flag for starting with ipv6 enabled
* Switch to using napoleon for generating code documentation
* Add descriptions of faucet/gauge
* Fix Sphinx build warnings
* Optimized config-fuzzer and related files
* Make documentation more consistent
* Fixed markup error
* Fix formating of ASCII diagram
* Faucet Testing with OVS on hardware
* Tidy documentation
* Exclude README.rst from Sphinx build
* move configuration documentation from source files to an rst file
* fix build warnings
* Add documentation of config to Conf object source files
* Revert "Try https://blog.travis-ci.com/2017-12-01-new-update-schedule-for-linux-build-images."
* Try https://blog.travis-ci.com/2017-12-01-new-update-schedule-for-linux-build-images
* FAUCET\_EVENT\_SOCK can be a bool (default path) or an explicit path
* Add missing dependencies required for installing python libraries
* Check event\_sock actually needed
* hotfix changing FAUCET\_EVENT\_SOCK to a bool
* fix formatting for md -> rst
* minimize exposure of /var/run; md -> rst;
* adds a rabbitmq adapter to get events from the socket
* Revert "Add another shard."
* Add another shard
* incorrect pylint import warning
* STAT\_RELOAD environment variable not explicitly set, so can be left over from previous test in the environment
* Refactor tag/var parser for flow table dumps to common function
* Run unit tests as pre-commit check
* Event logging tested in int. tests
* event logging tested in int. tests
* pylint
* Fix event log test to wait for all messages
* Verify event\_ids sent all arrived
* Need metrics
* Add event\_id counter
* Explicitly check event queue if empty
* Reset test event socket always on test setUp()
* add FAUCET\_EVENT\_SOCK to compose files
* Add error message if event socket not created
* Update faucet\_experimental\_event.py
* mkstemp() is for amateurs
* event sock can be too long
* Experimental event notification
* Init event notification socket
* Initial events
* Add experimental event notifier stub
* max\_resolve\_backoff\_time duplicated
* String tests had multiple DP sections
* pytype
* Check for duplicate YAML keys
* Check dp\_conf is a dict
* Catch missing route config
* Handle permission denied reading config
* pylint
* Fix OF diagnostic tcpdump
* Preversion 1.6.13
* Preversion 1.6.13 (fix travis)
* Make image slightly smaller and trim margins
* Rename files to be consistent (and fix broken sphinx link)
* Rename fuzzer dockerfile

1.6.12
------

* Rename fuzz docker
* Documentation updates
* Add py-AFL-fuzz config testing
* Replace pipeline image
* Bump version for release
* Upgrade Ryu to 4.20
* When an OFError occurs, correlate with the offending XID
* Templatize config tests
* Fix crash parsing non UTF-8 config file
* Ensure ACL rule format correct
* Test invalid UDP port
* Catch invalid mask in ACL
* Catch invalid IP addresses in ACLs
* Fix crash when invalid ACL action list
* No longer need dpkt
* More conservative checks of packets before parsing
* Need to include our master requirements.txt for readthedocs
* Run sphinx-apidoc as part of conf.py so it works on readthedocs
* Convert our documentation to Sphinx
* Only check for IP ether type for fragmentation check
* Cleanup created containers as well
* Don't push if build fails, and clean up orphaned container/images
* Test modification of file without actual parse output change
* Cleanup stopped containers as well as images
* Test no warm/cold restart on no config file change
* Improve config change logging, and unnecessary cold start on no effective config change (config file changed but the parsed result was the same)
* More diagnostics for config parsing/reloading
* Added all\_dps as an option instead of individually adding data paths
* Break/fix
* Add of\_dp\_desc\_stats Prometheus variable to describe datapath
* Use common test DP name
* Fix HUP test
* Fix reload label checks
* Add dp\_name to BGP metrics
* Check port counters for all ports
* Require dp\_name on Gauge variables
* Add dp\_name to all variables
* port range config test no longer necessarily here
* Simplify Prometheus labeling
* -Merge branch 'master' of github.com:faucetsdn/faucet into dev -Add more checking to port config -Update port range config tests
* Check for packet to unknown port
* Standard Prometheus label formatting
* Revert "Add dp\_name label to Gauge variables."
* Use REQUIRED\_LABELS in FAUCET Prometheus client
* Add dp\_name label to Gauge variables
* Refactor watchers to use prom\_client to report DP status
* path is not a distance scalar (stacking)
* Remove redundant text and update pipeline description
* build\_tag should check build actually worked before pushing
* Stricter check requires arp\_neighbor\_timeout
* pylint
* Rename L3 timeout assert
* Ensure L3 timeout can refresh L2 if necessary
* Special case all\_dps default False
* Allow monitoring of all DPs by a watcher, if all\_dps: True is set
* Allow logging to stdout/err:
* Don't require all VLANs on all DPs in a stack
* port\_not
* Indent error
* Need to pass through failover options
* Only mark a port as a mirror destination for an ACL, if that ACL is actually in use
* Add passthrough output actions
* Test output to unknown port
* Test output port misconfiguration
* Test ACL rules are resolved
* Don't hardcode port wait time
* Much more extensive validation of ACL config rules
* WatcherConf needs dp\_id
* Simplify top level config file parser
* Every Conf object should have dp\_id
* interfaces are not ports
* Set VID for invalid interfaces check
* Fix too big check, and check invalid interfaces type
* Verify DP ID in valid range
* More use of check\_config()
* Create check\_config() method and use finalize\_config() method in ports
* Preversion 1.6.12

1.6.11
------

* Flow table outputs are YAML not JSON now
* Don't restrict router VLANs to 2
* Document set\_defaults() as place to check
* Test empty VID
* optionally compress flow table dumps when outputting
* Better checks in set\_defaults() for port and vlans
* Don't verify empty VID for now
* VID needs to be verified in multiple places
* Version bump for release
* Break/fix
* Check for invalid MACs
* Move router sanity check function to update()
* Check empty/invalid VID
* Verify routers have two VLANs configured
* break/fix
* Verify port number
* Test port number valid
* Don't allow VLANs on stacking ports
* Enforce 9.0 minimum
* pylint minimum is 9.0
* pylint
* Bring config\_parser.py back up to pylint minimum
* pylint for test\_config meets minimum
* update interface-range config test
* assert if interface-ranges config is valid
* unnecessarily checking int type
* Crash on deleting a port from config
* fix broken port range test
* test port range config applied correctly with lower priority than specific port config
* Fix catching and a space
* Add more tests and update files to raise InvalidConfigError when necessary
* Add timeouts and limits on controller/tcpdump
* Cap tcpdump packets for OF channel
* Reduce disk space with test images
* Moved some tests to test\_config to check for correct exception
* Created InvalidConfigError for bad configs
* Revert "Try travis\_wait for test runs."
* Revert "Move travis\_wait to docker\_run."
* Move travis\_wait to docker\_run
* Try travis\_wait for test runs
* Test for #1241
* Fix issue #1263, exception when including non-string datatypes
* Since we have matrix CI can afford to reduce max load average a bit to avoid worker hangs
* Fix issue #1248; unhandled exceptions with empty fields
* Fix issue #1244 and clean up some test cases
* Fix #1240; exceptions with certain fields not containing strings
* Update image names for docker-compose.yaml for raspberry pis
* Rename
* Fix referencing unconfigured vlans, issue #1209
* Tidy up docker pi build scripts
* Run a sanity test shard (to avoid running pytype/etc other tests redundantly)
* Make location to faucet source code flexible
* Work on Docker ARM building scripts
* Schedule 4 test shards
* Run N testing shards round robin
* Shard by L3/non L3 tests
* Simplify test list parsing
* add dockerfile for ARM prometheus 2.0
* ARM prometheus 2.0 isn't ready yet, roll back to older version
* Fix up some bad faucet.rules.yml paths for prometheus 2.0 upgrade
* Preversion 1.6.11
* Revert "Shard on route/non routing tests."
* Shard on route/non routing tests

1.6.10
------

* Use docker test image
* Update run-travis-test.sh
* Correct RUNTESTS
* switch/case
* Add base image for FAUCET tests
* too many \`
* Matrix syntax
* Can't have a #
* Enable matrix tests
* Make test script smarter (can be told to run different tests)
* Yet more directory confusion
* Rename travis run script
* More directory confusion
* Can't assume path to build script
* Move travis build run to script so can be matrix-ed
* Bump version for release
* Fix issue #1208, config file not forming a dict
* Break/fix
* Restrict VID range
* max\_loadavg() too low for Travis
* A port without VLAN (or a stack) is a config error
* Reduce max parallel tests to approx loadavg
* extend tests with config reload for port range config
* tests for port range config
* Support for port range config. Example config: interface-ranges:     1-4,6,8,10-12:         native\_vlan: v100
* make env vars consistent; add stat env var
* Make checkout quiet
* Mark FaucetUntaggedMultiConfVlansOutputTest broken for OVS master
* Add ref. to http://www.hyrumslaw.com/
* Re-enable tests that needed a current OVS version
* Clearly mark the experimental API as experimental
* Fix and re-enable the experimental API, which revealed we should have been using start() in controller classes
* stat reload test sets enabling variable incorrectly
* Config reloading incorrectly always on (and unnecessary initial config reload)
* TODO for Gauge to stat FAUCET configs
* Implement stat based config change for Gauge
* Test stat reload
* stat-based detection of config files
* Should not overwrite config hashes unless config parse successful
* Add test failure
* update test to check unconfigured acl
* Verbosely log L2 type L3 source when L2 learning
* Parse IP header even if not running L3
* Don't need "-b"
* Build Pi fix
* Build script for Pi on Pi
* Remove test for unknown router VLAN (need alternate test for global VLAN undefined)
* Don't route on a DP, if not all VLANs configured on that DP
* Revert "Fix attempt to add VLAN that might not have any ports."
* Fix attempt to add VLAN that might not have any ports
* Fix referencing an unconfigured ACL #1201
* add test for checking VLANs resolve on routers
* fix VLANs resolving on routers
* Changed faucet.yaml; adding guest vlan to sw2
* Truncate packet in to maximum always (recent OVS does not honor max\_len)
* Drop packet ins where cookie ID incorrect
* Try OVS master
* Try OVS 2.8.0
* Increase free ports to 500 and try OVS 2.8.1 again
* Test OVS 2.8.0
* pylint
* Dump decoded pcaps, then txt files
* Fix pcaps not dumped
* Explicitly set default miss length to 0
* Explictly configure which async messages to receive
* Enable more OVS diagnostics
* Docker pi x compile not ready for prime time
* Try to build Pi images under Travis
* Have to install complete OVS
* Tune simultaneous makes to load average
* Incorrect name for MAKEFLAGS
* Try again to parallel compile OVS
* Can't parallel make OVS
* Speed up build with DPDK
* Upgrade to prometheus 2.0
* Compile 2.8.1 with DPDK
* Pre-version 1.6.10

1.6.9
-----

* 2.8.1 still occasionally disconnects with more tolerant settings
* Version bump for release
* Try 2.8.1 with increased socket timeout
* Set higher socket timeout
* Revert "Try upgrade to OVS 2.8.1 again now implemented controller ratelimiting/mininet limits."
* Try upgrade to OVS 2.8.1 again now implemented controller ratelimiting/mininet limits
* Control channel rate limiting
* Allow setting of OVS rate limit
* pylint
* "separate"
* Default to CPU limited host and 1ms link delays, to avoid thrashing test host
* The help text for "n" on learned\_macs less confusing
* BGP status can be queried on startup before BGP service ready
* Detect DP level config changes
* ACL only change optimization not used when ACL changes to or from no ACL
* pytype fixed
* Fix host cache test
* sort MAC list for comparison
* Host count verification needs to account for stacking
* Check host learned count
* Ensure reported learned hosts count is the same as hosts learned
* Stale cache entry (ports) can cause hosts not to reported as learned
* Fix isfragment()
* Better ACL change logging
* Move isfragment logic to own method
* pytype broken
* Wait for ACL IP tuple rules to be pushed
* unknown ports should use port number as a str
* Allow ACL to be designated exact match only
* pylint
* Implement exact match tuple testing
* Revert "Remove/recreate test directory on each controller restart attempt."
* Remove/recreate test directory on each controller restart attempt
* Add Prometheus histogram of packet in processing time
* Don't use /tmp (is RAM and tends to run out of space)
* Make OVS build dependencies configurable
* Make FaucetSingleStackStringOfDPTaggedTest less load dependant
* Reduce image size slightly by installing OVS first and purging some build tools
* Ryu blows up parsing fragments
* Too strict to check packet ins from port down (packet ins port up/down may arrive out of order)
* Specify a test ryu.conf for controllers
* Don't use curl to do portmod
* Check multiple IP versions for controller listen
* Do not process packet ins from down port
* Allow configuration of BGP listen address
* Ryu 4.19
* Add valve\_util.get\_setting() and use it instead of os.getenv()
* Initialize Gauge DP status at config time
* Use OF port number for Gauge stats if port number not configured
* OVSV typo
* Git clone OVS to workaround openvswitch.org outage
* Add unit test for vlan referred by its name
* Fix type compatibility issues for vlan
* Make OVS compile noiser so Travis doesn't false positive hung build
* Don't wait disabling stack ports
* Update TODO for handling failure of redundant DPs in stacking
* Stacking should tolerate failures of redundant links
* Can't default to > 1 switch to switch links because non stack tests don't generate loop free topologies
* Do not specify networkx version
* Stacking with multiple links can cause a loop
* Stacking should work with multiple stack links between DPs
* Separate implementation for constructing string of DPs
* pylint
* Stack tests should allow configuration of number of switch to switch links
* shortest\_path\_port() should consider port status
* add\_edge() API change for networkx 2.x
* No longer need to pin networkx version
* Preversion 1.6.9

1.6.8
-----

* Version bump for release
* add release target to docs
* fix environment variables for db and admin user
* Permanent learn tests require hard\_timeout not present
* ensure hard\_timeout set on eth\_src flows
* hard/idle timeouts reversed on eth\_src flows
* Fix flow\_timeout method call
* add release target; closes #767
* OVS 2.8.1 connections to controller unstable under heavy load. Will continue to troubleshoot
* More relaxed OVS connect time to reduce test load
* When cold starting dataplane, reset the host cache to cause routes etc to be re-resolved
* fix extra / typo
* add compose file for rpi
* Re-attempt OVS upgrade to 2.8.1
* Sync Aruba TFM to generic
* VLAN table does not need eth\_src
* Don't need catchall ICMP entry at all
* Don't necessarily need to catch all ICMP
* Specifically match echo request/reply to control plane
* Sync Aruba TFM to generic
* icmpv6\_type moves to VIP, eth\_src doesn't need ip\_proto and icmpv6\_type
* sync Aruba TFM to generic
* Move ip proto/icmpv6 matches to VIP from eth\_src
* Move eth\_src matches from VLAN table to eth\_src table, so VLAN table doesn't need eth\_src
* Allow configuration of BGP server addresses (available in Ryu 4.19)
* Ryu 4.18
* exabgp should attempt only one connection
* Actually, don't look at hw\_src in NAs - might not be present and not worth believing if it is
* Some IPv6 hosts can use a src IP from a different subnet to the one they're NA'ing for. Handle this situation and also verify NA'd hw\_src is the same as eth\_src
* Move group flood bucket builder to valve\_of
* LACP test shouldn't care about aggregator ID
* Test that traffic over LAG works
* Avoid loopback flood on LAG members
* LAG list moved back to VLAN
* Test connectivity before and after loop mitigation
* OVS dumps should be .log so dumped first
* Add dump-ports
* More OVS diagnostics
* dump OVS switch flows using nice ofctl utility
* bgp log helper for IPv6
* Use log helper for BGP
* matching lines log helper, and try to capture only relevant OVS log lines
* Use DP-centric LAGs
* pylint
* pylint
* pylint
* pylint
* pylint
* pylint
* pylint
* pylint
* Concentrate more Ryu lib imports through valve\_of
* Concentrate Ryu lib imports in valve\_of
* Add quiet commands helper
* Prometheus expire still flakey until load
* Loop check should retry flood if loop is not yet ready
* Loop test needs bridge tools
* iproute2 needed for tc
* Add trivial loop protection (typically for access ports)
* whitespace
* iperf can fail to start due to port conflict
* Completely rewrite prometheus expiry test
* Fix prom learn mac helper
* Helper to check MAC present in Prometheus
* Update example configurations for faucet/gauge to show newer features
* Revert debug level change
* flap port at beginning of FaucetSingleHostsTimeoutPrometheusTest to make more deterministic
* Disable learning jitter for FaucetSingleHostsTimeoutPrometheusTest to make test deterministic
* FaucetSingleHostsTimeoutPrometheusTest diags
* Wrong arg order setting up for Prometheus timeout test
* More diagnostics
* Temporary debug log level
* str() log levels
* Yet more test logging
* put back to single quotes
* add FAUCET\_PREFIX for specifying paths of volumes
* Order log dumps, more patient fping for Prometheus
* add\_macvlan confused by another background ping
* Add mac\_vlan confused by background ping
* Change ofchannel debug log to txt so dumped last on failure
* Verify MAC VLAN interfaces come up
* Don't try to rate limit learning for Prometheus learning test
* partner LACP port number does not matter
* Dump YAML, then logs, then other files
* Somewhat less disk space (don't cache mininet/pytype in layers)
* Always update metrics on receiving a packet
* Did not dump test files
* Dump pcaps last
* Make FaucetHostsTimeoutPrometheusTest less load dependant
* gNMI, use new replace/update methods
* Don't hardcode DP ports in LACP test
* Remove erroneous second copy of check script
* pylint
* add update test for nsodbc poller
* Move flow checks to outside of the class
* fake couchdb server deletes docs associated with a deleted database
* Add unit tests for gauge\_nsodbc
* pylint
* pylint
* Change mock datapath attribute from id to dp\_id to match faucet.dp
* pylint
* pylint
* pylint
* Test 2-port LAG
* Adding missing import
* TODOs for LAGs
* Implement LAG ID
* Fix for hardware tests
* Support multiple links per host (first user LACP)
* Add multiple Update and Replace IETF JSON support to SET
* Documentation
* Increase test CPU oversubscription again
* Move DP config change detection to DP class
* pylint
* pylint
* test\_config has all kinds of bad config which other tests now catch
* ACL parse check not robust enough
* More config checks for ACLs (including bad match conditions)
* More config parsing checks (including resolving VLAN names in routers, empty interface lists, enabling stacking and routing)
* Test that an unknown router VLAN is rejected
* Fix test
* Move more stacking implementation out of valve.py
* Move stacking implementation for flooding to own class, re-enable stacking tests
* Indent
* Update valve\_of.py
* Update valve\_of.py
* Move flood action list builders to valve\_of
* Missed L3 True
* pytype unhappy
* Move learn banning implementation to host manager
* Move flow-removed triggered host learning to own class. Move API call to render DP as dict, to DP class
* Move VLAN expiry implementation to VLAN class
* Simplify host learning functions
* Remove use of json parsing of match in flow removed message
* Incremental refactor for host cache
* Simply host expiry
* Try to make apt-get quieter
* Explicitly expire all hosts learned on a port when port goes down. Don't skip deleting from VLAN table when VLAN deconfigured
* Block/unblockl learning on port depending on LACP status
* Send LACP down flows when LACP expires
* Delete other port flows when lacp down executed, and ensure learning does not happen while LACP is down
* Delete port flows when LACP down
* Block traffic on port while lacp down
* Add prom client to \_\_init\_\_ args so GaugeFlowTableDBLogger can be instantiated
* pylint
* Added unit tests for DatabaseCouch in nsodbc
* Add functionality to couchdb server so that it adds and deletes docs and views
* Break/fix
* Fix pylint revealed by import cleanup
* Only call update metrics if packet in handler returned some flows
* Still too slow updating metrics on packet in
* Remove old python2 imports
* Allow old python2 imports to be removed
* LACP expire log fix
* Retry iperf stats when switch ports 0 traffic
* Don't try to rate limit metric updates (makes tests slow)
* Missed import
* Better rate limit of metric update requests
* Log LACP state changes
* Make json comply with rfc7951
* Incremental coverage improvement (ARP)
* Make generic state expiry thread, and metric updates only in metric update thread rather than for every packet in
* remove hardcoded port 1 from faucet\_mininet\_test\_unit.py, use self.port\_map[port\_1] instead
* Can't use set yet
* Incremental refacto towards sets of confs
* Fix check for unknown VLAN, port status handlers should check for ignored ports
* Conf objects now have finalize method
* \_add\_vlan() shouldn't modify arg
* Don't pass dp\_id to valve methods (faucet.py already validates it)
* old DP reference
* Simplify get\_native\_vlan()
* Revert "Remove old python2 style python imports, and pylint."
* Revert "Test fix."
* Set Travis PYTHONPATH, clear ref to old Docker cache
* Test fix
* Remove old python2 style python imports, and pylint
* Don't try to cache Docker image any more - we are only caching Ubuntu which is small and Travis is still occasionally running out of space
* missing line in pipeline diagram
* Keep last LACP packet on a port
* Less redundant host cache data
* cached\_hosts\_on\_port()
* pylint
* Move HostCache to VLAN
* Revert flood/up filter
* Tests don't initialize port state
* Always filter flood ports for only up ports
* Update docker containers used for docker-compose
* Add unit test for ConnectionCouch in nsodbc.py
* Add a pretend http request handler for couchdb
* Set LACP aggregation flag so port channel can come up with only one port
* pylint
* Faucet Testing with OVS on hardware
* pylint
* Less decisions for \_\_hash\_\_()
* Refactor to reduce temporary list building
* Bump setup.cfg ready for next release

1.6.7
-----

* Bump version to 1.6.7
* Add links to our build server
* Add packaging files for our FAUCET VM
* Add some files necessary for packaging faucet
* Default to prometheus for port\_stats poller in example gauge config
* Fix example faucet.yaml
* Remove math module import
* Use tempfile.mkstemp() to make a new temp file instead of tempfile.TemporaryFile(), so the file can be opened and closed
* Refactoring the GaugeWatcherTest class  & pylint
* Remove GaugeUpdateTest class since there are no tests in it, and make all methods within it into functions
* Move the get\_stats method into parent class
* Refactor creating ofp messages into another class
* added unit tests for watcher.py
* ffi-dev only
* Add FFI
* LACP test doesn't need to be serial
* Make port up message clearer
* Test FIB route expiry
* dead FIB routes not actually deleted
* Update gNMI README
* Update gNMI updater
* Update gNMI Get
* Add gNMI Set
* Add gNMI Capabilities
* Update run\_target script
* Update hostname in certificate generation
* Update gNMI Dockerfile
* Update FCTL test to use MAC address format
* Suppress pytype warning for using python3 only feature
* Add colons between octets in mac addresses
* Update faucet prometheus exporter port
* Fix UnboundLocalError when fctl has a connection error
* Provide a console script for running FCTL
* Pre vesion bump
* pylint

1.6.6
-----

* Add doc for profiling
* Version bump
* Disable profiling by default (expensive)
* Mark DP finalized also
* pylint
* Use Ryu app close method
* Cache \_\_hash\_\_ of Conf objects once they have been finalized
* Reduce interval for gauge thread poller tests
* refactor port stats poller & flow table poller tests
* Make hash cheaper again
* Added unit test for flow table poller
* Add unit test for port stats poller class
* Need sys import
* Add cProfiling of all Ryu runs
* Learn ban count is dynamic
* conf\_keys() slightly cheaper
* Make log level configurable for faucet and gauge
* Add docstrings
* Unit test arg
* Revert "Revert "Upgrade Ryu to 4.17.""
* Ethernet packet headers reparsed more than necessary
* Revert "Upgrade Ryu to 4.17."
* Handle LACP packet parse failure
* Revert "Must never set idle timeout on eth\_dst flows by default."
* Don't need to try another route manager once we've tried the appropriate one based on eth\_type
* Missed port type change to \_port\_add\_acl()
* Need to ensure port has LACP enabled before replying

1.6.5
-----

* Make travis do pypi deploys on new tags
* Version pre-bump
* LACP is sent from wrong eth\_src and with a VLAN tag
* Added unit tests for gauge poller
* Version bump for release
* ACLs referenced by instance now
* Resolve ACLs by name at config parsing time
* Ignore subconf sense wrong
* Not yet ready for DP-level only config change detection
* pylint
* Detect DP level config changes
* Conf objects can exclude sub Conf items for comparison
* LACP test shouldn't care what peer key is
* pylint
* Don't sort VLANs update metrics
* Don't sort port order
* Remove min port age
* Sort learned MACs output
* Test port\_status\_handler()
* Missing enumerate
* VLAN method to count learned hosts
* New common code to return hosts learned on a port
* eth\_src\_table unneeded
* Simplify port instance use
* Fix reference to ACL VLAN table
* Use common code to build a list of ACLs
* Re-enable testing under python 3.6
* 2.8.1 still not stable
* Try 2.8.1 now we check port state for liveness
* Downgrade to 2.7.3 because 2.8.1 shows port state 4
* Upgrade to 2.8.1
* Add comment for mirror flows
* Don't delete flows referencing a down mirror port
* Must never set idle timeout on eth\_dst flows by default
* Mirrored ports did not handle state transition
* Disable http\_proxy when actually running tests
* Allow configuration of an http proxy:
* Sanity test is more helpful describing switch state
* Upgrade Ryu to 4.17
* Test state change of mirror port
* Crash handling unresolved VLAN on mirror port changing state
* Added some method docstrings
* Added unit test to check influx flow logger
* Revert to 2.7.3 for stability
* Allow configuration of VLAN tag type. Don't try to find OVS logs if env variable not present
* Try 2.8.1 now we have OVS logs to look at
* shutil
* Archive OVS logs
* Switch to OVS 2.7.3
* Upgrade OVS to 2.8.1
* pylint
* Add unit test for influx port stats
* Move the file read to outside of the parse\_influx\_output method
* Add a unit test for the influx port state update method
* Make PretendInflux handler if the server has specified an output file
* fix ports being an empty dict, and give the datapath a name
* change import to include the whole ryu ofproto parser
* Extreme patience for slow learning DPs
* Increase host learning patience
* expect script to send recommended config
* Add README for ZodiacFX
* Add unit test for LACP
* Mininal passive/LACP support
* Add experimental lacp port option
* move mocking datapath out of the class
* move server outside of class
* Add helper to capture LACP to controller
* Docker builds quieter still
* Docker builds should be quieter
* FAUCET has been verified to work an AT-X230-10GP
* pylint
* Add unit tests for gauge\_influx shipper
* Checks that all prom stats have been exported
* Only sent packets with the right eth type for a route manager
* Fix test\_valve for new parse\_pkt
* Parse packet can get eth\_type
* Revert "Strict check on eth type passed to route manager."
* Strict check on eth type passed to route manager
* Add control eth types to route managers
* Refactor to IP header size function
* Simplify parse\_pkt
* Move PacketMeta and friends to valve\_packet
* Revert "Packet parser can get ether type from VLAN header."
* Revert "Only pass a packet to route manager if an Ethernet type the manager is interested in."
* Revert "Move PacketMeta to valve\_packet."
* Downgrade to python3.5
* Move PacketMeta to valve\_packet
* Only pass a packet to route manager if an Ethernet type the manager is interested in
* Packet parser can get ether type from VLAN header
* Move MAC address constants to valve\_packet
* Use bridge/LLDP constant
* Add initial LACP helper
* Retry pings to reduce nuisance flakes under load
* Update gNxI repository
* Sending a LACP packet could crash Ryu
* Syntax
* Second attempt at incremental ptys workaround
* Make verifying cabling message clearer
* close discriptors before kill
* Revert "Transclude ptys leak workaround to switches."
* Diag print
* Revert "Workaround for pts leak continues."
* Revert "Use own stop\_net method."
* Use own stop\_net method
* Workaround for pts leak continues
* Don't diagnostic print
* Incremental workaround - clean up ptys from switches
* Downgrade tests to 2.7.2
* Transclude ptys leak workaround to switches
* Partially address pty leak by closing pty in hosts (controllers and switches need to be fixed)
* Mapping message for OVS-only
* Make mapping log message clearer
* Make Influx tests quiet
* Queue more free ports as required on every test server request
* Wrong file name passed when starting exabgp
* pylint
* Correct exabgp config file
* We can leak file descriptors because test classes are kept around (so files might not be garbage collected for a long time)
* Don't use --bar with parallel (clogs up test logs)
* Add matchfields required for regression tests in noviflow docs
* Make hardware testing quieter
* Increase initial free port count
* Increase min free port pool
* py2 doesn't have subprocess.DEVNULL
* Set stdin to null where possible
* Don't need STDIN to tests
* Apparently we are running out of file descriptors
* Increase unit test coverage
* Increase test coverage
* Revert "Increase test coverage."
* Revert "Don't assume disconnect count 0 to begin with."
* Revert "FaucetMetrics() has no args."
* Per OVS config advice set long max-idle time
* FaucetMetrics() has no args
* Use same test command as docker
* Increase test coverage
* Don't assume disconnect count 0 to begin with
* close\_fds to tshark
* Remove pytype/mininet directories once installed
* Fix libssl-dev
* Add ssl-dev for OVS
* Make OVS build silent
* Make QuietHTTPServer quieter
* Make OVS build quiet
* Delete OVS build dir when done
* Start OVS using OVS scripts
* Install OVS 2.8.0
* Add server side timeout to test Influx server
* Output all metrics when --labels is not specified
* Add travis build status badge
* Update docs to reflect the move to our new github organisation
* Tweak test output further
* Tweak default test output
* line wrapping for performance and verify log messages
* import "error"
* Health message should log test name
* Use mininet log options to reduce output further
* Dupe urllib line
* Break/fix
* Change log level to error (less output)
* pylint
* Only cache the ubuntu image to make sure latest test image always built
* Move Aruba pipeline reporting script to vendor docs
* Make build quieter again. Use generic test command line to run all tests
* Quiten build further
* pytype grumpy
* Add test for fctl
* pylint
* Don't try to update apt-get CL for mininet
* Make build quieter still
* Update Dockerfile.tests
* Make apt-get quieter again
* Update Dockerfile.tests
* Make test docker build quieter
* We don't need the OF reference implementation
* Move default python version from 3.5 to 3.6
* Add Gauge for pi
* Switch Pi to alpine Linux
* Switch to alpine Linux for non-test containers - makes FAUCET tiny
* Reduce size of all containers further
* Don't add docs to docker images
* Show size of docker images before/after
* Reduce mininet dependencies further
* Prevent mininet X11 dependencies from being installed
* whitespace
* Diagnostics for test/port server
* Allocate fewer test ports (use a separate test server call to obtain a test serial number)
* Missing iperf\_port arg
* Exit test if unit test fails
* Don't add pyc to docker images
* We don't actually need a listening port for OVS. Could pass None to test port server, meaning we could incorrectly release test ports that might be in use
* Print return of all ports allocated to a test
* Allocate fewer ports for iperf tests and print which port allocated to what to diagnose port conflicts
* Pylint
* pytype grumpy
* Experimental fctl utility for FAUCET/Gauge command line use
* include gauge unit test in travis and docker
* use single quotation marks instead of double
* pylint
* Rearrange imports and remove unnecessary ones
* moved some functionality into separate methods
* use the faucet.gauge\_prom PROM\_PORT\_PREFIX, PROM\_PREFIX\_DELIM variables instead of the string literal equivalents
* Added a unit test to check the update method in GaugePortStatsPrometheusPoller
* Revert "Use official buildpack-dep image (more appropriate for dev)."
* Use official buildpack-dep image (more appropriate for dev)
* Don't delete setuptools. :/
* Cache Ubuntu latest
* Use latest Ubuntu base image (rather than Ryu's one - no point)
* Drop numpy (adds too much of a dependency)
* Reduce size of FAUCET/Gauge containers slightly
* Reduce Pi image size
* Don't actually need InfluxDB
* Run unit tests when building Docker images to make sure build successful
* Can't slim down test image yet
* Display size of docker images after cache retrieval
* Reduce size of Gauge container
* Reduce test container size further
* Reduce size of FAUCET docker image further
* Ubuntu specific version checks need to be generic
* Netcat has a different name with new images
* docker save command line needs different python images
* Reduce size of test docker container
* Slim down Docker builds
* Switch to standard python image rather than ryu (smaller)
* pin networkx to 1.11
* TooSlow test used wrong PostHandler
* Reduce retries to 1
* Add missing influx\_retries
* New InfluxDB client allows configuration of retries
* No longer need to use deprecated Travis image
* Simplify docker save command line
* Experiment if new Travis image is working
* Should use less hardcoded timeouts
* Unused dpid\_log
* Reduce CPU over subscription
* Too slow test should reuse more of the base class
* Revert "use less cache space (xz vs. gzip)."
* use less cache space (xz vs. gzip)
* Influx break/fix
* SIGTERM diagnostic OF tcpdump for tshark
* Enable Influx tests to try another port if start of test server fails
* Make influx test logs available to helpers
* Check Gauge is listening on allocated Prometheus port
* Only allocate Influx and Gauge Prometheus ports if the test uses them
* Refactor for more dynamic allocation of ports for Gauge
* Port status helper should always confirm status change by default
* Only flood to up ports
* Another pip2 upgrade
* pip3 has to be upgraded before upgrading pip/2
* Break/fix
* Revert "Pip upgrades should be in same layer as module installation."
* Pip upgrades should be in same layer as module installation
* Putting more pip in pip
* More pip bootstrapping
* Actually upgrade pip to fix occasional build failures due to pip not being able to retry a failed download
* Version bump

1.6.4
-----

* Version bump
* FAUCET should be more helpful when a DP has misconfigured hardware type
* Break/fix
* Test failover behavior
* Enable fast failover test
* Failover groups can resolve ports
* Update convenience test script with sysctls
* Bump version for next release

1.6.3
-----

* Bump version
* Version bump
* Add (skipped) test for failover groups
* Experimental support for failover groups
* Add helpers for fast failover groups
* pylint
* Check groups and groups for routing not simultaneously enabled (will conflict). Refactor config parser to better catch all asserts
* pylint
* pylint
* Move group ID allocator to valve\_table
* Mark use of groups with routing broken, but also remove unneeded dynamic state
* ValveGroupEntry has better API
* Enforce group IP allocation
* sleep between tries
* Enable the Prometheus scraper to retry itself
* pylint
* Incremental coverage improvement and pylint
* pylint
* pylint
* Report PBR version in both FAUCET and Gauge prometheus output
* pylint
* Ensure DPID Gauge/counters explicitly start at 0
* Document travis workaround
* Try deprecated image workaround
* 2nd attempt to fix IPv6 docker
* cat travis files
* Diagnose docker on Travis
* Another fix for the docker IPv6 fix
* Fix docker fix
* Fix broken Travis docker IPv6
* Ensure Influx server port is free
* Verify host\_cache kept over port warm start
* Extraneous diagnostic print
* Only really keep dynamic state if both VLAN and ports did not change
* Support merging of dynamic state between conf objects
* Add more ping learn timeouts and check ping learn was actually sent
* Add learn ping timeout
* shorter bcast ping timeout
* Update HPE Aruba documentation with 2930 details
* Updated class diagram to reflect the latest changes
* Revert "Use fping to stimulate learning (faster than ping)."
* Use fping to stimulate learning (faster than ping)
* Speed up fping for multiple host learning
* Should use TextTestResult
* Use unittest module consistently
* More break/fix
* Update docker docs for gauge/prometheus
* break/fix
* Better test summary
* Revert "Group table now can hash on buckets to determine group\_id."
* Revert "pytype."
* pytype
* Group table now can hash on buckets to determine group\_id
* Don't expedite initial free ports
* break/fix
* Don't need to check age of a port never used
* Add note for Docker layer cache
* Test pylint
* Extraneous -v
* Shouldn't need bigger tmp dir now that we can clean up successful tests incrementally
* Incrementally clean up test directories for successful tests to save disk space
* Executable
* Correct path
* Add commit hook
* pylint
* pylint
* Add version info to faucet.\_\_all\_\_
* Try to use tmp in travis build dir
* add prometheus db configuration
* Bump setup.cfg for next release
* Bump docker-compose versions

1.6.2
-----

* FaucetHostsTimeoutPrometheusTest should retry as necessary
* setup.cfg should be synchronized before release
* Bump versions for release
* Add group table shims to routing/flooding
* Add group table basic methods
* Initial class for groups
* Update HP docs with pipeline, remove code hack re TTL
* checkListening() should be stubbed out so we handle controller startup ourselves
* config\_ports might be stale
* Additional None check
* refactor \_start\_check()
* Refactor to \_start\_check() Check that config dynamic ports are being listened on by controller
* Re-enable log dumps
* Fix hardware tests. Improve diagnostics if prom/ofctl does not start
* Additional load check before commencing test
* tcp\_listening() still apparently can take a SIGPIPE in a thread, so don't use in port server
* pylint. faster test startup
* Fix ReloadTest
* wait load average to come down before health checks
* controller healthy check needs to be more patient
* Missing /
* lsof needs to be able to check other TCP states
* Better diagnostics when controllers fail to start/connect
* Explicitly check health status
* Allocate config ports dynamically
* Reallocate ports if controller startup failed
* pylint
* Incorrect util module name
* Try -b with lsof to prevent hangs
* lsof seems to hang on Travis too
* Need lsof
* Use lsof instead of fuser
* tcp\_listening() doesn't work under Travis
* Shutdown Ryu nicely and then run tshark after Ryu shutdown
* Extra check for port free-ness
* Use controller health checks on startup
* Use LOCALHOST constant and implement controller health check
* Utility function tcp\_listening() and make MIN\_PORT\_AGE accessible
* Reuse tcp\_fin\_timeout
* Make TCP port reuse easier
* Increase time between controller starts
* Explicitly shutdown tcpdump when controller stops
* Retry Gauge startup if not up and connected to DP
* Revert "Wait for Gauge to listen on a port."
* Wait for Gauge to listen on a port
* Poll/ping cycles might synchronize in Gauge test
* wait\_for\_flowremoved\_msg waits unnecessarily long
* Fix "BASISo" typo
* pylint
* pylint
* Fix IPv6 table configuration
* Missed valve\_flowmod reference
* ValveTables now generate flows for themselves
* Use match generator in ValveTable
* ValveTables know how to build matches
* pylint
* pylint
* Refer to tables by objects
* Add ValveTable to abstract OpenFlow table
* Skip docker load if cached docker images too small/not present
* Fix resolve\_names\_in\_acls
* Add back TaggedAndUntagged tests
* Use common PromClient
* Add a git config to replace git url with https url
* Remove Ryu lib dependencies from meter.py
* Revert "Remove redundant code from Conf subclasses to base, and remove references to Ryu from meter Conf."
* Revert "meter import path."
* Revert "Port set\_defaults()."
* Revert "Don't default check YAML sequences (yet)."
* Revert "isinstance() spelling"
* isinstance() spelling
* Don't default check YAML sequences (yet)
* Port set\_defaults()
* meter import path
* Remove redundant code from Conf subclasses to base, and remove references to Ryu from meter Conf
* Revert "pylint."
* pylint
* Stage 1.6.2
* Version 1.6.1
* pylint
* Reuse set\_defaults()
* TODO to handle non-dict conf
* Reuse \_\_init\_\_ from Conf
* Reuse \_\_init\_\_ from Conf
* Reuse Conf \_\_init\_\_
* Use \_\_init\_\_ from Conf
* Remove Ryu lib dependencies from meter.py
* Revert "Remove redundant code from Conf subclasses to base, and remove references to Ryu from meter Conf."
* Revert "meter import path."
* Revert "Port set\_defaults()."
* Revert "Don't default check YAML sequences (yet)."
* Revert "isinstance() spelling"
* isinstance() spelling
* Don't default check YAML sequences (yet)
* Port set\_defaults()
* meter import path
* Remove redundant code from Conf subclasses to base, and remove references to Ryu from meter Conf
* Revert "pylint."
* pylint
* Stage 1.6.2

1.6.1
-----

* Version 1.6.1
* Tagged tests incorrectly excluded
* Make prometheus dp\_id label consistent
* Gauge Prometheus client also now has DP status
* Fix unit
* Rename prom rules in faucet.rules to match gauge
* Table 6 should be VIP
* Group actions should be sorted
* Stage 1.6.1 version for next release
* Cleanup comment from README.md

1.6.0
-----

* Bump version to 1.6.0
* Remove .dockerignore
* Switch to using PBR "preversioning"
* jitter test startup further
* Fix parallel tests
* Gauge port variables should be of\_port..
* Jitter test startup
* Change Prometheus Gauge prefix
* Automatically serialize if only one test specified
* Force Gauge Prometheus port to be an int
* Refactor FaucetUntaggedPrometheusGaugeTest so easy to increase number of cycles
* load check before setting up mininet rather than after
* miminize learn timeout, making sure the test alway passes while reducing run time
* Set min lint score to 9.0
* Prometheus test interval too aggressive
* pylint
* keep logs in serial mode
* Add prom\_client
* gauge\_prom args order
* Use common Prometheus client for Gauge
* pylint
* Fix prometheus for monitoring multiple switches
* pylint
* Bump version
* Ensure mask and val are always strs
* Change only the port ACL, if only the port ACL changed (don't restart the port)
* Lower pylint score
* Bump version
* Use exabgp direct logging, and make sure it starts before proceeding
* Add dp\_id lable in prometheus gauge test labels
* spelling error
* Automatically test meters if hardware supports
* Skip redundant tests automatically based on hardware
* Automatically skip/include Zodiac tests when testing hardware
* increase Prometheus timeout in tests
* reset IPv4 prefix for all tests
* Remove diag print
* Reset default mininet host prefix to 24 from 8
* Influx port test retry greater
* Mark use\_idle\_timeout still unreliable (about 1/10)
* Allocate more ports (don't use fuser, prone to hang)
* break/fix
* Add further diagnostics to port server
* Faster reuse of time\_wait sockets
* Remove superflous eth\_src = None
* Add option "-d" to be dump logs from failed tests, and have Travis so that (so can more easily troubleshoot further flakes)
* Use same ACL for meters tests
* Re-enable use\_expire tests
* Remove comment lines
* Make fuser verbose
* Clean up pipeline reporting (parser function too big)
* Correct tshark parser
* Add group/max pipeline reporting
* Switch to parsing tshark logs for pipeline report
* Docker tests should skip expensive pytype etc when -n specified
* Suppress "stale file handle" noise from fuser
* Mark expiry flow feature as unstable to reduce noise level troubleshooting other flakes
* should not soft renew cache\_time; this causes unstable during refreshing src/dst flows
* wait for flows to be removed. dst flows may exist for few secs after src flows have been removed
* need to force noninteractive install
* Influx server socket needs to be closed
* Use tshark to automatically decode test pcaps
* fuser args
* Verbose fuser check
* Additional check that port is really free
* Cleanup successful test directories
* Don't need unique suffix on test tmpdirs
* Cap time\_wait
* All event handlers should check for unknown DP
* Flow removed handler doesn't handle unknown DP
* \_get\_valve() wrapper to handle unknown DPs
* Influx server not stopped
* Revert "Revert "Revert "Consistently handle unknown datapaths."""
* Revert "Revert "Consistently handle unknown datapaths.""
* vid should be set to None
* Revert "Consistently handle unknown datapaths."
* Test reliability (retry scrape/influx server startup)
* Consistently handle unknown datapaths
* Add support for updating outdated gNMI sources from running docker image
* Dump exabgp logs if exabgp doesn't come up
* Influx timeout for Influx down should be longer
* Quicker TCP connect timeouts
* coveralls failing to upload isn't a test error. adapt to tcp time\_wait timeout
* Enable fast reuse of ports (tests can flake because of port in TIME\_WAIT state)
* FaucetWithUseIdleTimeoutTest uses standard helpers
* Expiry tests use standard helpers
* mac\_learned helper should check src and dst tables
* Helper to drop all IP addresses on a host
* Fix InfluxUnreachableTest
* reference to INFLUX\_TIMEOUT missed earlier
* Be more explicit with comment explaining collision
* use bps for data rates
* Add gauge test and allow configuration of prometheus port + address
* Even more aggressively schedule workers. Explicitly call python2 for system tests
* Import random
* Randomize parallel test run order. Oversubscribe test load by 1
* Reduce frequency of load average too high message
* Aggressively schedule tests, but delay test startup if load average too high
* Install multiprocessing for py2 only
* Try to detect CPU cores
* Fix gNMI tool links
* Clean go imports from testing
* Influx test server should listen only on localhost
* Wait longer to serve test temporary port again
* Run coveralls after test
* Run coverage reports outside docker also
* Add code coverage reports
* More patient waiting for Gauge to come up under load
* Quieten pylint
* Need parallel package
* Don't try to background cache update
* parallel pylint rating check
* Dockerfile.tests cache comments. Background saving of build cache
* Run pytype last (try to fail early if tests can catch something)
* Reorder Dockerfile.tests for cacheability
* Move docker cache restore to after initial tests are run, so that we can fail faster if initial tests fail
* Increase parallel test count to 6
* Cache Ryu docker image also. pytype run twice. Abort tests if OVS didn't start
* Parallel git clone, and display progress bar
* Attempt to load saved docker image
* Attempt #3 to enable pip cache
* Use parallel to run pytype
* pip cache parse error
* Enable pip cache attempt #2
* Switch to exabgp4
* Use env variables for build script
* Cache pip
* Need to save cache before trying to load it
* Enable docker caching attempt #2
* Delete stale cache
* Partial implementation for image caching
* fix idle-timeout tests
* update idle timeout feature with faucet master
* Add a docker image to facilitate gNMI testing
* Revert "Try to cache docker images."
* Try to cache docker images
* Revert "Upgrade docker."
* Upgrade docker
* Run pytype in parallel (CPU hog)
* port down shouldn't be a warning (will be a routine event on a real network)
* Use apt-fast to install mininet dependencies as well
* Use apt-fast to speed up package installation
* Run pytype checking
* Simplify config change detection
* Revert "Remove extraneous rules."
* Revert "Revert "Default Gauge polling interval is too aggressive for some hardware.""
* Revert "Default Gauge polling interval is too aggressive for some hardware."
* Wait even longer (2 poll cycles) for Influx
* Add explicit wait-for-Gauge
* Remove extraneous rules
* Fix docker-compose with prometheus and gauge
* Add gauge port stat monitoring with prometheus
* Default Gauge polling interval is too aggressive for some hardware
* Bump version number
* Handle deconfigured watchers
* Improve Gauge logging on config changes
* Force a watcher start always (we might get a connection before we get config, for example)
* HUP test Gauge
* Comment only
* Bump version number
* Fix crash in Gauge/Influx (port state changes not handled). Increase test coverage ensuring all expected variables logged to Influx
* Improve InfluxDB testing (remove hard coded multiples of timeouts)
* Make InfluxDB test servers quiet (confusing "errors")
* Don't report on reserved table 255
* Make FaucetUntaggedACLTcpMaskTest separate to test just TCP\_DST masking
* Verify hardware cabling is correct
* Correct table 0 matchfields
* ipv6\_nd\_target is non-maskable
* Update NoviFlow default pipeline
* Wait if port recently reused
* suppress confusing error message from interrupted post in test
* use of defined neighbors in test method
* Documentation for TCP port mask match
* Need to provide implementation of to\_match\_vid()
* Test TCP port/mask matching
* Fix transclusion
* pylint
* Move to FAUCET provided match composer, so we are no longer dependant on Ryu's. Allow TCP/UDP/SCTP src/dst ports to be masked
* Demote proactive resolver logs to debug
* More pytype fixes
* Troubleshoot flakiness in gauge\_smoke\_test()
* pytype finds things
* Add some missing actions in aruba\_pipeline.json
* Add meter instruction in aruba\_pipeline.json for Port ACL and VLAN ACL tables
* bump versions
* Simply usage of ip\_in\_vip\_subnet()
* Don't try to proactively learn network/broadcast IPs
* Fix proactive\_learn mode for IVR
* Set test IP masks correctly
* Update FIB when receiving an IPv6 RS
* Revert "Use add\_host\_fib\_route\_from\_pkt() more often."
* Use add\_host\_fib\_route\_from\_pkt() more often
* Reduce simultaneous test runs (test flakes)
* \_update\_nexthop() already updates cache
* add\_route() shouldn't do anything if route already present. FIB route from pkt should take care of calling \_update\_nexthops() and updating cache
* \_update\_nexthop() shouldn't do anything if no routes need to be updated
* L3 learning separated from \_learn\_host()
* Add IPv6 IVR test
* Fix syntax of Sending config for port Port... log message
* Bump version for next release
* Don't double-add host FIB entry when packet handled by control plane
* Explicitly log where a host was learned
* Bump version
* Need to use VID from VLAN instance
* logger args
* Log VLAN VID consistently
* pylint
* Add debug logger method and demote packet in logging to debug to reduce noise
* Consistently log DPID on all Valve related log messages
* Avoid race in host move test by allowing test to specify which port a host should be learned on
* Add port\_learn\_bans and vlan\_learn\_bans Prometheus variables
* Pin to scapy 2.3.2, as 2.3.3 fails on Ubuntu 17 hosts with IPv6 even under Docker
* Support VLANs that have the same VID (necessary when configuring inter VLAN routing with other VLANs)
* Better describe VLANs
* shorten VLAN config message
* Implement policy based routing
* pylint
* pylint
* pylint
* pylint
* pylint
* IPv4 fuzzing
* Fix scapy install check
* Need py2 scapy for tests
* fuzz test IPv6 VIPs
* Update architecture with VIP table
* pylint
* Experimental meter support (currently not tested as not much switch implementation support)
* Bump version
* Update to Ryu 4.16
* Further restrict parsing of icmpv6
* Initial packet header parse always restricted to eth + VLAN header
* Control plane ICMPv6 handler ignores all-nodes messages
* Don't try to parse IPv6 packets that have extension headers
* Check that IPV6 next header is ICMP6 before attempting to parse
* Additional check for IP protocol when looking for ICMPV4
* Reparse packets to the control plane more conservatively
* API change for rcv\_packet()
* Reparse packet for IP header/payload if looks like destined to us
* pylint
* Pass a PacketMeta instance including original raw data for future reparsing to Valve
* Only parse eth/VLAN header if no L3 functions
* Unless L3 functions are enabled on a DP (eg. routing, VIPs), don't try to parse packet ins past the IP/v6 header
* Restrict initial packet parsing to eth/VLAN header
* Break/fix
* Add basic configuration of meters
* Add Meter config object
* Add icmpv6 match/output ACL for FAUCET IX
* pylint
* Add inst\_count to InfluxDB flow exports (inst\_count == 0 for drop flows)
* Add VLAN tag without VID present bit to Influx DB exported flows
* Verify format of influxdb series
* Fix timeout race in FaucetUntaggedInfluxUnreachableTest
* Bump version for Monday release
* Add ref to vendor specific docs
* add "hard\_timeout\_enabled" to DP defaults\_types
* update tests for idle-timeout
* relearn host when the expiration of dst rule but src rule still active
* add tests for no-hard-timeout feature
* hard\_timeout can be disabled (on by default). Enable to minimize Packet-INs. To enable/disable add "hard\_timeout\_enabled: true/false" to each dp's config
* Verify ip neigh returns parseable result
* Switch loghandler to WatchedFileHandler - FAUCET/Gauge no longer rotate their own logfiles - this must be done by standard tools like logrotate
* Add example queries for flow tables in InfluxDB
* Initial flow table export to InfluxDB
* Infrastructure for CouchDB testing (no testing yet)
* Move more common poller/logger functions
* Move update() common code to library
* Refactor common code in InfluxDB library
* Move NSODBC to own library
* Add ConnectTimeoutError
* Move InfluxDB to gauge\_influx.py
* Move port/flow pollers to gauge\_pollers.py
* Move GaugePoller to separate file
* pylint
* Decrease timeout for Influx unreachable test
* Handle a ReadTimeout from InfluxDB
* Separate tests for Influx down/unreachable
* Verify that error connecting to InfluxDB is noted in Gauge's log and Gauge exception log empty
* Add newline
* Quote diagram
* Upgrade Ryu to 4.15
* Add diagram to hardware testing
* Missing \_ip\_neigh() arg
* Test separate MAC addresses in intervlan routing
* Fix pip install
* Test override of FAUCET MAC for RAs
* Neighbor discovery needs MAC in uppercase
* packet\_builder() needs vlan arg
* Don't hardcode FAUCET\_MAC
* Make FAUCET\_MAC configurable
* Configure table\_ids from prometheus
* symbolic names for table\_ids
* rename db to influxdb
* Fix up prometheus with docker-compose
* Install client gNMI binary
* Make the gNMI client run
* Test VID swapping
* Implement swap\_vid (swap existing VID with another)
* Remove restriction on global inter VLAN routing
* Use IPv6 hop limit 255 for link local traffic consistency
* update docker-compose for 1.5.4
* Bump version number
* stack ports should not have vlan-tag stripped
* Update the paths of keys and certs
* Flood table needs to be larger for ncast rules
* Add reference to hw\_switch\_config.yaml
* Add router conf to defaults type checking
* Enable type checking on all DP items
* mirror can be str or int
* Add guideline for testing self-signed certificates
* Remove obsolete README
* Add config default type checking
* Better enumerate table IDs so easier to skip unused tables in future based on DP configuration
* Don't need to mask eth\_src/dst in eth\_src table
* Add wildcard config back
* Need to implement ncast of ARP messages not destined for VIP
* Revert "Move arp\_tpa to VIP table (less expensive)."
* Move arp\_tpa to VIP table (less expensive)
* Revert "Partial remove of icmpv6\_type match."
* Partial remove of icmpv6\_type match
* Revert "Make table 3 more narrow (loose icmpv6\_type)."
* Revert "Don't need to match icmpv6\_type in table 3."
* Don't need to match icmpv6\_type in table 3
* Make table 3 more narrow (loose icmpv6\_type)
* Implement workaround for platforms that can't do dec ttl
* Enable IPv6 partially
* Fix Aruba for VIP table
* Delete all flows using wildcard
* Add VIP table
* Syntax
* Need default method for add\_faucet\_vip\_nd()
* ipv4\_src not required in eth\_src
* Refactor VIP flow generation for common code
* Migrate FIB to VIP flow generation to common function
* Migrate to IPv6 VIP table
* Migrate IPv4 to VIP table
* Syntax
* Simply add\_faucet\_vip()s
* Temporarily revert VIP table changes in favor of incremental ones for easier testing
* Proactive mode fixes
* Use descriptive table names
* Add to table\_ids to account for VIP table
* Make space for VIP table
* Ethernet source doesn't need to match ipv4\_src
* FIB tables don't need to match protocol fields
* Migrate to VIP table (converting FIB tables to exact match)
* explictly specify version in docker-compose.yaml
* Allocate FAUCET VIP table
* Cleanup use of route managers
* need to run apt-get update again
* Can't run python3 based tests easily outside docker
* Skip pipeline configuration if necessary
* Test tagged groups
* TFM driver now compares TFM config with known requirements to make sure they match
* Synchronize Aruba pipeline config with FAUCET
* Remove more unneeded features
* Remove more unnecessary pipeline features
* Remove more unnecessary pipeline features
* Remove unneeded miss/features
* Add missing in\_port to table 6 and make names more conveniently located
* Revert "Iterate over route managers rather than call individually."
* Hide ports server socket, and dump any exceptions if can't start controller
* Iterate over route managers rather than call individually
* pylint
* pylint
* Don't need to pin pylint anymore
* Typo
* Make group\_table\_routing seperate from group\_table (so you can have group table based VLAN flooding without using groups for nexthops)
* More .gitignore vim noise
* Group tables including hairpin not supported yet, but shouldn't break nonetheless
* Don't hard code in\_port in Hairpin test
* Support hairpin mode
* Implement switched\_edge (configurably allow switching between hosts on the same port)
* Reorder import
* Revert "Delete legacy \_\_init\_\_.py and reorder module imports."
* Delete legacy \_\_init\_\_.py and reorder module imports
* Revert "Remove python2 legacy import infrastructure."
* Remove python2 legacy import infrastructure
* We no longer support python2. We are fully tested against python3.5 (and likely other versions of python3)
* Reenable config check CLI
* Another python3 gauge library fix
* More library path for Gauge
* Library workarounds
* Import reorder
* setuptools missing from Gauge dockerfile
* Revert "move to python3 paths."
* Expose Prometheus Ports in Docker
* temp disable config cli check
* PYTHONPATH
* Needs PYTHONPATH for check\_config
* move to python3 paths
* exabgp 4 is totally broken, but the only version of exabgp that starts under python3. Stick to python2 exabgp 3.4 for now
* Need netbase
* Need netbase
* Don't specify pip as pip3 for upgrade
* Upgrade pi Docker to python3
* Update docker builds to use python3
* Disable pylint3 of python2 mininet test suite
* Bump to 1.5.3
* Use env to pass pythonpath
* Add show of installed package as check
* Need to call lint check with python path
* pylint check needs PYTHONPATH
* Need to install python3 version of test dependencies also
* specify python version for docker based tests
* Need test-requirements.txt
* Don't pin exabgp version
* pip3 install from file path incorrect
* Fix min lint compare
* Attempt to run Travis tests under python3
* test\_check\_config.py passes under python3
* Pass under python3
* dual python2/3 import style
* Add presentation I gave at AARNet Networkshop 2017
* Add prometheus to architecture diagram
* Update README\_noviflow.rst
* Move to new Trusty images (https://blog.travis-ci.com/2017-06-19-trusty-updates-2017-Q2)
* Test tabs are bad
* Refuse to reload a busted config
* Dockerfile to build and run FAUCET on Pi (Raspbian)
* pylint must be removed later
* Don't run gnmi\_cli
* Run gnmi\_cli
* Need to double apt-get update
* Add gnmi client
* Prompt ND resolution before fping
* Add IPv6 fping
* fping test is report only, just make sure some packets come back
* Make controller performance test single threaded
* fping IPv6 as well
* Do controller fping
* Bump to 1.5.2
* More hangup cases on unknown DPs. Explicitly hang up on DP if deleted
* rand DPID might be duplicate. test config reload with unkwown dpid
* Test reload config with an unknown DPID
* Reserve range of DPIDs for tests
* Hangup on unknown datapaths. Handle configuration of a newly configured DP after reload
* Return empty values for down DP
* Instrument warm/cold restarts
* VLAN \_\_repr\_\_ needs to be set to correctly detect changes
* Ensure pip package builds
* Bump version number
* Implement ports\_add which can add multiple ports at once and VLAN flood rules only once
* Make ports\_delete, which can handle multiple ports and defer flood rule updates to one operation
* port\_delete doesn't need old\_eth\_srcs arg
* Clarify cold start message
* hash calculation should sort items
* port modify should delete/add port
* delete old port (including VLAN config) before adding new one
* ReloadTest should define VLAN 200
* verify floods don't cross VLANs when port VLAN changes
* Verify floods don't cross VLANs
* Make port native\_vlan and tagged\_vlans more convenient (references to VLANs not vids)
* Increase lint min to 9.0
* Syntax
* Add generic TFM switch support
* pylint
* Quote style
* Revert "Remove unneeded CustomJson."
* Remove unneeded CustomJson
* Update HPE doc with pipeline config
* table name has to be byte string
* FaucetDestRewriteTest too short
* Add Aruba to lint checks, enforce min lint score
* pylint
* pylint
* Fix aruba\_pipeline.py for python3
* Look for JSON pipeline config files in /etc/ryu/faucet by default
* Move aruba configuration files to /etc/ryu/faucet/
* pylint
* Remove TODO to export host learning
* Explicitly test removing an ACL from a port
* Revert "pylint."
* Test removing ACL
* pylint
* Restrict iperf server to run only on specified IP
* Test VLAN ACLs
* Don't do a double open() on the flow input file
* change import style
* catch connect timeout error
* Wait longer for DP to come up (slower hardware switch defaults)
* More test healthchecks
* check dp status
* Don't block ports starting up
* Can't yield ports until net stopped
* Return empty if scrape prometheus fails
* Correct health checks
* exabgp not shutdown correctly
* All tests now parallel
* Move FaucetStringOfDPSwitchTopo to faucet\_mininet\_test\_topo
* fix que count
* Allocate and return ports to minimize port allocation conflicts further
* More health checks
* Recreate entire Mininet topo if necessary
* fuser\_out can be null if no results
* Another check that controller started OK
* Attempt restart of controllers if they don't start right away due to busy ports
* need to support Ls in dpid for Prometheus
* More time for ports server to start
* preallocate more test ports
* Remove net namespace
* Fix wrong arg passing of port.number
* check exception first in tearDown()
* pylint
* Wait for controllers to start logging
* Use host net namespace running tests
* Use isAvailable() method
* Wait for controller ports available
* test\_config.py more readable
* Revert "get\_native\_vlan() unused."
* get\_native\_vlan() unused
* Hide tagged/untagged implementation further from VLAN users
* port\_is\_tagged/untagged() takes port, not number (so can migrate to set instead of list linear search)
* Improve performance of Conf hash
* FaucetGroupTableTest needs to check for broadcast flow
* Smarter detection of actual VLAN config change by eliminating ports
* Wait on TCP listen ports causing hang
* Disable API test
* Reenable API test with shorter timeout
* Disable API test as nuisance flake while continuing to troubleshoot. Tests should verify controller listening on all ports before proceeding
* ports changed may impact vlans
* Pre allocate ports in ports server
* ACLs couldn't be compared because they did not inherit Conf
* watcher.stop() called with erronenous arg. Fix more log messages missing DPID
* Improve change detection logging and use cold start if all ports on a DP changed
* Improve logging in config change application
* Redundant port attributes
* Use common code when resetting flows on add/delete of port
* When cold starting a datapath, don't do unnecessary repeated deletes and repeated provisioning of flooding rules
* Defer adding learning flows until initial pipeline provision done
* pylint
* Pipeline provisioned twice on new connections
* Log DP ID
* Gauge did not handle DP events from unconfigured DPs
* Move Docker tests to python3
* test\_api python3 compat
* Syntax
* Fix FaucetGroupTableTest
* Strict dict-based matches for groups, table\_id for routes
* Syntax
* get\_group\_id\_for\_matching\_flow() uses get\_matching\_flow()
* Common helper for unicast flood status
* Support match\_exact
* syntax
* Incremental test passing progress
* Fix get\_all\_matching\_flows\_on\_dpid()
* Migrate more flow matches to new style
* flow matcher more strict (use parse flow dicts)
* python3 compat
* python3 compat
* python3 test compatibility
* Do exec of ryu-manager to reduce resource usage
* pylint
* Don't share test environment (causes tests to fail due to environment variable confusion)
* Implement templated packet out flooding
* Refactor: flooding implementation
* Don't need to reserve 9179 anymore
* Report controller crashes on initial DP status
* Increase max parallel tests
* Break/fix Ryu
* Correct Ryu version
* Break/fix
* Allocate BGP port dynamically so tests can be run in parallel
* Update requirements
* pylint
* pylint
* Move unit test implementation to own file
* Dump Ryu logs if controller fails to start
* pylint
* Use common prom port allocation
* Simplify FaucetAPI test
* Simplify BaseFAUCET
* Use common cargs
* Simplify BaseFAUCET
* pylint
* Move BaseFAUCET to topo.py
* Move Topo to topo
* Recreate faucet\_mininet\_test\_topo
* Revert "Add faucet\_mininet\_test\_topo library."
* Add faucet\_mininet\_test\_topo library
* pylint
* pylint
* pylint
* pylint
* pylint
* pylint
* pylint
* pylint
* Refactor setUp()
* pylint
* pylint
* Move timeout\_cmd to util
* pylint
* pylint
* Remove remaining helpers to base
* Move tcpdump\_helper() to base
* Move setUp() and gauge\_smoke\_test() to base
* Move start\_net() to base
* Move attach\_physical\_switch() to base
* We rely on at least ryu 4.14
* Fix Gauge container path
* Relative links not supported
* MD link format
* Revert "formatting."
* formatting
* Make READMEs linked
* Make Docker instructions more copy-pastable
* parse\_packet can return None
* Ryu's parser is too clever, trying to parse down to the application. Have it drop the packet if the Ryu parser crashes
* Correct dp\_status and N\_TAGGED/N\_UNTAGGED
* dp\_id not defined for dp\_status update
* default should be None for dp\_status
* Flap ports test needs to account for Zodiac tests which have less ports
* Add dp\_status Prometheus variable
* Implement port status in Prometheus
* Update to HPE Aruba documentation
* Wait longer for hardware switch to connect
* netifaces should be in test-requirements.txt too, for completeness
* Type check hw\_switch\_conf.yaml options
* Create ryu and faucet log directories if they don't exist
* Rework config installation on package install
* Fix startup race - test port server may not have started by the time first test needs it
* We don't update nexthops when responding to a ARP request/ND solicit
* Reduce default packet in size to 96b, except for icmp6 echo (should be 128b)
* Bump version to 1.5.0
* We need to install ryu from git for now
* Better diagnostics when controller doesn't start
* Add minimum pylint score test
* pylint
* Fix indent
* pylint
* pylint
* pylint
* pylint
* pylint
* pylint
* Fix threads not starting
* pin astroid version (pylint is unstable)
* Add test for unknown hardware
* Clean up configuration loader (and support deletion of de-configured DP)
* Move API config rendering to config\_parser
* Move port status handler to valve.py
* Make proactive learning configurable
* Extend unknown item check to all config types
* Should return full raw packet
* Add proactive\_learn config item
* Move packet in parsing to valve\_packet
* Move BGP implementation to separate file
* Use address family generically for IPv4/IPv6 options. Catch more possible exceptions in faucet.py
* Update comments. \_send\_flow\_msgs() should catch exceptions
* Register API as last step. Rename internal attributes
* \_is\_host\_fib\_route() should not return True if route not in the FIB. Don't proactively learn if already trying
* Revert "Don't try to proactively learn if we're already trying."
* Don't try to proactively learn if we're already trying
* Switch features handler called before DPSet knows about DPID
* Add test for IPv6 ND to FAUCET vips
* Ethernet multicast for NS calculated incorrectly
* Add log count of resolve flows sent
* Don't explicitly learn nexthop from RS, let learn logic do it
* Add testing of multiple VIPs in RAs
* Hotfix: RAs incorrectly generated multiple times in same packet
* Remove log noise
* rdisc6 based test
* Hotfix: need to filter to IPv6 VIPs where IPv4 VIPs also configured
* Don't restrict IPv6 responses to hop\_limit 255
* rdisc6 calls itself ndisc6!
* rdisc6 needs -V
* ndisc6 package, gets rdisc6 binary
* Use rdisc6 instead of ndisc6
* Fix ndisc6 dependency check
* Test response to RS
* Respond to IPv6 RS
* Listen to RSs
* Advertise every non-link local VIP, from every link-local VIP
* Only send RAs for fe80::/10
* hop limit must be 255
* Set hop limit in router advertisement
* router set instead of onlink
* Set RA A/L flags and verify. If advertise\_interval set to 0, disable RAs
* Need to make number of "-v" configurable for tcpdump
* Make advertise\_interval configurable. RAs with prefix should use network address
* RATest timeout too short
* moved documentation to docs
* Removed generating file
* Log noise from advertise
* Removed working
* Reduce RA frequency to ~30s
* removed rat
* mice md
* test
* added markdown version
* fine github display
* Add test for IPv6 VIP RAs
* Documentation for Conf subclasses
* Send an actual correct RA
* Implement sending RAs
* Implement periodic advertisements, simplify control channel handling and handle DP down when flows to be sent
* Add advertise services thread and simplify event triggering
* Be able to construct an IPv6 RA
* Fix iperf min test for IPv6
* iperf min test could get confused as to which host was the server
* Add delay between iperf connection retries
* iperf tests use dynamic ports
* aruba: Add arp\_tpa to the list of match fields on Table 0
* Same reliability fix for IPv4 iperf,
* Make IPv6 iperf more reliable (give ND a chance to work after port flaps)
* Make configuration of nailed forwarding less confusing
* flowdel returns a list
* Use DELETE\_STRICT to delete routes-as-flows, to cause priority to be respected (fix default routes)
* Actually exit with non zero status if any tests failed
* Add IPv6 default route test. Hit exabgp with a bigger hammer to kill it after a test
* Verify IPv4 default route
* Dump switch flow table on tearDown() for better diagnositics
* Test default BGP routing for IPv4. Route deletes should match priority so that route mask matches (otherwise delete of default deletes all routes)
* Ignore vim tmp files
* Use flowdel\_strict when deleting routes
* Ignore add/del routes for FAUCET VIPs
* Remove hardcoded port in Prometheus learned\_mac export
* pylint
* Remove hardcoded port in MaxPortCount test
* Refactor learned\_mac export
* Refactor learned\_mac tests to use common scrape\_promethesus\_var() helper
* removed to hex of dpid. pylint
* Actually check return status of tests when running under Docker
* FaucetTaggedProactiveNeighborIPv6RouteTest didn't actually test proactive learning because ND was defeating it
* Make scrape\_prometheus\_var() more robust
* vlan is numeric to wait\_bgp\_up
* Reset sensible learning defaults
* Make sensible learning limits by default
* Make learn\_ban\_timeout configurable
* Implement proactive neighbor limiting
* Implement vlan\_neighbors instrumentation and improve Prometheus testing
* Retry iperf if necessary
* Reduce test log noise further
* Add missing vid default
* Expand unknown config item check
* Make learn jitter configurable
* Implement proactive resolution for IPv6
* Implement proactive resolution for IPv4
* Divert traffic for unknown neighbors on connected subnet to controller for neighbor learning
* Remove pylint noise
* Test config check script under docker
* Silence confusing test output
* Stop iperf server process explicitly after test
* Safety timeout for exabgp is too low
* need to detect BGP listen address family
* Verify IPv6 router performance
* Do both IPv4 and IPv6 iperf/flap port tests
* Add support for IPv6 iperf testing
* Remove unused L4type arg to iperf
* Add EthSrcMask test
* Fix hardcoded use of AT ports in DestRewriteTest
* Fix use of hardcoded test ports in FaucetConfigReload test
* Make it possible to run individual tests when running under Docker
* Install a console script for check\_faucet\_config
* removed debug prints
* use fping from first host to second host's interfaces
* Hacky, but 10 tests passed
* Make \_verify\_host\_learned\_mac() more verbose to diagnose occasional test timeouts
* Move FaucetAPI to own module
* FaucetMetrics should be in own file
* Added extra ping
* Add tests for BGP neighbor routes
* Add BGP route count
* Set port\_mod up on all switch ports before each test
* refactor to port up/down admin methods
* remove logging & redundant test code
* Added another check. Cleanup
* Add mention of table features message
* remove commented pylint
* merged
* temp save
* clear all for this valve outside loop
* Added prometheus check to max hosts test
* test
* export mac learned 'map' to prometheus metrics
* ip neighbor cache can time out between pings
* pin exabgp version (test breakages)
* increase ID space for sid\_prefix
* Better debug for overflow in sid\_prefix
* Make Linux interfaces 1 char shorter (16 is the limit)
* Get rid of BGP debugging
* Add Prometheus port
* Correct number attribute for port
* FaucetSingleGroupTableUntaggedIPv4RouteTest still flakey (wrong args to group creation)
* Need ARP\_TPA in table 0 for nailed forwarding
* Need to match eth\_dst in table 0
* table 0 needs to match VLANs also
* Initial example configuration for NoviFlow
* Need to add a nexthop group before adding a FIB route when learning a new host from a packet
* Soft timeout for tcpdump (else we don't see output)
* Add metric updating thread
* Add BGP uptime monitoring via Prometheus
* Use Mbps, not MBps
* Use own implementation of iperf (mininet's unreliable)
* timeout command disables buffering on stdout and stderr
* Make detecting host IP more robust
* Consistent use of shell timeout wrapper
* Add helper to verify no exception log and log contents if found
* Print exception log contents if any
* Use Prometheus to verify switch still connected during HUP test
* Syntax
* Don't crash when receiving packet for unconfigured VLAN
* Typos in FaucetDestRewriteTest
* shutdown mininet in tearDown() before anything else
* Run test suite cleanup even in docker
* Don't use mininet wait switch connection (race condition)
* Add title for running the tests
* Add note where to run commands
* Document hardware testing
* Allow tests to get hardware switch config from /etc/ryu/faucet
* Fixed typos
* Expand OVS DPDK example
* Fix capitalization for systemd config
* Need to use MD not rst style
* Fix markdown in README.docker.md
* Simplify starting FAUCET instructions
* Update minimum library documentation
* Spell out test examples
* Document how to apply changes via HUP
* Add pip install instructions
* Remove redundant docker configuration
* Fix links to config
* Add README\_config.rst
* Update with Gauge instructions
* Syntax for install instructions
* First rewrite with docker instructions
* Add link to deployments
* Split out README.rst to installation/configuration guides
* Remove obsolete upstart reference
* Remove redundant vendor information from README
* Add hint to enable Travis
* Update test version of mininet
* Add dependency check for iperf
* Add missing iperf dependency
* pylint 1.7 is broken
* Run docker based tests
* Purge outdated python-astroid which breaks pylint
* Disable run of docker based tests while troubleshooting test failures
* Docker builds actually failing due to pip unable to build any wheels due to old setuptools
* pip wheel builds all break unless setuptools et al upgraded first
* Add wheel to test requirements
* Add install of OVS
* Run FAUCET unit tests from docker image
* Run build of docker based tests
* Add docker requirement for travis
* Lagopus switch should use Lagopus as vendor
* Add instructions for OVS + DPDK
* literal formatting
* Add Lagopus to vendor directory
* Increase packet counter default timeout to 10 seconds
* IPv4 routing tests now verify iperf minimum 1M and also that routes-as-flows are reported as matching
* dpid\_log() fix
* Improve warning and debug logs with datapath
* Improve default logging in valve.py to include datapath
* 2to3 compatibility check
* Don't need to print unknown top config set
* Fail to parse unknown top level config
* Add missing interfaces default
* Fail to parse a DP that has unknown configuration subitems
* Add stress test for 50 MACs on a port
* Add stress test for learning 50 hosts on a port
* Whitespace in port MAC limit
* max hosts on port test simplified using macvlans
* Mixed test uses host lists with only one member
* pylint
* pylint
* add docstring
* spelling
* Changed port max\_host test, where test failed as a MAC not from a host was being learnt caused the test to fail
* Refactor VLAN actions into seperate function
* Allow ACL to rewrite a packet and continue processing as well as output to a port
* From Bill Fisher:
* FaucetString tests need to set self.dpid to verify ACLs
* Clarify non-zero packet count flow failure further
* Clarify test failure when flow is expected with a non-zero packet count
* Relax iperf/OF counter requirement to within 10%
* Compare iperf and OF BW after iperf - must be within 5%
* Verify that iperf and OF port counters match to within 5%
* Refactor cut/paste code calling ofctl API to use a common retry wrapper
* tests for port max\_hosts
* max\_hosts learn on port
* Add minimum bw iperf test
* Need to select FaucetSingleString as well
* Skip string tests when testing hardware as no way to configure which switch is the hardware switch yet
* Don't hardcode test eap.conf config path
* break/fix #2 for config reload
* break/fix config reload
* Add map of DP name to DP ID
* Implement faucet\_config table name/number mapping variables
* Implement hook for valve to update gauge/metrics
* Implement learned host by vlan gauge
* Remove superfluous eap.conf
* pylint
* https://github.com/anarkiwi/faucet/commit/ba3270c1707b14ba1f9f5782aafefa1bbbc0d532 means that ipv6\_nd\_target doesn't need to be provisioned for eth\_src anymore
* pylint
* Remove cut/paste test implementation for dest rewriting
* Incremental removal of cut/paste dest rewrite test
* pylint
* Use config reload counter to verify HUP has been processed
* Work-around a PBR python3 bug
* use wait\_until\_matching\_flow instead of sleep
* Implement counter for config reload requests
* Add sleep. Removed debug print
* Use py2 and py3 compatible io.read() instead of read()
* updated config reload unittest
* Rewrite destination MAC address, while allowing through faucet pipeline
* fix for permanent learn port failing to learn after reloading config)
* Revert "updated unittest for config reload"
* Revert "fix for permanent learn port failing to learn after reloading config)"
* Remove vestigal influxdb\_stats
* Add of\_dp\_connections and of\_dp\_disconnections
* Implement export of of\_flowmsgs\_sent and of\_errors
* Rename packet\_ins var to of\_packet\_ins (more consistent with prom. naming conventions)
* ensure config\_parser to check the correctness of vlan reference under port config
* updated unittest for config reload
* fix for permanent learn port failing to learn after reloading config)
* Implement prometheus client support via HTTP
* Add dependency on prometheus\_client
* Add test to ensure EAPOL can be mirrored
* Revert "update and improve the config reload test"
* Revert "some fixes (e.g. permanent learn port fails to learn after reload) and improvement for config reload"
* Revert "fix typos"
* Don't use ipv6\_nd\_target to match ND traffic destined for a FAUCET VIP, use a cheaper multicast MAC match instead (RFC 2464 section 7), and also flood where they may be an overlap with another IPv6 address in another IP subnet with the same least significant octets
* fix typos
* merged reannz/faucet
* update and improve the config reload test
* some fixes (e.g. permanent learn port fails to learn after reload) and improvement for config reload
* Refine PopVlan tcpdump expression
* Split TaggedControlPlane test into IPv4 and IPv6 versions
* Add support for pop\_vlans in ACL output action (pop N vlans):
* Implement multiple VLAN header push support in ACLs
* Need to add ssl listen port when SSL enabled
* Add TLS testing support
* include aruba directory for pylint checks
* removed clobber and sdist targets
* Updated Makefile with targets, cleanup developer guide
* Makefile for developers
* Split ControlPlaneTest into IPv4 and IPv6 so can be tested separately
* Fix tcpdump guess for mininet host interface
* Use -h to get ladvd version
* Python dependency netifaces requires GCC to be installed
* Improve doc for configuring hardware switch controller
* For hardware tests, require cpn\_intf to be set (so listens only on CPN port address)
* Migrate to #!/usr/bin/env python
* add a jitter to hard\_timeout of src\_rule to avoid hosts timepout simultaneously
* Use exact match for arp\_tpa
* Don't unnecessarily flood ARP/ICMP6 intended for the controller
* Duplicate/outdated test docs in README (they should be in actual unittests)
* Run a sanity test before running all tests, to make sure test environment has the essentials. This makes environmental problems easier to diagnose by failing early
* Support excluding tests
* Enable 2to3 checking of unicode
* Eliminate use of long (python3 compat)
* 2to3 presence check
* Automatically run 2to3 to verify code is python3 compatible
* Replace xrange with enumerate (python3 compat)
* Add some of the presentations I've given on Faucet
* Remove white background from text on diagram
* Update ACL syntax
* Reorganise and update documentation
* Remove redundant arrow
* Add Allied Telesis to the vendors list
* python 3.x not yet supported and causes travis build errors
* Revert "python3 compat."
* python3 compat
* Add Copyright assertion on behalf of Contributors
* Disambiguate wording in CONTRIBUTING.rst
* Copyright Changes
* remove ipaddr
* Re-organise faucet codebase
* remove duplicate groupadd from input\_ofmsgs
* moved barriers to valve\_flowreorder
* add barrier after group\_mod add/delete and flow\_mod delete
* remove hardcoded OUTPUT:port\_no from all regex strings in faucet\_mininet\_test.py
* remove hardcoded port\_no from all regex strings in faucet\_mininet\_test.py
* remove hardcoded port\_no from FaucetUntaggedHUPConfigChangeTest
* pylint
* pylint
* pylint
* pylint
* pylint
* pylint
* pylint
* pylint
* pylint
* stop takes no args
* Catch more binary/string to unicode cases (python2/3)
* print syntax (python3)
* ensure unicode encoding input to ipaddress functions (python2/python3 compat)
* Rename util to valve\_util (python3 compat)
* rename util to valve\_util
* Rename util to valve\_util (python3 compat)
* print newline
* typo
* Check network from ip\_interface
* more itervalues (python3 compat)
* require ipaddr in favor of ipaddress (python3 compatibility)
* python3 compat
* python3 syntax compat
* python3 syntax compat
* pylint
* python3 syntax
* pylint
* python3 syntax compat
* python3 print/itervalues compat changes
* iterkeys -> keys (python3 compat)
* iteritems() to items() (python3 compat)
* python3 print syntax
* Use python3 print syntax
* test class name no longer needed now that we always check for OFPErrors
* MAC mismatch test can fail because host-to-host IPv6 neighbor discovery hasn't happened yet
* Make MAC mismatch assert clearer
* Add TODOs for nexthop group leak and detecting flaps
* Group based routing also could cause OFPErrors
* Fix OFPErrors due to n-cast group rules
* Split group flood implementation to own methods
* Implement InterVLAN routing
* Plumb routers config through to route manager
* Sanity check routers config
* Initial stub config structure for Router
* Add another sanity check for ACLs
* config\_parser should be the one to create ACL object
* Clarify support of version 2 only
* config\_hash references needs util
* Config parser utilities that don't deal with config implementation can be separate
* Allow a controller pps limit to be set
* ACL config class shouldn't be in valve\_acl
* \_dp\_include() doesn't need to know config section names
* reduce knowledge of top level config for dp parser
* simplify \_dp\_include() to reduce config structure knowledge
* refactor duplicate include code in \_dp\_include()
* Remove unused args
* Revert "Revert "Revert "simplify \_dp\_include\_() (doesn't need hardcoded list of config sections to include)."""
* Revert "Revert "simplify \_dp\_include\_() (doesn't need hardcoded list of config sections to include).""
* Revert "simplify \_dp\_include\_() (doesn't need hardcoded list of config sections to include)."
* simplify \_dp\_include\_() (doesn't need hardcoded list of config sections to include)
* pylint/newlines
* Simplify config parser arguments
* Implement wildmatch match for any VLAN VID present
* Mask for flowmod should be converted to string always
* pylint
* Reduce OF packet in size further to bare minimum (further reduce any payload from host)
* added file based storing of flow tables
* mininet tests need to pass pylint
* Fix inheritance problems for Zodiac tests
* Inheritance for Zodiac tests is wrong (will fix next change)
* Generate test traffic for Gauge Influx tests
* pylint
* pylint
* Test that Gauge can talk to fake Influx back end and doesn't crash when that backend is down
* pylint
* pylint
* Add initial smoke test for Influx
* Add placeholder for influx backend port
* Run check script on installed example
* Run pip install from local tarball as smoke test for pip
* data\_files\_prefix wasn't used
* More optimization
* Additional updates to packaging scripts
* fix timing issues and possible query failures
* updated scripts for OpenSUSE VM packaging
* Implement FaucetNailed test, for Umbrella verification
* pylint is wrong about numpy not having float64
* Ensure float64s when commiting to InfluxDB
* InfluxDB is int64, and we are logging uint64, so use float always
* Use canonical rcv\_time
* Add more exceptions to handle
* Add influxdb example queries
* Initial handling of HTTP connection failures
* Implement make\_point() helper function for InfluxDB
* pylint
* Use common helper functions
* Move port enum/description functions to base class
* Simplify Gauge #1
* pylint
* Add influxdb to Docker requirements
* HUP test needs tcpdump to be quiet
* Fix FaucetAPI test
* Automatically run tcpdumps of OF channel
* Regularlize FAUCET controller args
* Fix clobber target
* Fix for pip install package
* Correct list contact. Ignore egg\_infos
* Default to FAUCET's setup details
* Make v1.4.0 version consistent
* Bump to v1.4.0 and smarter setup.py that can take defaults and automatically parse version from README
* Revert "use default arguments, parse version from README."
* Revert "setup.py is a bit smarter - has convenient defaults and can scrape"
* Revert "Bump version number."
* Bump version number
* setup.py is a bit smarter - has convenient defaults and can scrape version number from READMEs
* use default arguments, parse version from README
* Update MANIFEST
* Gauge service script for Ubuntu
* Run pylint syntax check
* travis dot version doesn't like ";" as a delimiter
* Need pylint and graphviz for package build to work
* Put more stress testing on gateway resolution testing (more swap MAC/re-resolve test forwarding cycles)
* Run more tests under travis
* Fix setup.py
* setup.py executable
* No need for separate setup\_apps.py
* Need bitstring for test\_valve.py
* setup\_apps.py orphan. setup.py should reference requirements
* pylint
* Experimentally enable travis CI
* Increase test iterations for IPv4 routing
* Fix missed update of nexthop where nexthop expired but not changed to new MAC
* Fix typo and added a sample start-faucet script for quick reference
* Rename group test class names so can skip OFPError check for group tests
* Remove deliberate reload of FAUCET in MaxHost tests (causes test flake)
* Verify that no OFPErrorMsgs in debug log. Group table support causes some errors, will be fixed next change
* Add unit test for check config script
* Add check\_faucet\_config.py, which parses a list of FAUCET configs, and exits with 0 if all configs can be parsed, or non-0 if not
* pylint
* tune gateway resolution timers for test reliability
* Change logging priority for exceptions in gauge
* Fix API test (was causing controller exception)
* Lint/comments. Simplify API test file
* Make sure no controller exception logged
* Make sure no exception logged from Gauge
* Make backoff time configurable
* Always update nexthop cache on packet in
* Revert "Need to reset resolve retry count when learning nexthop from packet."
* Need to reset resolve retry count when learning nexthop from packet
* Should report on field when using OFPActionSetField
* Make pipeline report actual superset
* Implement pipeline features reporting
* Ignore .swp files
* Fix duplicate debug log lines, and add DPID to debug log
* Add missing port\_sock ref
* socket for port server should be in temporary directory
* Use standard test timeout
* Only delete test directories if all successful. Keep Gauge logs too
* Group mininet controller log file with test file directory
* Use consistent/descriptive name for test directories. Also don't delete test directory if an exception was logged
* Improve unit test temporary directory name
* Bump version number to 1.4 - prep for release
* Script to upload CouchApp to CouchDB
* Add jitter to resolution/expire tasks
* helper function to delete host FIB route
* Enable host FIB entry expiry
* Make resolver configurable
* Implement host FIB route expiry
* Only log host learned line when host actually learned
* Reduce log spam for gateway resolution
* Add exponential gateway resolution backoff
* Better logging for resolve rate limiting
* Implement retry counter
* Implement resolve retry counter
* Incremental gateway resolution refactor
* Revert "Revert "Add nexthop cache fresh check method.""
* Revert "Simplify nexthop resolution."
* Revert "nexthop resolver needs retry counter."
* Revert "Add nexthop cache fresh check method."
* nexthop resolver needs retry counter
* Simplify nexthop resolution
* Add nexthop cache fresh check method
* Don't re-add host FIB entry unless was not present or MAC changed (otherwise every ping refreshes FIB route)
* FIB route add should use PacketMeta instance
* Fix missed check for resolved IP gateway. Simply nexthop cache handling slightly
* removed flow\_manager placeholder
* updated README
* Changed config placeholders to defaults in gauge config file
* lint
* Only delete groups if groups configured
* Simplify group table support
* Incremental PacketMeta refactor
* Incremental pkt\_meta refactor
* Incremental PacketMeta refactor
* Incremental PacketMeta refactor
* Couchapp to display flow table entries using d3.js and datatables.js
* Incremental refactoring to use PacketMeta
* Incremental refactor to use PacketMeta
* Placeholder for Flow Info app
* Incremental use of PacketMeta object
* Add PacketMeta class to simplify passing around packet metadata
* Stricter validation of ND requests for VIP
* Further stricter check for ICMPv6 replies (dest IP)
* Further simplify handling ND adverts
* Simplify processing of ND adverts
* Stricter check for ICMPv6 echo replies
* add\_host\_fib\_route\_from\_pkt() can share code for IPv4 and IPv6
* Strictly check for dest MAC and ICMP type when ICMP v4 echo replying
* Stricter/simpler checking of CPN destined IPv4 traffic
* Rename last vestage of "controller" subnet reference (should be VIP)
* Correct masking of VIPs
* updated image based on dot file
* Rename controller\_ip -> faucet\_vip, since they are actually IP addresses implemented by FAUCET itself (and can be confused with OFA/OFC addresses)
* updated unittest
* fix a bug on control plane hander: faucet responses to control plane packets that are not meant for it
* unittest for veryfing invalid BGP routes
* avoid adding invalid BGP routes when vlan having multiple controller ips
* Incremental route resolution
* revert commit of rmtree
* Resolver can add placeholder nexthop entry if none exists
* Args to ips\_in\_controller method
* Simplify CP handlers
* refactor - further prepare for more nexthop metadata to manage retries
* Rename neighbor\_cache nexthop cache
* rename LinkNeighbor to Nexthop (prepare for expansion of nexthop metadata)
* refactor resolve gateways #3
* refactor gateway resolver #2
* Revert "Simplify resolve/gateways."
* Revert "Gateway resolver needs tuple."
* Gateway resolver needs tuple
* Simplify resolve/gateways
* pylint
* ladvd doesn't always exit cleanly, so execute it under a timeout
* Use exploded method
* Don't ignore packet ins for learning if port changed
* use ipaddr exploded method
* pylint
* pylint
* pylint
* Rate limit learning traffic; don't re/install learning rules for packets from the same/host VLAN combination within 1s
* Reorder flowmods to have delete first, with a single barrier
* Add flowmod/delete check
* Whitespace
* flowdel
* Whitespace
* pylint
* pylint
* pylint
* pylint
* pylint
* pylint
* Add bgp\_local\_address configuration option
* ryu tends to squash errors, and thus not exit.  This wrapper KILL's itself when it gets exceptions in various places
* Change logging priority for exceptions
* Tidy commercial switches section
* Tidy up links
* Update support section
* Correct table numbering
* use GROUP tables for FIB and VLAN flooding
* Handle OpenFlow messages from add\_host\_fib\_route\_from\_pkt
* use version 2 as the default config
* update pipeline diagram
* moving to vendors directory
* Added make stats target to get repo stats
* Use packaging library for parsing test dependency versions
* Update the document to use .rst style markup
* Move the readme file of Aruba to the docs directory
* updated version to 1.3.2
* updated version number
* Update version info
* Run test\_api in faucet\_mininet\_test.py
* pylint fix
* Add a README for using Faucet on Aruba switches
* typo fix, added missing routing related fields
* typo fix and certificate print commands
* \* Make it clearer discovered ports, are discovered only when up. \* Explicitly configure stack ports even when down
* Fix typos in echo statements
* added hooks for running controller in SSL mode
* fix typos and directory names on controller host
* updated default directory to match Ubuntu
* Setup OVS PKI script
* Make all our default drop rules for certain traffic configurable
* Throw away unsupported statistics returned by OpenvSwitch
* added title to the graph
* updated dot file and image
* Generate faucet.yaml visual graph
* convenient scripts to setup Faucet service on Ubuntu
* Adds API for faucet
* Add functions for retrieving running config
* Fix testcase for LLDP. Add testcase for CDP
* Update test\_config.py for multiple bgp neighbours
* Fix URLs and group email ids
* Pipeline documentation update to match code
* Update documentation for v1.3
* Config v1 is gone
* Broadcast ping address not generated correctly
* Run all Zodiac tests
* Physical tests would not always wire correct ports for Zodiac
* Make test\_valve executable
* Remove the empty last line in the aruba\_pipeline file
* Update the aruba faucet pipeline based on the latest port/vlan acl changes
* We depend on ryu newer than v4.9 for routing
* Tidy sample configuration files into an examples directory
* Sometimes /var/run/ladvd is missing, so ladvd won't run, which breaks the LLDP tests
* Update the scale of tables in the Aruba pipeline
* added Lagopus yaml file
* updated instructions
* Ryu 4.9's BGP speaker library, doesn't handle an ipaddr.IPAddress as a nexthop
* Docker tests need ladvd (LLDP) dependency
* Explicitly enable exabgp debugging messages selectively
* Make LLDP dropping configurable with dp drop\_lldp parameter. This enables NFV offloading of LLDP
* Added Lagopus as a supported vendor
* scripts for easy installation of DPDK, OVS, Lagopus
* Update magic numbers
* reverting some accidental changes
* Add ZodiacFX 3 port tests
* Add routing/FIB entry also, when learning a host
* Add vlan acls
* StringStack tests needed to write out config before starting topology
* BGP can support multiple peers in same VLAN
* Better checking for presence of controller debug logs
* Add test for IPv6 locally connected subnets
* Use common method to add FIB entry
* Handle IPv4 routing between locally connected subnets
* Simplify config change detection/application and logging
* Force relearn after setting IPv6 address
* pylint, comments
* Use all ip tools rather than ifconfig. Bounce interface when changing IPv6 address
* Need to actually clear IPv6 addresses before setting
* typo
* Delete any existing IP routes
* Migrate more classes to base
* Move methods to base
* Hardware tests now support Gauge
* Remove remaining globals
* remove global OF\_PORT
* Simplify Gauge controller class
* Add hw\_switch attribute and reduce use of global SWITCH\_MAP
* fix dpid for external configuration
* Eliminate DPID global
* Eliminate HARDWARE global
* Pass in test config to test class (so can remove globals)
* Simplify topology creation
* Need to disambiguate stack switch names
* Add untagged stack test case
* pylint
* Make test host/switch prefixes shorter, as Linux is limited. Verify that IP configuration commands succeed
* Make packet rate limit actually apply per second. Make recv\_packet smaller. pylint
* Avoid reserved OpenFlow TCP ports
* Multiple DP tests can now run parallel
* Use self.\_vlan\_match\_tables not hardcoded list
* Fix stacking
* Move more methods to base. Ensure switch/host IDs can never conflict, based on unique port
* Move more methods to base
* Don't include testit.sh
* Now that max parallel is fixed, don't delay socket response
* fix max parallel tests didn't actually limit max. simply string of DPs config generation
* hash switch/host IDs to minimize conflicts. add extra logging
* Run test\_valve and test\_config
* Fix typo
* Add docstrings, improve naming
* Add missing retries for IPv4 ping
* Retry IPv4 pings. Try to stimulate learning if host not learned due to load/packet loss
* Adds unit tests for valve
* Fix a bug in \_in\_port\_tables where it would only return acl\_table
* Reduce parallisim further. Try harder to confirm hosts learned
* fix hardware tests (DPID as int consistently, need to configure OF port statically). fuser TCP port check relaxed
* Increase random free port delay
* Further lower test load (limit the rate at which new free ports are allocated)
* pylint
* Improve mirroring reliability. More checks to ensure controller is really ready
* Don't serve more reserved ports
* Clear stale logs
* Text log of port status if configured
* Add smoke test of port status logger
* Run all tests script, and reduce test load average by running stack tests singly
* Add documentation, basic IPv6 routing test can be parallelized
* Documention and pylint
* More move of base methods and documentation
* Implement free port server (reduce possibility tests could get assigned same port). More migration of methods to base
* Verbosity, Stack test fix
* pylint
* Move and normalize flow retrieval/test methods
* Move get flows methods
* pylint
* Move find\_free\_port to library
* Move more methods to libraries
* Add utility library
* Use ip rather than route for consistency
* Move more methods to base
* Move tearDown method
* Move more classes to base
* Don't hammer parallel tests quite so much
* Split out to seperate base class
* pylint
* Update HPE related info in README
* Update HPE related info in README
* faucet.py: ignore non-connected DP elements when reloading configuration
* couchdb: Use new Docker couchdb infrastructure
* added Netronome as a supported vendor
* Add Netronome as supported vendor
* Sample Grafana dashboard for Faucet
* added additional user creation statements
* Updates to gauge
* DPDK install script for Lagopus
* Updated
* updated to include changes to huge pages and Grub
* New script to only install OVS and DPDK packages
* updated script - now a bash script
* OVS setup script
* Optimization to install scripts
* Fix typos, code cleanup
* updating scripts
* Allow forcing serial executiom of faucet\_mininiet\_tests
* Document that it is possible to configure hardware type
* When using an external switch, DPID not converted to str of an int
* fix test\_config failure due code changes
* fix typos
* add unittest for config reload
* Add incremental config reload. Supported changes: - Port config: all types (e.g. vlan, acl\_in, enabled, unicast\_flood, etc..) - ACL config: add/remove/modify ACL rules. Currently reload every rule of an ACL - VLAN config: enable/disable routing, and other configs (e.g. unicast\_flood, etc..)
* Added Faucet preso from OVS Conference, typo fix
* Updated purchase info for HPE Aruba Switches
* Update the Aruba pipeline to match that of FAUCET
* Added the missing JSON files for Aruba.  Also incremented the .version for release
* docker-compose: Add CouchDB to environment
* Docker: Install Python requirements
* docker-compose: Add support for 'build' step
* docker-compose: Specify explicit versions of external images
* Docker: normalize Dockerfile's
* Docker: Ignore Git directory during 'build' phase
* Add note about python-dev on Ubuntu
* Shouldn't use hashed pip package path
* Fix pip install URL
* Added faucet\_ovs.yaml to the list of faucet yaml files
* One more template file to make OVS work on Ubuntu
* Added setup instructions for OVS
* Change to ACL "allow" rule behavior. Previously, "allow" was required. It is now optional and defaults to 0. However, in the "mirror" case, the default is 1
* Minor changes to readme in 'working with real hardware' section
* Faucet Presentation
* updated Faucet Architecture diagram
* updated scripts for v1.2 release
* more updates for packaging
* updated class diagram
* pylint
* Assert on configuring routing when stacking
* Implement simplest possible distributed unicast learning
* Add configurable discards processing packet in
* Add configurable discard rate when learning to reduce controller load
* Add method to find next port closer to destination DP
* packet in handler needs to know about other Valves when stacking to resolve destination
* Added version info gauge.yaml and updated class diagram
* Fix installation of one-way unicast\_flood rule when unicast\_flooding disabled at port level. Add test coverage that behavior and flows are correct
* pylint fix
* Change to v1.2 ahead of v1.2 release
* Fix commented out cleanup
* Implement distributed flooding
* More stacking helper functions for valve\_flood
* Mirror/unmirror port flood rule generation can use common code
* Add helper to generate output, to input port
* Flood manager needs to know stack topology
* Rollback recent flood refactors (breaks tests)
* Fix output ports implementation
* Move implementation of multiple output action list to valve\_of
* valve\_flood now knows where each DP is relative to root in stack
* Add tests for unicast flooding combinations
* Split flood output port generator to accommodate stacking changes
* Add shorted path methods
* Simplify valve\_flood slightly
* Add test of stacking (stacking only implemented as config, but generate partial config)
* Simply StringOfDp test further
* Add documentation to multiple DP test case
* MultiDP test cleanups. \* MultiDP tests added old style v1 gauge parameters which are ignored (removed) \* MultiDP tests should describe inter switch link ports
* Verify that each link has been configured in both directions
* Make ACL blocking test method reusable
* Simplify multiple DP tests to use common ofctl query method
* \* Rename stack switch to dp (consistency) \* Construct stacking topology and root DP
* Build a graph of configured topology
* Add dependency on networkx
* Update V1.0 reference to V1.1
* Add configuration structures for stacking
* pylint fixes
* Example gauge.conf config rename to .yaml
* Rename gauge.conf to gauge.yaml, because it's YAML
* Move all tests to use v2 config format, and log a warning when parsing v1 (v1 unsupported)
* Fixed adding the correct ryu.conf and necessary restart scripts for faucet and gauge
* Add comments
* Move documentation to docs directory
* Updated gauge.conf and add demo YAML files
* Fix hotfix in priority of drop rule
* Mirror destination port drop rule has wrong priority
* hotfix: in V2 config, ACLs might not apply to all DPs
* Spelling
* pylint fixes
* Mark private method
* Documentation and private methods
* Another private method
* Mark methods private
* pylint fixes
* pylint fixes
* Documentation updates
* Add new config\_file\_hash function
* Simplify config file change detection (and remove duplicate hashlib calls)
* pylint fixes
* Add requirement to add a test
* Fix handling of V2 config mirror handling by port name, rather than number
* pylint fixes
* All core python now subject to pylint
* Documentation updates
* Add architectural assumptions
* Remove unused datapath\_down() function. Documentation additions
* Make valve DPID logging consistent
* Fix another test broken by config reload optimization
* Incremental documentation of valve\_of
* Add developer guide stub
* Fix test for new config reload message
* Add documentation to valve\_packet
* Log DPID consistently in faucet.py
* Revert just DPID logging changes for faucet.py to facilitate merge
* Make DPID log message clearer for hex version
* Log DPIDs consistently
* Change assertEquals(..., None) to assertIsNone
* pylint fixes
* pylint fix
* Common helper for deleting all flows matching a port
* pylint fixes
* Eliminate mirror\_from\_port entirely
* Eliminate use of mirror\_from\_ports
* Add finalize\_config method to DP to handle config merging once all objects added
* Add more fine-grained reload detection logic
* Fix and add unit tests
* Don't need to use mirror\_from\_port (may eliminate entirely)
* Add more TODOs
* Typo in ban rule method
* Move ban function to valve\_host
* Add pylint check for valve\_host
* pylint fixes
* Tests should wait for host to be learned before pinging
* Move unicast MAC test to valve\_packet
* Need to make sure FAUCET is actually ready to forward after HUP
* Move logging initialization to common util function
* vlan\_vid() no longer required in main class
* Move host expiry to valve\_host
* Move use of host cache to valve\_host
* Move learning methods to valve\_host
* valve\_flood: correct mask on IEEE 802.x multicast MAC OUI
* Move delete method
* Add valve\_host module
* Simplify host learn method
* Add flood module
* Add valve\_flood module
* Add valve\_acl module
* Move control plane handlers for routing to valve\_route
* Need to clear IPv6 addresses from host when testing routing mesh
* pylint check valve\_route
* Move controller IP flow installation to valve\_route
* Move add/del/update routes to valve\_route
* Move resolve\_gateways() to valve\_route
* Fix commented out exception handler
* Move resolver method to valve\_route
* Add ValveRouteManager class as a stub
* Helper to always set ofp.VID\_PRESENT
* Refactor route/nexthop handling to be closer to OOP (next change to be class for route table manager)
* Split control plane IP installation into two functions
* Put fully canonical paths in data structure, add logic to avoid include loops
* Fix recursive includes
* Only need to add controller IP rules once when VLAN initialized
* Move method to check if packet is in VLAN's subnet
* Move code to generate rules for adding a new port to a VLAN to common function
* More modules pass pylint checks
* More modules can pass basic pylint. Move VLAN port methods to VLAN module
* Parse mirror\_destination port attribute at config parse time
* Split port\_acl\_method to submethod to process an individual ACL rule
* Move match dict builder to valve\_of
* pylint new helper classes
* Always use ICMP protocol code
* Remove valve.py dependency on ethernet lib
* Move remaining packet building code to valve\_packet
* Move out IPV6 helpers
* Move arp packet helpers out of valve
* Add first packet helper
* Syntax
* Temp move of parser import back for Aruba pipeline
* Move more parser calls to valve\_of
* Only reload Faucet config if the files have changed
* Move more helpers out
* Move more helpers to valve\_of
* Move first few OF helpers to new file
* Guage db config file removal from setup
* faucet.yaml changed
* README.rst: fix syntax errors, typos and format consistency
* Test config changed and gauge db config file deleted
* config file changes
* Fix up spelling and typos
* Added instructions on installing Faucet with Docker
* V1.1 release URLs
* Add FaucetACLOverrideTest
* FaucetMultipleDPTest: Replace wait\_until\_matching\_flow with matching\_flow\_present
* FaucetMultipleDPTest: Add acl\_in\_dp argument to set\_config, fix wait\_until\_matching\_flow
* removed db logic from gauge.py, config file changed, new watcher class created for flow db updates
* FaucetMultipleDPTest.get\_config: Rewrite to use a dict and yaml.dump
* Fix JSON to handle tables without matches
* Update ovs2json.py to handle table with no match specified
* For Shivaram; install workaround for V1.1 release
* For Shivaram; CouchDB doc and setup.py version/description change
* Rename back to .conf from .yaml
* Change version and update file name
* ZodiacFX should specify hardware ZodiacFX
* Fixed typos
* Update config examples for version 2
* Typo in ACL/blocked test
* Add tcpdump\_helper for tests that need to run tcpdump, that waits for tcpdump to start before initiating the test
* \* Ban message tells you what MAC was banned. \* Extraneous check for traffic on port 5002, before packets sent
* \* Fix mixed VLAN test - was tested but did not assert if it ever failed (looks like it did not fail anyway). \* Fix max host learning test (test for presence of correct flows) \* Tests now can verify host has been learned before measuring traffic from it
* Mixed VLAN test case did not actually assert on failure
* Ensure flows for hosts that should have been learned are installed
* Use common helper for ofctl URL
* Add cleanup mode for unit tests to cleanup after failed runs
* https://github.com/inside-openflow/faucet/commit/f46cb0777119d4609d65b806dbae96ee8abab353 - fix docker test run to run in parallel and install missing dependency on pylint version
* Rework ordering of tcpdump tests
* Improvements to exception handling in tests for ofctl REST API
* Readme and setup.py changed to accomodate db updations
* Master repo syncup for gauge.py
* Master repo syncup
* Make tests more robust when we get a bad JSON reply
* Fix and add extra config error checking
* Allow recursive includes
* Syntax cleanup and consistency
* Add documentation for including files
* Configure test\_config logger to allow meaningful dp\_parser error output
* Change test\_config.py to test includes
* Include non-absolute files relative to config file location
* Add support for required and optional include files
* Todo item added
* Formatting changes
* Formatting changes
* added instructions for couchdb configuration for debian OS
* Change DP default hardware to match SUPPORTED\_HARDWARE in valve\_factory
* Fix graceful handling of unknown DP hardware types
* \* Update Aruba JSON pipeline config to match IPv4 routing configuration (superset of regular switching pipeline). \* OVS dump-flows uses vlan\_tci type match to express matches of matches without a tag; remap them to OXM style for compatibility
* Added DB updation counter
* valve\_flowdel() now automatically sends a barrier for every delete request. some OFAs require this to ensure delete completes before doing anything else
* Bug fix on switch db
* Ensure barriers are sent after deletes
* Add helper to tests to make sure flapping switch ports are handled
* adding an example grafana dashboard
* changes to docker-compose.yaml
* Add barrier after delete all
* Fixed indentation markup error
* Fixed errors
* Documentation updates
* Remove leading slash in data\_files only if in venv
* Changes
* Allow vlan VID to be pushed on a packet when doing policy based forwarding - add 'vlan\_vid' to output actions
* Support virtualenv and pyvenv paths for log and config default locations
* Switch disconnect bug fix
* Update pipeline diagram to include FIB tables
* lint fixes
* Update README.rst on config file format
* Don't crash faucet if someone plugs a cable into an unconfigured port
* remove upstart dir
* Updated run scripts and removing unnecessary files
* FaucetMultipleDPTest: Tidy up and fix mixing tagged/untagged hosts
* trying better html
* Fix 'self' reference in dp\_parser\_v1 exception logger
* Add separate function to add VLANs to DPs, which checks for shared BGP VLANs
* trying better variations for embedding Maps
* updated URL to pip install and link to Google Map
* Added Faucet deployment map
* Update docker documentation
* Add in YAML new document marker
* Fix typo in config defaults
* Openvswitch module must be loaded on the docker host for tests to run
* updated pip dependencies
* Only add VLAN object to DP if any ports use it
* this should have been removed in the rebase
* moving Install file to docs directory
* Move pylint error suppressions into the specific blocks
* Merge remote-tracking branch 'upstream/master' into multiple-dps
* Typo fix
* Typo fix
* Bug fixes and pylint changes
* Contribution by Shaun Wackerly <wackerly@hpe.com>. This script will be used to automatically sync hardware/pipeline configuration with FAUCET's archiecture
* Error fixes
* Change default number of untagged hosts to 0
* Use consistent syntax formatting
* Increase readability of switch-to-switch link condition
* Add base class for testing multiple DPs and basic tests
* Big Config Changes
* Change gauge docker to use docker-compose for db
* Faucet Config file for ZodiacFX switches
* Add concurrencytest to dependencies
* Updated class diagram
* reload\_config: Fix DPID member access
* Renamed config file
* Fixed text related to 802.1x support
* Added flow fetch and update using table\_id, match combination
* adding code lines to get duplicate flow entries from flow\_db
* bug fix
* Modify testconfig.yaml to use multiple DPs
* Faucet Architecture
* Make sure all new VLAN objects are constructed with dp\_ids
* Add multiple DP support to Gauge
* Fixes to previous commit
* Add dp\_id field to VLAN so bgp\_route\_handler can efficiently find the DP's valve object
* Updated feature list
* Add multiple DP support to Faucet
* Write out flood rules as linear expansion, which avoids instructing the switch to loop packets back to input. Not all vendors implement groups correctly, so we can't use groups yet
* Simplify flood action generation further
* Rename argument to flood port list for clarity
* Mirror tests could depend on unicast flooding
* Simplify flood table additions for mirroring/non-unicast flooding
* Remove 'in\_port' match requirement for tables that don't actually ever match 'in\_port'
* Enforce table/match types
* duplicate ofmsg logging
* use ofmsgs not flowmods everywhere add helper function for packet receive
* Add IPv4 route helper
* lint/prospecter fixes (whitespace, etc)
* Force exabgp log output to be unbuffered
* Allow more tests to run in parallel
* Explicitly kill exabgp after each run. HUP test didn't actually do anything. Fix it and check that controller reconfigures
* Need to start exabgp on IPv6 loopback appropriately. Lengthen BGP connection/update timeouts
* If exabgp gets stuck, kill it automatically between test runs
* Add test for routing on same VLAN but ports in different subnets. Add helpers for exabgp. Use route\_as\_flow helper to match routes as flows more explicitly
* Renable disabled 5001 block test
* Make (some) tests able to run in parallel, by dynamically allocating ports. FaucetSingle tests have to run serially, due to hardcoded ports
* Lint 1.6 fixes
* Make helper method to verify presence of a route, flow. Exercise the already-resolved nexthop case for BGP
* Require lint error check to pass for faucet and gauge too
* Require lint error check to pass for valve.py
* Lint fixes
* Fix a (serious) mistake: missing fib\_table argument in add\_route
* passing server ip as argument as by default it was taking localhost ip
* Restore overwritten commit removing unneeded ip\_gw parameter to del\_route
* get fib installed immediately when the nexthop is already resolved
* restructuring directories
* Lint fixes. Initialize any local routes before starting BGP speaker
* Don't try to match on FAUCET\_MAC when deleting routes (not needed, FIB table dependency already verifies MAC)
* Flow update addition
* Check library/dependencies
* Require eth type match for controller IPv4 FIB entry
* Move controller host address matches to FIB tables
* Improve scaling incrementally - move IPv4 and IPv6 FIBs to own tables
* Define IPv4 and IPv6 FIB tables
* Fix permanent learn
* Add installation of exabgp in Dockerfile.tests
* Fix IPv6 tagged routing test
* Add tests for BGP receive
* Add test for BGP reception (V4)
* Complete BGP receive path
* Add receive route handler. Still need to trigger route installation on adding a route
* Respect longest prefix match first
* Implement policy based forwarding
* Add smoke test for Gauge
* Fix building of gauge Dockerfile
* Implement BGP advertisement of controller IPs and static routes. IPv4 and IPv6 is implemented
* Lint fixes
* Fix use of not passed config\_file
* Lint fixes
* Document configuration file format changes
* Removing db updation code from faucet.py and adding it to guage.py
* Parse new configuration format
* Updated database architecture doc img
* Fixed pylint errors and db updation logic
* format correction
* modifying connection string
* Adding Config file and code for parsing required values
* Added odbc module and db\_architecture.rst
* When running on 32 bit platforms, dp\_id can be a long
* Removed TODO and SWITCH\_MAP in wait\_until\_matching\_flow since they shouldn't be useful anymore
* removed useless commented line
* changed expected strings to find the desired flow entry in the multipart reply
* Use Ryu REST app to get flows instead of ovs-ofctl
* Add support to test physical as well as software switches
* Allow DPID and hardware to be more easily configured
* Explicitly specify OF1.3
* More lint fixes
* updated with supported hardware vendor info and blog link
* Lint fixes
* Fix fine grained mirror test
* Restore all tests
* Fix bad string substitutions
* Fix local test case usage
* merged upstream and fixed wrong indentation
* test default config uses OVS
* Configurable switch port\_no
* Include instructions in README of how to use official Docker Hub builds
* Move Dockerfiles to root of project to enable easier automatic building
* updated unittest to verify routing with prefixes have the same nexthop
* Drop gauge.conf for Docker container
* Add dependencies to allow PyYAML build
* Formatting and spelling corrections
* Drop dockerdev make step and Dockerfile.dev
* Corrected config and log paths
* \`docker build\` must be run from the root now
* Dis-ignore things that shouldn't exist
* Dockerfile.dev is redundant (use Dockerfile instead)
* Fix Docker volume paths
* Switch to installing faucet from the repo
* Move Dockerfile.tests into docker/; use pip after all
* Get rid of dockerdev make target
* fix the missing routes bug. upon receiving arp reply, we only added the first route to forwarding table, ignoring other routes that share the same gw
* Reduced priority of flows for learned hosts
* avoid sending duplicate arp
* using shorter file names
* fixed file name and updated README
* ONF Deployment picture
* No need to pip install ipaddr
* Don't need this (wrong for setup.py develop)
* Python seems to manage without these
* Use setup.py develop instead of install
* Install deps for PyYAML build
* Use new path inside container
* Bypass the pip package, just: \`python setup.py install\`
* Move Dockerfile.test to top-level
* Tidy up the docker files and documentation slightly
* Restructure the Valve inheritance
* Document addition of Dockerfile.dev and Dockerfile.tests
* Add dockerfile for running faucet mininet tests
* Add docker container for development
* Ignore files created by  dockerdev make target
* Add dockerdev make target
* Document further faucet mininet test dependencies
* Make FAUCET\_DIR configurable via environment
* Fix handling of gauge DP reconnections
* Fix docker build for gauge
* Resolved some previous mistaken commits
* Fix handling of DP reconnections
* Github rst parser != Atom rst parser
* Tripping over RST
* Edit and reformat FAQ
* static ip addressing
* restore the test base :) removing hardcoded openflow13
* removed unncessary code regarding acl rules deletion
* Update REAMDE.rst
* scripts for VM packaging
* Mark Zodiac FX supported as of v60\_RC2
* Extend ACL to allow mirror action acl format: acls:    1:       - rule:           dl\_type: 0x800           nw\_proto: 6           actions:               allow: 1               mirror: 14        - rule:            actions:                allow: 1
* updated to v1.0
* Fixed file locations
* updated faucet.yaml to be more generic
* Revert "Complete fixes for Python 3.5"
* Revert "More fixes to make it work with Python3.5"
* More fixes to make it work with Python3.5
* Complete fixes for Python 3.5
* Fix typo - change opt to ryu
* Fix typo
* fix typo to include faucet
* Fixes for production deployment
* Move Aruba pipeline to subdirectory
* Allow Aruba pipeline to be configured, by specifying:
* Add Aruba configuration infrastructure
* Removed the changes to faucet.py, these will be added in an optional per-vendor change later
* Add vendor specific hook for switch features
* Added support for Aruba switch custom pipeline configuration
* Add ofchannel\_log parameter (log all packet in/out flowmods) for debugging
* Retry MaxHosts test if insufficient hosts learned
* Add test for mixed tagged/untagged ports on a VLAN
* Expiry not run soon enough (and another expiry fix)
* Host cache expiry fix
* Add max\_hosts per VLAN config (basic protection against flow table exhaustion)
* Need to decrement TTL when doing routing
* Fix typo Kit found
* Replaces valve docker files with faucet ones
* Add dependancy on ipaddr
* Fix typos in gauge
* Fix gauge logging and logging documentation
* Block on controller flows begin in switch to make tests more reliable
* Add note for retry
* \* Mininet takes forever to actually shutdown properly. \* IPv6 ND sometimes takes a while, so retry
* \* Make tearDown() inherited. \* Add TODO for rate-limiting learning protection
* Ping controller via IPv6 to push ND
* Don't try to cycle interface via ifconfig when changing MACs (breaks IPv6 tests)
* Implement ARP/ND refresh
* Refactor route resolver to common code
* ARP/ND entries now have a timeout (still need to implement route replacement)
* Start reliably on boot
* Correct path inside gauge.conf
* Need to export subset of env variables
* Correct example config paths
* Documentation on installation, and init scripts
* Lint fixes (staticmethods, line too long)
* \* Refactor ND and ARP generation into helpers. \* Some lint fixes (line too long) \* Move to consistant quoting (use single quote)
* Fix IPv6 static routing (routes not added)
* Add complete IPv6 static route testing (tagged, untagged)
* Refactor ping methods into common test methods
* Add IPv6 routing test
* \* Add IPv6 gateway resolution
* \* Need a per-VLAN IPv6 ND cache
* \* Redirect IPv6 ND replies for FAUCET to control plane
* Add tests for multiple IPs per VLAN, and IPv6 on VLANs
* Add HUP test
* Implement IPv6 ND/echo reply from controller
* Initial support for IPv6 controller addresses
* pylint fixes (missing return value when datapath down, checking multicast source)
* \* Allow more than one controller IP per VLAN to be configured. \* Stricter ACL on checking whether ARP/ICMP to controller should be processed based on VLAN/controller IP combination
* pylint fixes (class style)
* pylint fixes (spaces, class style, remove use of map())
* Some methods are static (pylint)
* lint fix (unused vid)
* Update how tables are numbered
* Add note about VLAN package requirement
* Add note about OVS 2.3.3 required
* Add note that we need mininet > 2.2.0
* added influxdb python client libraries to the dependency list
* fixed pip install download URL
* updated version number to 0.30
* Updated markup
* updated feature set with pictures
* Add support for Influx DB. If influxdb\_stats: True in config, then port state changes and port stats are sent to InfluxDB, not log file
* Support IPv4 static routes on tagged VLANs
* Add test for tagged control plane traffic
* Control plane can now handle to ARP request/replies on both tagged and untagged ports
* pylint fixes
* pylint fixes
* pylint fixes
* remove obsolete ACL class
* pylint fixes
* Implement IPv4 static routes for untagged VLANs
* Add initial ARP resolver
* Correct name of new event
* Add event and helpers for ARP implementation
* Refactor tests to use common config header
* Update README.rst
* Update README.rst
* Update README.rst
* Update README.rst
* Update README.rst
* Update README.rst
* Create README.md
* Update faucet\_mininet\_test.py
* Update faucet\_mininet\_test.py
* Update faucet\_mininet\_test.py
* Add static routes to VLANs
* Test that disabling unicast\_flood on a VLAN doesn't break forwarding
* Implement configurable unicast flooding behavior at both VLAN and port level
* Add explicit multicast flood rules
* Drop packets from broadcast addresses
* Refactor flood action helper
* Correct default deny on all tables
* Add separate rule for broadcasts
* Add helper for packet ins, and limit maximum packet in size
* Default drop on all tables
* Simple build test only
* removed uml target
* added pyreverse to the list of python packages
* added sudo to make for write permissions
* changed make targets
* added sudo to python installation as /etc/ryu directory needs to be created
* install our package and add make all script
* added sudo for pip install
* simplified file to get the first build
* Added Travis Continuous integration
* Updated deployment picture with supported switches
* Remove further references to Pica8
* Delete README.md (redundant)
* Pica8 is not currently supported (no multitable)
* Added mininet testing info and instructions for new hardware vendors
* Added NoviFlow to the list of commercial hardware vendors
* typo fix
* Added instructions for testing before a pull-request
* Fix tests, and retire test\_valve.py (functionality superceeded by mininet tests)
* updated documentation
* updated to include correct version number and package names
* Directory restructuring
* Implement permanent\_learn mode on a by port basis (hosts learned on such ports cannot be learned/moved to others once learned on that port)
* Ignore file list
* Refactor learn host on a VLAN port into own function
* Test that hosts can move ports
* Comment: ACL compiler uses old OFPMatch() API
* Update to new OFPMatch API
* Add support for tagged/untagged on same port (need specific match for untagged packets)
* Test control plane ARP/ICMP responder
* Implement control plane ARP and ICMP responder
* Whitespace
* We need the full packet to the control plane handler, to parse it
* Send ICMP/ARP packets destined to controller, to controller. Ignore them for the moment
* Remove redundant config re supported hardware
* Tagged and untagged VLANs on the same port are not supported
* Diagnostic log for unhandled port status has reversed args
* List supported OFAs
* Implement mirror test. Fix tmpdir. Fix host names to be tagged/untagged
* Add mixed tagged/untagged test
* Add ACL test
* \* Refactor using unittest library. \* Wait for switches to connect before trying to pass traffic
* typos in copyright
* Implement tagged VLAN test
* Run an actual mininet test
* Unconfigured ports are not added
* \* Automatically delete all flows referencing a input port
* \* Fix mirroring of broadcasts from a mirrored port
* Support multiple flood rules
* \* flood actions built by helper
* \* Default drop to table 0
* Fix extraneous vlan\_table\_match
* Encapsulate all match functions in one helper
* \* Explicit drop all rule on all tables by default. \* Add helper for goto table
* \* add helper function to apply actions. \* pass mirror action list only and compile instructions on demand
* Use function to enumerate all tables
* Refactor adding vlans on a port into separate functions
* Autoconfigure only in one place (port\_add time)
* Simplify arguments to flow helpers with defaults for match and priority
* Add input ACL support
* Add ACL entries to config
* \* Signal handler should send an event to Ryu's framework (fix HUP handler) \* Simplify logic in port status handler
* Complete port mirroring implementation (packets in as well as output)
* \* major refactor and cleanup (reduce pylint errors, rename port\_num vs port class, etc) \* use helper functions to create flows (remove a lot of duplicate code and ensure all flows are generated with correct cookie)
* Add mirror output feature (adding attribute "mirror: N" on a port, causes that port to get a copy of everything output to N)
* Remove duplicate code from datapath\_connect(), calling port\_add() instead
* Further README tidyup
* Improve documentation
* Trivial error in faucet.yaml-dist
* Rearchitecture for the REANNZ Faucet Project
* Allow users to disable broadcast/multicast handling rules
* Bug fix: ACLs will now work when table\_miss=False
* Bugfix: Applying a priority\_offset to a single DP will now work
* Update License
* Don't install unicast flows in case where in\_port is the out\_port
* Properly license Valve and components as Apache 2.0
* Use OpenFlow cookies to enable coexisting wither other controllers
* Add Dockerfile for building Valve docker containers
* Added documentation on reloading configuration
* Support datapath down events
* Support reloading of Valve's configuration file
* Use DPSet application to grab Ryu datapath objects
* Fix log formatter for regular log messages after DP has registered
* Update readme
* Add stats collection (disabled by default)
* Bug fix: configured changed to running
* Add note on how to use hex datapath IDs
* Add a readme
* Add support for ipv6 ACLs
* Update distribution config file to show off new features
* Rework parsing engine. Adds full support for multi-dp.  \* Split off our old ugly parsing engine into a few classes  \* Adds back support for ACLs  \* Fixes installing broadcast flows for tagged/untagged ports  \* Clean ups  \* Bug fixes
* Remove our broken IGMP snooping implementation
* Changes to allow flow based handling of broadcast and multicast
* Included (vlan\_vid=vid|ofproto\_v1\_3.OFPVID\_PRESENT)
* Changes to support multiple datapaths
* Fix compliance with OF 1.3.3 section 7.2.5
* Ensure ACL is an optional param
* Update distribution config file to show off more features
* Add log message for IP/network ACLs
* Add simple ACLs to valve
* Improve logging
* Rework packet\_in handler
* Rework valve flows
* Fix grabbing in\_port from a Packet In message
* Fix VLAN VID matches
* Add OpenFlow 1.3 support to valve
* Fix bug in the case we don't have only one type of ports (exclusively tagged or untagged)
* Using priority 1 on prontos seems to break for some reason. Upping priorities to work around this
* Removing debugging print statement I accidentally commited #YOLO
* Make the last commit work
* Add flood rules preemptively to avoid packet outs
* Turns out Joe was right first time. Also rename \_vlan to vlan\_
* Fetch VLAN tags from packets
* Fix lots of bugs, change config format
* Improving valve by adding configuration file
* Our valve is a basic vlan switch
