openssl: OpenSSL 1.1.0 is thread-safe so we don't have to setup callbacks
[strongswan.git] / src / libstrongswan / pen / pen.h
index e6eb7fc..50e63f7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Andreas Steffen
+ * Copyright (C) 2011-2015 Andreas Steffen
  * HSR Hochschule fuer Technik Rapperswil
  *
  * This program is free software; you can redistribute it and/or modify it
@@ -15,7 +15,7 @@
 
 /**
  * @defgroup pen pen
- * @ingroup tnc
+ * @ingroup libstrongswan
  *
  * @defgroup pent pen
  * @{ @ingroup pen
 #include <library.h>
 
 typedef enum pen_t pen_t;
+typedef struct pen_type_t pen_type_t;
 
+/**
+ * Private enterprise numbers allocated by IANA.
+ *
+ * http://www.iana.org/assignments/enterprise-numbers
+ */
 enum pen_t {
-       PEN_IETF =              0x000000,       /*        0 */
-       PEN_MICROSOFT = 0x000137,       /*      311 */
-       PEN_OSC =               0x002358,       /*     9048 */
-       PEN_TCG =               0x005597,       /*    21911 */
-       PEN_FHH =               0x0080ab,       /*    32939 */
-       PEN_ITA =               0x00902a,       /*    36906 */
-       PEN_RESERVED =  0xffffff,       /* 16777215 */
+       PEN_IETF =                      0x000000,       /*        0 */
+       PEN_IBM =                       0x000002,       /*        2 */
+       PEN_MICROSOFT =         0x000137,       /*      311 */
+       PEN_REDHAT =            0x000908,       /*     2312 */
+       PEN_PWG =                       0x000A8B,       /*     2699 */
+       PEN_ALTIGA =            0x000c04,       /*     3076 */
+       PEN_OSC =                       0x002358,       /*     9048 */
+       PEN_DEBIAN =            0x002572,       /*     9586 */
+       PEN_GOOGLE =            0x002B79,       /*    11129 */
+       PEN_TCG =                       0x005597,       /*    21911 */
+       PEN_CANONICAL =         0x007132,       /*    28978 */
+       PEN_FEDORA =            0x0076C1,       /*    30401 */
+       PEN_FHH =                       0x0080ab,       /*    32939 */
+       PEN_ITA =                       0x00902a,       /*    36906 */
+       PEN_OPENPTS =           0x00950e,       /*    38158 */
+       PEN_UNASSIGNED =        0xfffffe,       /* 16777214 */
+       PEN_RESERVED =          0xffffff,       /* 16777215 */
+};
+
+/**
+ * Vendor specific type in vendor specific namespace.
+ */
+struct pen_type_t {
+       pen_t vendor_id;
+       uint32_t type;
 };
 
 /**
+ * Create a pen_type_t struct
+ *
+ * @param vendor_id            vendor ID to create a pen_type_t
+ * @param type                 type to create a pen_type_t
+ * @return                             created pen_type_t
+ */
+static inline pen_type_t pen_type_create(pen_t vendor_id, uint32_t type)
+{
+       pen_type_t pen_type = { vendor_id, type };
+       return pen_type;
+}
+
+/**
+ * Check two pen_type_t for equality.
+ *
+ * @param a                            first pen_type_t to compare
+ * @param b                            second pen_type_t to compare
+ * @return                             TRUE if a == b
+ */
+static inline bool pen_type_equals(pen_type_t a, pen_type_t b)
+{
+       return a.vendor_id == b.vendor_id && a.type == b.type;
+}
+
+/**
+ * Check if a pen_type_t matches vendor and type.
+ *
+ * @param pen_type             pen_type_t to compare
+ * @param vendor_id            vendor to check in pen_type
+ * @param type                 type to check in pen_type
+ * @return                             TRUE if vendor_id and type matches pen_type
+ */
+static inline bool pen_type_is(pen_type_t pen_type,
+                                                          pen_t vendor_id, uint32_t type)
+{
+       return pen_type.vendor_id == vendor_id && pen_type.type == type;
+}
+
+/**
  * enum names for pen_t.
  */
 extern enum_name_t *pen_names;