X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=lib%2Fdpif-provider.h;h=90a02b43600f9797fb11305d4d54a26aa401c0e5;hb=18b063cdbf3e59c1922ffd34fd03f2dc5b0c6db6;hp=1afac99e4a7c42c71077f0a84c2d61c446a13941;hpb=1dd16b9a274afbde46c9d9a4052d720d4cf3c3e2;p=cascardo%2Fovs.git diff --git a/lib/dpif-provider.h b/lib/dpif-provider.h index 1afac99e4..90a02b436 100644 --- a/lib/dpif-provider.h +++ b/lib/dpif-provider.h @@ -341,11 +341,17 @@ struct dpif_class { * '*upcall', using 'buf' for storage. Should only be called if 'recv_set' * has been used to enable receiving packets from 'dpif'. * - * The implementation should point 'upcall->packet' and 'upcall->key' into - * data in the caller-provided 'buf'. If necessary to make room, the - * implementation may expand the data in 'buf'. (This is hardly a great - * way to do things but it works out OK for the dpif providers that exist - * so far.) + * The implementation should point 'upcall->key' and 'upcall->userdata' + * (if any) into data in the caller-provided 'buf'. The implementation may + * also use 'buf' for storing the data of 'upcall->packet'. If necessary + * to make room, the implementation may reallocate the data in 'buf'. + * + * The caller owns the data of 'upcall->packet' and may modify it. If + * packet's headroom is exhausted as it is manipulated, 'upcall->packet' + * will be reallocated. This requires the data of 'upcall->packet' to be + * released with ofpbuf_uninit() before 'upcall' is destroyed. However, + * when an error is returned, the 'upcall->packet' may be uninitialized + * and should not be released. * * This function must not block. If no upcall is pending when it is * called, it should return EAGAIN without blocking. */