libpfkey.h revision c91307af2622f6625525f3c1f9c954376df950ad
1c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh/* $NetBSD: libpfkey.h,v 1.12.4.1 2007/08/01 11:52:18 vanhu Exp $ */ 20a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 30a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* Id: libpfkey.h,v 1.13 2005/12/04 20:26:43 manubsd Exp */ 40a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 50a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* 60a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 70a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * All rights reserved. 80a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 90a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * Redistribution and use in source and binary forms, with or without 100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * modification, are permitted provided that the following conditions 110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * are met: 120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 1. Redistributions of source code must retain the above copyright 130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * notice, this list of conditions and the following disclaimer. 140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 2. Redistributions in binary form must reproduce the above copyright 150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * notice, this list of conditions and the following disclaimer in the 160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * documentation and/or other materials provided with the distribution. 170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 3. Neither the name of the project nor the names of its contributors 180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * may be used to endorse or promote products derived from this software 190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * without specific prior written permission. 200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * SUCH DAMAGE. 320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang */ 330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifndef _LIBPFKEY_H 350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define _LIBPFKEY_H 360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifndef KAME_LIBPFKEY_H 380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define KAME_LIBPFKEY_H 390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define PRIORITY_LOW 0xC0000000 410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define PRIORITY_DEFAULT 0x80000000 420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define PRIORITY_HIGH 0x40000000 430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define PRIORITY_OFFSET_POSITIVE_MAX 0x3fffffff 450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define PRIORITY_OFFSET_NEGATIVE_MAX 0x40000000 460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstruct sadb_msg; 480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern void pfkey_sadump __P((struct sadb_msg *)); 490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern void pfkey_sadump_withports __P((struct sadb_msg *)); 500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern void pfkey_spdump __P((struct sadb_msg *)); 510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern void pfkey_spdump_withports __P((struct sadb_msg *)); 520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstruct sockaddr; 540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstruct sadb_alg; 550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* Accomodate different prototypes in <netinet6/ipsec.h> */ 570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <sys/types.h> 580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include PATH_IPSEC_H 590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifndef HAVE_IPSEC_POLICY_T 610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangtypedef caddr_t ipsec_policy_t; 620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define __ipsec_const 630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else 640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define __ipsec_const const 650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstruct pfkey_send_sa_args { 680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int so; /* socket */ 690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int type; 700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int satype; 710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int mode; 720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *src; /* IP src address for SA */ 730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *dst; /* IP dst address for SA */ 740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int32_t spi; /* SA's spi */ 750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int32_t reqid; 760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int wsize; 770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang caddr_t keymat; 780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int e_type, e_keylen; /* Encryption alg and keylen */ 790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int a_type, a_keylen; /* Authentication alg and key */ 800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int flags; 810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int32_t l_alloc; 820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int32_t l_bytes; 830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int32_t l_addtime; 840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int32_t l_usetime; 850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int32_t seq; 860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int8_t l_natt_type; 870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int16_t l_natt_sport, l_natt_dport; 880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *l_natt_oa; 890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int16_t l_natt_frag; 900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int8_t ctxdoi, ctxalg; /* Security context DOI and algorithm */ 910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang caddr_t ctxstr; /* Security context string */ 920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int16_t ctxstrlen; /* length of security context string */ 930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}; 940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* The options built into libipsec */ 960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern int libipsec_opt; 970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define LIBIPSEC_OPT_NATT 0x01 980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define LIBIPSEC_OPT_FRAG 0x02 990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define LIBIPSEC_OPT_SEC_CTX 0x04 1000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* IPsec Library Routines */ 1020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint ipsec_check_keylen __P((u_int, u_int, u_int)); 1040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint ipsec_check_keylen2 __P((u_int, u_int, u_int)); 1050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint ipsec_get_keylen __P((u_int, u_int, struct sadb_alg *)); 1060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangchar *ipsec_dump_policy_withports __P((void *, const char *)); 1070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid ipsec_hexdump __P((const void *, int)); 1080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangconst char *ipsec_strerror __P((void)); 1090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid kdebug_sadb __P((struct sadb_msg *)); 1100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangipsec_policy_t ipsec_set_policy __P((__ipsec_const char *, int)); 1110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint ipsec_get_policylen __P((ipsec_policy_t)); 1120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangchar *ipsec_dump_policy __P((ipsec_policy_t, __ipsec_const char *)); 1130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* PFKey Routines */ 1150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangu_int pfkey_set_softrate __P((u_int, u_int)); 1170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangu_int pfkey_get_softrate __P((u_int)); 1180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_getspi __P((int, u_int, u_int, struct sockaddr *, 1190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *, u_int32_t, u_int32_t, u_int32_t, u_int32_t)); 1200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_update2 __P((struct pfkey_send_sa_args *)); 1210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_add2 __P((struct pfkey_send_sa_args *)); 1220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_delete __P((int, u_int, u_int, 1230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *, struct sockaddr *, u_int32_t)); 1240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_delete_all __P((int, u_int, u_int, 1250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *, struct sockaddr *)); 1260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_get __P((int, u_int, u_int, 1270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *, struct sockaddr *, u_int32_t)); 1280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_register __P((int, u_int)); 1290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_recv_register __P((int)); 1300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_set_supported __P((struct sadb_msg *, int)); 1310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_flush __P((int, u_int)); 1320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_dump __P((int, u_int)); 1330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_promisc_toggle __P((int, int)); 1340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_spdadd __P((int, struct sockaddr *, u_int, 1350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *, u_int, u_int, caddr_t, int, u_int32_t)); 1360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_spdadd2 __P((int, struct sockaddr *, u_int, 1370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *, u_int, u_int, u_int64_t, u_int64_t, 1380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang caddr_t, int, u_int32_t)); 1390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_spdupdate __P((int, struct sockaddr *, u_int, 1400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *, u_int, u_int, caddr_t, int, u_int32_t)); 1410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_spdupdate2 __P((int, struct sockaddr *, u_int, 1420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *, u_int, u_int, u_int64_t, u_int64_t, 1430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang caddr_t, int, u_int32_t)); 1440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_spddelete __P((int, struct sockaddr *, u_int, 1450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *, u_int, u_int, caddr_t, int, u_int32_t)); 1460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_spddelete2 __P((int, u_int32_t)); 1470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_spdget __P((int, u_int32_t)); 1480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_spdsetidx __P((int, struct sockaddr *, u_int, 1490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *, u_int, u_int, caddr_t, int, u_int32_t)); 1500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_spdflush __P((int)); 1510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_spddump __P((int)); 1520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef SADB_X_MIGRATE 153c91307af2622f6625525f3c1f9c954376df950adChia-chi Yehint pfkey_send_migrate __P((int, struct sockaddr *, u_int, 154c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh struct sockaddr *, u_int, u_int, caddr_t, int, u_int32_t)); 1550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 1560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_open __P((void)); 1580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid pfkey_close __P((int)); 1590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstruct sadb_msg *pfkey_recv __P((int)); 1600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send __P((int, struct sadb_msg *, int)); 1610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_align __P((struct sadb_msg *, caddr_t *)); 1620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_check __P((caddr_t *)); 1630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* 1650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * Deprecated, available for backward compatibility with third party 1660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * libipsec users. Please use pfkey_send_update2 and pfkey_send_add2 instead 1670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang */ 1680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_update __P((int, u_int, u_int, struct sockaddr *, 1690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *, u_int32_t, u_int32_t, u_int, 1700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang caddr_t, u_int, u_int, u_int, u_int, u_int, u_int32_t, u_int64_t, 1710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int64_t, u_int64_t, u_int32_t)); 1720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_update_nat __P((int, u_int, u_int, struct sockaddr *, 1730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *, u_int32_t, u_int32_t, u_int, 1740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang caddr_t, u_int, u_int, u_int, u_int, u_int, u_int32_t, u_int64_t, 1750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int64_t, u_int64_t, u_int32_t, 1760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int8_t, u_int16_t, u_int16_t, struct sockaddr *, u_int16_t)); 1770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_add __P((int, u_int, u_int, struct sockaddr *, 1780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *, u_int32_t, u_int32_t, u_int, 1790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang caddr_t, u_int, u_int, u_int, u_int, u_int, u_int32_t, u_int64_t, 1800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int64_t, u_int64_t, u_int32_t)); 1810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint pfkey_send_add_nat __P((int, u_int, u_int, struct sockaddr *, 1820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *, u_int32_t, u_int32_t, u_int, 1830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang caddr_t, u_int, u_int, u_int, u_int, u_int, u_int32_t, u_int64_t, 1840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int64_t, u_int64_t, u_int32_t, 1850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang u_int8_t, u_int16_t, u_int16_t, struct sockaddr *, u_int16_t)); 1860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifndef __SYSDEP_SA_LEN__ 1880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define __SYSDEP_SA_LEN__ 1890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <netinet/in.h> 1900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifndef IPPROTO_IPV4 1920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define IPPROTO_IPV4 IPPROTO_IPIP 1930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 1940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifndef IPPROTO_IPCOMP 1960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define IPPROTO_IPCOMP IPPROTO_COMP 1970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 1980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic __inline u_int8_t 2000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangsysdep_sa_len (const struct sockaddr *sa) 2010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ 2020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef __linux__ 2030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang switch (sa->sa_family) 2040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { 2050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang case AF_INET: 2060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return sizeof (struct sockaddr_in); 2070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang case AF_INET6: 2080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return sizeof (struct sockaddr_in6); 2090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 2100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // log_print ("sysdep_sa_len: unknown sa family %d", sa->sa_family); 2110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return sizeof (struct sockaddr_in); 2120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else 2130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return sa->sa_len; 2140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 2150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} 2160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 2170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 2180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif /* KAME_LIBPFKEY_H */ 2190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 2200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif /* _LIBPFKEY_H */ 221