Both of these seem fine to me btw.

Ethan

On Tue, May 7, 2013 at 12:11 AM, Rajahalme, Jarno (NSN - FI/Espoo)
<jarno.rajaha...@nsn.com> wrote:
> Looks good, thanks :-)
>
>   Jarno
>
> On May 7, 2013, at 1:38 , ext Ben Pfaff wrote:
>
>> OpenFlow says that an "output" action to a flow's input port is ordinarily
>> dropped, unless the flow explicitly outputs to OFPP_IN_PORT.  We've
>> occasionally been asked to implement some way to avoid this behavior in
>> cases where it is not easily known in advance whether a given port is the
>> input port (so that OFPP_IN_PORT is not easy to use).
>>
>> This commit implements such a feature.  With this commit, one may write:
>>    actions=load:0->NXM_OF_IN_PORT[],output:123
>> which will output to port 123 regardless of whether it is the input port.
>> If the input port is important, then one may save and restore it on the
>> stack:
>>    actions=push:NXM_OF_IN_PORT[],load:0->NXM_OF_IN_PORT[],output:123,
>>            pop:NXM_OF_IN_PORT[]
>>
>> (Sometimes I am asked whether "resubmit" changes the in_port and would
>> therefore interact badly with this feature.  It does not.   "resubmit" only
>> (optionally) changes the in_port used for the resubmit's flow table lookup.
>> It does not otherwise have any effect on in_port.)
>>
>> Bug #14091.
>> CC: Jarno Rajahalme <jarno.rajaha...@nsn.com>
>> CC: Ronghua Zhang <rzh...@nicira.com>
>> Signed-off-by: Ben Pfaff <b...@nicira.com>
>> ---
>> NEWS                          |    4 ++++
>> include/openflow/nicira-ext.h |    2 ++
>> lib/meta-flow.c               |    2 +-
>> tests/ofproto-dpif.at         |    5 +++--
>> 4 files changed, 10 insertions(+), 3 deletions(-)
>>
>> diff --git a/NEWS b/NEWS
>> index 3a7123b..87f9bde 100644
>> --- a/NEWS
>> +++ b/NEWS
>> @@ -1,5 +1,9 @@
>> post-v1.11.0
>> ---------------------
>> +    - OpenFlow:
>> +      * The "load" and "set_field" actions can now modify the "in_port".  
>> (This
>> +        allows one to enable output to a flow's input port by setting the
>> +        in_port to some unused value, such as OFPP_NONE.)
>>
>>
>> v1.11.0 - xx xxx xxxx
>> diff --git a/include/openflow/nicira-ext.h b/include/openflow/nicira-ext.h
>> index c80ff95..8c9fab1 100644
>> --- a/include/openflow/nicira-ext.h
>> +++ b/include/openflow/nicira-ext.h
>> @@ -493,6 +493,8 @@ OFP_ASSERT(sizeof(struct nx_action_pop_queue) == 16);
>>  *     Modifying any of the above fields changes the corresponding packet
>>  *     header.
>>  *
>> + *   - NXM_OF_IN_PORT
>> + *
>>  *   - NXM_NX_REG(idx) for idx in the switch's accepted range.
>>  *
>>  *   - NXM_OF_VLAN_TCI.  Modifying this field's value has side effects on the
>> diff --git a/lib/meta-flow.c b/lib/meta-flow.c
>> index 9296faa..a75e526 100644
>> --- a/lib/meta-flow.c
>> +++ b/lib/meta-flow.c
>> @@ -114,7 +114,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
>>         MFM_NONE,
>>         MFS_OFP_PORT,
>>         MFP_NONE,
>> -        false,
>> +        true,
>>         NXM_OF_IN_PORT, "NXM_OF_IN_PORT",
>>         OXM_OF_IN_PORT, "OXM_OF_IN_PORT",
>>     }, {
>> diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at
>> index 2b9df96..1fdbac3 100644
>> --- a/tests/ofproto-dpif.at
>> +++ b/tests/ofproto-dpif.at
>> @@ -92,18 +92,19 @@ AT_SETUP([ofproto-dpif - output])
>> OVS_VSWITCHD_START
>> ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
>> AT_DATA([flows.txt], [dnl
>> -in_port=1 
>> actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7
>> +in_port=1 
>> actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
>> in_port=2 actions=output:9
>> in_port=3 
>> actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
>> in_port=4 
>> actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
>> in_port=5 
>> actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
>> in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
>> in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
>> +in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
>> ])
>> AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>> AT_CHECK([ovs-appctl ofproto/trace br0 
>> 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'],
>>  [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0],
>> -  [Datapath actions: 9,55,10,55,66,11,77,88
>> +  [Datapath actions: 9,55,10,55,66,11,77,88,9,1
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> --
>> 1.7.2.5
>>
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to