OSDN Git Service

2013.10.24
[uclinux-h8/uClinux-dist.git] / freeswan / lib / pfkey_v2_ext_bits.c
1 /*
2  * RFC2367 PF_KEYv2 Key management API message parser
3  * Copyright (C) 1999, 2000, 2001  Richard Guy Briggs.
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  * RCSID $Id: pfkey_v2_ext_bits.c,v 1.13 2002/01/29 22:25:36 rgb Exp $
16  */
17
18 /*
19  *              Template from klips/net/ipsec/ipsec/ipsec_parse.c.
20  */
21
22 char pfkey_v2_ext_bits_c_version[] = "$Id: pfkey_v2_ext_bits.c,v 1.13 2002/01/29 22:25:36 rgb Exp $";
23
24 /*
25  * Some ugly stuff to allow consistent debugging code for use in the
26  * kernel and in user space
27 */
28
29 #ifdef __KERNEL__
30
31 # include <linux/kernel.h>  /* for printk */
32
33 # include "ipsec_kversion.h" /* for malloc switch */
34 # ifdef MALLOC_SLAB
35 #  include <linux/slab.h> /* kmalloc() */
36 # else /* MALLOC_SLAB */
37 #  include <linux/malloc.h> /* kmalloc() */
38 # endif /* MALLOC_SLAB */
39 # include <linux/errno.h>  /* error codes */
40 # include <linux/types.h>  /* size_t */
41 # include <linux/interrupt.h> /* mark_bh */
42
43 # include <linux/netdevice.h>   /* struct device, and other headers */
44 # include <linux/etherdevice.h> /* eth_type_trans */
45 # include <linux/ip.h>          /* struct iphdr */ 
46 # if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
47 #  include <linux/ipv6.h>
48 # endif /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */
49
50 #else /* __KERNEL__ */
51
52 # include <sys/types.h>
53 # include <linux/types.h>
54 # include <linux/errno.h>
55 #endif
56
57 #include <freeswan.h>
58 #include <pfkeyv2.h>
59 #include <pfkey.h>
60
61 unsigned int extensions_bitmaps[2/*in/out*/][2/*perm/req*/][SADB_MAX + 1/*ext*/] = {
62
63 /* INBOUND EXTENSIONS */
64 {
65
66 /* PERMITTED IN */
67 {
68 /* SADB_RESERVED */
69 0
70 ,
71 /* SADB_GETSPI */
72 1<<SADB_EXT_RESERVED
73 | 1<<SADB_EXT_ADDRESS_SRC
74 | 1<<SADB_EXT_ADDRESS_DST
75 | 1<<SADB_EXT_ADDRESS_PROXY
76 | 1<<SADB_EXT_SPIRANGE
77 ,
78 /* SADB_UPDATE */
79 1<<SADB_EXT_RESERVED
80 | 1<<SADB_EXT_SA
81 | 1<<SADB_EXT_LIFETIME_CURRENT
82 | 1<<SADB_EXT_LIFETIME_HARD
83 | 1<<SADB_EXT_LIFETIME_SOFT
84 | 1<<SADB_EXT_ADDRESS_SRC
85 | 1<<SADB_EXT_ADDRESS_DST
86 | 1<<SADB_EXT_ADDRESS_PROXY
87 | 1<<SADB_EXT_KEY_AUTH
88 | 1<<SADB_EXT_KEY_ENCRYPT
89 | 1<<SADB_EXT_IDENTITY_SRC
90 | 1<<SADB_EXT_IDENTITY_DST
91 | 1<<SADB_EXT_SENSITIVITY
92 #ifdef NAT_TRAVERSAL
93 | 1<<SADB_X_EXT_NAT_T_SPORT
94 | 1<<SADB_X_EXT_NAT_T_DPORT
95 #endif
96 ,
97 /* SADB_ADD */
98 1<<SADB_EXT_RESERVED
99 | 1<<SADB_EXT_SA
100 | 1<<SADB_EXT_LIFETIME_HARD
101 | 1<<SADB_EXT_LIFETIME_SOFT
102 | 1<<SADB_EXT_ADDRESS_SRC
103 | 1<<SADB_EXT_ADDRESS_DST
104 | 1<<SADB_EXT_ADDRESS_PROXY
105 | 1<<SADB_EXT_KEY_AUTH
106 | 1<<SADB_EXT_KEY_ENCRYPT
107 | 1<<SADB_EXT_IDENTITY_SRC
108 | 1<<SADB_EXT_IDENTITY_DST
109 | 1<<SADB_EXT_SENSITIVITY
110 #ifdef NAT_TRAVERSAL
111 | 1<<SADB_X_EXT_NAT_T_TYPE
112 | 1<<SADB_X_EXT_NAT_T_SPORT
113 | 1<<SADB_X_EXT_NAT_T_DPORT
114 | 1<<SADB_X_EXT_NAT_T_OA
115 #endif
116 ,
117 /* SADB_DELETE */
118 1<<SADB_EXT_RESERVED
119 | 1<<SADB_EXT_SA
120 | 1<<SADB_EXT_ADDRESS_SRC
121 | 1<<SADB_EXT_ADDRESS_DST
122 ,
123 /* SADB_GET */
124 1<<SADB_EXT_RESERVED
125 | 1<<SADB_EXT_SA
126 | 1<<SADB_EXT_ADDRESS_SRC
127 | 1<<SADB_EXT_ADDRESS_DST
128 ,
129 /* SADB_ACQUIRE */
130 1<<SADB_EXT_RESERVED
131 | 1<<SADB_EXT_ADDRESS_SRC
132 | 1<<SADB_EXT_ADDRESS_DST
133 | 1<<SADB_EXT_ADDRESS_PROXY
134 | 1<<SADB_EXT_IDENTITY_SRC
135 | 1<<SADB_EXT_IDENTITY_DST
136 | 1<<SADB_EXT_SENSITIVITY
137 | 1<<SADB_EXT_PROPOSAL
138 ,
139 /* SADB_REGISTER */
140 1<<SADB_EXT_RESERVED
141 ,
142 /* SADB_EXPIRE */
143 0
144 ,
145 /* SADB_FLUSH */
146 1<<SADB_EXT_RESERVED
147 ,
148 /* SADB_DUMP */
149 1<<SADB_EXT_RESERVED
150 ,
151 /* SADB_X_PROMISC */
152 1<<SADB_EXT_RESERVED
153 | 1<<SADB_EXT_SA
154 | 1<<SADB_EXT_LIFETIME_CURRENT
155 | 1<<SADB_EXT_LIFETIME_HARD
156 | 1<<SADB_EXT_LIFETIME_SOFT
157 | 1<<SADB_EXT_ADDRESS_SRC
158 | 1<<SADB_EXT_ADDRESS_DST
159 | 1<<SADB_EXT_ADDRESS_PROXY
160 | 1<<SADB_EXT_KEY_AUTH
161 | 1<<SADB_EXT_KEY_ENCRYPT
162 | 1<<SADB_EXT_IDENTITY_SRC
163 | 1<<SADB_EXT_IDENTITY_DST
164 | 1<<SADB_EXT_SENSITIVITY
165 | 1<<SADB_EXT_PROPOSAL
166 | 1<<SADB_EXT_SUPPORTED_AUTH
167 | 1<<SADB_EXT_SUPPORTED_ENCRYPT
168 | 1<<SADB_EXT_SPIRANGE
169 | 1<<SADB_X_EXT_KMPRIVATE
170 | 1<<SADB_X_EXT_SATYPE2
171 | 1<<SADB_X_EXT_SA2
172 | 1<<SADB_X_EXT_ADDRESS_DST2
173 ,
174 /* SADB_X_PCHANGE */
175 1<<SADB_EXT_RESERVED
176 | 1<<SADB_EXT_SA
177 | 1<<SADB_EXT_LIFETIME_CURRENT
178 | 1<<SADB_EXT_LIFETIME_HARD
179 | 1<<SADB_EXT_LIFETIME_SOFT
180 | 1<<SADB_EXT_ADDRESS_SRC
181 | 1<<SADB_EXT_ADDRESS_DST
182 | 1<<SADB_EXT_ADDRESS_PROXY
183 | 1<<SADB_EXT_KEY_AUTH
184 | 1<<SADB_EXT_KEY_ENCRYPT
185 | 1<<SADB_EXT_IDENTITY_SRC
186 | 1<<SADB_EXT_IDENTITY_DST
187 | 1<<SADB_EXT_SENSITIVITY
188 | 1<<SADB_EXT_PROPOSAL
189 | 1<<SADB_EXT_SUPPORTED_AUTH
190 | 1<<SADB_EXT_SUPPORTED_ENCRYPT
191 | 1<<SADB_EXT_SPIRANGE
192 | 1<<SADB_X_EXT_KMPRIVATE
193 | 1<<SADB_X_EXT_SATYPE2
194 | 1<<SADB_X_EXT_SA2
195 | 1<<SADB_X_EXT_ADDRESS_DST2
196 ,
197 /* SADB_X_GRPSA */
198 1<<SADB_EXT_RESERVED
199 | 1<<SADB_EXT_SA
200 | 1<<SADB_EXT_ADDRESS_DST
201 | 1<<SADB_X_EXT_SATYPE2
202 | 1<<SADB_X_EXT_SA2
203 | 1<<SADB_X_EXT_ADDRESS_DST2
204 ,
205 /* SADB_X_ADDFLOW */
206 1<<SADB_EXT_RESERVED
207 | 1<<SADB_EXT_SA
208 | 1<<SADB_EXT_ADDRESS_SRC
209 | 1<<SADB_EXT_ADDRESS_DST
210 | 1<<SADB_X_EXT_ADDRESS_SRC_FLOW
211 | 1<<SADB_X_EXT_ADDRESS_DST_FLOW
212 | 1<<SADB_X_EXT_ADDRESS_SRC_MASK
213 | 1<<SADB_X_EXT_ADDRESS_DST_MASK
214 | 1<<SADB_EXT_IDENTITY_SRC
215 | 1<<SADB_EXT_IDENTITY_DST
216 ,
217 /* SADB_X_DELFLOW */
218 1<<SADB_EXT_RESERVED
219 | 1<<SADB_EXT_SA
220 | 1<<SADB_X_EXT_ADDRESS_SRC_FLOW
221 | 1<<SADB_X_EXT_ADDRESS_DST_FLOW
222 | 1<<SADB_X_EXT_ADDRESS_SRC_MASK
223 | 1<<SADB_X_EXT_ADDRESS_DST_MASK
224 | 1<<SADB_EXT_IDENTITY_SRC
225 | 1<<SADB_EXT_IDENTITY_DST
226 ,
227 /* SADB_X_DEBUG */
228 1<<SADB_EXT_RESERVED
229 | 1<<SADB_X_EXT_DEBUG
230 #ifdef NAT_TRAVERSAL
231 ,
232 /* SADB_X_NAT_T_NEW_MAPPING */
233 1<<SADB_EXT_RESERVED
234 | 1<<SADB_EXT_SA
235 | 1<<SADB_EXT_ADDRESS_SRC
236 | 1<<SADB_EXT_ADDRESS_DST
237 | 1<<SADB_X_EXT_NAT_T_SPORT
238 | 1<<SADB_X_EXT_NAT_T_DPORT
239 #endif
240 },
241
242 /* REQUIRED IN */
243 {
244 /* SADB_RESERVED */
245 0
246 ,
247 /* SADB_GETSPI */
248 1<<SADB_EXT_RESERVED
249 | 1<<SADB_EXT_ADDRESS_SRC
250 | 1<<SADB_EXT_ADDRESS_DST
251 | 1<<SADB_EXT_SPIRANGE
252 ,
253 /* SADB_UPDATE */
254 1<<SADB_EXT_RESERVED
255 | 1<<SADB_EXT_SA
256 | 1<<SADB_EXT_ADDRESS_SRC
257 | 1<<SADB_EXT_ADDRESS_DST
258 /*| 1<<SADB_EXT_KEY_AUTH*/
259 /*| 1<<SADB_EXT_KEY_ENCRYPT*/
260 ,
261 /* SADB_ADD */
262 1<<SADB_EXT_RESERVED
263 | 1<<SADB_EXT_SA
264 | 1<<SADB_EXT_ADDRESS_SRC
265 | 1<<SADB_EXT_ADDRESS_DST
266 /*| 1<<SADB_EXT_KEY_AUTH*/
267 /*| 1<<SADB_EXT_KEY_ENCRYPT*/
268 ,
269 /* SADB_DELETE */
270 1<<SADB_EXT_RESERVED
271 | 1<<SADB_EXT_SA
272 | 1<<SADB_EXT_ADDRESS_SRC
273 | 1<<SADB_EXT_ADDRESS_DST
274 ,
275 /* SADB_GET */
276 1<<SADB_EXT_RESERVED
277 | 1<<SADB_EXT_SA
278 | 1<<SADB_EXT_ADDRESS_SRC
279 | 1<<SADB_EXT_ADDRESS_DST
280 ,
281 /* SADB_ACQUIRE */
282 1<<SADB_EXT_RESERVED
283 | 1<<SADB_EXT_ADDRESS_SRC
284 | 1<<SADB_EXT_ADDRESS_DST
285 | 1<<SADB_EXT_PROPOSAL
286 ,
287 /* SADB_REGISTER */
288 1<<SADB_EXT_RESERVED
289 ,
290 /* SADB_EXPIRE */
291 0
292 ,
293 /* SADB_FLUSH */
294 1<<SADB_EXT_RESERVED
295 ,
296 /* SADB_DUMP */
297 1<<SADB_EXT_RESERVED
298 ,
299 /* SADB_X_PROMISC */
300 1<<SADB_EXT_RESERVED
301 | 1<<SADB_EXT_SA
302 | 1<<SADB_EXT_LIFETIME_CURRENT
303 | 1<<SADB_EXT_LIFETIME_HARD
304 | 1<<SADB_EXT_LIFETIME_SOFT
305 | 1<<SADB_EXT_ADDRESS_SRC
306 | 1<<SADB_EXT_ADDRESS_DST
307 | 1<<SADB_EXT_ADDRESS_PROXY
308 | 1<<SADB_EXT_KEY_AUTH
309 | 1<<SADB_EXT_KEY_ENCRYPT
310 | 1<<SADB_EXT_IDENTITY_SRC
311 | 1<<SADB_EXT_IDENTITY_DST
312 | 1<<SADB_EXT_SENSITIVITY
313 | 1<<SADB_EXT_PROPOSAL
314 | 1<<SADB_EXT_SUPPORTED_AUTH
315 | 1<<SADB_EXT_SUPPORTED_ENCRYPT
316 | 1<<SADB_EXT_SPIRANGE
317 | 1<<SADB_X_EXT_KMPRIVATE
318 | 1<<SADB_X_EXT_SATYPE2
319 | 1<<SADB_X_EXT_SA2
320 | 1<<SADB_X_EXT_ADDRESS_DST2
321 ,
322 /* SADB_X_PCHANGE */
323 1<<SADB_EXT_RESERVED
324 | 1<<SADB_EXT_SA
325 | 1<<SADB_EXT_LIFETIME_CURRENT
326 | 1<<SADB_EXT_LIFETIME_HARD
327 | 1<<SADB_EXT_LIFETIME_SOFT
328 | 1<<SADB_EXT_ADDRESS_SRC
329 | 1<<SADB_EXT_ADDRESS_DST
330 | 1<<SADB_EXT_ADDRESS_PROXY
331 | 1<<SADB_EXT_KEY_AUTH
332 | 1<<SADB_EXT_KEY_ENCRYPT
333 | 1<<SADB_EXT_IDENTITY_SRC
334 | 1<<SADB_EXT_IDENTITY_DST
335 | 1<<SADB_EXT_SENSITIVITY
336 | 1<<SADB_EXT_PROPOSAL
337 | 1<<SADB_EXT_SUPPORTED_AUTH
338 | 1<<SADB_EXT_SUPPORTED_ENCRYPT
339 | 1<<SADB_EXT_SPIRANGE
340 | 1<<SADB_X_EXT_KMPRIVATE
341 | 1<<SADB_X_EXT_SATYPE2
342 | 1<<SADB_X_EXT_SA2
343 | 1<<SADB_X_EXT_ADDRESS_DST2
344 ,
345 /* SADB_X_GRPSA */
346 1<<SADB_EXT_RESERVED
347 | 1<<SADB_EXT_SA
348 | 1<<SADB_EXT_ADDRESS_DST
349 /*| 1<<SADB_X_EXT_SATYPE2*/
350 /*| 1<<SADB_X_EXT_SA2*/
351 /*| 1<<SADB_X_EXT_ADDRESS_DST2*/
352 ,
353 /* SADB_X_ADDFLOW */
354 1<<SADB_EXT_RESERVED
355 | 1<<SADB_EXT_SA
356 | 1<<SADB_EXT_ADDRESS_DST
357 | 1<<SADB_X_EXT_ADDRESS_SRC_FLOW
358 | 1<<SADB_X_EXT_ADDRESS_DST_FLOW
359 | 1<<SADB_X_EXT_ADDRESS_SRC_MASK
360 | 1<<SADB_X_EXT_ADDRESS_DST_MASK
361 ,
362 /* SADB_X_DELFLOW */
363 1<<SADB_EXT_RESERVED
364 /*| 1<<SADB_EXT_SA*/
365 #if 0 /* SADB_X_CLREROUTE doesn't need all these... */
366 | 1<<SADB_X_EXT_ADDRESS_SRC_FLOW
367 | 1<<SADB_X_EXT_ADDRESS_DST_FLOW
368 | 1<<SADB_X_EXT_ADDRESS_SRC_MASK
369 | 1<<SADB_X_EXT_ADDRESS_DST_MASK
370 #endif
371 ,
372 /* SADB_X_DEBUG */
373 1<<SADB_EXT_RESERVED
374 | 1<<SADB_X_EXT_DEBUG
375 #ifdef NAT_TRAVERSAL
376 ,
377 /* SADB_X_NAT_T_NEW_MAPPING */
378 1<<SADB_EXT_RESERVED
379 | 1<<SADB_EXT_SA
380 | 1<<SADB_EXT_ADDRESS_SRC
381 | 1<<SADB_EXT_ADDRESS_DST
382 | 1<<SADB_X_EXT_NAT_T_SPORT
383 | 1<<SADB_X_EXT_NAT_T_DPORT
384 #endif
385 }
386
387 },
388
389 /* OUTBOUND EXTENSIONS */
390 {
391
392 /* PERMITTED OUT */
393 {
394 /* SADB_RESERVED */
395 0
396 ,
397 /* SADB_GETSPI */
398 1<<SADB_EXT_RESERVED
399 | 1<<SADB_EXT_SA
400 | 1<<SADB_EXT_ADDRESS_SRC
401 | 1<<SADB_EXT_ADDRESS_DST
402 ,
403 /* SADB_UPDATE */
404 1<<SADB_EXT_RESERVED
405 | 1<<SADB_EXT_SA
406 | 1<<SADB_EXT_LIFETIME_CURRENT
407 | 1<<SADB_EXT_LIFETIME_HARD
408 | 1<<SADB_EXT_LIFETIME_SOFT
409 | 1<<SADB_EXT_ADDRESS_SRC
410 | 1<<SADB_EXT_ADDRESS_DST
411 | 1<<SADB_EXT_ADDRESS_PROXY
412 | 1<<SADB_EXT_IDENTITY_SRC
413 | 1<<SADB_EXT_IDENTITY_DST
414 | 1<<SADB_EXT_SENSITIVITY
415 ,
416 /* SADB_ADD */
417 1<<SADB_EXT_RESERVED
418 | 1<<SADB_EXT_SA
419 | 1<<SADB_EXT_LIFETIME_HARD
420 | 1<<SADB_EXT_LIFETIME_SOFT
421 | 1<<SADB_EXT_ADDRESS_SRC
422 | 1<<SADB_EXT_ADDRESS_DST
423 | 1<<SADB_EXT_IDENTITY_SRC
424 | 1<<SADB_EXT_IDENTITY_DST
425 | 1<<SADB_EXT_SENSITIVITY
426 #ifdef NAT_TRAVERSAL
427 | 1<<SADB_X_EXT_NAT_T_TYPE
428 | 1<<SADB_X_EXT_NAT_T_SPORT
429 | 1<<SADB_X_EXT_NAT_T_DPORT
430 | 1<<SADB_X_EXT_NAT_T_OA
431 #endif
432 ,
433 /* SADB_DELETE */
434 1<<SADB_EXT_RESERVED
435 | 1<<SADB_EXT_SA
436 | 1<<SADB_EXT_ADDRESS_SRC
437 | 1<<SADB_EXT_ADDRESS_DST
438 ,
439 /* SADB_GET */
440 1<<SADB_EXT_RESERVED
441 | 1<<SADB_EXT_SA
442 | 1<<SADB_EXT_LIFETIME_CURRENT
443 | 1<<SADB_EXT_LIFETIME_HARD
444 | 1<<SADB_EXT_LIFETIME_SOFT
445 | 1<<SADB_EXT_ADDRESS_SRC
446 | 1<<SADB_EXT_ADDRESS_DST
447 | 1<<SADB_EXT_ADDRESS_PROXY
448 | 1<<SADB_EXT_KEY_AUTH
449 | 1<<SADB_EXT_KEY_ENCRYPT
450 | 1<<SADB_EXT_IDENTITY_SRC
451 | 1<<SADB_EXT_IDENTITY_DST
452 | 1<<SADB_EXT_SENSITIVITY
453 ,
454 /* SADB_ACQUIRE */
455 1<<SADB_EXT_RESERVED
456 | 1<<SADB_EXT_ADDRESS_SRC
457 | 1<<SADB_EXT_ADDRESS_DST
458 | 1<<SADB_EXT_ADDRESS_PROXY
459 | 1<<SADB_EXT_IDENTITY_SRC
460 | 1<<SADB_EXT_IDENTITY_DST
461 | 1<<SADB_EXT_SENSITIVITY
462 | 1<<SADB_EXT_PROPOSAL
463 ,
464 /* SADB_REGISTER */
465 1<<SADB_EXT_RESERVED
466 | 1<<SADB_EXT_SUPPORTED_AUTH
467 | 1<<SADB_EXT_SUPPORTED_ENCRYPT
468 ,
469 /* SADB_EXPIRE */
470 1<<SADB_EXT_RESERVED
471 | 1<<SADB_EXT_SA
472 | 1<<SADB_EXT_LIFETIME_CURRENT
473 | 1<<SADB_EXT_LIFETIME_HARD
474 | 1<<SADB_EXT_LIFETIME_SOFT
475 | 1<<SADB_EXT_ADDRESS_SRC
476 | 1<<SADB_EXT_ADDRESS_DST
477 ,
478 /* SADB_FLUSH */
479 1<<SADB_EXT_RESERVED
480 ,
481 /* SADB_DUMP */
482 1<<SADB_EXT_RESERVED
483 | 1<<SADB_EXT_SA
484 | 1<<SADB_EXT_LIFETIME_CURRENT
485 | 1<<SADB_EXT_LIFETIME_HARD
486 | 1<<SADB_EXT_LIFETIME_SOFT
487 | 1<<SADB_EXT_ADDRESS_SRC
488 | 1<<SADB_EXT_ADDRESS_DST
489 | 1<<SADB_EXT_ADDRESS_PROXY
490 | 1<<SADB_EXT_KEY_AUTH
491 | 1<<SADB_EXT_KEY_ENCRYPT
492 | 1<<SADB_EXT_IDENTITY_SRC
493 | 1<<SADB_EXT_IDENTITY_DST
494 | 1<<SADB_EXT_SENSITIVITY
495 ,
496 /* SADB_X_PROMISC */
497 1<<SADB_EXT_RESERVED
498 | 1<<SADB_EXT_SA
499 | 1<<SADB_EXT_LIFETIME_CURRENT
500 | 1<<SADB_EXT_LIFETIME_HARD
501 | 1<<SADB_EXT_LIFETIME_SOFT
502 | 1<<SADB_EXT_ADDRESS_SRC
503 | 1<<SADB_EXT_ADDRESS_DST
504 | 1<<SADB_EXT_ADDRESS_PROXY
505 | 1<<SADB_EXT_KEY_AUTH
506 | 1<<SADB_EXT_KEY_ENCRYPT
507 | 1<<SADB_EXT_IDENTITY_SRC
508 | 1<<SADB_EXT_IDENTITY_DST
509 | 1<<SADB_EXT_SENSITIVITY
510 | 1<<SADB_EXT_PROPOSAL
511 | 1<<SADB_EXT_SUPPORTED_AUTH
512 | 1<<SADB_EXT_SUPPORTED_ENCRYPT
513 | 1<<SADB_EXT_SPIRANGE
514 | 1<<SADB_X_EXT_KMPRIVATE
515 | 1<<SADB_X_EXT_SATYPE2
516 | 1<<SADB_X_EXT_SA2
517 | 1<<SADB_X_EXT_ADDRESS_DST2
518 ,
519 /* SADB_X_PCHANGE */
520 1<<SADB_EXT_RESERVED
521 | 1<<SADB_EXT_SA
522 | 1<<SADB_EXT_LIFETIME_CURRENT
523 | 1<<SADB_EXT_LIFETIME_HARD
524 | 1<<SADB_EXT_LIFETIME_SOFT
525 | 1<<SADB_EXT_ADDRESS_SRC
526 | 1<<SADB_EXT_ADDRESS_DST
527 | 1<<SADB_EXT_ADDRESS_PROXY
528 | 1<<SADB_EXT_KEY_AUTH
529 | 1<<SADB_EXT_KEY_ENCRYPT
530 | 1<<SADB_EXT_IDENTITY_SRC
531 | 1<<SADB_EXT_IDENTITY_DST
532 | 1<<SADB_EXT_SENSITIVITY
533 | 1<<SADB_EXT_PROPOSAL
534 | 1<<SADB_EXT_SUPPORTED_AUTH
535 | 1<<SADB_EXT_SUPPORTED_ENCRYPT
536 | 1<<SADB_EXT_SPIRANGE
537 | 1<<SADB_X_EXT_KMPRIVATE
538 | 1<<SADB_X_EXT_SATYPE2
539 | 1<<SADB_X_EXT_SA2
540 | 1<<SADB_X_EXT_ADDRESS_DST2
541 ,
542 /* SADB_X_GRPSA */
543 1<<SADB_EXT_RESERVED
544 | 1<<SADB_EXT_SA
545 | 1<<SADB_EXT_ADDRESS_DST
546 | 1<<SADB_X_EXT_SATYPE2
547 | 1<<SADB_X_EXT_SA2
548 | 1<<SADB_X_EXT_ADDRESS_DST2
549 ,
550 /* SADB_X_ADDFLOW */
551 1<<SADB_EXT_RESERVED
552 | 1<<SADB_EXT_SA
553 | 1<<SADB_EXT_ADDRESS_SRC
554 | 1<<SADB_EXT_ADDRESS_DST
555 | 1<<SADB_X_EXT_ADDRESS_SRC_FLOW
556 | 1<<SADB_X_EXT_ADDRESS_DST_FLOW
557 | 1<<SADB_X_EXT_ADDRESS_SRC_MASK
558 | 1<<SADB_X_EXT_ADDRESS_DST_MASK
559 ,
560 /* SADB_X_DELFLOW */
561 1<<SADB_EXT_RESERVED
562 | 1<<SADB_EXT_SA
563 | 1<<SADB_X_EXT_ADDRESS_SRC_FLOW
564 | 1<<SADB_X_EXT_ADDRESS_DST_FLOW
565 | 1<<SADB_X_EXT_ADDRESS_SRC_MASK
566 | 1<<SADB_X_EXT_ADDRESS_DST_MASK
567 ,
568 /* SADB_X_DEBUG */
569 1<<SADB_EXT_RESERVED
570 | 1<<SADB_X_EXT_DEBUG
571 #ifdef NAT_TRAVERSAL
572 ,
573 /* SADB_X_NAT_T_NEW_MAPPING */
574 1<<SADB_EXT_RESERVED
575 | 1<<SADB_EXT_SA
576 | 1<<SADB_EXT_ADDRESS_SRC
577 | 1<<SADB_EXT_ADDRESS_DST
578 | 1<<SADB_X_EXT_NAT_T_SPORT
579 | 1<<SADB_X_EXT_NAT_T_DPORT
580 #endif
581 },
582
583 /* REQUIRED OUT */
584 {
585 /* SADB_RESERVED */
586 0
587 ,
588 /* SADB_GETSPI */
589 1<<SADB_EXT_RESERVED
590 | 1<<SADB_EXT_SA
591 | 1<<SADB_EXT_ADDRESS_SRC
592 | 1<<SADB_EXT_ADDRESS_DST
593 ,
594 /* SADB_UPDATE */
595 1<<SADB_EXT_RESERVED
596 | 1<<SADB_EXT_SA
597 | 1<<SADB_EXT_ADDRESS_SRC
598 | 1<<SADB_EXT_ADDRESS_DST
599 ,
600 /* SADB_ADD */
601 1<<SADB_EXT_RESERVED
602 | 1<<SADB_EXT_SA
603 | 1<<SADB_EXT_ADDRESS_SRC
604 | 1<<SADB_EXT_ADDRESS_DST
605 ,
606 /* SADB_DELETE */
607 1<<SADB_EXT_RESERVED
608 | 1<<SADB_EXT_SA
609 | 1<<SADB_EXT_ADDRESS_SRC
610 | 1<<SADB_EXT_ADDRESS_DST
611 ,
612 /* SADB_GET */
613 1<<SADB_EXT_RESERVED
614 | 1<<SADB_EXT_SA
615 | 1<<SADB_EXT_ADDRESS_SRC
616 | 1<<SADB_EXT_ADDRESS_DST
617 /* | 1<<SADB_EXT_KEY_AUTH */
618 /* | 1<<SADB_EXT_KEY_ENCRYPT */
619 ,
620 /* SADB_ACQUIRE */
621 1<<SADB_EXT_RESERVED
622 | 1<<SADB_EXT_ADDRESS_SRC
623 | 1<<SADB_EXT_ADDRESS_DST
624 | 1<<SADB_EXT_PROPOSAL
625 ,
626 /* SADB_REGISTER */
627 1<<SADB_EXT_RESERVED
628 /* | 1<<SADB_EXT_SUPPORTED_AUTH
629    | 1<<SADB_EXT_SUPPORTED_ENCRYPT */
630 ,
631 /* SADB_EXPIRE */
632 1<<SADB_EXT_RESERVED
633 | 1<<SADB_EXT_SA
634 | 1<<SADB_EXT_LIFETIME_CURRENT
635 /* | 1<<SADB_EXT_LIFETIME_HARD
636    | 1<<SADB_EXT_LIFETIME_SOFT */
637 | 1<<SADB_EXT_ADDRESS_SRC
638 | 1<<SADB_EXT_ADDRESS_DST
639 ,
640 /* SADB_FLUSH */
641 1<<SADB_EXT_RESERVED
642 ,
643 /* SADB_DUMP */
644 1<<SADB_EXT_RESERVED
645 | 1<<SADB_EXT_SA
646 | 1<<SADB_EXT_ADDRESS_SRC
647 | 1<<SADB_EXT_ADDRESS_DST
648 | 1<<SADB_EXT_KEY_AUTH
649 | 1<<SADB_EXT_KEY_ENCRYPT
650 ,
651 /* SADB_X_PROMISC */
652 1<<SADB_EXT_RESERVED
653 | 1<<SADB_EXT_SA
654 | 1<<SADB_EXT_LIFETIME_CURRENT
655 | 1<<SADB_EXT_LIFETIME_HARD
656 | 1<<SADB_EXT_LIFETIME_SOFT
657 | 1<<SADB_EXT_ADDRESS_SRC
658 | 1<<SADB_EXT_ADDRESS_DST
659 | 1<<SADB_EXT_ADDRESS_PROXY
660 | 1<<SADB_EXT_KEY_AUTH
661 | 1<<SADB_EXT_KEY_ENCRYPT
662 | 1<<SADB_EXT_IDENTITY_SRC
663 | 1<<SADB_EXT_IDENTITY_DST
664 | 1<<SADB_EXT_SENSITIVITY
665 | 1<<SADB_EXT_PROPOSAL
666 | 1<<SADB_EXT_SUPPORTED_AUTH
667 | 1<<SADB_EXT_SUPPORTED_ENCRYPT
668 | 1<<SADB_EXT_SPIRANGE
669 | 1<<SADB_X_EXT_KMPRIVATE
670 | 1<<SADB_X_EXT_SATYPE2
671 | 1<<SADB_X_EXT_SA2
672 | 1<<SADB_X_EXT_ADDRESS_DST2
673 ,
674 /* SADB_X_PCHANGE */
675 1<<SADB_EXT_RESERVED
676 | 1<<SADB_EXT_SA
677 | 1<<SADB_EXT_LIFETIME_CURRENT
678 | 1<<SADB_EXT_LIFETIME_HARD
679 | 1<<SADB_EXT_LIFETIME_SOFT
680 | 1<<SADB_EXT_ADDRESS_SRC
681 | 1<<SADB_EXT_ADDRESS_DST
682 | 1<<SADB_EXT_ADDRESS_PROXY
683 | 1<<SADB_EXT_KEY_AUTH
684 | 1<<SADB_EXT_KEY_ENCRYPT
685 | 1<<SADB_EXT_IDENTITY_SRC
686 | 1<<SADB_EXT_IDENTITY_DST
687 | 1<<SADB_EXT_SENSITIVITY
688 | 1<<SADB_EXT_PROPOSAL
689 | 1<<SADB_EXT_SUPPORTED_AUTH
690 | 1<<SADB_EXT_SUPPORTED_ENCRYPT
691 | 1<<SADB_EXT_SPIRANGE
692 | 1<<SADB_X_EXT_KMPRIVATE
693 | 1<<SADB_X_EXT_SATYPE2
694 | 1<<SADB_X_EXT_SA2
695 | 1<<SADB_X_EXT_ADDRESS_DST2
696 ,
697 /* SADB_X_GRPSA */
698 1<<SADB_EXT_RESERVED
699 | 1<<SADB_EXT_SA
700 | 1<<SADB_EXT_ADDRESS_DST
701 ,
702 /* SADB_X_ADDFLOW */
703 1<<SADB_EXT_RESERVED
704 | 1<<SADB_EXT_SA
705 | 1<<SADB_EXT_ADDRESS_DST
706 | 1<<SADB_X_EXT_ADDRESS_SRC_FLOW
707 | 1<<SADB_X_EXT_ADDRESS_DST_FLOW
708 | 1<<SADB_X_EXT_ADDRESS_SRC_MASK
709 | 1<<SADB_X_EXT_ADDRESS_DST_MASK
710 ,
711 /* SADB_X_DELFLOW */
712 1<<SADB_EXT_RESERVED
713 /*| 1<<SADB_EXT_SA*/
714 | 1<<SADB_X_EXT_ADDRESS_SRC_FLOW
715 | 1<<SADB_X_EXT_ADDRESS_DST_FLOW
716 | 1<<SADB_X_EXT_ADDRESS_SRC_MASK
717 | 1<<SADB_X_EXT_ADDRESS_DST_MASK
718 ,
719 /* SADB_X_DEBUG */
720 1<<SADB_EXT_RESERVED
721 | 1<<SADB_X_EXT_DEBUG
722 #ifdef NAT_TRAVERSAL
723 ,
724 /* SADB_X_NAT_T_NEW_MAPPING */
725 1<<SADB_EXT_RESERVED
726 | 1<<SADB_EXT_SA
727 | 1<<SADB_EXT_ADDRESS_SRC
728 | 1<<SADB_EXT_ADDRESS_DST
729 | 1<<SADB_X_EXT_NAT_T_SPORT
730 | 1<<SADB_X_EXT_NAT_T_DPORT
731 #endif
732 }
733 }
734 };
735
736 /*
737  * $Log: pfkey_v2_ext_bits.c,v $
738  * Revision 1.13  2002/01/29 22:25:36  rgb
739  * Re-add ipsec_kversion.h to keep MALLOC happy.
740  *
741  * Revision 1.12  2002/01/29 01:59:10  mcr
742  *      removal of kversions.h - sources that needed it now use ipsec_param.h.
743  *      updating of IPv6 structures to match latest in6.h version.
744  *      removed dead code from freeswan.h that also duplicated kversions.h
745  *      code.
746  *
747  * Revision 1.11  2001/10/18 04:45:24  rgb
748  * 2.4.9 kernel deprecates linux/malloc.h in favour of linux/slab.h,
749  * lib/freeswan.h version macros moved to lib/kversions.h.
750  * Other compiler directive cleanups.
751  *
752  * Revision 1.10  2001/09/08 21:13:35  rgb
753  * Added pfkey ident extension support for ISAKMPd. (NetCelo)
754  *
755  * Revision 1.9  2001/06/14 19:35:16  rgb
756  * Update copyright date.
757  *
758  * Revision 1.8  2001/03/26 23:07:36  rgb
759  * Remove requirement for auth and enc key from UPDATE.
760  *
761  * Revision 1.7  2000/09/12 22:35:37  rgb
762  * Restructured to remove unused extensions from CLEARFLOW messages.
763  *
764  * Revision 1.6  2000/09/09 06:39:01  rgb
765  * Added comments for clarity.
766  *
767  * Revision 1.5  2000/06/02 22:54:14  rgb
768  * Added Gerhard Gessler's struct sockaddr_storage mods for IPv6 support.
769  *
770  * Revision 1.4  2000/01/21 06:27:56  rgb
771  * Added address cases for eroute flows.
772  * Added comments for each message type.
773  * Added klipsdebug switching capability.
774  * Fixed GRPSA bitfields.
775  *
776  * Revision 1.3  1999/12/01 22:20:27  rgb
777  * Remove requirement for a proxy address in an incoming getspi message.
778  *
779  * Revision 1.2  1999/11/27 11:57:06  rgb
780  * Consolidated the 4 1-d extension bitmap arrays into one 4-d array.
781  * Add CVS log entry to bottom of file.
782  * Cleaned out unused bits.
783  *
784  */