]>
Commit | Line | Data |
---|---|---|
4e8e74fc | 1 | /* |
00cd79b6 | 2 | * Copyright (C) 2010-2015 Andreas Steffen |
4e8e74fc AS |
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 | |
11a6f299 MW |
18 | * @ingroup tnc |
19 | * | |
20 | * @defgroup tnccst tnccs | |
21 | * @{ @ingroup tnccs | |
4e8e74fc AS |
22 | */ |
23 | ||
24 | #ifndef TNCCS_H_ | |
25 | #define TNCCS_H_ | |
26 | ||
e50c8535 AS |
27 | typedef struct tnccs_t tnccs_t; |
28 | typedef enum tnccs_type_t tnccs_type_t; | |
3e563528 | 29 | typedef enum tnc_ift_type_t tnc_ift_type_t; |
e50c8535 | 30 | |
7c4d4d20 AS |
31 | #include <tncif.h> |
32 | #include <tncifimc.h> | |
33 | #include <tncifimv.h> | |
34 | ||
3e5664ed | 35 | #include <library.h> |
e50c8535 | 36 | #include <plugins/plugin.h> |
2a647d5d | 37 | |
3e563528 AS |
38 | #include <tls.h> |
39 | ||
12b3db50 AS |
40 | /** |
41 | * Callback function to communicate action recommendation and evaluation result | |
42 | * generated by TNC server | |
43 | * | |
44 | * @param rec TNC Action Recommendation | |
45 | * @param eval TNC Evaluation Result | |
46 | * @return TRUE to terminate TNCCS connection, FALSE to keep it | |
47 | */ | |
48 | typedef bool (*tnccs_cb_t)(TNC_IMV_Action_Recommendation rec, | |
49 | TNC_IMV_Evaluation_Result eval); | |
50 | ||
4e8e74fc AS |
51 | /** |
52 | * Type of TNC Client/Server protocol | |
53 | */ | |
54 | enum tnccs_type_t { | |
f652995b | 55 | TNCCS_UNKNOWN, |
4e8e74fc AS |
56 | TNCCS_1_1, |
57 | TNCCS_SOH, | |
f652995b AS |
58 | TNCCS_2_0, |
59 | TNCCS_DYNAMIC | |
4e8e74fc AS |
60 | }; |
61 | ||
3e563528 AS |
62 | /** |
63 | * Type of TNC Transport protocol | |
64 | */ | |
65 | enum tnc_ift_type_t { | |
66 | TNC_IFT_UNKNOWN, | |
67 | TNC_IFT_EAP_1_0, | |
68 | TNC_IFT_EAP_1_1, | |
69 | TNC_IFT_EAP_2_0, | |
70 | TNC_IFT_TLS_1_0, | |
71 | TNC_IFT_TLS_2_0 | |
72 | }; | |
73 | ||
4e8e74fc AS |
74 | /** |
75 | * enum names for tnccs_type_t. | |
76 | */ | |
77 | extern enum_name_t *tnccs_type_names; | |
78 | ||
3e563528 AS |
79 | /** |
80 | * TNCCS public interface | |
81 | */ | |
82 | struct tnccs_t { | |
83 | ||
84 | /** | |
85 | * Implements tls_t | |
86 | */ | |
87 | tls_t tls; | |
88 | ||
00cd79b6 AS |
89 | /** |
90 | * Get server IP address | |
91 | * | |
92 | * @return Server IP address | |
93 | */ | |
94 | host_t* (*get_server_ip)(tnccs_t *this); | |
95 | ||
96 | /** | |
97 | * Get peer IP address | |
98 | * | |
99 | * @return Peer IP address | |
100 | */ | |
101 | host_t* (*get_peer_ip)(tnccs_t *this); | |
102 | ||
3e563528 AS |
103 | /** |
104 | * Get underlying TNC IF-T transport protocol | |
9b4a8e1c AS |
105 | * |
106 | * @return TNC IF-T transport protocol | |
3e563528 AS |
107 | */ |
108 | tnc_ift_type_t (*get_transport)(tnccs_t *this); | |
109 | ||
110 | /** | |
111 | * Set underlying TNC IF-T transport protocol | |
9b4a8e1c AS |
112 | * |
113 | * @param transport TNC IF-T transport protocol | |
3e563528 AS |
114 | */ |
115 | void (*set_transport)(tnccs_t *this, tnc_ift_type_t transport); | |
116 | ||
2a421163 AS |
117 | /** |
118 | * Get type of TNC Client authentication | |
9b4a8e1c AS |
119 | * |
120 | * @return TNC Client authentication type | |
2a421163 AS |
121 | */ |
122 | u_int32_t (*get_auth_type)(tnccs_t *this); | |
123 | ||
124 | /** | |
125 | * Set type of TNC Client authentication | |
9b4a8e1c AS |
126 | * |
127 | * @param auth_type TNC Client authentication type | |
2a421163 AS |
128 | */ |
129 | void (*set_auth_type)(tnccs_t *this, u_int32_t auth_type); | |
130 | ||
3588299f AS |
131 | /** |
132 | * Get PDP server name and port number | |
133 | * | |
134 | * @param port PDP port number | |
135 | * @return PDP server name | |
136 | */ | |
137 | chunk_t (*get_pdp_server)(tnccs_t *this, u_int16_t *port); | |
138 | ||
139 | /** | |
140 | * Get a new reference to the TNCCS object. | |
141 | * | |
142 | * @return this, with an increased refcount | |
143 | */ | |
144 | tnccs_t* (*get_ref)(tnccs_t *this); | |
145 | ||
3e563528 AS |
146 | }; |
147 | ||
4e8e74fc AS |
148 | /** |
149 | * Constructor definition for a pluggable TNCCS protocol implementation. | |
150 | * | |
6c6492d7 | 151 | * @param is_server TRUE if TNC Server, FALSE if TNC Client |
00cd79b6 AS |
152 | * @param server_id Server identity |
153 | * @param peer_id Client identity | |
154 | * @param server_ip Server IP address | |
155 | * @param peer_ip Client IP address | |
3e563528 | 156 | * @param transport Underlying TNC IF-T transport protocol used |
12b3db50 | 157 | * @param cb Callback function if TNC Server, NULL if TNC Client |
4e8e74fc AS |
158 | * @return implementation of the tnccs_t interface |
159 | */ | |
ebb87f08 | 160 | typedef tnccs_t *(*tnccs_constructor_t)(bool is_server, |
00cd79b6 AS |
161 | identification_t *server_id, |
162 | identification_t *peer_id, | |
163 | host_t *server_ip, | |
164 | host_t *peer_ip, | |
12b3db50 AS |
165 | tnc_ift_type_t transport, |
166 | tnccs_cb_t cb); | |
e50c8535 | 167 | |
2a647d5d AS |
168 | /** |
169 | * Callback function adding a message to a TNCCS batch | |
170 | * | |
a423a961 AS |
171 | * @param imc_id ID of IMC or TNC_IMCID_ANY |
172 | * @param imc_id ID of IMV or TNC_IMVID_ANY | |
dcb5c590 | 173 | * @param msg_flags message flags |
a423a961 AS |
174 | * @param msg message to be added |
175 | * @param msg_len message length | |
dcb5c590 AS |
176 | * @param msg_vid message vendor ID |
177 | * @param msg_subtype message subtype | |
178 | * @return return code | |
2a647d5d | 179 | */ |
dcb5c590 AS |
180 | typedef TNC_Result (*tnccs_send_message_t)(tnccs_t* tncss, |
181 | TNC_IMCID imc_id, | |
182 | TNC_IMVID imv_id, | |
183 | TNC_UInt32 msg_flags, | |
184 | TNC_BufferReference msg, | |
185 | TNC_UInt32 msg_len, | |
186 | TNC_VendorID msg_vid, | |
187 | TNC_MessageSubtype msg_subtype); | |
2a647d5d | 188 | |
3e5664ed | 189 | #endif /** TNCCS_H_ @}*/ |