Sunday, July 31, 2016

Automatically documenting/generating OF pipelines

FAUCET now has code that automatically enforces correct documentation, of what OpenFlow matches are used in what table. Today, it looks like this (see end of this post).

This is very useful, because it enables you to correctly configure hardware that needs to know what matches are used in what table, in advance. It also lets you optimize the pipeline (for example, by removing matches from tables that don't need them, which can increase forwarding performance).

FAUCET could also support a P4 switch running an OF bridge, if that bridge supported these matches in these tables.

FAUCET's pipeline could use some further optimization (particularly of eth_src_table, which is quite "wide" - it could match a lot of things). This is ongoing.

        self.TABLE_MATCH_TYPES = {
            self.dp.vlan_table: (
                'in_port', 'vlan_vid', 'eth_src', 'eth_dst', 'eth_type'),
            # TODO: eth_src_table matches too many things. It should
            # be split further into two tables for IPv4/IPv6 entries.
            self.dp.eth_src_table: (
                'in_port', 'vlan_vid', 'eth_src', 'eth_dst', 'eth_type',
                'ip_proto',
                'icmpv6_type', 'ipv6_nd_target',
                'arp_tpa', 'ipv4_src'),
            self.dp.ipv4_fib_table: (
                'vlan_vid', 'eth_type', 'ip_proto',
                'ipv4_src', 'ipv4_dst'),
            self.dp.ipv6_fib_table: (
                'vlan_vid', 'eth_type', 'ip_proto',
                'icmpv6_type', 'ipv6_dst'),
            self.dp.eth_dst_table: (
                'vlan_vid', 'eth_dst'),
            self.dp.flood_table: (
                'vlan_vid', 'eth_dst'),
        }


No comments:

Post a Comment

Note: Only a member of this blog may post a comment.