pfkey.h
来自「ipsec vpn」· C头文件 代码 · 共 530 行 · 第 1/2 页
H
530 行
/* * FreeS/WAN specific PF_KEY headers * Copyright (C) 1999, 2000, 2001 Richard Guy Briggs. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. * * RCSID $Id: pfkey.h,v 1.49 2005/05/11 00:57:29 mcr Exp $ */#ifndef __NET_IPSEC_PF_KEY_H#define __NET_IPSEC_PF_KEY_H#ifdef __KERNEL__extern struct proto_ops pfkey_proto_ops;typedef struct sock pfkey_sock;extern int debug_pfkey;extern /* void */ int pfkey_init(void);extern /* void */ int pfkey_cleanup(void);struct socket_list{ struct socket *socketp; struct socket_list *next;};extern int pfkey_list_insert_socket(struct socket*, struct socket_list**);extern int pfkey_list_remove_socket(struct socket*, struct socket_list**);extern struct socket_list *pfkey_open_sockets;extern struct socket_list *pfkey_registered_sockets[];struct ipsec_alg_supported{ uint16_t ias_exttype; uint8_t ias_id; uint8_t ias_ivlen; uint16_t ias_keyminbits; uint16_t ias_keymaxbits; char *ias_name;};extern struct supported_list *pfkey_supported_list[];struct supported_list{ struct ipsec_alg_supported *supportedp; struct supported_list *next;};extern int pfkey_list_insert_supported(struct ipsec_alg_supported*, struct supported_list**);extern int pfkey_list_remove_supported(struct ipsec_alg_supported*, struct supported_list**);struct sockaddr_key{ uint16_t key_family; /* PF_KEY */ uint16_t key_pad; /* not used */ uint32_t key_pid; /* process ID */};struct pfkey_extracted_data{ struct ipsec_sa* ips; struct ipsec_sa* ips2; struct eroute *eroute;};/* forward reference */struct sadb_ext;struct sadb_msg;struct sockaddr;struct sadb_comb;struct sadb_sadb;struct sadb_alg;extern intpfkey_alloc_eroute(struct eroute** eroute);extern intpfkey_sa_process(struct sadb_ext *pfkey_ext, struct pfkey_extracted_data* extr);extern intpfkey_lifetime_process(struct sadb_ext *pfkey_ext, struct pfkey_extracted_data* extr);extern intpfkey_address_process(struct sadb_ext *pfkey_ext, struct pfkey_extracted_data* extr);extern intpfkey_key_process(struct sadb_ext *pfkey_ext, struct pfkey_extracted_data* extr);extern intpfkey_ident_process(struct sadb_ext *pfkey_ext, struct pfkey_extracted_data* extr);extern intpfkey_sens_process(struct sadb_ext *pfkey_ext, struct pfkey_extracted_data* extr);extern intpfkey_prop_process(struct sadb_ext *pfkey_ext, struct pfkey_extracted_data* extr);extern intpfkey_supported_process(struct sadb_ext *pfkey_ext, struct pfkey_extracted_data* extr);extern intpfkey_spirange_process(struct sadb_ext *pfkey_ext, struct pfkey_extracted_data* extr);extern intpfkey_x_kmprivate_process(struct sadb_ext *pfkey_ext, struct pfkey_extracted_data* extr);extern intpfkey_x_satype_process(struct sadb_ext *pfkey_ext, struct pfkey_extracted_data* extr);extern intpfkey_x_debug_process(struct sadb_ext *pfkey_ext, struct pfkey_extracted_data* extr);extern int pfkey_upmsg(struct socket *, struct sadb_msg *);extern int pfkey_expire(struct ipsec_sa *, int);extern int pfkey_acquire(struct ipsec_sa *);#else /* ! __KERNEL__ */extern void (*pfkey_debug_func)(const char *message, ...);extern void (*pfkey_error_func)(const char *message, ...);extern void pfkey_print(struct sadb_msg *msg, FILE *out);#endif /* __KERNEL__ */extern uint8_t satype2proto(uint8_t satype);extern uint8_t proto2satype(uint8_t proto);extern char* satype2name(uint8_t satype);extern char* proto2name(uint8_t proto);struct key_opt{ uint32_t key_pid; /* process ID */ struct sock *sk;};#define key_pid(sk) ((struct key_opt*)&((sk)->sk_protinfo))->key_pid/* XXX-mcr this is not an alignment, this is because the count is in 64-bit * words. */#define IPSEC_PFKEYv2_ALIGN (sizeof(uint64_t)/sizeof(uint8_t))#define BITS_PER_OCTET 8#define OCTETBITS 8#define PFKEYBITS 64#define DIVUP(x,y) ((x + y -1) / y) /* divide, rounding upwards */#define ALIGN_N(x,y) (DIVUP(x,y) * y) /* align on y boundary */#define IPSEC_PFKEYv2_LEN(x) ((x) * IPSEC_PFKEYv2_ALIGN)#define IPSEC_PFKEYv2_WORDS(x) ((x) / IPSEC_PFKEYv2_ALIGN)#define PFKEYv2_MAX_MSGSIZE 4096/* * PF_KEYv2 permitted and required extensions in and out bitmaps */struct pf_key_ext_parsers_def { int (*parser)(struct sadb_ext*); char *parser_name;};#define SADB_EXTENSIONS_MAX 31extern unsigned int extensions_bitmaps[2/*in/out*/][2/*perm/req*/][SADB_EXTENSIONS_MAX];#define EXT_BITS_IN 0#define EXT_BITS_OUT 1#define EXT_BITS_PERM 0#define EXT_BITS_REQ 1extern void pfkey_extensions_init(struct sadb_ext *extensions[]);extern void pfkey_extensions_free(struct sadb_ext *extensions[]);extern void pfkey_msg_free(struct sadb_msg **pfkey_msg);extern int pfkey_msg_parse(struct sadb_msg *pfkey_msg, struct pf_key_ext_parsers_def *ext_parsers[], struct sadb_ext **extensions, int dir);extern int pfkey_register_reply(int satype, struct sadb_msg *sadb_msg);/* * PF_KEYv2 build function prototypes */intpfkey_msg_hdr_build(struct sadb_ext** pfkey_ext, uint8_t msg_type, uint8_t satype, uint8_t msg_errno, uint32_t seq, uint32_t pid);intpfkey_sa_ref_build(struct sadb_ext ** pfkey_ext, uint16_t exttype, uint32_t spi, /* in network order */ uint8_t replay_window, uint8_t sa_state, uint8_t auth, uint8_t encrypt, uint32_t flags, uint32_t/*IPsecSAref_t*/ ref);intpfkey_sa_build(struct sadb_ext ** pfkey_ext, uint16_t exttype, uint32_t spi, /* in network order */ uint8_t replay_window, uint8_t sa_state, uint8_t auth, uint8_t encrypt, uint32_t flags);intpfkey_lifetime_build(struct sadb_ext ** pfkey_ext, uint16_t exttype, uint32_t allocations, uint64_t bytes, uint64_t addtime, uint64_t usetime, uint32_t packets);intpfkey_address_build(struct sadb_ext** pfkey_ext, uint16_t exttype, uint8_t proto, uint8_t prefixlen, struct sockaddr* address);intpfkey_key_build(struct sadb_ext** pfkey_ext, uint16_t exttype, uint16_t key_bits, char* key);intpfkey_ident_build(struct sadb_ext** pfkey_ext, uint16_t exttype, uint16_t ident_type, uint64_t ident_id, uint8_t ident_len, char* ident_string);#ifdef __KERNEL__extern int pfkey_nat_t_new_mapping(struct ipsec_sa *, struct sockaddr *, __u16);extern int pfkey_x_nat_t_type_process(struct sadb_ext *pfkey_ext, struct pfkey_extracted_data* extr);extern int pfkey_x_nat_t_port_process(struct sadb_ext *pfkey_ext, struct pfkey_extracted_data* extr);#endif /* __KERNEL__ */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?