|
Packit Service |
e7ae83 |
#ifndef NFTABLES_GMPUTIL_H
|
|
Packit Service |
e7ae83 |
#define NFTABLES_GMPUTIL_H
|
|
Packit Service |
e7ae83 |
|
|
Packit Service |
e7ae83 |
#include <config.h>
|
|
Packit Service |
e7ae83 |
|
|
Packit Service |
e7ae83 |
#ifdef HAVE_LIBGMP
|
|
Packit Service |
e7ae83 |
#include <gmp.h>
|
|
Packit Service |
e7ae83 |
#else
|
|
Packit Service |
e7ae83 |
#include <mini-gmp.h>
|
|
Packit Service |
e7ae83 |
#include <stdarg.h>
|
|
Packit Service |
e7ae83 |
#include <stdio.h>
|
|
Packit Service |
e7ae83 |
/* mini-gmp doesn't come with gmp_vfprintf, so we use our own minimal variant */
|
|
Packit Service |
e7ae83 |
extern int mpz_vfprintf(FILE *fp, const char *format, va_list args);
|
|
Packit Service |
e7ae83 |
#define gmp_vfprintf mpz_vfprintf
|
|
Packit Service |
e7ae83 |
#endif
|
|
Packit Service |
e7ae83 |
|
|
Packit Service |
e7ae83 |
#include <inttypes.h>
|
|
Packit Service |
e7ae83 |
#include <asm/byteorder.h>
|
|
Packit Service |
e7ae83 |
|
|
Packit Service |
e7ae83 |
enum mpz_word_order {
|
|
Packit Service |
e7ae83 |
MPZ_MSWF = 1,
|
|
Packit Service |
e7ae83 |
MPZ_LSWF = -1,
|
|
Packit Service |
e7ae83 |
};
|
|
Packit Service |
e7ae83 |
|
|
Packit Service |
e7ae83 |
#ifdef __LITTLE_ENDIAN_BITFIELD
|
|
Packit Service |
e7ae83 |
#define MPZ_HWO MPZ_LSWF
|
|
Packit Service |
e7ae83 |
#elif defined(__BIG_ENDIAN_BITFIELD)
|
|
Packit Service |
e7ae83 |
#define MPZ_HWO MPZ_MSWF
|
|
Packit Service |
e7ae83 |
#else
|
|
Packit Service |
e7ae83 |
#error "byteorder undefined"
|
|
Packit Service |
e7ae83 |
#endif
|
|
Packit Service |
e7ae83 |
|
|
Packit Service |
e7ae83 |
enum mpz_byte_order {
|
|
Packit Service |
e7ae83 |
MPZ_BIG_ENDIAN = 1,
|
|
Packit Service |
e7ae83 |
MPZ_HOST_ENDIAN = 0,
|
|
Packit Service |
e7ae83 |
MPZ_LITTLE_ENDIAN = -1,
|
|
Packit Service |
e7ae83 |
};
|
|
Packit Service |
e7ae83 |
|
|
Packit Service |
e7ae83 |
extern void mpz_bitmask(mpz_t rop, unsigned int width);
|
|
Packit Service |
e7ae83 |
extern void mpz_init_bitmask(mpz_t rop, unsigned int width);
|
|
Packit Service |
e7ae83 |
extern void mpz_prefixmask(mpz_t rop, unsigned int width, unsigned int prefix_len);
|
|
Packit Service |
e7ae83 |
|
|
Packit Service |
e7ae83 |
extern void mpz_lshift_ui(mpz_t rop, unsigned int n);
|
|
Packit Service |
e7ae83 |
extern void mpz_rshift_ui(mpz_t rop, unsigned int n);
|
|
Packit Service |
e7ae83 |
|
|
Packit Service |
e7ae83 |
extern uint64_t mpz_get_uint64(const mpz_t op);
|
|
Packit Service |
e7ae83 |
extern uint32_t mpz_get_uint32(const mpz_t op);
|
|
Packit Service |
e7ae83 |
extern uint16_t mpz_get_uint16(const mpz_t op);
|
|
Packit Service |
e7ae83 |
extern uint8_t mpz_get_uint8(const mpz_t op);
|
|
Packit Service |
e7ae83 |
|
|
Packit Service |
e7ae83 |
extern uint32_t mpz_get_be32(const mpz_t op);
|
|
Packit Service |
e7ae83 |
extern uint16_t mpz_get_be16(const mpz_t op);
|
|
Packit Service |
e7ae83 |
|
|
Packit Service |
e7ae83 |
enum byteorder;
|
|
Packit Service |
e7ae83 |
extern void *__mpz_export_data(void *data, const mpz_t op,
|
|
Packit Service |
e7ae83 |
enum byteorder byteorder, unsigned int len);
|
|
Packit Service |
e7ae83 |
extern void __mpz_import_data(mpz_t rop, const void *data,
|
|
Packit Service |
e7ae83 |
enum byteorder byteorder, unsigned int len);
|
|
Packit Service |
e7ae83 |
extern void __mpz_switch_byteorder(mpz_t rop, unsigned int len);
|
|
Packit Service |
e7ae83 |
|
|
Packit Service |
e7ae83 |
#include <assert.h>
|
|
Packit Service |
e7ae83 |
#include <datatype.h>
|
|
Packit Service |
e7ae83 |
|
|
Packit Service |
e7ae83 |
#define mpz_export_data(data, op, byteorder, len) \
|
|
Packit Service |
e7ae83 |
{ \
|
|
Packit Service |
e7ae83 |
assert(len > 0); \
|
|
Packit Service |
e7ae83 |
__mpz_export_data(data, op, byteorder, len); \
|
|
Packit Service |
e7ae83 |
}
|
|
Packit Service |
e7ae83 |
|
|
Packit Service |
e7ae83 |
#define mpz_import_data(rop, data, byteorder, len) \
|
|
Packit Service |
e7ae83 |
{ \
|
|
Packit Service |
e7ae83 |
assert(len > 0); \
|
|
Packit Service |
e7ae83 |
__mpz_import_data(rop, data, byteorder, len); \
|
|
Packit Service |
e7ae83 |
}
|
|
Packit Service |
e7ae83 |
|
|
Packit Service |
e7ae83 |
#define mpz_switch_byteorder(rop, len) \
|
|
Packit Service |
e7ae83 |
{ \
|
|
Packit Service |
e7ae83 |
assert(len > 0); \
|
|
Packit Service |
e7ae83 |
__mpz_switch_byteorder(rop, len); \
|
|
Packit Service |
e7ae83 |
}
|
|
Packit Service |
e7ae83 |
|
|
Packit Service |
e7ae83 |
#endif /* NFTABLES_GMPUTIL_H */
|