make TNC client authentication type available to IMVs
[strongswan.git] / src / libtnccs / tnc / tnccs / tnccs.h
1 /*
2 * Copyright (C) 2010-2013 Andreas Steffen
3 * HSR Hochschule fuer Technik Rapperswil
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * for more details.
14 */
15
16 /**
17 * @defgroup tnccs tnccs
18 * @ingroup tnc
19 *
20 * @defgroup tnccst tnccs
21 * @{ @ingroup tnccs
22 */
23
24 #ifndef TNCCS_H_
25 #define TNCCS_H_
26
27 typedef struct tnccs_t tnccs_t;
28 typedef enum tnccs_type_t tnccs_type_t;
29 typedef enum tnc_ift_type_t tnc_ift_type_t;
30
31 #include <tncif.h>
32 #include <tncifimc.h>
33 #include <tncifimv.h>
34
35 #include <library.h>
36 #include <plugins/plugin.h>
37
38 #include <tls.h>
39
40 /**
41 * Type of TNC Client/Server protocol
42 */
43 enum tnccs_type_t {
44 TNCCS_UNKNOWN,
45 TNCCS_1_1,
46 TNCCS_SOH,
47 TNCCS_2_0,
48 TNCCS_DYNAMIC
49 };
50
51 /**
52 * Type of TNC Transport protocol
53 */
54 enum tnc_ift_type_t {
55 TNC_IFT_UNKNOWN,
56 TNC_IFT_EAP_1_0,
57 TNC_IFT_EAP_1_1,
58 TNC_IFT_EAP_2_0,
59 TNC_IFT_TLS_1_0,
60 TNC_IFT_TLS_2_0
61 };
62
63 /**
64 * enum names for tnccs_type_t.
65 */
66 extern enum_name_t *tnccs_type_names;
67
68 /**
69 * TNCCS public interface
70 */
71 struct tnccs_t {
72
73 /**
74 * Implements tls_t
75 */
76 tls_t tls;
77
78 /**
79 * Get underlying TNC IF-T transport protocol
80 */
81 tnc_ift_type_t (*get_transport)(tnccs_t *this);
82
83 /**
84 * Set underlying TNC IF-T transport protocol
85
86 */
87 void (*set_transport)(tnccs_t *this, tnc_ift_type_t transport);
88
89 /**
90 * Get type of TNC Client authentication
91 */
92 u_int32_t (*get_auth_type)(tnccs_t *this);
93
94 /**
95 * Set type of TNC Client authentication
96 */
97 void (*set_auth_type)(tnccs_t *this, u_int32_t auth_type);
98
99 };
100
101 /**
102 * Constructor definition for a pluggable TNCCS protocol implementation.
103 *
104 * @param is_server TRUE if TNC Server, FALSE if TNC Client
105 * @param server Server identity
106 * @param peer Client identity
107 * @param transport Underlying TNC IF-T transport protocol used
108 * @return implementation of the tnccs_t interface
109 */
110 typedef tnccs_t *(*tnccs_constructor_t)(bool is_server,
111 identification_t *server,
112 identification_t *peer,
113 tnc_ift_type_t transport);
114
115 /**
116 * Callback function adding a message to a TNCCS batch
117 *
118 * @param imc_id ID of IMC or TNC_IMCID_ANY
119 * @param imc_id ID of IMV or TNC_IMVID_ANY
120 * @param msg_flags message flags
121 * @param msg message to be added
122 * @param msg_len message length
123 * @param msg_vid message vendor ID
124 * @param msg_subtype message subtype
125 * @return return code
126 */
127 typedef TNC_Result (*tnccs_send_message_t)(tnccs_t* tncss,
128 TNC_IMCID imc_id,
129 TNC_IMVID imv_id,
130 TNC_UInt32 msg_flags,
131 TNC_BufferReference msg,
132 TNC_UInt32 msg_len,
133 TNC_VendorID msg_vid,
134 TNC_MessageSubtype msg_subtype);
135
136 #endif /** TNCCS_H_ @}*/