aboutsummaryrefslogtreecommitdiffstats
path: root/vppinfra/vppinfra/serialize.h
diff options
context:
space:
mode:
authorDamjan Marion <damarion@cisco.com>2016-12-19 23:05:39 +0100
committerDamjan Marion <damarion@cisco.com>2016-12-28 12:25:14 +0100
commit7cd468a3d7dee7d6c92f69a0bb7061ae208ec727 (patch)
tree5de62f8dbd3a752f5a676ca600e43d2652d1ff1a /vppinfra/vppinfra/serialize.h
parent696f1adec0df3b8f161862566dd9c86174302658 (diff)
Reorganize source tree to use single autotools instance
Change-Id: I7b51f88292e057c6443b12224486f2d0c9f8ae23 Signed-off-by: Damjan Marion <damarion@cisco.com>
Diffstat (limited to 'vppinfra/vppinfra/serialize.h')
-rw-r--r--vppinfra/vppinfra/serialize.h443
1 files changed, 0 insertions, 443 deletions
diff --git a/vppinfra/vppinfra/serialize.h b/vppinfra/vppinfra/serialize.h
deleted file mode 100644
index 6cc2372e6ab..00000000000
--- a/vppinfra/vppinfra/serialize.h
+++ /dev/null
@@ -1,443 +0,0 @@
-/*
- * Copyright (c) 2015 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- Copyright (c) 2005 Eliot Dresselhaus
-
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#ifndef included_clib_serialize_h
-#define included_clib_serialize_h
-
-#include <stdarg.h>
-#include <vppinfra/byte_order.h>
-#include <vppinfra/types.h>
-#include <vppinfra/vec.h>
-#include <vppinfra/longjmp.h>
-
-struct serialize_main_header_t;
-struct serialize_stream_t;
-
-typedef void (serialize_data_function_t) (struct serialize_main_header_t * h,
- struct serialize_stream_t * s);
-
-typedef struct serialize_stream_t
-{
- /* Current data buffer being serialized/unserialized. */
- u8 *buffer;
-
- /* Size of buffer in bytes. */
- u32 n_buffer_bytes;
-
- /* Current index into buffer. */
- u32 current_buffer_index;
-
- /* Overflow buffer for when there is not enough room at the end of
- buffer to hold serialized/unserialized data. */
- u8 *overflow_buffer;
-
- /* Current index in overflow buffer for reads. */
- u32 current_overflow_index;
-
- u32 flags;
-#define SERIALIZE_END_OF_STREAM (1 << 0)
-
- uword data_function_opaque;
-
- u32 opaque[64 - 4 * sizeof (u32) - 1 * sizeof (uword) -
- 2 * sizeof (void *)];
-} serialize_stream_t;
-
-always_inline void
-serialize_stream_set_end_of_stream (serialize_stream_t * s)
-{
- s->flags |= SERIALIZE_END_OF_STREAM;
-}
-
-always_inline uword
-serialize_stream_is_end_of_stream (serialize_stream_t * s)
-{
- return (s->flags & SERIALIZE_END_OF_STREAM) != 0;
-}
-
-typedef struct serialize_main_header_t
-{
- u32 recursion_level;
-
- /* Data callback function and opaque data. */
- serialize_data_function_t *data_function;
-
- /* Error if signaled by data function. */
- clib_error_t *error;
-
- /* Exit unwind point if error occurs. */
- clib_longjmp_t error_longjmp;
-} serialize_main_header_t;
-
-always_inline void
-serialize_error (serialize_main_header_t * m, clib_error_t * error)
-{
- clib_longjmp (&m->error_longjmp, pointer_to_uword (error));
-}
-
-#define serialize_error_return(m,args...) \
- serialize_error (&(m)->header, clib_error_return (0, args))
-
-void *serialize_read_write_not_inline (serialize_main_header_t * m,
- serialize_stream_t * s,
- uword n_bytes, uword flags);
-
-#define SERIALIZE_FLAG_IS_READ (1 << 0)
-#define SERIALIZE_FLAG_IS_WRITE (1 << 1)
-
-always_inline void *
-serialize_stream_read_write (serialize_main_header_t * header,
- serialize_stream_t * s,
- uword n_bytes, uword flags)
-{
- uword i, j, l;
-
- l = vec_len (s->overflow_buffer);
- i = s->current_buffer_index;
- j = i + n_bytes;
- s->current_buffer_index = j;
- if (l == 0 && j <= s->n_buffer_bytes)
- {
- return s->buffer + i;
- }
- else
- {
- s->current_buffer_index = i;
- return serialize_read_write_not_inline (header, s, n_bytes, flags);
- }
-}
-
-typedef struct
-{
- serialize_main_header_t header;
- serialize_stream_t stream;
-} serialize_main_t;
-
-always_inline void
-serialize_set_end_of_stream (serialize_main_t * m)
-{
- serialize_stream_set_end_of_stream (&m->stream);
-}
-
-always_inline uword
-serialize_is_end_of_stream (serialize_main_t * m)
-{
- return serialize_stream_is_end_of_stream (&m->stream);
-}
-
-typedef struct
-{
- serialize_main_header_t header;
- serialize_stream_t *streams;
-} serialize_multiple_main_t;
-
-typedef void (serialize_function_t) (serialize_main_t * m, va_list * va);
-
-always_inline void *
-unserialize_get (serialize_main_t * m, uword n_bytes)
-{
- return serialize_stream_read_write (&m->header, &m->stream, n_bytes,
- SERIALIZE_FLAG_IS_READ);
-}
-
-always_inline void *
-serialize_get (serialize_main_t * m, uword n_bytes)
-{
- return serialize_stream_read_write (&m->header, &m->stream, n_bytes,
- SERIALIZE_FLAG_IS_WRITE);
-}
-
-always_inline void
-serialize_integer (serialize_main_t * m, u64 x, u32 n_bytes)
-{
- u8 *p = serialize_get (m, n_bytes);
- if (n_bytes == 1)
- p[0] = x;
- else if (n_bytes == 2)
- clib_mem_unaligned (p, u16) = clib_host_to_net_u16 (x);
- else if (n_bytes == 4)
- clib_mem_unaligned (p, u32) = clib_host_to_net_u32 (x);
- else if (n_bytes == 8)
- clib_mem_unaligned (p, u64) = clib_host_to_net_u64 (x);
- else
- ASSERT (0);
-}
-
-always_inline void
-unserialize_integer (serialize_main_t * m, void *x, u32 n_bytes)
-{
- u8 *p = unserialize_get (m, n_bytes);
- if (n_bytes == 1)
- *(u8 *) x = p[0];
- else if (n_bytes == 2)
- *(u16 *) x = clib_net_to_host_unaligned_mem_u16 ((u16 *) p);
- else if (n_bytes == 4)
- *(u32 *) x = clib_net_to_host_unaligned_mem_u32 ((u32 *) p);
- else if (n_bytes == 8)
- *(u64 *) x = clib_net_to_host_unaligned_mem_u64 ((u64 *) p);
- else
- ASSERT (0);
-}
-
-/* As above but tries to be more compact. */
-always_inline void
-serialize_likely_small_unsigned_integer (serialize_main_t * m, u64 x)
-{
- u64 r = x;
- u8 *p;
-
- /* Low bit set means it fits into 1 byte. */
- if (r < (1 << 7))
- {
- p = serialize_get (m, 1);
- p[0] = 1 + 2 * r;
- return;
- }
-
- /* Low 2 bits 1 0 means it fits into 2 bytes. */
- r -= (1 << 7);
- if (r < (1 << 14))
- {
- p = serialize_get (m, 2);
- clib_mem_unaligned (p, u16) = clib_host_to_little_u16 (4 * r + 2);
- return;
- }
-
- r -= (1 << 14);
- if (r < (1 << 29))
- {
- p = serialize_get (m, 4);
- clib_mem_unaligned (p, u32) = clib_host_to_little_u32 (8 * r + 4);
- return;
- }
-
- p = serialize_get (m, 9);
- p[0] = 0; /* Only low 3 bits are used. */
- clib_mem_unaligned (p + 1, u64) = clib_host_to_little_u64 (x);
-}
-
-always_inline u64
-unserialize_likely_small_unsigned_integer (serialize_main_t * m)
-{
- u8 *p = unserialize_get (m, 1);
- u64 r;
- u32 y = p[0];
-
- if (y & 1)
- return y / 2;
-
- r = 1 << 7;
- if (y & 2)
- {
- p = unserialize_get (m, 1);
- r += (y / 4) + (p[0] << 6);
- return r;
- }
-
- r += 1 << 14;
- if (y & 4)
- {
- p = unserialize_get (m, 3);
- r += ((y / 8)
- + (p[0] << (5 + 8 * 0))
- + (p[1] << (5 + 8 * 1)) + (p[2] << (5 + 8 * 2)));
- return r;
- }
-
- p = unserialize_get (m, 8);
- r = clib_mem_unaligned (p, u64);
- r = clib_little_to_host_u64 (r);
-
- return r;
-}
-
-always_inline void
-serialize_likely_small_signed_integer (serialize_main_t * m, i64 s)
-{
- u64 u = s < 0 ? -(2 * s + 1) : 2 * s;
- serialize_likely_small_unsigned_integer (m, u);
-}
-
-always_inline i64
-unserialize_likely_small_signed_integer (serialize_main_t * m)
-{
- u64 u = unserialize_likely_small_unsigned_integer (m);
- i64 s = u / 2;
- return (u & 1) ? -s : s;
-}
-
-void
-serialize_multiple_1 (serialize_main_t * m,
- void *data, uword data_stride, uword n_data);
-void
-serialize_multiple_2 (serialize_main_t * m,
- void *data, uword data_stride, uword n_data);
-void
-serialize_multiple_4 (serialize_main_t * m,
- void *data, uword data_stride, uword n_data);
-
-void
-unserialize_multiple_1 (serialize_main_t * m,
- void *data, uword data_stride, uword n_data);
-void
-unserialize_multiple_2 (serialize_main_t * m,
- void *data, uword data_stride, uword n_data);
-void
-unserialize_multiple_4 (serialize_main_t * m,
- void *data, uword data_stride, uword n_data);
-
-always_inline void
-serialize_multiple (serialize_main_t * m,
- void *data,
- uword n_data_bytes, uword data_stride, uword n_data)
-{
- if (n_data_bytes == 1)
- serialize_multiple_1 (m, data, data_stride, n_data);
- else if (n_data_bytes == 2)
- serialize_multiple_2 (m, data, data_stride, n_data);
- else if (n_data_bytes == 4)
- serialize_multiple_4 (m, data, data_stride, n_data);
- else
- ASSERT (0);
-}
-
-always_inline void
-unserialize_multiple (serialize_main_t * m,
- void *data,
- uword n_data_bytes, uword data_stride, uword n_data)
-{
- if (n_data_bytes == 1)
- unserialize_multiple_1 (m, data, data_stride, n_data);
- else if (n_data_bytes == 2)
- unserialize_multiple_2 (m, data, data_stride, n_data);
- else if (n_data_bytes == 4)
- unserialize_multiple_4 (m, data, data_stride, n_data);
- else
- ASSERT (0);
-}
-
-/* Basic types. */
-serialize_function_t serialize_64, unserialize_64;
-serialize_function_t serialize_32, unserialize_32;
-serialize_function_t serialize_16, unserialize_16;
-serialize_function_t serialize_8, unserialize_8;
-serialize_function_t serialize_f64, unserialize_f64;
-serialize_function_t serialize_f32, unserialize_f32;
-
-/* Basic vector types. */
-serialize_function_t serialize_vec_8, unserialize_vec_8;
-serialize_function_t serialize_vec_16, unserialize_vec_16;
-serialize_function_t serialize_vec_32, unserialize_vec_32;
-serialize_function_t serialize_vec_64, unserialize_vec_64;
-
-/* Serialize generic vectors. */
-serialize_function_t serialize_vector, unserialize_vector,
- unserialize_aligned_vector;
-
-#define vec_serialize(m,v,f) \
- serialize ((m), serialize_vector, (v), sizeof ((v)[0]), (f))
-
-#define vec_unserialize(m,v,f) \
- unserialize ((m), unserialize_vector, (v), sizeof ((*(v))[0]), (f))
-
-#define vec_unserialize_aligned(m,v,f) \
- unserialize ((m), unserialize_aligned_vector, (v), sizeof ((*(v))[0]), (f))
-
-/* Serialize pools. */
-serialize_function_t serialize_pool, unserialize_pool,
- unserialize_aligned_pool;
-
-#define pool_serialize(m,v,f) \
- serialize ((m), serialize_pool, (v), sizeof ((v)[0]), (f))
-
-#define pool_unserialize(m,v,f) \
- unserialize ((m), unserialize_pool, (v), sizeof ((*(v))[0]), (f))
-
-#define pool_unserialize_aligned(m,v,a,f) \
- unserialize ((m), unserialize_aligned_pool, (v), sizeof ((*(v))[0]), (a), (f))
-
-/* Serialize heaps. */
-serialize_function_t serialize_heap, unserialize_heap;
-
-void serialize_bitmap (serialize_main_t * m, uword * b);
-uword *unserialize_bitmap (serialize_main_t * m);
-
-void serialize_cstring (serialize_main_t * m, char *string);
-void unserialize_cstring (serialize_main_t * m, char **string);
-
-void serialize_close (serialize_main_t * m);
-void unserialize_close (serialize_main_t * m);
-
-void serialize_open_data (serialize_main_t * m, u8 * data,
- uword n_data_bytes);
-void unserialize_open_data (serialize_main_t * m, u8 * data,
- uword n_data_bytes);
-
-/* Starts serialization with expanding vector as buffer. */
-void serialize_open_vector (serialize_main_t * m, u8 * vector);
-
-/* Serialization is done: returns vector buffer to caller. */
-void *serialize_close_vector (serialize_main_t * m);
-
-void unserialize_open_vector (serialize_main_t * m, u8 * vector);
-
-#ifdef CLIB_UNIX
-clib_error_t *serialize_open_unix_file (serialize_main_t * m, char *file);
-clib_error_t *unserialize_open_unix_file (serialize_main_t * m, char *file);
-
-void serialize_open_unix_file_descriptor (serialize_main_t * m, int fd);
-void unserialize_open_unix_file_descriptor (serialize_main_t * m, int fd);
-#endif /* CLIB_UNIX */
-
-/* Main routines. */
-clib_error_t *serialize (serialize_main_t * m, ...);
-clib_error_t *unserialize (serialize_main_t * m, ...);
-clib_error_t *va_serialize (serialize_main_t * m, va_list * va);
-
-void serialize_magic (serialize_main_t * m, void *magic, u32 magic_bytes);
-void unserialize_check_magic (serialize_main_t * m, void *magic,
- u32 magic_bytes);
-
-#endif /* included_clib_serialize_h */
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */