>> On Wed, Apr 30, 2014 at 11:59 PM, YAMAMOTO Takashi
>> <yamam...@valinux.co.jp> wrote:
>>>>> Something like this (I have not tested either scenario):
>>>>>
>>>>>   I think this will fail to match but that may not be obvious to users:
>>>>>   packet_out: in_port=CONTROLLER actions=goto_table:1
>>>>>   table 1: match=in_port=CONTROLLER actions=normal
>>>>>
>>>>>   I think this will match but that may not be obvious to users:
>>>>>   packet_out: in_port=CONTROLLER actions=goto_table:1
>>>>>   table 1: match=in_port=LOCAL actions=normal
>>>>>
>>>>>   Where CONTROLLER could be any port covered by this patch.
>>>>>
>>>> Only ODP ports are changed to LOCAL, so simple rule matches as
>>>> outlined should work.
>>>> However, this scenario is valid when recirculation is involved. I am
>>>> not sure what we should
>>>> do about this edge case either.
>>>
>>> how about having a userspace-only special variant of RECIRC action,
>>> which can specify in_port as (ofproto, ofp port) and thus can be
>>> used even when odp port is not available?
>>>
>>> if a translation detects the condition (ie. recirculation is necessary
>>> but in_port does not have the corresponding odp port), it can use
>>> the userspace variant with SLOW_ACTION instead of normal RECIRC.
>> 
>> Not all actions can be executed in the user space. Hash action can
>> only be executed
>> in datapath. User space, by design, can not predict the hash value
>> computed by the
>> datapath.
> 
> then HASH action ought to be handle specially.  (like OUTPUT?)
> 
> the current code seems broken in that regard.
> if some SLOW_ACTIONs are involved, the upcall hander would
> use DPIF_OP_EXECUTE with needs_help=true, which ends up with
> dpif_execute_with_help, to execute actions, which might include
> HASH and RECIRC.  but dpif_execute_helper_cb can't handle these
> actions.  ie. OVS_NOT_REACHED in dpif_execute_helper_cb seems
> actually reachable.
> 
> YAMAMOTO Takashi

here's a recipe to demonstrate the above mentioned bug in a sandbox.
andy, can you take a look?

YAMAMOTO Takashi


ovs-vsctl --if-exists del-br s1
ovs-vsctl --if-exists del-br s2
ovs-vsctl --if-exists del-br s3

ovs-vsctl add-br s1 -- set bridge s1 datapath_type=netdev 
protocols='[OpenFlow10,OpenFlow13]'
ovs-vsctl add-br s2 -- set bridge s2 datapath_type=netdev 
protocols='[OpenFlow10,OpenFlow13]'
ovs-vsctl add-br s3 -- set bridge s3 datapath_type=netdev 
protocols='[OpenFlow10,OpenFlow13]'

ovs-vsctl add-port s1 p7 -- set interface p7 type=patch options:peer=p8
ovs-vsctl add-port s2 p8 -- set interface p8 type=patch options:peer=p7

ovs-vsctl add-bond s2 b1 p1 p2 lacp=active bond_mode=balance-tcp
ovs-vsctl add-bond s3 b2 p3 p4 lacp=active bond_mode=balance-tcp
ovs-vsctl set interface p1 options:stream=unix:p1
ovs-vsctl set interface p2 options:stream=unix:p2
ovs-vsctl set interface p3 options:pstream=punix:p1
ovs-vsctl set interface p4 options:pstream=punix:p2

ovs-appctl netdev-dummy/set-admin-state up

ovs-ofctl add-flow s2 'arp, 
actions=set_field:11:11:11:11:11:11->arp_sha,output:normal'

ovs-appctl netdev-dummy/receive s2 
'in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'

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

Reply via email to