summaryrefslogtreecommitdiff
path: root/src/libosfp_common.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libosfp_common.h')
-rw-r--r--src/libosfp_common.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/src/libosfp_common.h b/src/libosfp_common.h
new file mode 100644
index 0000000..bc182bf
--- /dev/null
+++ b/src/libosfp_common.h
@@ -0,0 +1,142 @@
+#ifndef __LIBOSFP_COMMON_H__
+#define __LIBOSFP_COMMON_H__
+
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <malloc.h>
+#include <stdarg.h>
+#include <time.h>
+
+#include <linux/in.h>
+#include <linux/if_ether.h>
+#include <linux/ip.h>
+#include <linux/ipv6.h>
+#include <linux/tcp.h>
+#include <sys/fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "utarray.h"
+#include "uthash.h"
+#include "utlist.h"
+#include "utringbuffer.h"
+#include "utstack.h"
+#include "utstring.h"
+
+#include "cJSON.h"
+
+#define LIBOSFP_OS_CLASS_NAME_WINDOWS "Windows"
+#define LIBOSFP_OS_CLASS_NAME_LINUX "Linux"
+#define LIBOSFP_OS_CLASS_NAME_MAC_OS "Mac OS"
+#define LIBOSFP_OS_CLASS_NAME_IOS "iOS"
+#define LIBOSFP_OS_CLASS_NAME_ANDROID "Android"
+
+#define LIBOSFP_TCP_OPTLENMAX 64
+#define LIBOSFP_TCP_OPTMAX 20
+
+#define LIBOSFP_ETHERNET_HEADER_LEN 14
+#define LIBOSFP_VLAN_HEADER_LEN 4
+#define LIBOSFP_IPV4_HEADER_LEN 20
+#define LIBOSFP_IPV6_HEADER_LEN 40
+#define LIBOSFP_TCP_HEADER_LEN 20
+
+
+//# TCP Options (opt_type) - http://www.iana.org/assignments/tcp-parameters
+#define LIBOSFP_TCP_OPT_EOL 0 //# end of option list
+#define LIBOSFP_TCP_OPT_NOP 1 //# no operation
+#define LIBOSFP_TCP_OPT_MSS 2 //# maximum segment size
+#define LIBOSFP_TCP_OPT_WSCALE 3 //# window scale factor, RFC 1072
+#define LIBOSFP_TCP_OPT_SACKOK 4 //# SACK permitted, RFC 2018
+#define LIBOSFP_TCP_OPT_SACK 5 //# SACK, RFC 2018
+#define LIBOSFP_TCP_OPT_ECHO 6 //# echo (obsolete), RFC 1072
+#define LIBOSFP_TCP_OPT_ECHOREPLY 7 //# echo reply (obsolete), RFC 1072
+#define LIBOSFP_TCP_OPT_TIMESTAMP 8 //# timestamps, RFC 1323
+#define LIBOSFP_TCP_OPT_POCONN 9 //# partial order conn, RFC 1693
+#define LIBOSFP_TCP_OPT_POSVC 10 //# partial order service, RFC 1693
+#define LIBOSFP_TCP_OPT_CC 11 //# connection count, RFC 1644
+#define LIBOSFP_TCP_OPT_CCNEW 12 //# CC.NEW, RFC 1644
+#define LIBOSFP_TCP_OPT_CCECHO 13 //# CC.ECHO, RFC 1644
+#define LIBOSFP_TCP_OPT_ALTSUM 14 //# alt checksum request, RFC 1146
+#define LIBOSFP_TCP_OPT_ALTSUMDATA 15 //# alt checksum data, RFC 1146
+#define LIBOSFP_TCP_OPT_SKEETER 16 //# Skeeter
+#define LIBOSFP_TCP_OPT_BUBBA 17 //# Bubba
+#define LIBOSFP_TCP_OPT_TRAILSUM 18 //# trailer checksum
+#define LIBOSFP_TCP_OPT_MD5 19 //# MD5 signature, RFC 2385
+#define LIBOSFP_TCP_OPT_SCPS 20 //# SCPS capabilities
+#define LIBOSFP_TCP_OPT_SNACK 21 //# selective negative acks
+#define LIBOSFP_TCP_OPT_REC 22 //# record boundaries
+#define LIBOSFP_TCP_OPT_CORRUPT 23 //# corruption experienced
+#define LIBOSFP_TCP_OPT_SNAP 24 //# SNAP
+#define LIBOSFP_TCP_OPT_TCPCOMP 26 //# TCP compression filter
+#define LIBOSFP_TCP_OPT_MAX 27 //# Quick-Start Response
+#define LIBOSFP_TCP_OPT_USRTO 28 //# User Timeout Option (also, other known unauthorized use) [***][1] [RFC5482]
+#define LIBOSFP_TCP_OPT_AUTH 29 //# TCP Authentication Option (TCP-AO) [RFC5925]
+#define LIBOSFP_TCP_OPT_MULTIPATH 30 //# Multipath TCP (MPTCP)
+#define LIBOSFP_TCP_OPT_FASTOPEN 34 //# TCP Fast Open Cookie [RFC7413]
+#define LIBOSFP_TCP_OPY_ENCNEG 69 //# Encryption Negotiation (TCP-ENO) [RFC8547]
+#define LIBOSFP_TCP_OPT_EXP1 253 //# RFC3692-style Experiment 1 (also improperly used for shipping products)
+#define LIBOSFP_TCP_OPT_EXP2 254 //# RFC3692-style Experiment 2 (also improperly used for shipping products)
+
+#define LIBOSFP_TCP_OPT_SACKOK_LEN 2
+#define LIBOSFP_TCP_OPT_WS_LEN 3
+#define LIBOSFP_TCP_OPT_TS_LEN 10
+#define LIBOSFP_TCP_OPT_MSS_LEN 4
+#define LIBOSFP_TCP_OPT_SACK_MIN_LEN 10 /* hdr 2, 1 pair 8 = 10 */
+#define LIBOSFP_TCP_OPT_SACK_MAX_LEN 34 /* hdr 2, 4 pair 32= 34 */
+#define LIBOSFP_TCP_OPT_TFO_MIN_LEN 4 /* kind, len, 2 bytes cookie: 4 */
+#define LIBOSFP_TCP_OPT_TFO_MAX_LEN 18 /* kind, len, 18 */
+
+
+#define LIBOSFP_WRITE_STRING_TO_BUF(ret, buf, size, off, ...) do { \
+ ret = snprintf((char *)buf + off, \
+ size - off, \
+ __VA_ARGS__); \
+ if (ret >= 0) { \
+ if ( (off + ret) >= size) { \
+ off = size - 1; \
+ } else { \
+ off += ret; \
+ } \
+ } \
+ } while (0)
+
+#define LIBOSFP_BIT_U32(n) (1UL << (n))
+
+typedef enum libosfp_error_code {
+ LIBOSFP_NOERR,
+ LIBOSFP_EINVAL,
+ LIBOSFP_ENOMEM,
+ LIBOSFP_ERR_SCORE_DB_READ_FILE,
+ LIBOSFP_ERR_SCORE_DB_PARSE_FILE,
+ LIBOSFP_ERR_SCORE_DB_UNSUPPORTED,
+
+ LIBOSFP_ERR_FINGERPRINTING_UNSUPPORTED,
+
+} libosfp_error_code_t;
+
+typedef enum libosfp_os_class_id {
+ LIBOSFP_OS_CLASS_WINDOWS,
+ LIBOSFP_OS_CLASS_LINUX,
+ LIBOSFP_OS_CLASS_MAC_OS,
+ LIBOSFP_OS_CLASS_IOS,
+ LIBOSFP_OS_CLASS_ANDROID,
+ LIBOSFP_OS_CLASS_MAX,
+} libosfp_os_class_id_t;
+
+#define LIBOSFP_OS_CLASS_FLAG_WINDOWS LIBOSFP_BIT_U32(LIBOSFP_OS_CLASS_WINDOWS)
+#define LIBOSFP_OS_CLASS_FLAG_LINUX LIBOSFP_BIT_U32(LIBOSFP_OS_CLASS_LINUX)
+#define LIBOSFP_OS_CLASS_FLAG_MAC_OS LIBOSFP_BIT_U32(LIBOSFP_OS_CLASS_MAC_OS)
+#define LIBOSFP_OS_CLASS_FLAG_IOS LIBOSFP_BIT_U32(LIBOSFP_OS_CLASS_IOS)
+#define LIBOSFP_OS_CLASS_FLAG_ANDROID LIBOSFP_BIT_U32(LIBOSFP_OS_CLASS_ANDROID)
+
+typedef struct libosfp_score {
+ unsigned int likely_os_class;
+ unsigned int likely_score;
+ unsigned int os_class_score[LIBOSFP_OS_CLASS_MAX];
+} libosfp_score_t;
+
+libosfp_os_class_id_t libosfp_os_class_name_to_id(char *name);
+const char *libosfp_os_class_id_to_name(libosfp_os_class_id_t os_class);
+
+#endif