User login

Weekly Report




Focusing on multi-table pipelines this week. I've started by creating a passthrough OpenFlow controller allowing me to intercept and rewrite messages. For this I used the familiar libfluid library, while this works it may not be ideal due to its locking of both read and write of a connection at the same time. This can deadlock when both connections receive a message at the same time and then try to write to the other connection with is locked due to the receive. Currently I spawn a thread per message to work around this, however this is expensive.

I've also started looking at the Pica's multitable pipeline, with can include the MAC matching table and Routing on top of the standard ACL table (where OpenFlow rules are typically installed). These tables can be placed at either a higher or lower priority than the ACL.

In order to test these tables functionality I decided to focus on the MAC table with a modified versions of ryu's simple switch. In order to test this I setup mininet with two bridged networks (in the same subnet), each of which is connected to one port on the Pica. Off each bridged network any number of hosts can be created --- with all packets that traverse between these networks being switched by the Pica.

Ryu's original version of simple switch assumed a single host per port, however in the mininet configuration there are multiple. This in consideration with the matches and actions available in the MAC table lead me to a solution to match ARP packets at a high priority and send these to the controller, and install eth_dst rules beneath that.
I found MAC table flows had to strictly match an eth_dst and vlan_vid as documented, however could optionally match ethertype also. I also found a possible bug, where installing a rule could with send to controller would replay the last packet in, in the case if simple switch this resulted in attempting to install that same rule again and resulted in a infinite cycle (more investigation is needed).

I've started initial thinking and working towards translating these rules from the single table exposed by simple switch into multiple tables. I created a sample ryu implementation that uses multiple tables. And have started working through processing the matches to detect cases where a translation could be made in the passthrough controller.

At the start of the week I, finally, sent a draft of the slow-path benchmarks paper to my supervisors and spent a couple of hours doing a little bit of tidy up.