I am trying to control Wifi traffic using Faucet, I found that Faucet doesn't
have this feature, hence I made a small contribution here.
This is my first code experience with Faucet, and I am not sure if there is
better way to do this, so I am looking for your feedback :).
Follows my scenario, solution and implementation sections.
I am using OpenWrt running on TP-Link, and I have created ovs and added wifi
port as well as one Ethernet port to it. (see ovs_faucet.png attached
diagram), and I need to make faucet controls Ethernet as well as wifi traffic.
#The problem is, OVS sees all wifi clients on the same port, hence we can't
control traffic within the WiFi clients themselves using Faucet YAML file.
Traffic within Wifi clients, need a special rule, I mean forward the packet to
IN_PORT if its dl_src and dl_dst are on WiFi port.
To do this, I modified the table_match_types for dest_table such that, if
dl_dst is on the same port (wifi) where dl_dst, then IN_PORT I add IN_PORT
rule, if they are on different ports then normal rule is added.
1 - I added a new attribute (flood_back) for DP interface, to indicate if the
port is wifi or not.
2- On valve_flood.py file, I updated _build_flood_port_outputs function to add
OF rule to flood incoming packet back to IN_PORT if flood_back attribute is
3- On valve.py file, I added 'in_port' match type to eth_dst_table
4- On valve_host.py, I added IN_PORT rule in case dl_src and dl_dst are on
Please, find the attached faucet.yaml, dump-flows.txt files
We have just released V1.5.2, which has been reported to work with python3
in production at some sites (including with OF over TLS). V1.5.2 runs all
tests with python3. We will complete the move to python3 later this month.
The latest Docker tests also install the gNMI client. gNMI (
is a system for configuration management and telemetry, using OpenConfig (
FAUCET will be using gNMI in the future to configure switches that support
it, to bootstrap OpenFlow (ie configure OpenFlow servers, certificates
etc). This will reduce the amount of initial configuration required on
switches making them easier to deploy and manage.
I'm very pleased to announce after 3 months of work we have just
released v1.5.0 of FAUCET.
FAUCET v1.5.0 represents 270 pull requests and 900 commits, I would like
to extend my thanks to our dedicated developer community who have done
an outstanding job the past 3 months.
In this release we have focused on performance optimisations and
refactoring the code base to be simpler to understand and work with. We
have also greatly improved our hardware (and software) test suite to
make it easier for our hardware partners. There are a number of great
features and improvements in monitoring FAUCET as well.
Please note in this release we have renamed our pypi package for python
to "faucet" from "ryu-faucet" so if you are installing direct with pip
you will need to migrate to the new package name. Docker images have the
same name and we have officially tagged v1_5_0 for faucet/faucet and
We are also announcing that this release will likely be the last one to
support python2. We have deprecated python2 support and expect the next
full release to be python3 only.
Highlights from this release:
- IPv6: Router Solicitation/Router Advertisement support
- IPv6: hosts with privacy addresses support (when routing)
- Inter VLAN routing
- Prometheus support
- ARP/ND/learning scheduling jittered to reduce controller load spikes
- IPv6 multicast MAC address correctly set for Neighbor Discovery packets
- Greatly improve cold start performance
Full change-log is available here:
We intend to release V1.5.0 today - this release is ~900 commits ahead of
V1.4.0 and includes many, many improvements to even basic functionality.
While this release's tests are run against python3 (under Docker), we still
have the most experience with python2 and want to keep testing against
python3. Therefore python2 is still recommended, until the next release
which will support python3.
As of today, FAUCET can run on python3, and the Docker based tests now run
python3. The non-test current Docker builds are using python2, still.
We plan to drop python2 support in the near future (approx 1w) and move the
builds to python3. If you use Docker to deploy FAUCET, you should not see
any differences as the library changes are of course confined to the Docker