#ifndef _FREESWAN_KVERSIONS_H /* * header file for FreeS/WAN library functions * Copyright (C) 1998, 1999, 2000 Henry Spencer. * Copyright (C) 1999, 2000, 2001 Richard Guy Briggs * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Library General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at your * option) any later version. See . * * This library 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 Library General Public * License for more details. * * RCSID $Id: ipsec_kversion.h,v 1.1 2004/03/15 20:35:25 as Exp $ */ #define _FREESWAN_KVERSIONS_H /* seen it, no need to see it again */ /* * this file contains a series of atomic defines that depend upon * kernel version numbers. The kernel versions are arranged * in version-order number (which is often not chronological) * and each clause enables or disables a feature. */ /* * First, assorted kernel-version-dependent trickery. */ #include #ifndef KERNEL_VERSION #define KERNEL_VERSION(x,y,z) (((x)<<16)+((y)<<8)+(z)) #endif #if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0) #define HEADER_CACHE_BIND_21 #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) #define SPINLOCK #define PROC_FS_21 #define NETLINK_SOCK #define NET_21 #endif #if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,19) #define net_device_stats enet_statistics #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0) #define SPINLOCK_23 #define NETDEV_23 # ifndef CONFIG_IP_ALIAS # define CONFIG_IP_ALIAS # endif #include #include #include # ifdef NETLINK_XFRM # define NETDEV_25 # endif #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,25) #define PROC_FS_2325 #undef PROC_FS_21 #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,30) #define PROC_NO_DUMMY #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,35) #define SKB_COPY_EXPAND #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,37) #define IP_SELECT_IDENT #endif #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,50)) && defined(CONFIG_NETFILTER) #define SKB_RESET_NFCT #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,2) #define IP_SELECT_IDENT_NEW #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,4) #define IPH_is_SKB_PULLED #define SKB_COW_NEW #define PROTO_HANDLER_SINGLE_PARM #define IP_FRAGMENT_LINEARIZE 1 #else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,4) */ # ifdef REDHAT_BOGOSITY # define IP_SELECT_IDENT_NEW # define IPH_is_SKB_PULLED # define SKB_COW_NEW # define PROTO_HANDLER_SINGLE_PARM # endif /* REDHAT_BOGOSITY */ #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,4) */ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,9) #define MALLOC_SLAB #define LINUX_KERNEL_HAS_SNPRINTF #endif #ifdef NET_21 # include #else /* old kernel in.h has some IPv6 stuff, but not quite enough */ # define s6_addr16 s6_addr # define AF_INET6 10 # define uint8_t __u8 # define uint16_t __u16 # define uint32_t __u32 # define uint64_t __u64 #endif #ifdef NET_21 # define ipsec_kfree_skb(a) kfree_skb(a) #else /* NET_21 */ # define ipsec_kfree_skb(a) kfree_skb(a, FREE_WRITE) #endif /* NET_21 */ #ifdef NETDEV_23 # define device net_device # define ipsec_dev_get dev_get_by_name # define __ipsec_dev_get __dev_get_by_name # define ipsec_dev_put(x) dev_put(x) # define __ipsec_dev_put(x) __dev_put(x) # define ipsec_dev_hold(x) dev_hold(x) #else /* NETDEV_23 */ # define ipsec_dev_get dev_get # define __ipsec_dev_put(x) # define ipsec_dev_put(x) # define ipsec_dev_hold(x) #endif /* NETDEV_23 */ #ifndef SPINLOCK # include /* simulate spin locks and read/write locks */ typedef struct { volatile char lock; } spinlock_t; typedef struct { volatile unsigned int lock; } rwlock_t; # define spin_lock_init(x) { (x)->lock = 0;} # define rw_lock_init(x) { (x)->lock = 0; } # define spin_lock(x) { while ((x)->lock) barrier(); (x)->lock=1;} # define spin_lock_irq(x) { cli(); spin_lock(x);} # define spin_lock_irqsave(x,flags) { save_flags(flags); spin_lock_irq(x);} # define spin_unlock(x) { (x)->lock=0;} # define spin_unlock_irq(x) { spin_unlock(x); sti();} # define spin_unlock_irqrestore(x,flags) { spin_unlock(x); restore_flags(flags);} # define read_lock(x) spin_lock(x) # define read_lock_irq(x) spin_lock_irq(x) # define read_lock_irqsave(x,flags) spin_lock_irqsave(x,flags) # define read_unlock(x) spin_unlock(x) # define read_unlock_irq(x) spin_unlock_irq(x) # define read_unlock_irqrestore(x,flags) spin_unlock_irqrestore(x,flags) # define write_lock(x) spin_lock(x) # define write_lock_irq(x) spin_lock_irq(x) # define write_lock_irqsave(x,flags) spin_lock_irqsave(x,flags) # define write_unlock(x) spin_unlock(x) # define write_unlock_irq(x) spin_unlock_irq(x) # define write_unlock_irqrestore(x,flags) spin_unlock_irqrestore(x,flags) #endif /* !SPINLOCK */ #ifndef SPINLOCK_23 # define spin_lock_bh(x) spin_lock_irq(x) # define spin_unlock_bh(x) spin_unlock_irq(x) # define read_lock_bh(x) read_lock_irq(x) # define read_unlock_bh(x) read_unlock_irq(x) # define write_lock_bh(x) write_lock_irq(x) # define write_unlock_bh(x) write_unlock_irq(x) #endif /* !SPINLOCK_23 */ #endif /* _FREESWAN_KVERSIONS_H */ /* * $Log: ipsec_kversion.h,v $ * Revision 1.1 2004/03/15 20:35:25 as * added files from freeswan-2.04-x509-1.5.3 * * Revision 1.7 2003/07/31 22:48:08 mcr * derive NET25-ness from presence of NETLINK_XFRM macro. * * Revision 1.6 2003/06/24 20:22:32 mcr * added new global: ipsecdevices[] so that we can keep track of * the ipsecX devices. They will be referenced with dev_hold(), * so 2.2 may need this as well. * * Revision 1.5 2003/04/03 17:38:09 rgb * Centralised ipsec_kfree_skb and ipsec_dev_{get,put}. * * Revision 1.4 2002/04/24 07:36:46 mcr * Moved from ./klips/net/ipsec/ipsec_kversion.h,v * * Revision 1.3 2002/04/12 03:21:17 mcr * three parameter version of ip_select_ident appears first * in 2.4.2 (RH7.1) not 2.4.4. * * Revision 1.2 2002/03/08 21:35:22 rgb * Defined LINUX_KERNEL_HAS_SNPRINTF to shut up compiler warnings after * 2.4.9. (Andreas Piesk). * * Revision 1.1 2002/01/29 02:11:42 mcr * removal of kversions.h - sources that needed it now use ipsec_param.h. * updating of IPv6 structures to match latest in6.h version. * removed dead code from freeswan.h that also duplicated kversions.h * code. * * */