sa.h
来自「xen 3.2.2 源码」· C头文件 代码 · 共 216 行
H
216 行
/* * Copyright (C) 2004 Mike Wray <mike.wray@hp.com> * * 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. * * 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. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free software Foundation, Inc., * 59 Temple Place, suite 330, Boston, MA 02111-1307 USA * */#ifndef __VNET_SA_H__#define __VNET_SA_H__#ifdef __KERNEL__#include <linux/types.h>#include <linux/crypto.h>#else#include "sys_kernel.h"#endifstruct Vnet;struct VarpAddr;struct Tunnel;#ifndef CRYPTO_MAX_KEY_BYTES#define CRYPTO_MAX_KEY_BYTES 64#define CRYPTO_MAX_KEY_BITS (CRYPTO_MAX_KEY_BYTES * 8)#endif#ifndef CRYPTO_MAX_ALG_NAME#define CRYPTO_MAX_ALG_NAME 64#endiftypedef struct SALimits { u64 bytes_soft; u64 bytes_hard; u64 packets_soft; u64 packets_hard;} SALimits;typedef struct SACounts { u64 bytes; u64 packets; u32 integrity_failures;} SACounts;typedef struct SAReplay { int replay; u32 send_seq; u32 recv_seq; u32 bitmap; u32 replay_window;} SAReplay;typedef struct SAKey { char name[CRYPTO_MAX_ALG_NAME]; int bits; char key[CRYPTO_MAX_KEY_BYTES];} SAKey;typedef struct SAKeying { u8 state; u8 dying;} SAKeying;typedef struct SAIdent { u32 id; u32 spi; u32 addr; u32 protocol;} SAIdent;struct SAType;/** Security assocation (SA). */typedef struct SAState { atomic_t refcount; spinlock_t lock; /** Identifier. */ struct SAIdent ident; /** Security flags. */ int security; /** Keying state. */ struct SAKeying keying; /** Byte counts etc. */ struct SACounts counts; /** Byte limits etc. */ struct SALimits limits; /** Replay protection. */ struct SAReplay replay; /** Digest algorithm. */ struct SAKey digest; /** Cipher algorithm. */ struct SAKey cipher; /** Compress algorith. */ struct SAKey compress; /** SA type (ESP, AH). */ struct SAType *type; /** Data for the SA type to use. */ void *data;} SAState; typedef struct SAType { char *name; int protocol; int (*init)(SAState *state, void *args); void (*fini)(SAState *state); int (*recv)(SAState *state, struct sk_buff *skb); int (*send)(SAState *state, struct sk_buff *skb, struct Tunnel *tunnel); u32 (*size)(SAState *state, int size);} SAType;/** Information needed to create an SA. * Unused algorithms have zero key size. */typedef struct SAInfo { /** Identifier. */ SAIdent ident; /** Security flags. */ int security; /** Digest algorithm and key. */ SAKey digest; /** Cipher algorithm and key. */ SAKey cipher; /** Compress algorithm and key. */ SAKey compress; /** SA lifetime limits. */ SALimits limits; /** Replay protection window. */ int replay_window;} SAInfo;enum sa_alg_type { SA_ALG_DIGEST = 1, SA_ALG_CIPHER = 2, SA_ALG_COMPRESS = 3,};extern int SAType_add(SAType *type);extern int SAType_del(SAType *type);extern int SAType_get(int protocol, SAType **type);extern int sa_table_init(void);extern void sa_table_exit(void);extern int sa_table_delete(SAState *state);extern int sa_table_add(SAState *state);extern SAState * sa_table_lookup_spi(u32 spi, u32 protocol, u32 addr);extern SAState * sa_table_lookup_id(u32 id);/** Increment reference count. * * @param sa security association (may be null) */static inline void SAState_incref(SAState *sa){ if(!sa) return; atomic_inc(&sa->refcount);}/** Decrement reference count, freeing if zero. * * @param sa security association (may be null) */static inline void SAState_decref(SAState *sa){ if(!sa) return; if(atomic_dec_and_test(&sa->refcount)){ sa->type->fini(sa); kfree(sa); }}extern SAState *SAState_alloc(void);extern int SAState_init(SAIdent *id, SAState **statep);extern int SAState_create(SAInfo *info, SAState **statep);static inline int SAState_send(SAState *sa, struct sk_buff *skb, struct Tunnel *tunnel){ return sa->type->send(sa, skb, tunnel);}static inline int SAState_recv(SAState *sa, struct sk_buff *skb){ return sa->type->recv(sa, skb);}static inline int SAState_size(SAState *sa, int n){ return sa->type->size(sa, n);}extern int sa_create(int security, u32 spi, u32 protocol, u32 addr, SAState **sa);extern int sa_set(SAInfo *info, int update, SAState **val);extern int sa_delete(int id);enum { SA_AUTH = 1, SA_CONF = 2};enum { SA_STATE_ACQUIRE = 1, SA_STATE_VALID = 2,};extern int sa_tunnel_create(struct Vnet *info, struct VarpAddr *addr, struct Tunnel *base, struct Tunnel **tunnel);#endif /* !__VNET_SA_H__ */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?