xref: /aosp_15_r20/external/libnl/lib/xfrm/selector.c (revision 4dc78e53d49367fa8e61b07018507c90983a077d)
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 Address Selector
38*4dc78e53SAndroid Build Coastguard Worker  *
39*4dc78e53SAndroid Build Coastguard Worker  * Abstract data type representing XFRM SA/SP selector 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/selector.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/selector.h>
53*4dc78e53SAndroid Build Coastguard Worker 
54*4dc78e53SAndroid Build Coastguard Worker /* Selector, used as selector both on policy rules (SPD) and SAs. */
55*4dc78e53SAndroid Build Coastguard Worker struct xfrmnl_sel {
56*4dc78e53SAndroid Build Coastguard Worker 	uint32_t        refcnt;
57*4dc78e53SAndroid Build Coastguard Worker 	struct nl_addr* daddr;
58*4dc78e53SAndroid Build Coastguard Worker 	struct nl_addr* saddr;
59*4dc78e53SAndroid Build Coastguard Worker 	uint16_t        dport;
60*4dc78e53SAndroid Build Coastguard Worker 	uint16_t        dport_mask;
61*4dc78e53SAndroid Build Coastguard Worker 	uint16_t        sport;
62*4dc78e53SAndroid Build Coastguard Worker 	uint16_t        sport_mask;
63*4dc78e53SAndroid Build Coastguard Worker 	uint16_t        family;
64*4dc78e53SAndroid Build Coastguard Worker 	uint8_t         prefixlen_d;
65*4dc78e53SAndroid Build Coastguard Worker 	uint8_t         prefixlen_s;
66*4dc78e53SAndroid Build Coastguard Worker 	uint8_t         proto;
67*4dc78e53SAndroid Build Coastguard Worker 	int32_t         ifindex;
68*4dc78e53SAndroid Build Coastguard Worker 	uint32_t        user;
69*4dc78e53SAndroid Build Coastguard Worker };
70*4dc78e53SAndroid Build Coastguard Worker 
sel_destroy(struct xfrmnl_sel * sel)71*4dc78e53SAndroid Build Coastguard Worker static void sel_destroy(struct xfrmnl_sel* sel)
72*4dc78e53SAndroid Build Coastguard Worker {
73*4dc78e53SAndroid Build Coastguard Worker 	if (!sel)
74*4dc78e53SAndroid Build Coastguard Worker 		return;
75*4dc78e53SAndroid Build Coastguard Worker 
76*4dc78e53SAndroid Build Coastguard Worker 	if (sel->refcnt != 1)
77*4dc78e53SAndroid Build Coastguard Worker 	{
78*4dc78e53SAndroid Build Coastguard Worker 		fprintf(stderr, "BUG: %s:%d\n", __FILE__, __LINE__);
79*4dc78e53SAndroid Build Coastguard Worker 		assert(0);
80*4dc78e53SAndroid Build Coastguard Worker 	}
81*4dc78e53SAndroid Build Coastguard Worker 
82*4dc78e53SAndroid Build Coastguard Worker 	nl_addr_put (sel->daddr);
83*4dc78e53SAndroid Build Coastguard Worker 	nl_addr_put (sel->saddr);
84*4dc78e53SAndroid Build Coastguard Worker 	free(sel);
85*4dc78e53SAndroid Build Coastguard Worker }
86*4dc78e53SAndroid Build Coastguard Worker 
87*4dc78e53SAndroid Build Coastguard Worker /**
88*4dc78e53SAndroid Build Coastguard Worker  * @name Creating Selector
89*4dc78e53SAndroid Build Coastguard Worker  * @{
90*4dc78e53SAndroid Build Coastguard Worker  */
91*4dc78e53SAndroid Build Coastguard Worker 
92*4dc78e53SAndroid Build Coastguard Worker /**
93*4dc78e53SAndroid Build Coastguard Worker  * Allocate new selector object.
94*4dc78e53SAndroid Build Coastguard Worker  * @return Newly allocated selector object or NULL
95*4dc78e53SAndroid Build Coastguard Worker  */
xfrmnl_sel_alloc()96*4dc78e53SAndroid Build Coastguard Worker struct xfrmnl_sel* xfrmnl_sel_alloc()
97*4dc78e53SAndroid Build Coastguard Worker {
98*4dc78e53SAndroid Build Coastguard Worker 	struct xfrmnl_sel* sel;
99*4dc78e53SAndroid Build Coastguard Worker 
100*4dc78e53SAndroid Build Coastguard Worker 	sel = calloc(1, sizeof(struct xfrmnl_sel));
101*4dc78e53SAndroid Build Coastguard Worker 	if (!sel)
102*4dc78e53SAndroid Build Coastguard Worker 		return NULL;
103*4dc78e53SAndroid Build Coastguard Worker 
104*4dc78e53SAndroid Build Coastguard Worker 	sel->refcnt = 1;
105*4dc78e53SAndroid Build Coastguard Worker 
106*4dc78e53SAndroid Build Coastguard Worker 	return sel;
107*4dc78e53SAndroid Build Coastguard Worker }
108*4dc78e53SAndroid Build Coastguard Worker 
109*4dc78e53SAndroid Build Coastguard Worker /**
110*4dc78e53SAndroid Build Coastguard Worker  * Clone existing selector object.
111*4dc78e53SAndroid Build Coastguard Worker  * @arg sel		Selector object.
112*4dc78e53SAndroid Build Coastguard Worker  * @return Newly allocated selector object being a duplicate of the
113*4dc78e53SAndroid Build Coastguard Worker  *         specified selector object or NULL if a failure occured.
114*4dc78e53SAndroid Build Coastguard Worker  */
xfrmnl_sel_clone(struct xfrmnl_sel * sel)115*4dc78e53SAndroid Build Coastguard Worker struct xfrmnl_sel* xfrmnl_sel_clone(struct xfrmnl_sel* sel)
116*4dc78e53SAndroid Build Coastguard Worker {
117*4dc78e53SAndroid Build Coastguard Worker 	struct xfrmnl_sel* new;
118*4dc78e53SAndroid Build Coastguard Worker 
119*4dc78e53SAndroid Build Coastguard Worker 	new = xfrmnl_sel_alloc();
120*4dc78e53SAndroid Build Coastguard Worker 	if (!new)
121*4dc78e53SAndroid Build Coastguard Worker 		return NULL;
122*4dc78e53SAndroid Build Coastguard Worker 
123*4dc78e53SAndroid Build Coastguard Worker 	memcpy(new, sel, sizeof(struct xfrmnl_sel));
124*4dc78e53SAndroid Build Coastguard Worker 	new->daddr = nl_addr_clone(sel->daddr);
125*4dc78e53SAndroid Build Coastguard Worker 	new->saddr = nl_addr_clone(sel->saddr);
126*4dc78e53SAndroid Build Coastguard Worker 
127*4dc78e53SAndroid Build Coastguard Worker 	return new;
128*4dc78e53SAndroid Build Coastguard Worker }
129*4dc78e53SAndroid Build Coastguard Worker 
130*4dc78e53SAndroid Build Coastguard Worker /** @} */
131*4dc78e53SAndroid Build Coastguard Worker 
132*4dc78e53SAndroid Build Coastguard Worker /**
133*4dc78e53SAndroid Build Coastguard Worker  * @name Managing Usage References
134*4dc78e53SAndroid Build Coastguard Worker  * @{
135*4dc78e53SAndroid Build Coastguard Worker  */
136*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_get(struct xfrmnl_sel * sel)137*4dc78e53SAndroid Build Coastguard Worker struct xfrmnl_sel* xfrmnl_sel_get(struct xfrmnl_sel* sel)
138*4dc78e53SAndroid Build Coastguard Worker {
139*4dc78e53SAndroid Build Coastguard Worker 	sel->refcnt++;
140*4dc78e53SAndroid Build Coastguard Worker 
141*4dc78e53SAndroid Build Coastguard Worker 	return sel;
142*4dc78e53SAndroid Build Coastguard Worker }
143*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_put(struct xfrmnl_sel * sel)144*4dc78e53SAndroid Build Coastguard Worker void xfrmnl_sel_put(struct xfrmnl_sel* sel)
145*4dc78e53SAndroid Build Coastguard Worker {
146*4dc78e53SAndroid Build Coastguard Worker 	if (!sel)
147*4dc78e53SAndroid Build Coastguard Worker 		return;
148*4dc78e53SAndroid Build Coastguard Worker 
149*4dc78e53SAndroid Build Coastguard Worker 	if (sel->refcnt == 1)
150*4dc78e53SAndroid Build Coastguard Worker 		sel_destroy(sel);
151*4dc78e53SAndroid Build Coastguard Worker 	else
152*4dc78e53SAndroid Build Coastguard Worker 		sel->refcnt--;
153*4dc78e53SAndroid Build Coastguard Worker }
154*4dc78e53SAndroid Build Coastguard Worker 
155*4dc78e53SAndroid Build Coastguard Worker /**
156*4dc78e53SAndroid Build Coastguard Worker  * Check whether an selector object is shared.
157*4dc78e53SAndroid Build Coastguard Worker  * @arg addr		Selector object.
158*4dc78e53SAndroid Build Coastguard Worker  * @return Non-zero if the selector object is shared, otherwise 0.
159*4dc78e53SAndroid Build Coastguard Worker  */
xfrmnl_sel_shared(struct xfrmnl_sel * sel)160*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_shared(struct xfrmnl_sel* sel)
161*4dc78e53SAndroid Build Coastguard Worker {
162*4dc78e53SAndroid Build Coastguard Worker 	return sel->refcnt > 1;
163*4dc78e53SAndroid Build Coastguard Worker }
164*4dc78e53SAndroid Build Coastguard Worker 
165*4dc78e53SAndroid Build Coastguard Worker /** @} */
166*4dc78e53SAndroid Build Coastguard Worker 
167*4dc78e53SAndroid Build Coastguard Worker /**
168*4dc78e53SAndroid Build Coastguard Worker  * @name Miscellaneous
169*4dc78e53SAndroid Build Coastguard Worker  * @{
170*4dc78e53SAndroid Build Coastguard Worker  */
171*4dc78e53SAndroid Build Coastguard Worker 
172*4dc78e53SAndroid Build Coastguard Worker /**
173*4dc78e53SAndroid Build Coastguard Worker  * Compares two selector objects.
174*4dc78e53SAndroid Build Coastguard Worker  * @arg a		A selector object.
175*4dc78e53SAndroid Build Coastguard Worker  * @arg b		Another selector object.
176*4dc78e53SAndroid Build Coastguard Worker  *
177*4dc78e53SAndroid Build Coastguard Worker  * @return Non zero if difference is found, 0 otherwise if both
178*4dc78e53SAndroid Build Coastguard Worker  * the objects are identical.
179*4dc78e53SAndroid Build Coastguard Worker  */
xfrmnl_sel_cmp(struct xfrmnl_sel * a,struct xfrmnl_sel * b)180*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_cmp(struct xfrmnl_sel* a, struct xfrmnl_sel* b)
181*4dc78e53SAndroid Build Coastguard Worker {
182*4dc78e53SAndroid Build Coastguard Worker 	/* Check for any differences */
183*4dc78e53SAndroid Build Coastguard Worker 	if ((nl_addr_cmp_prefix (a->daddr, b->daddr) != 0) ||
184*4dc78e53SAndroid Build Coastguard Worker 	    (nl_addr_cmp_prefix (a->saddr, b->saddr) != 0) ||
185*4dc78e53SAndroid Build Coastguard Worker 	    ((a->sport & a->sport_mask) != (b->sport & b->sport_mask)) ||
186*4dc78e53SAndroid Build Coastguard Worker 	    ((a->dport & a->dport_mask) != (b->dport & b->dport_mask)) ||
187*4dc78e53SAndroid Build Coastguard Worker 	    (a->family != b->family) ||
188*4dc78e53SAndroid Build Coastguard Worker 	    (a->proto && (a->proto != b->proto)) ||
189*4dc78e53SAndroid Build Coastguard Worker 	    (a->ifindex && a->ifindex != b->ifindex) ||
190*4dc78e53SAndroid Build Coastguard Worker 	    (a->user != b->user))
191*4dc78e53SAndroid Build Coastguard Worker 		return 1;
192*4dc78e53SAndroid Build Coastguard Worker 
193*4dc78e53SAndroid Build Coastguard Worker 	/* The objects are identical */
194*4dc78e53SAndroid Build Coastguard Worker 	return 0;
195*4dc78e53SAndroid Build Coastguard Worker }
196*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_dump(struct xfrmnl_sel * sel,struct nl_dump_params * p)197*4dc78e53SAndroid Build Coastguard Worker void xfrmnl_sel_dump(struct xfrmnl_sel* sel, struct nl_dump_params *p)
198*4dc78e53SAndroid Build Coastguard Worker {
199*4dc78e53SAndroid Build Coastguard Worker 	char    dst[INET6_ADDRSTRLEN+5], src[INET6_ADDRSTRLEN+5];
200*4dc78e53SAndroid Build Coastguard Worker 	char    buf [128];
201*4dc78e53SAndroid Build Coastguard Worker 
202*4dc78e53SAndroid Build Coastguard Worker 	nl_dump_line(p, "\t\tsrc %s dst %s family: %s\n", nl_addr2str(sel->saddr, src, sizeof(src)),
203*4dc78e53SAndroid Build Coastguard Worker 	              nl_addr2str (sel->daddr, dst, sizeof (dst)), nl_af2str (sel->family, buf, 128));
204*4dc78e53SAndroid Build Coastguard Worker 	nl_dump_line (p, "\t\tsrc port/mask: %d/%d dst port/mask: %d/%d\n",
205*4dc78e53SAndroid Build Coastguard Worker 	              sel->dport, sel->dport_mask, sel->sport, sel->sport_mask);
206*4dc78e53SAndroid Build Coastguard Worker 	nl_dump_line (p, "\t\tprotocol: %s ifindex: %u user: %u\n",
207*4dc78e53SAndroid Build Coastguard Worker 	              nl_ip_proto2str (sel->proto, buf, sizeof(buf)), sel->ifindex, sel->user);
208*4dc78e53SAndroid Build Coastguard Worker 
209*4dc78e53SAndroid Build Coastguard Worker 	return;
210*4dc78e53SAndroid Build Coastguard Worker }
211*4dc78e53SAndroid Build Coastguard Worker 
212*4dc78e53SAndroid Build Coastguard Worker 
213*4dc78e53SAndroid Build Coastguard Worker /** @} */
214*4dc78e53SAndroid Build Coastguard Worker 
215*4dc78e53SAndroid Build Coastguard Worker /**
216*4dc78e53SAndroid Build Coastguard Worker  * @name Attributes
217*4dc78e53SAndroid Build Coastguard Worker  * @{
218*4dc78e53SAndroid Build Coastguard Worker  */
xfrmnl_sel_get_daddr(struct xfrmnl_sel * sel)219*4dc78e53SAndroid Build Coastguard Worker struct nl_addr* xfrmnl_sel_get_daddr (struct xfrmnl_sel* sel)
220*4dc78e53SAndroid Build Coastguard Worker {
221*4dc78e53SAndroid Build Coastguard Worker 	return sel->daddr;
222*4dc78e53SAndroid Build Coastguard Worker }
223*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_set_daddr(struct xfrmnl_sel * sel,struct nl_addr * addr)224*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_set_daddr (struct xfrmnl_sel* sel, struct nl_addr* addr)
225*4dc78e53SAndroid Build Coastguard Worker {
226*4dc78e53SAndroid Build Coastguard Worker 	/* Increment reference counter on this to keep this address
227*4dc78e53SAndroid Build Coastguard Worker 	 * object around while selector in use */
228*4dc78e53SAndroid Build Coastguard Worker 	nl_addr_get(addr);
229*4dc78e53SAndroid Build Coastguard Worker 
230*4dc78e53SAndroid Build Coastguard Worker 	sel->daddr = addr;
231*4dc78e53SAndroid Build Coastguard Worker 
232*4dc78e53SAndroid Build Coastguard Worker 	return 0;
233*4dc78e53SAndroid Build Coastguard Worker }
234*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_get_saddr(struct xfrmnl_sel * sel)235*4dc78e53SAndroid Build Coastguard Worker struct nl_addr* xfrmnl_sel_get_saddr (struct xfrmnl_sel* sel)
236*4dc78e53SAndroid Build Coastguard Worker {
237*4dc78e53SAndroid Build Coastguard Worker 	return sel->saddr;
238*4dc78e53SAndroid Build Coastguard Worker }
239*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_set_saddr(struct xfrmnl_sel * sel,struct nl_addr * addr)240*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_set_saddr (struct xfrmnl_sel* sel, struct nl_addr* addr)
241*4dc78e53SAndroid Build Coastguard Worker {
242*4dc78e53SAndroid Build Coastguard Worker 	/* Increment reference counter on this to keep this address
243*4dc78e53SAndroid Build Coastguard Worker 	 * object around while selector in use */
244*4dc78e53SAndroid Build Coastguard Worker 	nl_addr_get(addr);
245*4dc78e53SAndroid Build Coastguard Worker 
246*4dc78e53SAndroid Build Coastguard Worker 	sel->saddr = addr;
247*4dc78e53SAndroid Build Coastguard Worker 
248*4dc78e53SAndroid Build Coastguard Worker 	return 0;
249*4dc78e53SAndroid Build Coastguard Worker }
250*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_get_dport(struct xfrmnl_sel * sel)251*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_get_dport (struct xfrmnl_sel* sel)
252*4dc78e53SAndroid Build Coastguard Worker {
253*4dc78e53SAndroid Build Coastguard Worker 	return sel->dport;
254*4dc78e53SAndroid Build Coastguard Worker }
255*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_set_dport(struct xfrmnl_sel * sel,unsigned int dport)256*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_set_dport (struct xfrmnl_sel* sel, unsigned int dport)
257*4dc78e53SAndroid Build Coastguard Worker {
258*4dc78e53SAndroid Build Coastguard Worker 	sel->dport = dport;
259*4dc78e53SAndroid Build Coastguard Worker 
260*4dc78e53SAndroid Build Coastguard Worker 	return 0;
261*4dc78e53SAndroid Build Coastguard Worker }
262*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_get_dportmask(struct xfrmnl_sel * sel)263*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_get_dportmask (struct xfrmnl_sel* sel)
264*4dc78e53SAndroid Build Coastguard Worker {
265*4dc78e53SAndroid Build Coastguard Worker 	return sel->dport_mask;
266*4dc78e53SAndroid Build Coastguard Worker }
267*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_set_dportmask(struct xfrmnl_sel * sel,unsigned int dport_mask)268*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_set_dportmask (struct xfrmnl_sel* sel, unsigned int dport_mask)
269*4dc78e53SAndroid Build Coastguard Worker {
270*4dc78e53SAndroid Build Coastguard Worker 	sel->dport_mask = dport_mask;
271*4dc78e53SAndroid Build Coastguard Worker 
272*4dc78e53SAndroid Build Coastguard Worker 	return 0;
273*4dc78e53SAndroid Build Coastguard Worker }
274*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_get_sport(struct xfrmnl_sel * sel)275*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_get_sport (struct xfrmnl_sel* sel)
276*4dc78e53SAndroid Build Coastguard Worker {
277*4dc78e53SAndroid Build Coastguard Worker 	return sel->sport;
278*4dc78e53SAndroid Build Coastguard Worker }
279*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_set_sport(struct xfrmnl_sel * sel,unsigned int sport)280*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_set_sport (struct xfrmnl_sel* sel, unsigned int sport)
281*4dc78e53SAndroid Build Coastguard Worker {
282*4dc78e53SAndroid Build Coastguard Worker 	sel->sport = sport;
283*4dc78e53SAndroid Build Coastguard Worker 
284*4dc78e53SAndroid Build Coastguard Worker 	return 0;
285*4dc78e53SAndroid Build Coastguard Worker }
286*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_get_sportmask(struct xfrmnl_sel * sel)287*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_get_sportmask (struct xfrmnl_sel* sel)
288*4dc78e53SAndroid Build Coastguard Worker {
289*4dc78e53SAndroid Build Coastguard Worker 	return sel->sport_mask;
290*4dc78e53SAndroid Build Coastguard Worker }
291*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_set_sportmask(struct xfrmnl_sel * sel,unsigned int sport_mask)292*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_set_sportmask (struct xfrmnl_sel* sel, unsigned int sport_mask)
293*4dc78e53SAndroid Build Coastguard Worker {
294*4dc78e53SAndroid Build Coastguard Worker 	sel->sport_mask = sport_mask;
295*4dc78e53SAndroid Build Coastguard Worker 
296*4dc78e53SAndroid Build Coastguard Worker 	return 0;
297*4dc78e53SAndroid Build Coastguard Worker }
298*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_get_family(struct xfrmnl_sel * sel)299*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_get_family(struct xfrmnl_sel *sel)
300*4dc78e53SAndroid Build Coastguard Worker {
301*4dc78e53SAndroid Build Coastguard Worker 	return sel->family;
302*4dc78e53SAndroid Build Coastguard Worker }
303*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_set_family(struct xfrmnl_sel * sel,unsigned int family)304*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_set_family(struct xfrmnl_sel *sel, unsigned int family)
305*4dc78e53SAndroid Build Coastguard Worker {
306*4dc78e53SAndroid Build Coastguard Worker 	sel->family = family;
307*4dc78e53SAndroid Build Coastguard Worker 
308*4dc78e53SAndroid Build Coastguard Worker 	return 0;
309*4dc78e53SAndroid Build Coastguard Worker }
310*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_get_prefixlen_d(struct xfrmnl_sel * sel)311*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_get_prefixlen_d (struct xfrmnl_sel* sel)
312*4dc78e53SAndroid Build Coastguard Worker {
313*4dc78e53SAndroid Build Coastguard Worker 	return sel->prefixlen_d;
314*4dc78e53SAndroid Build Coastguard Worker }
315*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_set_prefixlen_d(struct xfrmnl_sel * sel,unsigned int prefixlen)316*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_set_prefixlen_d (struct xfrmnl_sel* sel, unsigned int prefixlen)
317*4dc78e53SAndroid Build Coastguard Worker {
318*4dc78e53SAndroid Build Coastguard Worker 	sel->prefixlen_d = prefixlen;
319*4dc78e53SAndroid Build Coastguard Worker 
320*4dc78e53SAndroid Build Coastguard Worker 	return 0;
321*4dc78e53SAndroid Build Coastguard Worker }
322*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_get_prefixlen_s(struct xfrmnl_sel * sel)323*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_get_prefixlen_s (struct xfrmnl_sel* sel)
324*4dc78e53SAndroid Build Coastguard Worker {
325*4dc78e53SAndroid Build Coastguard Worker 	return sel->prefixlen_s;
326*4dc78e53SAndroid Build Coastguard Worker }
327*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_set_prefixlen_s(struct xfrmnl_sel * sel,unsigned int prefixlen)328*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_set_prefixlen_s (struct xfrmnl_sel* sel, unsigned int prefixlen)
329*4dc78e53SAndroid Build Coastguard Worker {
330*4dc78e53SAndroid Build Coastguard Worker 	sel->prefixlen_s = prefixlen;
331*4dc78e53SAndroid Build Coastguard Worker 
332*4dc78e53SAndroid Build Coastguard Worker 	return 0;
333*4dc78e53SAndroid Build Coastguard Worker }
334*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_get_proto(struct xfrmnl_sel * sel)335*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_get_proto (struct xfrmnl_sel* sel)
336*4dc78e53SAndroid Build Coastguard Worker {
337*4dc78e53SAndroid Build Coastguard Worker 	return sel->proto;
338*4dc78e53SAndroid Build Coastguard Worker }
339*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_set_proto(struct xfrmnl_sel * sel,unsigned int protocol)340*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_set_proto (struct xfrmnl_sel* sel, unsigned int protocol)
341*4dc78e53SAndroid Build Coastguard Worker {
342*4dc78e53SAndroid Build Coastguard Worker 	sel->proto = protocol;
343*4dc78e53SAndroid Build Coastguard Worker 
344*4dc78e53SAndroid Build Coastguard Worker 	return 0;
345*4dc78e53SAndroid Build Coastguard Worker }
346*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_get_ifindex(struct xfrmnl_sel * sel)347*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_get_ifindex (struct xfrmnl_sel* sel)
348*4dc78e53SAndroid Build Coastguard Worker {
349*4dc78e53SAndroid Build Coastguard Worker 	return sel->ifindex;
350*4dc78e53SAndroid Build Coastguard Worker }
351*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_set_ifindex(struct xfrmnl_sel * sel,unsigned int ifindex)352*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_set_ifindex (struct xfrmnl_sel* sel, unsigned int ifindex)
353*4dc78e53SAndroid Build Coastguard Worker {
354*4dc78e53SAndroid Build Coastguard Worker 	sel->ifindex = ifindex;
355*4dc78e53SAndroid Build Coastguard Worker 
356*4dc78e53SAndroid Build Coastguard Worker 	return 0;
357*4dc78e53SAndroid Build Coastguard Worker }
358*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_get_userid(struct xfrmnl_sel * sel)359*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_get_userid (struct xfrmnl_sel* sel)
360*4dc78e53SAndroid Build Coastguard Worker {
361*4dc78e53SAndroid Build Coastguard Worker 	return sel->user;
362*4dc78e53SAndroid Build Coastguard Worker }
363*4dc78e53SAndroid Build Coastguard Worker 
xfrmnl_sel_set_userid(struct xfrmnl_sel * sel,unsigned int userid)364*4dc78e53SAndroid Build Coastguard Worker int xfrmnl_sel_set_userid (struct xfrmnl_sel* sel, unsigned int userid)
365*4dc78e53SAndroid Build Coastguard Worker {
366*4dc78e53SAndroid Build Coastguard Worker 	sel->user   = userid;
367*4dc78e53SAndroid Build Coastguard Worker 	return 0;
368*4dc78e53SAndroid Build Coastguard Worker }
369*4dc78e53SAndroid Build Coastguard Worker 
370*4dc78e53SAndroid Build Coastguard Worker 
371*4dc78e53SAndroid Build Coastguard Worker /** @} */
372