[ovs-discuss] How does OpenFlow protocol action become flow table entry?

David Evans davidjoshuaevans at gmail.com
Fri May 1 15:13:37 UTC 2015


Hi Ben,

What I mean is - how does a new packet action in action.c - aka
OVS_ACTION_ATTR_STRIP_FOO strip_foo_header end up getting called on a
packet from OpenFlow flow rule?

I can¹t make the connection between open flow handling code (ofp_action.c
ofproto-dpif-xlate.c) to the ovs code for manipulating packets.
Am I completely off track here?
Where do I put my packet modifier on skbuf¹s coming into the sw. And how
do I connect them up to the Open Flow side.

I would have expected to write a fn in packets.c and reference that in
action.c via OVS_ACTION_ATTR* enum, and ?somehow? generate that by
behaviour in a flow table entry from the open flow side (ofp_action etc..).
I only see parse,encode,decode,format types of functions in ofp_action.c
and some magically generated put_* and ofpact_put_* fns in ofp-action.inc2

So I know I need an entry in ofp_raw_action_type
/* ZZ1.0+(4): void. */
ZZ_RAW_STRIP_FOO,
And it¹s relevant parse,encode,decode,format fns.. But what next?



Thanks for your enlightenment so far.. :)

Dave.


On 4/27/15, 3:52 PM, "Ben Pfaff" <blp at nicira.com> wrote:

>Do you mean, where is the code that actually performs the action?
>Usually that's in ofproto/ofproto-dpif-xlate.c, as part of action
>translation.
>
>On Mon, Apr 27, 2015 at 03:50:13PM -0500, David Evans wrote:
>> Thanks Ben 
>> Yes.
>> And I have that side of it written, but which part pushes the action
>>into
>> the tables for a bridge?
>> How is it dispatched when ovs is running?
>> 
>> 
>> Regards,
>> Dave.
>> 
>> On 4/27/15, 3:18 PM, "Ben Pfaff" <blp at nicira.com> wrote:
>> 
>> >On Mon, Apr 27, 2015 at 03:01:16PM -0500, David Evans wrote:
>> >> I have been trolling through the source looking for  how OXM/NXM
>> >>actions end
>> >> up as functioning entries in flow tables.
>> >> I understand that ofp-actions.c and the ofp_raw_action_type
>>enumeration
>> >>is
>> >> at the centre of it all.
>> >> I get how the incoming OpenFlow command strings are processed  by
>> >> encode/decode fns but that?s about it?
>> >> But I don?t understand the path of adding these actions
>> >> 
>> >> I want to use the ActionExperimenter from RYU to drive new arbitrary
>> >>packet
>> >> modifiers via the experimenter extension to open flow.
>> >> I know I could use ovs-ofctl and actions.c  and add new instructions
>> >>that
>> >> way, but I want to stick to OpenFlow so I can drive with other
>> >>controllers
>> >> like Ryu.
>> >
>> >Did you read the FAQ?
>> >
>> >### Q: How do I add support for a new OpenFlow action?
>> >
>> >A: Add your new action to "enum ofp_raw_action_type" in
>> >   lib/ofp-actions.c, following the existing pattern.  Then recompile
>> >   and fix all of the new warnings, implementing new functionality for
>> >   the new action as needed.  (If you configure with --enable-Werror,
>> >   as described in [INSTALL.md], then it is impossible to miss any
>> >   warnings.)
>> >
>> >   If you need to add an OpenFlow vendor extension action for a vendor
>> >   that doesn't yet have any extension actions, then you will also
>> >   need to edit build-aux/extract-ofp-actions.
>> 
>> 





More information about the discuss mailing list