From: Simon Horman Date: Wed, 20 Jan 2016 06:15:01 +0000 (+0900) Subject: flow: add miniflow_pad_from_64 X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fovs.git;a=commitdiff_plain;h=1589ee5ae97c3f71c50413db64ddd0546daeecc0 flow: add miniflow_pad_from_64 Provide leading padding to allow pushing a value to a miniflow where the value is not aligned to 64 bytes and no value has already been pushed to the same word. This will be used by a follow-up patch to allow layer 3 packet - that is packets without an ethernet header - to be represented in flows. Signed-off-by: Simon Horman Acked-by: Jarno Rajahalme --- diff --git a/lib/flow.c b/lib/flow.c index f09c32523..2a7116b67 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -225,6 +225,16 @@ BUILD_MESSAGE("FLOW_WC_SEQ changed: miniflow_extract() will have runtime " MF.data++; \ } +#define miniflow_pad_from_64_(MF, OFS) \ +{ \ + MINIFLOW_ASSERT(MF.data < MF.end); \ + \ + MINIFLOW_ASSERT((OFS) % 8 != 0); \ + miniflow_set_map(MF, OFS / 8); \ + \ + memset((uint8_t *)MF.data, 0, (OFS) % 8); \ +} + #define miniflow_push_be16_(MF, OFS, VALUE) \ miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE); @@ -288,6 +298,9 @@ BUILD_MESSAGE("FLOW_WC_SEQ changed: miniflow_extract() will have runtime " #define miniflow_pad_to_64(MF, FIELD) \ miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD)) +#define miniflow_pad_from_64(MF, FIELD) \ + miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD)) + #define miniflow_push_words(MF, FIELD, VALUEP, N_WORDS) \ miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)