18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/*
28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * EAP-TNC - TNCS (IF-IMV, IF-TNCCS, and IF-TNCCS-SOH)
38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2007-2008, Jouni Malinen <j@w1.fi>
48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license.
6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details.
78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef TNCS_H
108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define TNCS_H
118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct tncs_data;
138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct tncs_data * tncs_init(void);
158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid tncs_deinit(struct tncs_data *tncs);
168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid tncs_init_connection(struct tncs_data *tncs);
178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtsize_t tncs_total_send_len(struct tncs_data *tncs);
188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtu8 * tncs_copy_send_buf(struct tncs_data *tncs, u8 *pos);
198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtchar * tncs_if_tnccs_start(struct tncs_data *tncs);
208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtchar * tncs_if_tnccs_end(void);
218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum tncs_process_res {
238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	TNCCS_PROCESS_ERROR = -1,
248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	TNCCS_PROCESS_OK_NO_RECOMMENDATION = 0,
258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	TNCCS_RECOMMENDATION_ERROR,
268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	TNCCS_RECOMMENDATION_ALLOW,
278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	TNCCS_RECOMMENDATION_NONE,
288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	TNCCS_RECOMMENDATION_ISOLATE,
298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	TNCCS_RECOMMENDATION_NO_ACCESS,
308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	TNCCS_RECOMMENDATION_NO_RECOMMENDATION
318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum tncs_process_res tncs_process_if_tnccs(struct tncs_data *tncs,
348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt					    const u8 *msg, size_t len);
358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint tncs_global_init(void);
378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid tncs_global_deinit(void);
388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpabuf * tncs_build_soh_request(void);
408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpabuf * tncs_process_soh(const u8 *soh_tlv, size_t soh_tlv_len,
418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 int *failure);
428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* TNCS_H */
44