aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/interceptor/sshgetput.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/interceptor/sshgetput.h')
-rw-r--r--drivers/interceptor/sshgetput.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/drivers/interceptor/sshgetput.h b/drivers/interceptor/sshgetput.h
new file mode 100644
index 0000000..9e009a4
--- /dev/null
+++ b/drivers/interceptor/sshgetput.h
@@ -0,0 +1,108 @@
+/* Netfilter Driver for IPSec VPN Client
+ *
+ * Copyright(c) 2012 Samsung Electronics
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+/*
+ * sshgetput.h
+ *
+ * Macros for enconding/decoding of integers to character data.
+ *
+ */
+
+#ifndef SSHGETPUT_H
+#define SSHGETPUT_H
+
+
+#define SSH_GET_8BIT(cp) (*(unsigned char *)(cp))
+#define SSH_PUT_8BIT(cp, value) (*(unsigned char *)(cp)) = \
+ (unsigned char)(value)
+
+#define SSH_GET_4BIT_LOW(cp) (*(unsigned char *)(cp) & 0x0f)
+#define SSH_GET_4BIT_HIGH(cp) ((*(unsigned char *)(cp) >> 4) & 0x0f)
+#define SSH_PUT_4BIT_LOW(cp, value) (*(unsigned char *)(cp) = \
+ (unsigned char)((*(unsigned char *)(cp) & 0xf0) | ((value) & 0x0f)))
+#define SSH_PUT_4BIT_HIGH(cp, value) (*(unsigned char *)(cp) = \
+ (unsigned char)((*(unsigned char *)(cp) & 0x0f) | (((value) & 0x0f) << 4)))
+
+#ifdef SSHUINT64_IS_64BITS
+
+#define SSH_GET_64BIT(cp) (((SshUInt64)SSH_GET_32BIT((cp)) << 32) | \
+ ((SshUInt64)SSH_GET_32BIT((cp) + 4)))
+#define SSH_PUT_64BIT(cp, value) do { \
+ SSH_PUT_32BIT((cp), (SshUInt32)((SshUInt64)(value) >> 32)); \
+ SSH_PUT_32BIT((cp) + 4, (SshUInt32)(value)); } while (0)
+
+#else /* SSHUINT64_IS_64BITS */
+
+#define SSH_GET_64BIT(cp) ((SshUInt64)SSH_GET_32BIT((cp) + 4))
+#define SSH_PUT_64BIT(cp, value) do { \
+ SSH_PUT_32BIT((cp), 0L); \
+ SSH_PUT_32BIT((cp) + 4, (SshUInt32)(value)); } while (0)
+#define SSH_GET_64BIT_LSB_FIRST(cp) ((SshUInt64)SSH_GET_32BIT((cp)))
+#define SSH_PUT_64BIT_LSB_FIRST(cp, value) do { \
+ SSH_PUT_32BIT_LSB_FIRST((cp), (SshUInt32)(value)); \
+ SSH_PUT_32BIT_LSB_FIRST((cp) + 4, 0L); } while (0)
+
+#define SSH_GET_40BIT(cp) ((SshUInt64)SSH_GET_32BIT((cp) + 1))
+#define SSH_PUT_40BIT(cp, value) do { \
+ SSH_PUT_8BIT((cp), 0); \
+ SSH_PUT_32BIT((cp) + 1, (SshUInt32)(value)); } while (0)
+#define SSH_GET_40BIT_LSB_FIRST(cp) ((SshUInt64)SSH_GET_32BIT_LSB_FIRST((cp)))
+#define SSH_PUT_40BIT_LSB_FIRST(cp, value) do { \
+ SSH_PUT_32BIT_LSB_FIRST((cp), (SshUInt32)(value)); \
+ SSH_PUT_8BIT((cp) + 4, 0); } while (0)
+
+#endif /* SSHUINT64_IS_64BITS */
+
+
+/*------------ macros for storing/extracting msb first words -------------*/
+
+#define SSH_GET_32BIT(cp) \
+ ((((unsigned long)((unsigned char *)(cp))[0]) << 24) | \
+ (((unsigned long)((unsigned char *)(cp))[1]) << 16) | \
+ (((unsigned long)((unsigned char *)(cp))[2]) << 8) | \
+ ((unsigned long)((unsigned char *)(cp))[3]))
+
+#define SSH_GET_16BIT(cp) \
+ ((SshUInt16) ((((unsigned long)((unsigned char *)(cp))[0]) << 8) | \
+ ((unsigned long)((unsigned char *)(cp))[1])))
+
+#define SSH_PUT_32BIT(cp, value) do { \
+ ((unsigned char *)(cp))[0] = (unsigned char)((value) >> 24); \
+ ((unsigned char *)(cp))[1] = (unsigned char)((value) >> 16); \
+ ((unsigned char *)(cp))[2] = (unsigned char)((value) >> 8); \
+ ((unsigned char *)(cp))[3] = (unsigned char)(value); } while (0)
+
+#define SSH_PUT_16BIT(cp, value) do { \
+ ((unsigned char *)(cp))[0] = (unsigned char)((value) >> 8); \
+ ((unsigned char *)(cp))[1] = (unsigned char)(value); } while (0)
+
+/*------------ macros for storing/extracting lsb first words -------------*/
+
+#define SSH_GET_32BIT_LSB_FIRST(cp) \
+ (((unsigned long)((unsigned char *)(cp))[0]) | \
+ (((unsigned long)((unsigned char *)(cp))[1]) << 8) | \
+ (((unsigned long)((unsigned char *)(cp))[2]) << 16) | \
+ (((unsigned long)((unsigned char *)(cp))[3]) << 24))
+
+#define SSH_GET_16BIT_LSB_FIRST(cp) \
+ ((SshUInt16) (((unsigned long)((unsigned char *)(cp))[0]) | \
+ (((unsigned long)((unsigned char *)(cp))[1]) << 8)))
+
+#define SSH_PUT_32BIT_LSB_FIRST(cp, value) do { \
+ ((unsigned char *)(cp))[0] = (unsigned char)(value); \
+ ((unsigned char *)(cp))[1] = (unsigned char)((value) >> 8); \
+ ((unsigned char *)(cp))[2] = (unsigned char)((value) >> 16); \
+ ((unsigned char *)(cp))[3] = (unsigned char)((value) >> 24); } while (0)
+
+#define SSH_PUT_16BIT_LSB_FIRST(cp, value) do { \
+ ((unsigned char *)(cp))[0] = (unsigned char)(value); \
+ ((unsigned char *)(cp))[1] = (unsigned char)((value) >> 8); } while (0)
+
+#endif /* GETPUT_H */