1*4dc78e53SAndroid Build Coastguard Worker /* SPDX-License-Identifier: LGPL-2.1-only */
2*4dc78e53SAndroid Build Coastguard Worker /*
3*4dc78e53SAndroid Build Coastguard Worker * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
4*4dc78e53SAndroid Build Coastguard Worker *
5*4dc78e53SAndroid Build Coastguard Worker *
6*4dc78e53SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without
7*4dc78e53SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions
8*4dc78e53SAndroid Build Coastguard Worker * are met:
9*4dc78e53SAndroid Build Coastguard Worker *
10*4dc78e53SAndroid Build Coastguard Worker * Redistributions of source code must retain the above copyright
11*4dc78e53SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer.
12*4dc78e53SAndroid Build Coastguard Worker *
13*4dc78e53SAndroid Build Coastguard Worker * Redistributions in binary form must reproduce the above copyright
14*4dc78e53SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the
15*4dc78e53SAndroid Build Coastguard Worker * documentation and/or other materials provided with the
16*4dc78e53SAndroid Build Coastguard Worker * distribution.
17*4dc78e53SAndroid Build Coastguard Worker *
18*4dc78e53SAndroid Build Coastguard Worker * Neither the name of Texas Instruments Incorporated nor the names of
19*4dc78e53SAndroid Build Coastguard Worker * its contributors may be used to endorse or promote products derived
20*4dc78e53SAndroid Build Coastguard Worker * from this software without specific prior written permission.
21*4dc78e53SAndroid Build Coastguard Worker *
22*4dc78e53SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23*4dc78e53SAndroid Build Coastguard Worker * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24*4dc78e53SAndroid Build Coastguard Worker * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25*4dc78e53SAndroid Build Coastguard Worker * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26*4dc78e53SAndroid Build Coastguard Worker * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27*4dc78e53SAndroid Build Coastguard Worker * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28*4dc78e53SAndroid Build Coastguard Worker * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29*4dc78e53SAndroid Build Coastguard Worker * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30*4dc78e53SAndroid Build Coastguard Worker * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31*4dc78e53SAndroid Build Coastguard Worker * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32*4dc78e53SAndroid Build Coastguard Worker * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33*4dc78e53SAndroid Build Coastguard Worker *
34*4dc78e53SAndroid Build Coastguard Worker */
35*4dc78e53SAndroid Build Coastguard Worker /**
36*4dc78e53SAndroid Build Coastguard Worker * @ingroup xfrmnl
37*4dc78e53SAndroid Build Coastguard Worker * @defgroup XFRM User Template Object
38*4dc78e53SAndroid Build Coastguard Worker *
39*4dc78e53SAndroid Build Coastguard Worker * Abstract data type representing XFRM SA properties
40*4dc78e53SAndroid Build Coastguard Worker *
41*4dc78e53SAndroid Build Coastguard Worker * @{
42*4dc78e53SAndroid Build Coastguard Worker *
43*4dc78e53SAndroid Build Coastguard Worker * Header
44*4dc78e53SAndroid Build Coastguard Worker * ------
45*4dc78e53SAndroid Build Coastguard Worker * ~~~~{.c}
46*4dc78e53SAndroid Build Coastguard Worker * #include <netlink/xfrm/template.h>
47*4dc78e53SAndroid Build Coastguard Worker * ~~~~
48*4dc78e53SAndroid Build Coastguard Worker */
49*4dc78e53SAndroid Build Coastguard Worker
50*4dc78e53SAndroid Build Coastguard Worker #include "nl-default.h"
51*4dc78e53SAndroid Build Coastguard Worker
52*4dc78e53SAndroid Build Coastguard Worker #include <netlink/xfrm/template.h>
53*4dc78e53SAndroid Build Coastguard Worker
54*4dc78e53SAndroid Build Coastguard Worker #include "nl-xfrm.h"
55*4dc78e53SAndroid Build Coastguard Worker #include "nl-priv-dynamic-core/nl-core.h"
56*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_free(struct xfrmnl_user_tmpl * utmpl)57*4dc78e53SAndroid Build Coastguard Worker void xfrmnl_user_tmpl_free(struct xfrmnl_user_tmpl* utmpl)
58*4dc78e53SAndroid Build Coastguard Worker {
59*4dc78e53SAndroid Build Coastguard Worker if (!utmpl)
60*4dc78e53SAndroid Build Coastguard Worker return;
61*4dc78e53SAndroid Build Coastguard Worker
62*4dc78e53SAndroid Build Coastguard Worker nl_addr_put (utmpl->id.daddr);
63*4dc78e53SAndroid Build Coastguard Worker nl_addr_put (utmpl->saddr);
64*4dc78e53SAndroid Build Coastguard Worker free(utmpl);
65*4dc78e53SAndroid Build Coastguard Worker }
66*4dc78e53SAndroid Build Coastguard Worker
67*4dc78e53SAndroid Build Coastguard Worker /**
68*4dc78e53SAndroid Build Coastguard Worker * @name Creating User Template Object
69*4dc78e53SAndroid Build Coastguard Worker * @{
70*4dc78e53SAndroid Build Coastguard Worker */
71*4dc78e53SAndroid Build Coastguard Worker
72*4dc78e53SAndroid Build Coastguard Worker /**
73*4dc78e53SAndroid Build Coastguard Worker * Allocate new user template object.
74*4dc78e53SAndroid Build Coastguard Worker * @return Newly allocated user template object or NULL
75*4dc78e53SAndroid Build Coastguard Worker */
xfrmnl_user_tmpl_alloc()76*4dc78e53SAndroid Build Coastguard Worker struct xfrmnl_user_tmpl* xfrmnl_user_tmpl_alloc()
77*4dc78e53SAndroid Build Coastguard Worker {
78*4dc78e53SAndroid Build Coastguard Worker struct xfrmnl_user_tmpl* utmpl;
79*4dc78e53SAndroid Build Coastguard Worker
80*4dc78e53SAndroid Build Coastguard Worker utmpl = calloc(1, sizeof(struct xfrmnl_user_tmpl));
81*4dc78e53SAndroid Build Coastguard Worker if (!utmpl)
82*4dc78e53SAndroid Build Coastguard Worker return NULL;
83*4dc78e53SAndroid Build Coastguard Worker
84*4dc78e53SAndroid Build Coastguard Worker nl_init_list_head(&utmpl->utmpl_list);
85*4dc78e53SAndroid Build Coastguard Worker
86*4dc78e53SAndroid Build Coastguard Worker return utmpl;
87*4dc78e53SAndroid Build Coastguard Worker }
88*4dc78e53SAndroid Build Coastguard Worker
89*4dc78e53SAndroid Build Coastguard Worker /**
90*4dc78e53SAndroid Build Coastguard Worker * Clone existing user template object.
91*4dc78e53SAndroid Build Coastguard Worker * @arg utmpl Selector object.
92*4dc78e53SAndroid Build Coastguard Worker * @return Newly allocated user template object being a duplicate of the
93*4dc78e53SAndroid Build Coastguard Worker * specified user template object or NULL if a failure occured.
94*4dc78e53SAndroid Build Coastguard Worker */
xfrmnl_user_tmpl_clone(struct xfrmnl_user_tmpl * utmpl)95*4dc78e53SAndroid Build Coastguard Worker struct xfrmnl_user_tmpl* xfrmnl_user_tmpl_clone(struct xfrmnl_user_tmpl* utmpl)
96*4dc78e53SAndroid Build Coastguard Worker {
97*4dc78e53SAndroid Build Coastguard Worker struct xfrmnl_user_tmpl* new;
98*4dc78e53SAndroid Build Coastguard Worker
99*4dc78e53SAndroid Build Coastguard Worker new = xfrmnl_user_tmpl_alloc();
100*4dc78e53SAndroid Build Coastguard Worker if (!new)
101*4dc78e53SAndroid Build Coastguard Worker return NULL;
102*4dc78e53SAndroid Build Coastguard Worker
103*4dc78e53SAndroid Build Coastguard Worker memcpy(new, utmpl, sizeof(struct xfrmnl_user_tmpl));
104*4dc78e53SAndroid Build Coastguard Worker new->id.daddr = nl_addr_clone (utmpl->id.daddr);
105*4dc78e53SAndroid Build Coastguard Worker new->saddr = nl_addr_clone (utmpl->saddr);
106*4dc78e53SAndroid Build Coastguard Worker
107*4dc78e53SAndroid Build Coastguard Worker return new;
108*4dc78e53SAndroid Build Coastguard Worker }
109*4dc78e53SAndroid Build Coastguard Worker
110*4dc78e53SAndroid Build Coastguard Worker /** @} */
111*4dc78e53SAndroid Build Coastguard Worker
112*4dc78e53SAndroid Build Coastguard Worker /**
113*4dc78e53SAndroid Build Coastguard Worker * @name XFRM Template Mode Translations
114*4dc78e53SAndroid Build Coastguard Worker * @{
115*4dc78e53SAndroid Build Coastguard Worker */
116*4dc78e53SAndroid Build Coastguard Worker static const struct trans_tbl tmpl_modes[] = {
117*4dc78e53SAndroid Build Coastguard Worker __ADD(XFRM_MODE_TRANSPORT, transport),
118*4dc78e53SAndroid Build Coastguard Worker __ADD(XFRM_MODE_TUNNEL, tunnel),
119*4dc78e53SAndroid Build Coastguard Worker __ADD(XFRM_MODE_ROUTEOPTIMIZATION, route optimization),
120*4dc78e53SAndroid Build Coastguard Worker __ADD(XFRM_MODE_IN_TRIGGER, in trigger),
121*4dc78e53SAndroid Build Coastguard Worker __ADD(XFRM_MODE_BEET, beet),
122*4dc78e53SAndroid Build Coastguard Worker };
123*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_mode2str(int mode,char * buf,size_t len)124*4dc78e53SAndroid Build Coastguard Worker char* xfrmnl_user_tmpl_mode2str(int mode, char *buf, size_t len)
125*4dc78e53SAndroid Build Coastguard Worker {
126*4dc78e53SAndroid Build Coastguard Worker return __type2str (mode, buf, len, tmpl_modes, ARRAY_SIZE(tmpl_modes));
127*4dc78e53SAndroid Build Coastguard Worker }
128*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_str2mode(const char * name)129*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_str2mode(const char *name)
130*4dc78e53SAndroid Build Coastguard Worker {
131*4dc78e53SAndroid Build Coastguard Worker return __str2type (name, tmpl_modes, ARRAY_SIZE(tmpl_modes));
132*4dc78e53SAndroid Build Coastguard Worker }
133*4dc78e53SAndroid Build Coastguard Worker /** @} */
134*4dc78e53SAndroid Build Coastguard Worker
135*4dc78e53SAndroid Build Coastguard Worker /**
136*4dc78e53SAndroid Build Coastguard Worker * @name Miscellaneous
137*4dc78e53SAndroid Build Coastguard Worker * @{
138*4dc78e53SAndroid Build Coastguard Worker */
139*4dc78e53SAndroid Build Coastguard Worker
140*4dc78e53SAndroid Build Coastguard Worker /**
141*4dc78e53SAndroid Build Coastguard Worker * Compares two user template objects.
142*4dc78e53SAndroid Build Coastguard Worker * @arg a A user template object.
143*4dc78e53SAndroid Build Coastguard Worker * @arg b Another user template object.
144*4dc78e53SAndroid Build Coastguard Worker *
145*4dc78e53SAndroid Build Coastguard Worker * @return Non zero if difference is found, 0 otherwise if both
146*4dc78e53SAndroid Build Coastguard Worker * the objects are identical.
147*4dc78e53SAndroid Build Coastguard Worker */
xfrmnl_user_tmpl_cmp(struct xfrmnl_user_tmpl * a,struct xfrmnl_user_tmpl * b)148*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_cmp(struct xfrmnl_user_tmpl* a, struct xfrmnl_user_tmpl* b)
149*4dc78e53SAndroid Build Coastguard Worker {
150*4dc78e53SAndroid Build Coastguard Worker /* Check for any differences */
151*4dc78e53SAndroid Build Coastguard Worker if ((nl_addr_cmp_prefix (a->id.daddr, b->id.daddr) != 0) ||
152*4dc78e53SAndroid Build Coastguard Worker (a->id.spi != b->id.spi) ||
153*4dc78e53SAndroid Build Coastguard Worker (a->id.proto && (a->id.proto != b->id.proto)) ||
154*4dc78e53SAndroid Build Coastguard Worker (nl_addr_cmp_prefix (a->saddr, b->saddr) != 0) ||
155*4dc78e53SAndroid Build Coastguard Worker (a->family != b->family) ||
156*4dc78e53SAndroid Build Coastguard Worker (a->reqid != b->reqid) ||
157*4dc78e53SAndroid Build Coastguard Worker (a->mode != b->mode) ||
158*4dc78e53SAndroid Build Coastguard Worker (a->share != b->share) ||
159*4dc78e53SAndroid Build Coastguard Worker (a->aalgos != b->aalgos) ||
160*4dc78e53SAndroid Build Coastguard Worker (a->ealgos != b->ealgos) ||
161*4dc78e53SAndroid Build Coastguard Worker (a->calgos != b->calgos))
162*4dc78e53SAndroid Build Coastguard Worker return 1;
163*4dc78e53SAndroid Build Coastguard Worker
164*4dc78e53SAndroid Build Coastguard Worker /* The objects are identical */
165*4dc78e53SAndroid Build Coastguard Worker return 0;
166*4dc78e53SAndroid Build Coastguard Worker }
167*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_dump(struct xfrmnl_user_tmpl * tmpl,struct nl_dump_params * p)168*4dc78e53SAndroid Build Coastguard Worker void xfrmnl_user_tmpl_dump(struct xfrmnl_user_tmpl* tmpl, struct nl_dump_params *p)
169*4dc78e53SAndroid Build Coastguard Worker {
170*4dc78e53SAndroid Build Coastguard Worker char dst[INET6_ADDRSTRLEN+5], src[INET6_ADDRSTRLEN+5];
171*4dc78e53SAndroid Build Coastguard Worker char buf [128];
172*4dc78e53SAndroid Build Coastguard Worker
173*4dc78e53SAndroid Build Coastguard Worker nl_dump_line(p, "\t\tsrc %s dst %s family: %s \n",
174*4dc78e53SAndroid Build Coastguard Worker nl_addr2str(tmpl->saddr, src, sizeof(src)),
175*4dc78e53SAndroid Build Coastguard Worker nl_addr2str (tmpl->id.daddr, dst, sizeof (dst)),
176*4dc78e53SAndroid Build Coastguard Worker nl_af2str (tmpl->family, buf, 128));
177*4dc78e53SAndroid Build Coastguard Worker nl_dump_line (p, "\t\tprotocol: %s spi: 0x%x reqid: %u mode: %s\n",
178*4dc78e53SAndroid Build Coastguard Worker nl_ip_proto2str (tmpl->id.proto, buf, sizeof(buf)),
179*4dc78e53SAndroid Build Coastguard Worker tmpl->id.spi, tmpl->reqid,
180*4dc78e53SAndroid Build Coastguard Worker xfrmnl_user_tmpl_mode2str (tmpl->mode, buf, 128));
181*4dc78e53SAndroid Build Coastguard Worker nl_dump_line (p, "\t\tAuth Algo: 0x%x Crypto Algo: 0x%x Compr Algo: 0x%x\n",
182*4dc78e53SAndroid Build Coastguard Worker tmpl->aalgos, tmpl->ealgos, tmpl->calgos);
183*4dc78e53SAndroid Build Coastguard Worker
184*4dc78e53SAndroid Build Coastguard Worker return;
185*4dc78e53SAndroid Build Coastguard Worker }
186*4dc78e53SAndroid Build Coastguard Worker
187*4dc78e53SAndroid Build Coastguard Worker /** @} */
188*4dc78e53SAndroid Build Coastguard Worker
189*4dc78e53SAndroid Build Coastguard Worker /**
190*4dc78e53SAndroid Build Coastguard Worker * @name Attributes
191*4dc78e53SAndroid Build Coastguard Worker * @{
192*4dc78e53SAndroid Build Coastguard Worker */
xfrmnl_user_tmpl_get_daddr(struct xfrmnl_user_tmpl * utmpl)193*4dc78e53SAndroid Build Coastguard Worker struct nl_addr* xfrmnl_user_tmpl_get_daddr (struct xfrmnl_user_tmpl* utmpl)
194*4dc78e53SAndroid Build Coastguard Worker {
195*4dc78e53SAndroid Build Coastguard Worker return utmpl->id.daddr;
196*4dc78e53SAndroid Build Coastguard Worker }
197*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_set_daddr(struct xfrmnl_user_tmpl * utmpl,struct nl_addr * addr)198*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_set_daddr (struct xfrmnl_user_tmpl* utmpl, struct nl_addr* addr)
199*4dc78e53SAndroid Build Coastguard Worker {
200*4dc78e53SAndroid Build Coastguard Worker /* Increment reference counter on this to keep this address
201*4dc78e53SAndroid Build Coastguard Worker * object around while user template in use */
202*4dc78e53SAndroid Build Coastguard Worker nl_addr_get(addr);
203*4dc78e53SAndroid Build Coastguard Worker
204*4dc78e53SAndroid Build Coastguard Worker utmpl->id.daddr = addr;
205*4dc78e53SAndroid Build Coastguard Worker
206*4dc78e53SAndroid Build Coastguard Worker return 0;
207*4dc78e53SAndroid Build Coastguard Worker }
208*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_get_spi(struct xfrmnl_user_tmpl * utmpl)209*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_get_spi (struct xfrmnl_user_tmpl* utmpl)
210*4dc78e53SAndroid Build Coastguard Worker {
211*4dc78e53SAndroid Build Coastguard Worker return utmpl->id.spi;
212*4dc78e53SAndroid Build Coastguard Worker }
213*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_set_spi(struct xfrmnl_user_tmpl * utmpl,unsigned int spi)214*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_set_spi (struct xfrmnl_user_tmpl* utmpl, unsigned int spi)
215*4dc78e53SAndroid Build Coastguard Worker {
216*4dc78e53SAndroid Build Coastguard Worker utmpl->id.spi = spi;
217*4dc78e53SAndroid Build Coastguard Worker
218*4dc78e53SAndroid Build Coastguard Worker return 0;
219*4dc78e53SAndroid Build Coastguard Worker }
220*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_get_proto(struct xfrmnl_user_tmpl * utmpl)221*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_get_proto (struct xfrmnl_user_tmpl* utmpl)
222*4dc78e53SAndroid Build Coastguard Worker {
223*4dc78e53SAndroid Build Coastguard Worker return utmpl->id.proto;
224*4dc78e53SAndroid Build Coastguard Worker }
225*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_set_proto(struct xfrmnl_user_tmpl * utmpl,unsigned int protocol)226*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_set_proto (struct xfrmnl_user_tmpl* utmpl, unsigned int protocol)
227*4dc78e53SAndroid Build Coastguard Worker {
228*4dc78e53SAndroid Build Coastguard Worker utmpl->id.proto = protocol;
229*4dc78e53SAndroid Build Coastguard Worker
230*4dc78e53SAndroid Build Coastguard Worker return 0;
231*4dc78e53SAndroid Build Coastguard Worker }
232*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_get_family(struct xfrmnl_user_tmpl * utmpl)233*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_get_family(struct xfrmnl_user_tmpl *utmpl)
234*4dc78e53SAndroid Build Coastguard Worker {
235*4dc78e53SAndroid Build Coastguard Worker return utmpl->family;
236*4dc78e53SAndroid Build Coastguard Worker }
237*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_set_family(struct xfrmnl_user_tmpl * utmpl,unsigned int family)238*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_set_family(struct xfrmnl_user_tmpl *utmpl, unsigned int family)
239*4dc78e53SAndroid Build Coastguard Worker {
240*4dc78e53SAndroid Build Coastguard Worker utmpl->family = family;
241*4dc78e53SAndroid Build Coastguard Worker
242*4dc78e53SAndroid Build Coastguard Worker return 0;
243*4dc78e53SAndroid Build Coastguard Worker }
244*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_get_saddr(struct xfrmnl_user_tmpl * utmpl)245*4dc78e53SAndroid Build Coastguard Worker struct nl_addr* xfrmnl_user_tmpl_get_saddr (struct xfrmnl_user_tmpl* utmpl)
246*4dc78e53SAndroid Build Coastguard Worker {
247*4dc78e53SAndroid Build Coastguard Worker return utmpl->saddr;
248*4dc78e53SAndroid Build Coastguard Worker }
249*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_set_saddr(struct xfrmnl_user_tmpl * utmpl,struct nl_addr * addr)250*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_set_saddr (struct xfrmnl_user_tmpl* utmpl, struct nl_addr* addr)
251*4dc78e53SAndroid Build Coastguard Worker {
252*4dc78e53SAndroid Build Coastguard Worker /* Increment reference counter on this to keep this address
253*4dc78e53SAndroid Build Coastguard Worker * object around while user template in use */
254*4dc78e53SAndroid Build Coastguard Worker nl_addr_get(addr);
255*4dc78e53SAndroid Build Coastguard Worker
256*4dc78e53SAndroid Build Coastguard Worker utmpl->saddr = addr;
257*4dc78e53SAndroid Build Coastguard Worker
258*4dc78e53SAndroid Build Coastguard Worker return 0;
259*4dc78e53SAndroid Build Coastguard Worker }
260*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_get_reqid(struct xfrmnl_user_tmpl * utmpl)261*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_get_reqid (struct xfrmnl_user_tmpl* utmpl)
262*4dc78e53SAndroid Build Coastguard Worker {
263*4dc78e53SAndroid Build Coastguard Worker return utmpl->reqid;
264*4dc78e53SAndroid Build Coastguard Worker }
265*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_set_reqid(struct xfrmnl_user_tmpl * utmpl,unsigned int reqid)266*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_set_reqid (struct xfrmnl_user_tmpl* utmpl, unsigned int reqid)
267*4dc78e53SAndroid Build Coastguard Worker {
268*4dc78e53SAndroid Build Coastguard Worker utmpl->reqid = reqid;
269*4dc78e53SAndroid Build Coastguard Worker
270*4dc78e53SAndroid Build Coastguard Worker return 0;
271*4dc78e53SAndroid Build Coastguard Worker }
272*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_get_mode(struct xfrmnl_user_tmpl * utmpl)273*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_get_mode (struct xfrmnl_user_tmpl* utmpl)
274*4dc78e53SAndroid Build Coastguard Worker {
275*4dc78e53SAndroid Build Coastguard Worker return utmpl->mode;
276*4dc78e53SAndroid Build Coastguard Worker }
277*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_set_mode(struct xfrmnl_user_tmpl * utmpl,unsigned int mode)278*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_set_mode (struct xfrmnl_user_tmpl* utmpl, unsigned int mode)
279*4dc78e53SAndroid Build Coastguard Worker {
280*4dc78e53SAndroid Build Coastguard Worker utmpl->mode = mode;
281*4dc78e53SAndroid Build Coastguard Worker
282*4dc78e53SAndroid Build Coastguard Worker return 0;
283*4dc78e53SAndroid Build Coastguard Worker }
284*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_get_share(struct xfrmnl_user_tmpl * utmpl)285*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_get_share (struct xfrmnl_user_tmpl* utmpl)
286*4dc78e53SAndroid Build Coastguard Worker {
287*4dc78e53SAndroid Build Coastguard Worker return utmpl->share;
288*4dc78e53SAndroid Build Coastguard Worker }
289*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_set_share(struct xfrmnl_user_tmpl * utmpl,unsigned int share)290*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_set_share (struct xfrmnl_user_tmpl* utmpl, unsigned int share)
291*4dc78e53SAndroid Build Coastguard Worker {
292*4dc78e53SAndroid Build Coastguard Worker utmpl->share = share;
293*4dc78e53SAndroid Build Coastguard Worker
294*4dc78e53SAndroid Build Coastguard Worker return 0;
295*4dc78e53SAndroid Build Coastguard Worker }
296*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_get_optional(struct xfrmnl_user_tmpl * utmpl)297*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_get_optional (struct xfrmnl_user_tmpl* utmpl)
298*4dc78e53SAndroid Build Coastguard Worker {
299*4dc78e53SAndroid Build Coastguard Worker return utmpl->optional;
300*4dc78e53SAndroid Build Coastguard Worker }
301*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_set_optional(struct xfrmnl_user_tmpl * utmpl,unsigned int optional)302*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_set_optional (struct xfrmnl_user_tmpl* utmpl, unsigned int optional)
303*4dc78e53SAndroid Build Coastguard Worker {
304*4dc78e53SAndroid Build Coastguard Worker utmpl->optional = optional;
305*4dc78e53SAndroid Build Coastguard Worker
306*4dc78e53SAndroid Build Coastguard Worker return 0;
307*4dc78e53SAndroid Build Coastguard Worker }
308*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_get_aalgos(struct xfrmnl_user_tmpl * utmpl)309*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_get_aalgos (struct xfrmnl_user_tmpl* utmpl)
310*4dc78e53SAndroid Build Coastguard Worker {
311*4dc78e53SAndroid Build Coastguard Worker return utmpl->aalgos;
312*4dc78e53SAndroid Build Coastguard Worker }
313*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_set_aalgos(struct xfrmnl_user_tmpl * utmpl,unsigned int aalgos)314*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_set_aalgos (struct xfrmnl_user_tmpl* utmpl, unsigned int aalgos)
315*4dc78e53SAndroid Build Coastguard Worker {
316*4dc78e53SAndroid Build Coastguard Worker utmpl->aalgos = aalgos;
317*4dc78e53SAndroid Build Coastguard Worker
318*4dc78e53SAndroid Build Coastguard Worker return 0;
319*4dc78e53SAndroid Build Coastguard Worker }
320*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_get_ealgos(struct xfrmnl_user_tmpl * utmpl)321*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_get_ealgos (struct xfrmnl_user_tmpl* utmpl)
322*4dc78e53SAndroid Build Coastguard Worker {
323*4dc78e53SAndroid Build Coastguard Worker return utmpl->ealgos;
324*4dc78e53SAndroid Build Coastguard Worker }
325*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_set_ealgos(struct xfrmnl_user_tmpl * utmpl,unsigned int ealgos)326*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_set_ealgos (struct xfrmnl_user_tmpl* utmpl, unsigned int ealgos)
327*4dc78e53SAndroid Build Coastguard Worker {
328*4dc78e53SAndroid Build Coastguard Worker utmpl->ealgos = ealgos;
329*4dc78e53SAndroid Build Coastguard Worker
330*4dc78e53SAndroid Build Coastguard Worker return 0;
331*4dc78e53SAndroid Build Coastguard Worker }
332*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_get_calgos(struct xfrmnl_user_tmpl * utmpl)333*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_get_calgos (struct xfrmnl_user_tmpl* utmpl)
334*4dc78e53SAndroid Build Coastguard Worker {
335*4dc78e53SAndroid Build Coastguard Worker return utmpl->calgos;
336*4dc78e53SAndroid Build Coastguard Worker }
337*4dc78e53SAndroid Build Coastguard Worker
xfrmnl_user_tmpl_set_calgos(struct xfrmnl_user_tmpl * utmpl,unsigned int calgos)338*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_user_tmpl_set_calgos (struct xfrmnl_user_tmpl* utmpl, unsigned int calgos)
339*4dc78e53SAndroid Build Coastguard Worker {
340*4dc78e53SAndroid Build Coastguard Worker utmpl->calgos = calgos;
341*4dc78e53SAndroid Build Coastguard Worker
342*4dc78e53SAndroid Build Coastguard Worker return 0;
343*4dc78e53SAndroid Build Coastguard Worker }
344*4dc78e53SAndroid Build Coastguard Worker
345*4dc78e53SAndroid Build Coastguard Worker /** @} */
346