]>
Commit | Line | Data |
---|---|---|
7da522ba | 1 | /* |
19ef2aec | 2 | * Copyright (C) 2022 Tobias Brunner |
c71d53ba MW |
3 | * Copyright (C) 2005-2006 Martin Willi |
4 | * Copyright (C) 2005 Jan Hutter | |
19ef2aec TB |
5 | * |
6 | * Copyright (C) secunet Security Networks AG | |
7da522ba JH |
7 | * |
8 | * This program is free software; you can redistribute it and/or modify it | |
9 | * under the terms of the GNU General Public License as published by the | |
10 | * Free Software Foundation; either version 2 of the License, or (at your | |
11 | * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. | |
12 | * | |
13 | * This program is distributed in the hope that it will be useful, but | |
14 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
15 | * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 | * for more details. | |
17 | */ | |
18 | ||
552cc11b MW |
19 | /** |
20 | * @defgroup traffic_selector_substructure traffic_selector_substructure | |
21 | * @{ @ingroup payloads | |
22 | */ | |
7da522ba JH |
23 | |
24 | #ifndef TRAFFIC_SELECTOR_SUBSTRUCTURE_H_ | |
25 | #define TRAFFIC_SELECTOR_SUBSTRUCTURE_H_ | |
26 | ||
382b4817 MW |
27 | typedef struct traffic_selector_substructure_t traffic_selector_substructure_t; |
28 | ||
db7ef624 | 29 | #include <library.h> |
2e7cc07e | 30 | #include <networking/host.h> |
1125a0be | 31 | #include <selectors/traffic_selector.h> |
a44de0b9 | 32 | #include <selectors/sec_label.h> |
1125a0be | 33 | #include <encoding/payloads/payload.h> |
7da522ba | 34 | |
7da522ba | 35 | /** |
552cc11b | 36 | * Class representing an IKEv2 TRAFFIC SELECTOR. |
7daf5226 | 37 | * |
8a491129 | 38 | * The TRAFFIC SELECTOR format is described in RFC section 3.13.1. |
7da522ba JH |
39 | */ |
40 | struct traffic_selector_substructure_t { | |
a44de0b9 | 41 | |
7da522ba JH |
42 | /** |
43 | * The payload_t interface. | |
44 | */ | |
45 | payload_t payload_interface; | |
7daf5226 | 46 | |
7da522ba | 47 | /** |
a44de0b9 | 48 | * Get a traffic_selector_t from this substructure if possible. |
7daf5226 | 49 | * |
a44de0b9 | 50 | * @warning the returned object must be destroyed after use |
7da522ba | 51 | * |
a44de0b9 | 52 | * @return contained traffic_selector_t (NULL if type mismatch) |
7da522ba | 53 | */ |
a44de0b9 | 54 | traffic_selector_t *(*get_traffic_selector)(traffic_selector_substructure_t *this); |
7daf5226 | 55 | |
03283349 | 56 | /** |
a44de0b9 | 57 | * Get a sec_label_t from this substructure if possible. |
03283349 | 58 | * |
a44de0b9 | 59 | * @warning the returned object must be destroyed after use |
7daf5226 | 60 | * |
a44de0b9 | 61 | * @return contained sec_label_t (NULL if type mismatch) |
03283349 | 62 | */ |
a44de0b9 | 63 | sec_label_t *(*get_sec_label)(traffic_selector_substructure_t *this); |
7daf5226 | 64 | |
7da522ba | 65 | /** |
552cc11b | 66 | * Destroys an traffic_selector_substructure_t object. |
7da522ba JH |
67 | */ |
68 | void (*destroy) (traffic_selector_substructure_t *this); | |
69 | }; | |
70 | ||
71 | /** | |
552cc11b | 72 | * Creates an empty traffic_selector_substructure_t object. |
7da522ba JH |
73 | * |
74 | * TS type is set to default TS_IPV4_ADDR_RANGE! | |
7daf5226 | 75 | * |
c3dc864e | 76 | * @return traffic_selector_substructure_t object |
7da522ba | 77 | */ |
f768bdc3 | 78 | traffic_selector_substructure_t *traffic_selector_substructure_create(void); |
7da522ba | 79 | |
03283349 | 80 | /** |
a44de0b9 | 81 | * Creates a traffic selector substructure based on a traffic_selector_t. |
7daf5226 | 82 | * |
a44de0b9 | 83 | * @param traffic_selector data to use |
c3dc864e | 84 | * @return traffic_selector_substructure_t object |
03283349 | 85 | */ |
552cc11b MW |
86 | traffic_selector_substructure_t *traffic_selector_substructure_create_from_traffic_selector( |
87 | traffic_selector_t *traffic_selector); | |
7da522ba | 88 | |
a44de0b9 TB |
89 | /** |
90 | * Creates a traffic selector substructure based on a sec_label_t. | |
91 | * | |
92 | * @param label data to use | |
93 | * @return traffic_selector_substructure_t object | |
94 | */ | |
95 | traffic_selector_substructure_t *traffic_selector_substructure_create_from_sec_label( | |
96 | sec_label_t *label); | |
97 | ||
1490ff4d | 98 | #endif /** TRAFFIC_SELECTOR_SUBSTRUCTURE_H_ @}*/ |