On Aug 6, 2014, at 9:14 AM, Samuel Ghinet <sghi...@cloudbasesolutions.com> wrote:
> How it works: > Say we have a list of OVS_FLOWs, where OVS_FLOW uses OVS_REF_COUNT. > > * The OVS_REF_COUNT must be initialized to 0 at object creation. > * Assign a destruction function to the func ptr "Destroy" of OVS_REF_COUNT. > * When you need to retrieve a ptr to an OVS_FLOW, from the list, you must do > the following: > *** lock the OVS_FLOW list for read (obviously) > *** do the lookup: a ptr to an existing OVS_FLOW, pFlow, is found. > *** call "OVS_REFCOUNT_REFERENCE(pFlow);" - by doing so, you deny destruction > of pFlow, while the object > is referenced, ensuring that you keep a valid pointer to a flow. > *** unlock the list > *** return pFlow. > * When you need to modify fields in the pFlow, use the rw lock / spinlock > field of pFlow. > * When you no longer need the ptr, use "OVS_REFCOUNT_DEREFERENCE(pFlow);" > * When you need to do deferred deletion, call "OVS_REFCOUNT_DESTROY(pFlow);": > this will > mark the pFlow for deletion. If the object is not referenced, it will be > destroyed immediately. Otherwise, > it will be destroyed when the refCount = 0. Sam, This is what I have in mind on how the workflow should look like. Nothing fancy, just a standard way of doing ref counting: Context #1: packet processing context ------------------------------------- 1. Lock Flowtable (read) 2. pFlow = FlowLookup() * This one checks if the flag on the flow is ACTIVE * Increment the refcount on the flow 3. Unlock Flowtable 4. Process the packet using the flow 5. Lock Flowtable (write) 6. Decrement the refcount on the flow. * if the new refcount == 0, cleanup the flow by deleting it from the flowable. 7. Unblock Flowtable. Context #2: flow put context ---------------------------- 1. Lock Flowtable (write) 2. Decrement the refcount on the flow: * if new refcount is 0, cleanup the flow by deleting it from the flowable. * if new refcount is 1, mark the flag on the flow as INACTIVE 3. Unblock Flowtable. This is a very simple usage of refcounting. Once we agree on this, we can work out the API specifics etc. Pls. let me know if you have other ideas. thanks, Nithin _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev