This source file includes following definitions.
- TAILQ_HEAD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 #ifndef _NETINET_IPSP_H_
41 #define _NETINET_IPSP_H_
42
43
44
45 #include <sys/types.h>
46 #include <sys/queue.h>
47 #include <sys/timeout.h>
48 #include <netinet/in.h>
49
50 union sockaddr_union {
51 struct sockaddr sa;
52 struct sockaddr_in sin;
53 struct sockaddr_in6 sin6;
54 };
55
56
57 #define MD5HMAC96_KEYSIZE 16
58 #define SHA1HMAC96_KEYSIZE 20
59 #define RIPEMD160HMAC96_KEYSIZE 20
60 #define SHA2_256HMAC96_KEYSIZE 32
61 #define SHA2_384HMAC96_KEYSIZE 48
62 #define SHA2_512HMAC96_KEYSIZE 64
63
64 #define AH_HMAC_HASHLEN 12
65 #define AH_HMAC_RPLENGTH 4
66 #define AH_HMAC_INITIAL_RPL 1
67
68
69 #define AH_MD5_ALEN 16
70 #define AH_SHA1_ALEN 20
71 #define AH_RMD160_ALEN 20
72 #define AH_SHA2_256_ALEN 32
73 #define AH_SHA2_384_ALEN 48
74 #define AH_SHA2_512_ALEN 64
75 #define AH_ALEN_MAX 64
76
77
78 #define SPI_LOCAL_USE 0
79 #define SPI_RESERVED_MIN 1
80 #define SPI_RESERVED_MAX 255
81
82
83 #define CPI_RESERVED_MIN 1
84 #define CPI_RESERVED_MAX 255
85 #define CPI_PRIVATE_MIN 61440
86 #define CPI_PRIVATE_MAX 65535
87
88
89 #define IPSEC_DEFAULT_EMBRYONIC_SA_TIMEOUT 60
90 #define IPSEC_DEFAULT_PFS 1
91 #define IPSEC_DEFAULT_SOFT_ALLOCATIONS 0
92 #define IPSEC_DEFAULT_EXP_ALLOCATIONS 0
93 #define IPSEC_DEFAULT_SOFT_BYTES 0
94 #define IPSEC_DEFAULT_EXP_BYTES 0
95 #define IPSEC_DEFAULT_SOFT_TIMEOUT 80000
96 #define IPSEC_DEFAULT_EXP_TIMEOUT 86400
97 #define IPSEC_DEFAULT_SOFT_FIRST_USE 3600
98 #define IPSEC_DEFAULT_EXP_FIRST_USE 7200
99 #define IPSEC_DEFAULT_DEF_ENC "aes"
100 #define IPSEC_DEFAULT_DEF_AUTH "hmac-sha1"
101 #define IPSEC_DEFAULT_EXPIRE_ACQUIRE 30
102 #define IPSEC_DEFAULT_DEF_COMP "deflate"
103
104 struct sockaddr_encap {
105 u_int8_t sen_len;
106 u_int8_t sen_family;
107 u_int16_t sen_type;
108 union {
109 struct {
110 u_int8_t Direction;
111 struct in_addr Src;
112 struct in_addr Dst;
113 u_int8_t Proto;
114 u_int16_t Sport;
115 u_int16_t Dport;
116 } Sip4;
117
118 struct {
119 u_int8_t Direction;
120 struct in6_addr Src;
121 struct in6_addr Dst;
122 u_int8_t Proto;
123 u_int16_t Sport;
124 u_int16_t Dport;
125 } Sip6;
126
127 struct ipsec_policy *PolicyHead;
128 } Sen;
129 };
130
131 #define IPSP_DIRECTION_IN 0x1
132 #define IPSP_DIRECTION_OUT 0x2
133
134 #define sen_data Sen.Data
135 #define sen_ip_src Sen.Sip4.Src
136 #define sen_ip_dst Sen.Sip4.Dst
137 #define sen_proto Sen.Sip4.Proto
138 #define sen_sport Sen.Sip4.Sport
139 #define sen_dport Sen.Sip4.Dport
140 #define sen_direction Sen.Sip4.Direction
141 #define sen_ip6_src Sen.Sip6.Src
142 #define sen_ip6_dst Sen.Sip6.Dst
143 #define sen_ip6_proto Sen.Sip6.Proto
144 #define sen_ip6_sport Sen.Sip6.Sport
145 #define sen_ip6_dport Sen.Sip6.Dport
146 #define sen_ip6_direction Sen.Sip6.Direction
147 #define sen_ipsp Sen.PolicyHead
148
149
150
151
152
153
154
155
156
157 #define SENT_IP4 0x0001
158 #define SENT_IPSP 0x0002
159 #define SENT_IP6 0x0004
160
161 #define SENT_LEN sizeof(struct sockaddr_encap)
162
163 struct ipsec_ref {
164 u_int16_t ref_type;
165 int16_t ref_len;
166 int ref_count;
167 int ref_malloctype;
168 };
169
170 struct ipsec_acquire {
171 union sockaddr_union ipa_addr;
172 u_int32_t ipa_seq;
173 struct sockaddr_encap ipa_info;
174 struct sockaddr_encap ipa_mask;
175 struct timeout ipa_timeout;
176 struct ipsec_policy *ipa_policy;
177 struct inpcb *ipa_pcb;
178 TAILQ_ENTRY(ipsec_acquire) ipa_ipo_next;
179 TAILQ_ENTRY(ipsec_acquire) ipa_next;
180 TAILQ_ENTRY(ipsec_acquire) ipa_inp_next;
181 };
182
183 struct ipsec_policy {
184 struct sockaddr_encap ipo_addr;
185 struct sockaddr_encap ipo_mask;
186
187 union sockaddr_union ipo_src;
188 union sockaddr_union ipo_dst;
189
190
191
192
193
194
195
196
197
198
199 u_int64_t ipo_last_searched;
200
201 u_int8_t ipo_flags;
202 u_int8_t ipo_type;
203 u_int8_t ipo_sproto;
204
205 int ipo_ref_count;
206
207 struct tdb *ipo_tdb;
208
209 struct ipsec_ref *ipo_srcid;
210 struct ipsec_ref *ipo_dstid;
211 struct ipsec_ref *ipo_local_cred;
212 struct ipsec_ref *ipo_local_auth;
213
214 TAILQ_HEAD(ipo_acquires_head, ipsec_acquire) ipo_acquires;
215 TAILQ_ENTRY(ipsec_policy) ipo_tdb_next;
216 TAILQ_ENTRY(ipsec_policy) ipo_list;
217 };
218
219 #define IPSP_POLICY_NONE 0x0000
220 #define IPSP_POLICY_SOCKET 0x0001
221 #define IPSP_POLICY_STATIC 0x0002
222
223 #define IPSP_IPSEC_USE 0
224 #define IPSP_IPSEC_ACQUIRE 1
225 #define IPSP_IPSEC_REQUIRE 2
226 #define IPSP_PERMIT 3
227 #define IPSP_DENY 4
228 #define IPSP_IPSEC_DONTACQ 5
229
230
231 #define NOTIFY_SOFT_EXPIRE 0
232 #define NOTIFY_HARD_EXPIRE 1
233 #define NOTIFY_REQUEST_SA 2
234
235 #define NOTIFY_SATYPE_CONF 1
236 #define NOTIFY_SATYPE_AUTH 2
237 #define NOTIFY_SATYPE_TUNNEL 4
238 #define NOTIFY_SATYPE_COMP 5
239
240
241 #define IPSP_AUTH_NONE 0
242 #define IPSP_AUTH_PASSPHRASE 1
243 #define IPSP_AUTH_RSA 2
244
245
246 #define IPSP_CRED_NONE 0
247 #define IPSP_CRED_KEYNOTE 1
248 #define IPSP_CRED_X509 2
249
250
251 #define IPSP_IDENTITY_NONE 0
252 #define IPSP_IDENTITY_PREFIX 1
253 #define IPSP_IDENTITY_FQDN 2
254 #define IPSP_IDENTITY_USERFQDN 3
255 #define IPSP_IDENTITY_CONNECTION 4
256
257
258
259
260
261
262
263 struct route_enc {
264 struct rtentry *re_rt;
265 struct sockaddr_encap re_dst;
266 };
267
268 struct tdb {
269
270
271
272
273
274
275
276
277 struct tdb *tdb_hnext;
278 struct tdb *tdb_anext;
279 struct tdb *tdb_snext;
280 struct tdb *tdb_inext;
281 struct tdb *tdb_onext;
282
283 struct xformsw *tdb_xform;
284 struct enc_xform *tdb_encalgxform;
285 struct auth_hash *tdb_authalgxform;
286 struct comp_algo *tdb_compalgxform;
287
288 #define TDBF_UNIQUE 0x00001
289 #define TDBF_TIMER 0x00002
290 #define TDBF_BYTES 0x00004
291 #define TDBF_ALLOCATIONS 0x00008
292 #define TDBF_INVALID 0x00010
293 #define TDBF_FIRSTUSE 0x00020
294 #define TDBF_HALFIV 0x00040
295 #define TDBF_SOFT_TIMER 0x00080
296 #define TDBF_SOFT_BYTES 0x00100
297 #define TDBF_SOFT_ALLOCATIONS 0x00200
298 #define TDBF_SOFT_FIRSTUSE 0x00400
299 #define TDBF_PFS 0x00800
300 #define TDBF_TUNNELING 0x01000
301 #define TDBF_NOREPLAY 0x02000
302 #define TDBF_RANDOMPADDING 0x04000
303 #define TDBF_SKIPCRYPTO 0x08000
304 #define TDBF_USEDTUNNEL 0x10000
305 #define TDBF_UDPENCAP 0x20000
306
307 u_int32_t tdb_flags;
308
309 struct timeout tdb_timer_tmo;
310 struct timeout tdb_first_tmo;
311 struct timeout tdb_stimer_tmo;
312 struct timeout tdb_sfirst_tmo;
313
314 u_int32_t tdb_seq;
315 u_int32_t tdb_exp_allocations;
316 u_int32_t tdb_soft_allocations;
317 u_int32_t tdb_cur_allocations;
318
319 u_int64_t tdb_exp_bytes;
320 u_int64_t tdb_soft_bytes;
321 u_int64_t tdb_cur_bytes;
322
323 u_int64_t tdb_exp_timeout;
324 u_int64_t tdb_soft_timeout;
325 u_int64_t tdb_established;
326
327 u_int64_t tdb_first_use;
328 u_int64_t tdb_soft_first_use;
329 u_int64_t tdb_exp_first_use;
330
331
332
333 u_int64_t tdb_last_used;
334 u_int64_t tdb_last_marked;
335
336 u_int64_t tdb_cryptoid;
337
338 u_int32_t tdb_spi;
339 u_int16_t tdb_amxkeylen;
340 u_int16_t tdb_emxkeylen;
341 u_int16_t tdb_ivlen;
342 u_int8_t tdb_sproto;
343 u_int8_t tdb_wnd;
344 u_int8_t tdb_satype;
345
346 union sockaddr_union tdb_dst;
347 union sockaddr_union tdb_src;
348 union sockaddr_union tdb_proxy;
349
350 u_int8_t *tdb_amxkey;
351 u_int8_t *tdb_emxkey;
352
353 u_int32_t tdb_rpl;
354 u_int32_t tdb_bitmap;
355
356 u_int8_t tdb_iv[4];
357
358 struct ipsec_ref *tdb_local_cred;
359 struct ipsec_ref *tdb_remote_cred;
360 struct ipsec_ref *tdb_srcid;
361 struct ipsec_ref *tdb_dstid;
362 struct ipsec_ref *tdb_local_auth;
363 struct ipsec_ref *tdb_remote_auth;
364
365 u_int32_t tdb_mtu;
366 u_int64_t tdb_mtutimeout;
367
368 u_int16_t tdb_udpencap_port;
369
370 u_int16_t tdb_tag;
371
372 struct sockaddr_encap tdb_filter;
373 struct sockaddr_encap tdb_filtermask;
374
375 TAILQ_HEAD(tdb_inp_head_in, inpcb) tdb_inp_in;
376 TAILQ_HEAD(tdb_inp_head_out, inpcb) tdb_inp_out;
377 TAILQ_HEAD(tdb_policy_head, ipsec_policy) tdb_policy_head;
378 };
379
380 struct tdb_ident {
381 u_int32_t spi;
382 union sockaddr_union dst;
383 u_int8_t proto;
384 };
385
386 struct tdb_crypto {
387 u_int32_t tc_spi;
388 union sockaddr_union tc_dst;
389 u_int8_t tc_proto;
390 int tc_protoff;
391 int tc_skip;
392 caddr_t tc_ptr;
393 };
394
395 struct ipsecinit {
396 u_int8_t *ii_enckey;
397 u_int8_t *ii_authkey;
398 u_int16_t ii_enckeylen;
399 u_int16_t ii_authkeylen;
400 u_int8_t ii_encalg;
401 u_int8_t ii_authalg;
402 u_int8_t ii_compalg;
403 };
404
405
406 #define XF_IP4 1
407 #define XF_AH 2
408 #define XF_ESP 3
409 #define XF_TCPSIGNATURE 5
410 #define XF_IPCOMP 6
411
412
413 #define XFT_AUTH 0x0001
414 #define XFT_CONF 0x0100
415 #define XFT_COMP 0x1000
416
417 #define IPSEC_ZEROES_SIZE 256
418
419 #ifdef _KERNEL
420
421 struct xformsw {
422 u_short xf_type;
423 u_short xf_flags;
424 char *xf_name;
425 int (*xf_attach)(void);
426 int (*xf_init)(struct tdb *, struct xformsw *, struct ipsecinit *);
427 int (*xf_zeroize)(struct tdb *);
428 int (*xf_input)(struct mbuf *, struct tdb *, int, int);
429 int (*xf_output)(struct mbuf *, struct tdb *, struct mbuf **,
430 int, int);
431 };
432
433
434
435
436
437
438
439 #define spltdb splsoftnet
440
441 extern int encdebug;
442 extern int ipsec_acl;
443 extern int ipsec_keep_invalid;
444 extern int ipsec_in_use;
445 extern u_int64_t ipsec_last_added;
446 extern int ipsec_require_pfs;
447 extern int ipsec_expire_acquire;
448
449 extern int ipsec_policy_pool_initialized;
450
451 extern int ipsec_soft_allocations;
452 extern int ipsec_exp_allocations;
453 extern int ipsec_soft_bytes;
454 extern int ipsec_exp_bytes;
455 extern int ipsec_soft_timeout;
456 extern int ipsec_exp_timeout;
457 extern int ipsec_soft_first_use;
458 extern int ipsec_exp_first_use;
459 extern char ipsec_def_enc[];
460 extern char ipsec_def_auth[];
461 extern char ipsec_def_comp[];
462
463 extern struct enc_xform enc_xform_des;
464 extern struct enc_xform enc_xform_3des;
465 extern struct enc_xform enc_xform_blf;
466 extern struct enc_xform enc_xform_cast5;
467 extern struct enc_xform enc_xform_skipjack;
468
469 extern struct auth_hash auth_hash_hmac_md5_96;
470 extern struct auth_hash auth_hash_hmac_sha1_96;
471 extern struct auth_hash auth_hash_hmac_ripemd_160_96;
472
473 extern struct comp_algo comp_algo_deflate;
474
475 extern TAILQ_HEAD(ipsec_policy_head, ipsec_policy) ipsec_policy_head;
476 extern TAILQ_HEAD(ipsec_acquire_head, ipsec_acquire) ipsec_acquire_head;
477
478 extern struct xformsw xformsw[], *xformswNXFORMSW;
479
480
481 #define TDB_ATTRIB(x) (((x)->tdb_encalgxform ? NOTIFY_SATYPE_CONF : 0) | \
482 ((x)->tdb_authalgxform ? NOTIFY_SATYPE_AUTH : 0) | \
483 ((x)->tdb_compalgxform ? NOTIFY_SATYPE_COMP : 0))
484
485
486
487 #define SPI_CHAIN_ATTRIB(have, TDB_DIR, TDBP) do {\
488 int s = spltdb(); \
489 struct tdb *tmptdb = (TDBP); \
490 \
491 (have) = 0; \
492 while (tmptdb && tmptdb->tdb_xform) { \
493 if (tmptdb == NULL || tmptdb->tdb_flags & TDBF_INVALID) \
494 break; \
495 (have) |= TDB_ATTRIB(tmptdb); \
496 tmptdb = tmptdb->TDB_DIR; \
497 } \
498 splx(s); \
499 } while (0)
500
501
502 extern char *inet_ntoa4(struct in_addr);
503 extern char *ipsp_address(union sockaddr_union);
504
505
506 extern void tdb_add_inp(struct tdb *, struct inpcb *, int);
507 extern u_int32_t reserve_spi(u_int32_t, u_int32_t, union sockaddr_union *,
508 union sockaddr_union *, u_int8_t, int *);
509 extern struct tdb *gettdb(u_int32_t, union sockaddr_union *, u_int8_t);
510 extern struct tdb *gettdbbyaddr(union sockaddr_union *, u_int8_t,
511 struct ipsec_ref *, struct ipsec_ref *, struct ipsec_ref *,
512 struct mbuf *, int, struct sockaddr_encap *, struct sockaddr_encap *);
513 extern struct tdb *gettdbbysrc(union sockaddr_union *, u_int8_t,
514 struct ipsec_ref *, struct ipsec_ref *, struct mbuf *, int,
515 struct sockaddr_encap *, struct sockaddr_encap *);
516 extern struct tdb *gettdbbysrcdst(u_int32_t, union sockaddr_union *,
517 union sockaddr_union *, u_int8_t);
518 extern void puttdb(struct tdb *);
519 extern void tdb_delete(struct tdb *);
520 extern struct tdb *tdb_alloc(void);
521 extern void tdb_free(struct tdb *);
522 extern int tdb_hash(u_int32_t, union sockaddr_union *, u_int8_t);
523 extern int tdb_init(struct tdb *, u_int16_t, struct ipsecinit *);
524 extern int tdb_walk(int (*)(struct tdb *, void *, int), void *);
525
526
527 extern int ipe4_attach(void);
528 extern int ipe4_init(struct tdb *, struct xformsw *, struct ipsecinit *);
529 extern int ipe4_zeroize(struct tdb *);
530 extern int ipip_output(struct mbuf *, struct tdb *, struct mbuf **, int, int);
531 extern void ipe4_input(struct mbuf *, ...);
532 extern void ipip_input(struct mbuf *, int, struct ifnet *);
533
534 #ifdef INET
535 extern void ip4_input(struct mbuf *, ...);
536 #endif
537
538 #ifdef INET6
539 extern int ip4_input6(struct mbuf **, int *, int);
540 #endif
541
542
543 extern int etherip_output(struct mbuf *, struct tdb *, struct mbuf **,
544 int, int);
545 extern void etherip_input(struct mbuf *, ...);
546
547
548 extern int ah_attach(void);
549 extern int ah_init(struct tdb *, struct xformsw *, struct ipsecinit *);
550 extern int ah_zeroize(struct tdb *);
551 extern int ah_output(struct mbuf *, struct tdb *, struct mbuf **, int, int);
552 extern int ah_output_cb(void *);
553 extern int ah_input(struct mbuf *, struct tdb *, int, int);
554 extern int ah_input_cb(void *);
555 extern int ah_sysctl(int *, u_int, void *, size_t *, void *, size_t);
556 extern int ah_massage_headers(struct mbuf **, int, int, int, int);
557
558 #ifdef INET
559 extern void ah4_input(struct mbuf *, ...);
560 extern int ah4_input_cb(struct mbuf *, ...);
561 extern void *ah4_ctlinput(int, struct sockaddr *, void *);
562 extern void *udpencap_ctlinput(int, struct sockaddr *, void *);
563 #endif
564
565 #ifdef INET6
566 extern int ah6_input(struct mbuf **, int *, int);
567 extern int ah6_input_cb(struct mbuf *, int, int);
568 #endif
569
570
571 extern int esp_attach(void);
572 extern int esp_init(struct tdb *, struct xformsw *, struct ipsecinit *);
573 extern int esp_zeroize(struct tdb *);
574 extern int esp_output(struct mbuf *, struct tdb *, struct mbuf **, int, int);
575 extern int esp_output_cb(void *);
576 extern int esp_input(struct mbuf *, struct tdb *, int, int);
577 extern int esp_input_cb(void *);
578 extern int esp_sysctl(int *, u_int, void *, size_t *, void *, size_t);
579
580 #ifdef INET
581 extern void esp4_input(struct mbuf *, ...);
582 extern int esp4_input_cb(struct mbuf *, ...);
583 extern void *esp4_ctlinput(int, struct sockaddr *, void *);
584 #endif
585
586 #ifdef INET6
587 extern int esp6_input(struct mbuf **, int *, int);
588 extern int esp6_input_cb(struct mbuf *, int, int);
589 #endif
590
591
592 extern int ipcomp_attach(void);
593 extern int ipcomp_init(struct tdb *, struct xformsw *, struct ipsecinit *);
594 extern int ipcomp_zeroize(struct tdb *);
595 extern int ipcomp_output(struct mbuf *, struct tdb *, struct mbuf **, int, int);
596 extern int ipcomp_output_cb(void *);
597 extern int ipcomp_input(struct mbuf *, struct tdb *, int, int);
598 extern int ipcomp_input_cb(void *);
599 extern int ipcomp_sysctl(int *, u_int, void *, size_t *, void *, size_t);
600
601 #ifdef INET
602 extern void ipcomp4_input(struct mbuf *, ...);
603 extern int ipcomp4_input_cb(struct mbuf *, ...);
604 #endif
605
606 #ifdef INET6
607 extern int ipcomp6_input(struct mbuf **, int *, int);
608 extern int ipcomp6_input_cb(struct mbuf *, int, int);
609 #endif
610
611
612 extern int tcp_signature_tdb_attach(void);
613 extern int tcp_signature_tdb_init(struct tdb *, struct xformsw *,
614 struct ipsecinit *);
615 extern int tcp_signature_tdb_zeroize(struct tdb *);
616 extern int tcp_signature_tdb_input(struct mbuf *, struct tdb *, int,
617 int);
618 extern int tcp_signature_tdb_output(struct mbuf *, struct tdb *,
619 struct mbuf **, int, int);
620
621
622 extern caddr_t m_pad(struct mbuf *, int);
623
624
625 extern int checkreplaywindow32(u_int32_t, u_int32_t, u_int32_t *, u_int32_t,
626 u_int32_t *, int);
627
628 extern unsigned char ipseczeroes[];
629
630
631 extern int ipsp_process_packet(struct mbuf *, struct tdb *, int, int);
632 extern int ipsp_process_done(struct mbuf *, struct tdb *);
633 extern struct tdb *ipsp_spd_lookup(struct mbuf *, int, int, int *, int,
634 struct tdb *, struct inpcb *);
635 extern struct tdb *ipsp_spd_inp(struct mbuf *, int, int, int *, int,
636 struct tdb *, struct inpcb *, struct ipsec_policy *);
637 extern int ipsec_common_input(struct mbuf *, int, int, int, int, int);
638 extern int ipsec_common_input_cb(struct mbuf *, struct tdb *, int, int,
639 struct m_tag *);
640 extern int ipsp_acquire_sa(struct ipsec_policy *, union sockaddr_union *,
641 union sockaddr_union *, struct sockaddr_encap *, struct mbuf *);
642 extern struct ipsec_policy *ipsec_add_policy(struct inpcb *, int, int);
643 extern void ipsec_update_policy(struct inpcb *, struct ipsec_policy *,
644 int, int);
645 extern int ipsec_delete_policy(struct ipsec_policy *);
646 extern struct ipsec_acquire *ipsp_pending_acquire(struct ipsec_policy *,
647 union sockaddr_union *);
648 extern void ipsp_delete_acquire(void *);
649 extern int ipsp_is_unspecified(union sockaddr_union);
650 extern void ipsp_reffree(struct ipsec_ref *);
651 extern void ipsp_skipcrypto_unmark(struct tdb_ident *);
652 extern void ipsp_skipcrypto_mark(struct tdb_ident *);
653 extern struct m_tag *ipsp_parse_headers(struct mbuf *, int, u_int8_t);
654 extern int ipsp_ref_match(struct ipsec_ref *, struct ipsec_ref *);
655 extern ssize_t ipsec_hdrsz(struct tdb *);
656 extern void ipsec_adjust_mtu(struct mbuf *, u_int32_t);
657 extern int ipsp_print_tdb(struct tdb *, char *, size_t);
658 extern struct ipsec_acquire *ipsec_get_acquire(u_int32_t);
659 extern int ipsp_aux_match(struct tdb *,
660 struct ipsec_ref *, struct ipsec_ref *,
661 struct ipsec_ref *, struct ipsec_ref *,
662 struct sockaddr_encap *, struct sockaddr_encap *);
663 #endif
664 #endif