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 + -
显示快捷键?