]> git.ipfire.org Git - people/ms/strongswan.git/blame - src/libtnccs/tnc/tnccs/tnccs.h
Make access requestor IP address available to TNC server
[people/ms/strongswan.git] / src / libtnccs / tnc / tnccs / tnccs.h
CommitLineData
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
27typedef struct tnccs_t tnccs_t;
28typedef enum tnccs_type_t tnccs_type_t;
3e563528 29typedef 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 */
48typedef 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 */
54enum 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 */
65enum 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 */
77extern enum_name_t *tnccs_type_names;
78
3e563528
AS
79/**
80 * TNCCS public interface
81 */
82struct 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 160typedef 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
180typedef 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_ @}*/