libimcv: Implementation of RFC 8412 SWIMA
[strongswan.git] / src / libimcv / ietf / ietf_attr_pa_tnc_error.h
1 /*
2 * Copyright (C) 2011-2018 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 ietf_attr_pa_tnc_errort ietf_attr_pa_tnc_error
18 * @{ @ingroup ietf_attr
19 */
20
21 #ifndef IETF_ATTR_PA_TNC_ERROR_H_
22 #define IETF_ATTR_PA_TNC_ERROR_H_
23
24 typedef struct ietf_attr_pa_tnc_error_t ietf_attr_pa_tnc_error_t;
25 typedef enum pa_tnc_error_code_t pa_tnc_error_code_t;
26
27 #include "ietf_attr.h"
28 #include "pa_tnc/pa_tnc_attr.h"
29
30 /**
31 * IETF Standard PA-TNC Error Codes
32 */
33 enum pa_tnc_error_code_t {
34
35 /* RFC 5792 PA-TNC */
36 PA_ERROR_RESERVED = 0,
37 PA_ERROR_INVALID_PARAMETER = 1,
38 PA_ERROR_VERSION_NOT_SUPPORTED = 2,
39 PA_ERROR_ATTR_TYPE_NOT_SUPPORTED = 3,
40 PA_ERROR_PA_TNC_MSG_ROOF = 3,
41
42 /* RFC 8412 SWIMA */
43 PA_ERROR_SWIMA = 4,
44 PA_ERROR_SWIMA_SUBSCRIPTION_DENIED = 5,
45 PA_ERROR_SWIMA_RESPONSE_TOO_LARGE = 6,
46 PA_ERROR_SWIMA_SUBSCRIPTION_FULFILLMENT = 7,
47 PA_ERROR_SWIMA_SUBSCRIPTION_ID_REUSE = 8
48 };
49
50 /**
51 * enum name for pa_tnc_error_code_t.
52 */
53 extern enum_name_t *pa_tnc_error_code_names;
54
55 /**
56 * Class implementing the IETF PA-TNC Error attribute.
57 *
58 */
59 struct ietf_attr_pa_tnc_error_t {
60
61 /**
62 * Public PA-TNC attribute interface
63 */
64 pa_tnc_attr_t pa_tnc_attribute;
65
66 /**
67 * Get Vendor-specific PA-TNC error code
68 *
69 * @return error code
70 */
71 pen_type_t (*get_error_code)(ietf_attr_pa_tnc_error_t *this);
72
73 /**
74 * Get first 8 bytes of erroneous PA-TNC message
75 *
76 * @return PA-TNC message info
77 */
78 chunk_t (*get_msg_info)(ietf_attr_pa_tnc_error_t *this);
79
80 /**
81 * Get flags, vendor ID and type of unsupported PA-TNC attribute
82 *
83 * @param flags PA-TNC attribute flags
84 * @return PA-TNC attribute vendor ID and type
85 */
86 pen_type_t (*get_unsupported_attr)(ietf_attr_pa_tnc_error_t *this,
87 uint8_t *flags);
88
89 /**
90 * Set flags, vendor ID and type of unsupported PA-TNC attribute
91 *
92 * @param flags PA-TNC attribute flags
93 * @param attr_info PA-TNC attribute vendor ID and type
94 */
95 void (*set_unsupported_attr)(ietf_attr_pa_tnc_error_t *this, uint8_t flags,
96 pen_type_t type);
97
98 /**
99 * Get the PA-TNC error offset
100 *
101 * @return PA-TNC error offset
102 */
103 uint32_t (*get_offset)(ietf_attr_pa_tnc_error_t *this);
104
105 };
106
107 /**
108 * Creates an ietf_attr_pa_tnc_error_t object from an error code
109 *
110 * @param error_code Vendor-specific PA-TNC error code
111 * @param header PA-TNC message header (first 8 bytes)
112 *
113 */
114 pa_tnc_attr_t* ietf_attr_pa_tnc_error_create(pen_type_t error_code,
115 chunk_t header);
116
117 /**
118 * Creates an ietf_attr_pa_tnc_error_t object from an error code with offset
119 *
120 * @param error_code Vendor-specifica PA-TNC error code
121 * @param header PA-TNC message header (first 8 bytes)
122 * @param error_offset PA-TNC error offset in bytes
123 *
124 */
125 pa_tnc_attr_t* ietf_attr_pa_tnc_error_create_with_offset(pen_type_t error_code,
126 chunk_t header,
127 uint32_t error_offset);
128
129 /**
130 * Creates an ietf_attr_pa_tnc_error_t object from received data
131 *
132 * @param length Total length of attribute value
133 * @param value Unparsed attribute value (might be a segment)
134 */
135 pa_tnc_attr_t* ietf_attr_pa_tnc_error_create_from_data(size_t length,
136 chunk_t value);
137
138 #endif /** IETF_ATTR_PA_TNC_ERROR_H_ @}*/