Implement new "learn" action.
authorBen Pfaff <blp@nicira.com>
Mon, 12 Sep 2011 23:19:57 +0000 (16:19 -0700)
committerBen Pfaff <blp@nicira.com>
Tue, 13 Sep 2011 18:46:09 +0000 (11:46 -0700)
commit75a75043564dc9b002fffa6c6ad71e0d4d5c892e
tree2e059054c5b3e146e3777c013f6cac42246ffa4c
parent308881afb61e292c629b36a357cfc37153884000
Implement new "learn" action.

There are a few loose ends here.  First, learning actions cause too much
flow revalidation.  Upcoming commits will fix that problem.  The following
additional issues have not yet been addressed:

    * Resource limits: nothing yet limits the maximum number of flows that
      can be learned.  It is possible to exhaust all system memory.

    * Age reporting: there is no way to find out how soon a learned table
      entry is due to be evicted.

To try this action out, here's a recipe for a very simple-minded MAC
learning switch.  It uses a 10-second MAC expiration time to make it easier
to see what's going on:

ovs-vsctl del-controller br0
ovs-ofctl del-flows br0
ovs-ofctl add-flow br0 "table=0 actions=learn(table=1, hard_timeout=10, \
NXM_OF_VLAN_TCI[0..11], NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[], \
output:NXM_OF_IN_PORT[]), resubmit(,1)"
ovs-ofctl add-flow br0 "table=1 priority=0 actions=flood"

You can then dump the MAC learning table with:

ovs-ofctl dump-flows br0 table=1
19 files changed:
NEWS
include/openflow/nicira-ext.h
lib/automake.mk
lib/learn.c [new file with mode: 0644]
lib/learn.h [new file with mode: 0644]
lib/meta-flow.c
lib/ofp-parse.c
lib/ofp-print.c
lib/ofp-util.c
lib/ofp-util.def
lib/util.c
lib/util.h
ofproto/ofproto-dpif.c
ofproto/ofproto-provider.h
ofproto/ofproto.c
tests/automake.mk
tests/learn.at [new file with mode: 0644]
tests/testsuite.at
utilities/ovs-ofctl.8.in