fd3e5cabbf4109bef50f47671164ca9131c3f4df
[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 * @return TNC IF-T transport protocol
82 */
83 tnc_ift_type_t (*get_transport)(tnccs_t *this);
84
85 /**
86 * Set underlying TNC IF-T transport protocol
87 *
88 * @param transport TNC IF-T transport protocol
89 */
90 void (*set_transport)(tnccs_t *this, tnc_ift_type_t transport);
91
92 /**
93 * Get type of TNC Client authentication
94 *
95 * @return TNC Client authentication type
96 */
97 u_int32_t (*get_auth_type)(tnccs_t *this);
98
99 /**
100 * Set type of TNC Client authentication
101 *
102 * @param auth_type TNC Client authentication type
103 */
104 void (*set_auth_type)(tnccs_t *this, u_int32_t auth_type);
105
106 };
107
108 /**
109 * Constructor definition for a pluggable TNCCS protocol implementation.
110 *
111 * @param is_server TRUE if TNC Server, FALSE if TNC Client
112 * @param server Server identity
113 * @param peer Client identity
114 * @param transport Underlying TNC IF-T transport protocol used
115 * @return implementation of the tnccs_t interface
116 */
117 typedef tnccs_t *(*tnccs_constructor_t)(bool is_server,
118 identification_t *server,
119 identification_t *peer,
120 tnc_ift_type_t transport);
121
122 /**
123 * Callback function adding a message to a TNCCS batch
124 *
125 * @param imc_id ID of IMC or TNC_IMCID_ANY
126 * @param imc_id ID of IMV or TNC_IMVID_ANY
127 * @param msg_flags message flags
128 * @param msg message to be added
129 * @param msg_len message length
130 * @param msg_vid message vendor ID
131 * @param msg_subtype message subtype
132 * @return return code
133 */
134 typedef TNC_Result (*tnccs_send_message_t)(tnccs_t* tncss,
135 TNC_IMCID imc_id,
136 TNC_IMVID imv_id,
137 TNC_UInt32 msg_flags,
138 TNC_BufferReference msg,
139 TNC_UInt32 msg_len,
140 TNC_VendorID msg_vid,
141 TNC_MessageSubtype msg_subtype);
142
143 #endif /** TNCCS_H_ @}*/