I agree that with apply_actions it makes sense to supply the table_id of the flow that output to the group. I don't object to fixing that--do you want to supply a patch?
On Thu, Apr 14, 2016 at 02:29:24PM +0000, Zoltán Balogh wrote: > > Hi Ben, > > I see your point. The table lookup is far removed from output. But let's > replace write_action with apply_action and see your explanation again. > In this latter case the output would be caused by a group, which would be > caused by goto_table action that was found by a table_lookup and table_id > would be relevant. > Compared with write_action, in that case there is an additional action set > element in the "caused by"-chain. > > Furthermore the table_id=0 can be observed when using > write_actions(output:CONTROLLER) as well. Having the following setup: > > $ ovs-ofctl dump-flows br-test > OFPST_FLOW reply (OF1.3) (xid=0x2): > cookie=0x0, duration=639.674s, table=0, n_packets=5, n_bytes=440, in_port=1 > actions=write_actions(CONTROLLER:65535),goto_table:1 > cookie=0x0, duration=690.922s, table=1, n_packets=5, n_bytes=440, > actions=CONTROLLER:65535,goto_table:2 > cookie=0x0, duration=292.224s, table=2, n_packets=5, n_bytes=440, > actions=CONTROLLER:65535,write_actions(CONTROLLER:65535),goto_table:3 > cookie=0x0, duration=690.796s, table=3, n_packets=5, n_bytes=440, > actions=group:1234 > > $ ovs-ofctl dump-groups br-test > OFPST_GROUP_DESC reply (OF1.3) (xid=0x2): > group_id=1234,type=all,bucket=actions=output:10,bucket=actions=CONTROLLER:65535 > > If a packet is received on port 1, then packet_in messages are triggered by > actions=output:CONTROLLER in tables 1, 2 and in group 1234 (with table_id = > 1, 2 and 3) and finally a packet_in is triggered by > write_action(output:CONTROLLER) in table 2. But this last one has table_id = > 0. > > So, the first packet_in (with table_id = 1) is triggered by an output action > found by a table lookup in table 1. > The last packet_in (with table_id = 0) was triggered by an output action > caused by the action set, which is from an action found by a table lookup in > table 2. > > I don't know how other OpenFlow switches handle these cases. I need to do > some research. > > Best regards, > Zoltan > > > -----Original Message----- > From: Ben Pfaff [mailto:b...@ovn.org] > Sent: Thursday, April 14, 2016 1:16 AM > To: Zoltán Balogh > Cc: discuss@openvswitch.org > Subject: Re: [ovs-discuss] table_id becomes zero in PACKET_IN when using > write_action(group) instead of group > > > The comment says that table_id member is "the ID of the table that was > > looked up". > > > > I investigated the action translator code in ofproto-dpif-xlate.c. I think > > it would be easy to store the current table ID in a new member of current > > xlate_ctx structure when action translation through the flow-chain is > > ongoing and a write_actions(output) or a write_actions(group) action is > > processed. > > So this way, the ID of the last table in the flow-chain that contains > > write_actions(output) or write_actions(group) could be stored. That could > > be done in xlate_write_actions(). > > > > Then later, when the current action set is processed and there is an output > > action in the set, then this stored table_id could be used as table_id of > > current context when translating an output action and output port is > > CONTROLLER. This should be performed in xlate_output_action(). > > > > What do you think? If it's ok, I would create a patch. > > The table lookup is far removed from the output. The output is caused by a > group, which is in turn caused by the action set, which is in turn from an > action found by a table lookup. It's not at all obvious to me that the table > lookup is relevant. > > What do other OpenFlow switches do? _______________________________________________ discuss mailing list discuss@openvswitch.org http://openvswitch.org/mailman/listinfo/discuss