⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipsec_life.c

📁 ipsec vpn
💻 C
字号:
/* * @(#) lifetime structure utilities * * Copyright (C) 2001  Richard Guy Briggs  <rgb@freeswan.org> *                 and Michael Richardson  <mcr@freeswan.org> *  * 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: ipsec_life.c,v 1.13 2004/07/10 19:11:18 mcr Exp $ * *//*  * This provides series of utility functions for dealing with lifetime * structures. * * ipsec_check_lifetime - returns -1    hard lifetime exceeded *                                 0    soft lifetime exceeded *                                 1    everything is okay *                        based upon whether or not the count exceeds hard/soft * */#define __NO_VERSION__#include <linux/module.h>#include <linux/config.h>	/* for CONFIG_IP_FORWARD */#include <linux/version.h>#include <linux/kernel.h> /* printk() */#include "openswan/ipsec_param.h"#include <linux/netdevice.h>   /* struct device, struct net_device_stats and other headers */#include <linux/etherdevice.h> /* eth_type_trans */#include <linux/skbuff.h>#include <openswan.h>#include "openswan/radij.h"#include "openswan/ipsec_life.h"#include "openswan/ipsec_xform.h"#include "openswan/ipsec_eroute.h"#include "openswan/ipsec_encap.h"#include "openswan/ipsec_radij.h"#include "openswan/ipsec_sa.h"#include "openswan/ipsec_tunnel.h"#include "openswan/ipsec_ipe4.h"#include "openswan/ipsec_ah.h"#include "openswan/ipsec_esp.h"#ifdef CONFIG_KLIPS_IPCOMP#include "openswan/ipcomp.h"#endif /* CONFIG_KLIPS_IPCOMP */#include <pfkeyv2.h>#include <pfkey.h>#include "openswan/ipsec_proto.h"enum ipsec_life_aliveipsec_lifetime_check(struct ipsec_lifetime64 *il64,		     const char *lifename,		     const char *saname,		     enum ipsec_life_type ilt,		     enum ipsec_direction idir,		     struct ipsec_sa *ips){	__u64 count;	const char *dir;	if(saname == NULL) {		saname = "unknown-SA";	}	if(idir == ipsec_incoming) {		dir = "incoming";	} else {		dir = "outgoing";	}			if(ilt == ipsec_life_timebased) {		count = jiffies/HZ - il64->ipl_count;	} else {		count = il64->ipl_count;	}	if(il64->ipl_hard &&	   (count > il64->ipl_hard)) {		KLIPS_PRINT(debug_tunnel & DB_TN_XMIT,			    "klips_debug:ipsec_lifetime_check: "			    "hard %s lifetime of SA:<%s%s%s> %s has been reached, SA expired, "			    "%s packet dropped.\n",			    lifename,			    IPS_XFORM_NAME(ips),			    saname,			    dir);		pfkey_expire(ips, 1);		return ipsec_life_harddied;	}	if(il64->ipl_soft &&	   (count > il64->ipl_soft)) {		KLIPS_PRINT(debug_tunnel & DB_TN_XMIT,			    "klips_debug:ipsec_lifetime_check: "			    "soft %s lifetime of SA:<%s%s%s> %s has been reached, SA expiring, "			    "soft expire message sent up, %s packet still processed.\n",			    lifename,			    IPS_XFORM_NAME(ips),			    saname,			    dir);		if(ips->ips_state != SADB_SASTATE_DYING) {			pfkey_expire(ips, 0);		}		ips->ips_state = SADB_SASTATE_DYING;		return ipsec_life_softdied;	}	return ipsec_life_okay;}/* * This function takes a buffer (with length), a lifetime name and type, * and formats a string to represent the current values of the lifetime. *  * It returns the number of bytes that the format took (or would take, * if the buffer were large enough: snprintf semantics). * This is used in /proc routines and in debug output. */intipsec_lifetime_format(char *buffer,		      int   buflen,		      char *lifename,		      enum ipsec_life_type timebaselife,		      struct ipsec_lifetime64 *lifetime){	int len = 0;	__u64 count;	if(timebaselife == ipsec_life_timebased) {		count = jiffies/HZ - lifetime->ipl_count;	} else {		count = lifetime->ipl_count;	}	if(lifetime->ipl_count > 1 || 	   lifetime->ipl_soft      ||	   lifetime->ipl_hard) {#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0)) 		len = ipsec_snprintf(buffer, buflen,			       "%s(%Lu,%Lu,%Lu)",			       lifename,			       count,			       lifetime->ipl_soft,			       lifetime->ipl_hard);#else /* XXX high 32 bits are not displayed */		len = ipsec_snprintf(buffer, buflen,				"%s(%lu,%lu,%lu)",				lifename,				(unsigned long)count,				(unsigned long)lifetime->ipl_soft,				(unsigned long)lifetime->ipl_hard);#endif	}	return len;}voidipsec_lifetime_update_hard(struct ipsec_lifetime64 *lifetime,			  __u64 newvalue){	if(newvalue &&	   (!lifetime->ipl_hard ||	    (newvalue < lifetime->ipl_hard))) {		lifetime->ipl_hard = newvalue;		if(!lifetime->ipl_soft &&		   (lifetime->ipl_hard < lifetime->ipl_soft)) {			lifetime->ipl_soft = lifetime->ipl_hard;		}	}}	voidipsec_lifetime_update_soft(struct ipsec_lifetime64 *lifetime,			  __u64 newvalue){	if(newvalue &&	   (!lifetime->ipl_soft ||	    (newvalue < lifetime->ipl_soft))) {		lifetime->ipl_soft = newvalue;		if(lifetime->ipl_hard &&		   (lifetime->ipl_hard < lifetime->ipl_soft)) {			lifetime->ipl_soft = lifetime->ipl_hard;		}	}}	/* * $Log: ipsec_life.c,v $ * Revision 1.13  2004/07/10 19:11:18  mcr * 	CONFIG_IPSEC -> CONFIG_KLIPS. * * Revision 1.12  2004/04/23 20:44:35  ken * Update comments * * Revision 1.11  2004/04/06 02:49:26  mcr * 	pullup of algo code from alg-branch. * * Revision 1.10  2004/03/30 11:03:10  paul * two more occurances of snprintf, found by Sam from a users oops msg. * * Revision 1.9  2003/10/31 02:27:55  mcr * 	pulled up port-selector patches and sa_id elimination. * * Revision 1.8.4.1  2003/10/29 01:30:41  mcr * 	elimited "struct sa_id". * * Revision 1.8  2003/02/06 02:00:10  rgb * Fixed incorrect debugging text label * * Revision 1.7  2002/05/23 07:16:26  rgb * Fixed absolute/relative reference to lifetime count printout. * * Revision 1.6  2002/04/24 07:55:32  mcr * 	#include patches and Makefiles for post-reorg compilation. * * Revision 1.5  2002/04/24 07:36:28  mcr * Moved from ./klips/net/ipsec/ipsec_life.c,v * * Revision 1.4  2002/01/29 17:17:55  mcr * 	moved include of ipsec_param.h to after include of linux/kernel.h * 	otherwise, it seems that some option that is set in ipsec_param.h * 	screws up something subtle in the include path to kernel.h, and * 	it complains on the snprintf() prototype. * * Revision 1.3  2002/01/29 02:13:17  mcr * 	introduction of ipsec_kversion.h means that include of * 	ipsec_param.h must preceed any decisions about what files to * 	include to deal with differences in kernel source. * * Revision 1.2  2001/11/26 09:16:14  rgb * Merge MCR's ipsec_sa, eroute, proc and struct lifetime changes. * * Revision 1.1.2.1  2001/09/25 02:25:57  mcr * 	lifetime structure created and common functions created. * * Local variables: * c-file-style: "linux" * End: * */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -