summaryrefslogtreecommitdiff
path: root/src/libtnccs/tnc/tnccs/tnccs.h
blob: eefd5565db680943bff4efef568fe6cdfeaec467 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/*
 * Copyright (C) 2010-2013 Andreas Steffen
 * HSR Hochschule fuer Technik Rapperswil
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2 of the License, or (at your
 * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 */

/**
 * @defgroup tnccs tnccs
 * @ingroup tnc
 *
 * @defgroup tnccst tnccs
 * @{ @ingroup tnccs
 */

#ifndef TNCCS_H_
#define TNCCS_H_

typedef struct tnccs_t tnccs_t;
typedef enum tnccs_type_t tnccs_type_t;
typedef enum tnc_ift_type_t tnc_ift_type_t;

#include <tncif.h>
#include <tncifimc.h>
#include <tncifimv.h>

#include <library.h>
#include <plugins/plugin.h>

#include <tls.h>

/**
 * Callback function to communicate action recommendation and evaluation result
 * generated by TNC server
 *
 * @param rec		TNC Action Recommendation
 * @param eval		TNC Evaluation Result
 * @return			TRUE to terminate TNCCS connection, FALSE to keep it
 */
typedef bool (*tnccs_cb_t)(TNC_IMV_Action_Recommendation rec,
						   TNC_IMV_Evaluation_Result eval);

/**
 * Type of TNC Client/Server protocol
 */
enum tnccs_type_t {
	TNCCS_UNKNOWN,
	TNCCS_1_1,
	TNCCS_SOH,
	TNCCS_2_0,
	TNCCS_DYNAMIC
};

/**
 * Type of TNC Transport protocol
 */
enum tnc_ift_type_t {
	TNC_IFT_UNKNOWN,
	TNC_IFT_EAP_1_0,
	TNC_IFT_EAP_1_1,
	TNC_IFT_EAP_2_0,
	TNC_IFT_TLS_1_0,
	TNC_IFT_TLS_2_0
};

/**
 * enum names for tnccs_type_t.
 */
extern enum_name_t *tnccs_type_names;

/**
 * TNCCS public interface
 */
struct tnccs_t {

	/**
	 * Implements tls_t
	 */
	tls_t tls;

	/**
	 * Get underlying TNC IF-T transport protocol
	 *
	 * @return				TNC IF-T transport protocol
	 */
	tnc_ift_type_t (*get_transport)(tnccs_t *this);

	/**
	 * Set underlying TNC IF-T transport protocol
	 *
	 * @param transport		TNC IF-T transport protocol
	 */
	void (*set_transport)(tnccs_t *this, tnc_ift_type_t transport);

	/**
	 * Get type of TNC Client authentication
	 *
	 * @return				TNC Client authentication type
	 */
	u_int32_t (*get_auth_type)(tnccs_t *this);

	/**
	 * Set type of TNC Client authentication
	 *
	 * @param auth_type		TNC Client authentication type
	 */
	void (*set_auth_type)(tnccs_t *this, u_int32_t auth_type);

	/**
	 * Get PDP server name and port number
	 *
	 * @param port		PDP port number
	 * @return			PDP server name
	 */
	chunk_t (*get_pdp_server)(tnccs_t *this, u_int16_t *port);

	/**
	 * Get a new reference to the TNCCS object.
	 *
	 * @return			this, with an increased refcount
	 */
	tnccs_t* (*get_ref)(tnccs_t *this);

};

/**
 * Constructor definition for a pluggable TNCCS protocol implementation.
 *
 * @param is_server		TRUE if TNC Server, FALSE if TNC Client
 * @param server		Server identity
 * @param peer			Client identity
 * @param transport		Underlying TNC IF-T transport protocol used
 * @param cb			Callback function if TNC Server, NULL if TNC Client
 * @return				implementation of the tnccs_t interface
 */
typedef tnccs_t *(*tnccs_constructor_t)(bool is_server,
										identification_t *server,
										identification_t *peer,
										tnc_ift_type_t transport,
										tnccs_cb_t cb);

/**
 * Callback function adding a message to a TNCCS batch
 *
 * @param imc_id		ID of IMC or TNC_IMCID_ANY
 * @param imc_id		ID of IMV or TNC_IMVID_ANY
 * @param msg_flags		message flags
 * @param msg			message to be added
 * @param msg_len		message length
 * @param msg_vid		message vendor ID
 * @param msg_subtype	message subtype
 * @return				return code
 */
typedef TNC_Result (*tnccs_send_message_t)(tnccs_t* tncss,
										  TNC_IMCID imc_id,
										  TNC_IMVID imv_id,
										  TNC_UInt32 msg_flags,
										  TNC_BufferReference msg,
										  TNC_UInt32 msg_len,
									 	  TNC_VendorID msg_vid,
										  TNC_MessageSubtype msg_subtype);

#endif /** TNCCS_H_ @}*/