On 11/18/13 9:28 PM, Ben Pfaff wrote:
On Mon, Nov 18, 2013 at 12:19:05PM +0200, Lori Jakab wrote:
On 11/16/13 1:21 AM, Ben Pfaff wrote:
On Tue, Nov 12, 2013 at 04:36:25PM +0200, Lorand Jakab wrote:
This commit relaxes the assumption that all packets have an Ethernet
header, and adds support for layer 3 flows.  For each packet received on
the Linux kernel datapath the l2 and l3 members of struct ofpbuf are
intialized appropriately, and some functions now expect this (notable
flow_extract()), in order to differentiate between layer 2 and layer 3
packets.  struct flow has now a new 'noeth' member, because we cannot
assume that a flow has no Ethernet header when eth_src and eth_dst are
0.  For layer 3 packets, the protocol type is still stored in the
eth_type member.

Switching L2->L3 and L3->L2 are both implemented by adding the pop_eth
and push_eth actions respectively when a transition is detected.  The
push_eth action puts 0s on both source and destination MACs.  These
addresses can be modified with mod_dl_dst and mod_dl_src actions.

Signed-off-by: Lorand Jakab <loja...@cisco.com>
This needs a rebase due to changes in dpif-netdev.
Will do.  I always keep a rebased version on github:
https://github.com/ljakab/openvswitch/commits/l3_v2

BTW, my patch had the exact same changes that causes the need for rebase.
Oh, sorry, I didn't look at the details, since I knew that we'd need
another version.  It didn't keep me from reviewing, anyhow.

No worries, it just confirmed that the change I wanted to submit in that location was useful.


Have you thought about interactions with OpenFlow yet?  As-is, there
are going to be some oddities.
I was focusing more on getting it to work first :)
;-)

I assume you're
right about the oddities, and I was thinking something along the
lines of reviewing all OF actions and see if they make sense in an
L3 context or not.  If you (or anyone else) has any ideas on what
else I should look at, what else might fail/misbehave, please let me
know.
One approach that probably fits in well with existing code is to add a
prerequisite for Ethernet.  Currently the Ethernet fields MFF_ETH_SRC
and MFF_ETH_DST have prerequisite MFP_NONE, meaning no prerequisite at
all.  We could introduce a new prerequisite MFP_ETHERNET, meaning
noeth=false (or base_layer=2 or whatever).  Then, a lot of code would
automatically honor that prerequisite, which would mean less manual
auditing.

Sounds good, will look into it.


For example, the flow
"dl_dst=00:00:00:00:00:00, actions=drop" will now drop all L3 packets,
I believe.  Presumably we do not want that.  I guess any flow that
matches on dl_dst or dl_src should implicitly also match noeth=false.
I missed this, thanks for pointing it out.  And there are probably
some other cases when noeth=false should be needed.  Maybe make it
(well "base_layer") a mandatory match, like in_port, metadata, etc.
?
I am not sure what you mean by a mandatory match.

Sorry, I meant prerequisite, just what you described above ;)

I will start working on fixing the issues you pointed out, and the unit tests too.

Thanks again for reviewing!

-Lori
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to