wanpipe/patches/kdrivers/include/wanpipe_defines.h

960 lines
29 KiB
C

/************************************************************************
* wanpipe_defines.h *
* WANPIPE(tm) Global definition for Sangoma *
* Mailbox/API/UDP structures. *
* *
* Author: Alex Feldman <al.feldman@sangoma.com> *
*=======================================================================*
* May 10, 2002 Alex Feldman Initial version *
* *
* Nov 27, 2007 David Rokhvarg Implemented functions/definitions for *
* Sangoma MS Windows Driver and API. *
* *
* *
*************************************************************************/
#ifndef __WANPIPE_DEFINES_H
# define __WANPIPE_DEFINES_H
/************************************************
* SET COMMON KERNEL DEFINE *
************************************************/
#if defined (__KERNEL__) || defined (KERNEL) || defined (_KERNEL)
# ifndef WAN_KERNEL
# define WAN_KERNEL
# endif
#endif
#include "wanpipe_version.h"
#if defined(WAN_KERNEL)
#include "wanpipe_kernel.h"
#endif
#include "wanpipe_abstr_types.h" /* Basic data types */
#if defined(__WINDOWS__)
# if defined(WAN_KERNEL)
# include "wanpipe_skb.h"
# define inline __inline
# if defined(NTSTRSAFE_USE_SECURE_CRT)
# define wp_snwprintf RtlStringCbPrintfW
# define wp_strcpy RtlStringCchCopy
# else
# define wp_snwprintf _snwprintf
# endif/* NTSTRSAFE_USE_SECURE_CRT */
# endif/* WAN_KERNEL */
# define wp_strlcpy strncpy
# define wp_strncasecmp _strnicmp
# define wp_strcasecmp _stricmp
# define wp_snprintf _snprintf
# define wp_vsnprintf _vsnprintf
# define wp_unlink _unlink
#else/* ! __WINDOWS__ */
# define wp_strlcpy strlcpy
# define wp_strncasecmp wp_linux_strncasecmp
# define wp_strcasecmp strcasecmp
# define wp_snprintf snprintf
# define wp_vsnprintf vsnprintf
# define wp_unlink unlink
# define wp_sleep sleep
# define wp_gettimeofday gettimeofday
# define wp_localtime_r localtime_r
# define wp_usleep usleep
#endif
/************************************************
* GLOBAL SANGOMA PLATFORM DEFINITIONS *
************************************************/
#define WAN_LINUX_PLATFORM 0x01
#define WAN_WIN98_PLATFORM 0x02
#define WAN_WINNT_PLATFORM 0x03
#define WAN_WIN2K_PLATFORM 0x04
#define WAN_FREEBSD_PLATFORM 0x05
#define WAN_OPENBSD_PLATFORM 0x06
#define WAN_SOLARIS_PLATFORM 0x07
#define WAN_SCO_PLATFORM 0x08
#define WAN_NETBSD_PLATFORM 0x09
#if defined(__FreeBSD__)
# define WAN_PLATFORM_ID WAN_FREEBSD_PLATFORM
#elif defined(__OpenBSD__)
# define WAN_PLATFORM_ID WAN_OPENBSD_PLATFORM
#elif defined(__NetBSD__)
# define WAN_PLATFORM_ID WAN_NETBSD_PLATFORM
#elif defined(__LINUX__)
# define WAN_PLATFORM_ID WAN_LINUX_PLATFORM
#elif defined(__WINDOWS__)
# define WAN_PLATFORM_ID WAN_WIN2K_PLATFORM
#endif
/*
************************************************
** GLOBAL SANGOMA DEFINITIONS
************************************************
*/
#define WAN_FALSE 0
#define WAN_TRUE 1
#if defined(__FreeBSD__)
# undef WANPIPE_VERSION
# undef WANPIPE_VERSION_BETA
# undef WANPIPE_SUB_VERSION
# undef WANPIPE_LITE_VERSION
# define WANPIPE_VERSION WANPIPE_VERSION_FreeBSD
# define WANPIPE_VERSION_BETA WANPIPE_VERSION_BETA_FreeBSD
# define WANPIPE_SUB_VERSION WANPIPE_SUB_VERSION_FreeBSD
# define WANPIPE_LITE_VERSION WANPIPE_LITE_VERSION_FreeBSD
#elif defined(__OpenBSD__)
# undef WANPIPE_VERSION
# undef WANPIPE_VERSION_BETA
# undef WANPIPE_SUB_VERSION
# undef WANPIPE_LITE_VERSION
# define WANPIPE_VERSION WANPIPE_VERSION_OpenBSD
# define WANPIPE_VERSION_BETA WANPIPE_VERSION_BETA_OpenBSD
# define WANPIPE_SUB_VERSION WANPIPE_SUB_VERSION_OpenBSD
# define WANPIPE_LITE_VERSION WANPIPE_LITE_VERSION_OpenBSD
#elif defined(__NetBSD__)
# undef WANPIPE_VERSION
# undef WANPIPE_VERSION_BETA
# undef WANPIPE_SUB_VERSION
# undef WANPIPE_LITE_VERSION
# define WANPIPE_VERSION WANPIPE_VERSION_NetBSD
# define WANPIPE_VERSION_BETA WANPIPE_VERSION_BETA_NetBSD
# define WANPIPE_SUB_VERSION WANPIPE_SUB_VERSION_NetBSD
# define WANPIPE_LITE_VERSION WANPIPE_LITE_VERSION_NetBSD
#elif defined(__WINDOWS__)
#endif
#define WANROUTER_MAJOR_VER 2
#define WANROUTER_MINOR_VER 1
#define WANPIPE_MAJOR_VER 1
#define WANPIPE_MINOR_VER 1
/*
*************************************************
** GLOBAL SANGOMA TYPEDEF
*************************************************
*/
#if defined(__LINUX__)
typedef struct ethhdr ethhdr_t;
typedef struct iphdr iphdr_t;
typedef struct udphdr udphdr_t;
typedef struct tcphdr tcphdr_t;
# define w_eth_dest h_dest
# define w_eth_src h_source
# define w_eth_proto h_proto
# define w_ip_v version
# define w_ip_hl ihl
# define w_ip_tos tos
# define w_ip_len tot_len
# define w_ip_id id
# define w_ip_off frag_off
# define w_ip_ttl ttl
# define w_ip_p protocol
# define w_ip_sum check
# define w_ip_src saddr
# define w_ip_dst daddr
# define w_udp_sport source
# define w_udp_dport dest
# define w_udp_len len
# define w_udp_sum check
# define w_tcp_sport source
# define w_tcp_dport dest
# define w_tcp_seq seq
# define w_tcp_ack_seq ack_seq
#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
typedef struct ip iphdr_t;
typedef struct udphdr udphdr_t;
typedef struct tcphdr tcphdr_t;
# define w_ip_v ip_v
# define w_ip_hl ip_hl
# define w_ip_tos ip_tos
# define w_ip_len ip_len
# define w_ip_id ip_id
# define w_ip_off ip_off
# define w_ip_ttl ip_ttl
# define w_ip_p ip_p
# define w_ip_sum ip_sum
# define w_ip_src ip_src.s_addr
# define w_ip_dst ip_dst.s_addr
# define w_udp_sport uh_sport
# define w_udp_dport uh_dport
# define w_udp_len uh_ulen
# define w_udp_sum uh_sum
# define w_tcp_sport th_sport
# define w_tcp_dport th_dport
# define w_tcp_seq th_seq
# define w_tcp_ack_seq th_ack
# if (__FreeBSD_version > 700000)
# define wan_time_t time_t
# else /* includes FreeBSD-5/6/OpenBSD/NetBSD */
# define wan_time_t long
# endif
#define wan_suseconds_t suseconds_t
#elif defined(__WINDOWS__)
/* Intel X86 */
#define __LITTLE_ENDIAN_BITFIELD
struct iphdr {
#if defined(__LITTLE_ENDIAN_BITFIELD)
__u8 ihl:4,
version:4;
#elif defined (__BIG_ENDIAN_BITFIELD)
__u8 version:4,
ihl:4;
#else
# error "unknown byteorder!"
#endif
__u8 tos;
__u16 tot_len;
__u16 id;
__u16 frag_off;
__u8 ttl;
__u8 protocol;
__u16 check;
__u32 saddr;
__u32 daddr;
/*The options start here. */
};
struct udphdr {
__u16 source;
__u16 dest;
__u16 len;
__u16 check;
};
typedef struct iphdr iphdr_t;
typedef struct udphdr udphdr_t;
# define w_eth_dest h_dest
# define w_eth_src h_source
# define w_eth_proto h_proto
# define w_ip_v version
# define w_ip_hl ihl
# define w_ip_tos tos
# define w_ip_len tot_len
# define w_ip_id id
# define w_ip_off frag_off
# define w_ip_ttl ttl
# define w_ip_p protocol
# define w_ip_sum check
# define w_ip_src saddr
# define w_ip_dst daddr
# define w_udp_sport source
# define w_udp_dport dest
# define w_udp_len len
# define w_udp_sum check
# define w_tcp_sport source
# define w_tcp_dport dest
# define w_tcp_seq seq
# define w_tcp_ack_seq ack_seq
#if !defined snprintf
# define snprintf _snprintf
#endif
#else
# error "Unknown OS system!"
#endif
#if defined(__FreeBSD__)
typedef u_int8_t u8;
typedef u_int16_t u16;
typedef u_int32_t u32;
#elif defined(__OpenBSD__)
typedef u_int8_t u8;
typedef u_int16_t u16;
typedef u_int32_t u32;
typedef u_int64_t u64;
#elif defined(__NetBSD__)
typedef u_int8_t u8;
typedef u_int16_t u16;
typedef u_int32_t u32;
typedef u_int64_t u64;
#endif
/************************************************
** GLOBAL SANGOMA MACROS
************************************************/
#if defined(__LINUX__)
# if !defined(strlcpy)
# define strlcpy(d,s,l) strcpy((d),(s))
# endif
#elif defined(__FreeBSD__)
# if !defined(strlcpy)
# define strlcpy(d,s,l) strcpy((d),(s))
# endif
#endif
#ifdef WAN_KERNEL
/*
******************************************************************
** D E F I N E S
******************************************************************
*/
#define MAX_PACKET_SIZE 5000
#if defined(__FreeBSD__)
/******************* F R E E B S D ******************************/
# define WAN_MOD_LOAD MOD_LOAD
# define WAN_MOD_UNLOAD MOD_UNLOAD
# if (__FreeBSD_version > 503000)
# define WAN_MOD_SHUTDOWN MOD_SHUTDOWN
# define WAN_MOD_QUIESCE MOD_QUIESCE
# else
# define WAN_MOD_SHUTDOWN WAN_MOD_UNLOAD+1
# define WAN_MOD_QUIESCE WAN_MOD_UNLOAD+2
# endif
# define WP_DELAY DELAY
# define WP_SCHEDULE(arg,name) {void*ptr=(name);tsleep(ptr,PPAUSE,(name),(arg)); }
/*# define WP_SCHEDULE(arg,name) tsleep(&(arg),PPAUSE,(name),(arg))*/
# define SYSTEM_TICKS ticks
# define HZ hz
# define RW_LOCK_UNLOCKED 0
# define ETH_P_IP AF_INET
# define ETH_P_IPV6 AF_INET6
# define ETH_P_IPX AF_IPX
# define WAN_IFT_OTHER IFT_OTHER
# define WAN_IFT_ETHER IFT_ETHER
# define WAN_IFT_PPP IFT_PPP
# define WAN_MFLAG_PRV M_PROTO1
# define WAN_MFLAG_IPX M_PROTO2
typedef u_long wan_ioctl_cmd_t;
#elif defined(__OpenBSD__)
/******************* O P E N B S D ******************************/
# define WAN_MOD_LOAD LKM_E_LOAD
# define WAN_MOD_UNLOAD LKM_E_UNLOAD
# define WP_DELAY DELAY
# define WP_SCHEDULE(arg,name) tsleep(&(arg),PPAUSE,(name),(arg))
# define SYSTEM_TICKS ticks
# define HZ hz
# define RW_LOCK_UNLOCKED 0
# define ETH_P_IP AF_INET
# define ETH_P_IPV6 AF_INET6
# define ETH_P_IPX AF_IPX
# define WAN_IFT_OTHER IFT_OTHER
# define WAN_IFT_ETHER IFT_ETHER
# define WAN_IFT_PPP IFT_PPP
# define WAN_MFLAG_PRV M_PROTO1
# define WAN_MFLAG_IPX M_PROTO2
typedef u_long wan_ioctl_cmd_t;
#elif defined(__NetBSD__)
/******************* N E T B S D ******************************/
# define WAN_MOD_LOAD LKM_E_LOAD
# define WAN_MOD_UNLOAD LKM_E_UNLOAD
# define WP_DELAY DELAY
# define SYSTEM_TICKS tick
# define HZ hz
# define RW_LOCK_UNLOCKED 0
# define WAN_IFT_OTHER IFT_OTHER
# define WAN_IFT_ETHER IFT_ETHER
# define WAN_IFT_PPP IFT_PPP
typedef u_long wan_ioctl_cmd_t;
#elif defined(__LINUX__)
/*********************** L I N U X ******************************/
# define ETHER_ADDR_LEN ETH_ALEN
static __inline void WP_DELAY(int usecs)
{
if ((usecs) <= 1000) {
udelay(usecs) ;
} else {
int delay=usecs/1000;
int i;
if (delay < 1) {
delay=1;
}
for (i=0;i<delay;i++) {
udelay(1000);
}
}
return;
}
# define atomic_set_int(name, val) atomic_set(name, val)
# define SYSTEM_TICKS jiffies
# define WP_SCHEDULE(arg,name) schedule()
# define wan_atomic_read atomic_read
# define wan_atomic_set atomic_set
# define wan_atomic_inc atomic_inc
# define wan_atomic_dec atomic_dec
# define WAN_IFT_OTHER 0x00
# define WAN_IFT_ETHER 0x00
# define WAN_IFT_PPP 0x00
typedef int wan_ioctl_cmd_t;
#elif defined(__WINDOWS__)
/******************* W I N D O W S ******************************/
# define SYSTEM_TICKS get_systemticks()
# define jiffies SYSTEM_TICKS
# define wan_atomic_read atomic_read
# define wan_atomic_set atomic_set
# define wan_atomic_inc atomic_inc
# define wan_atomic_dec atomic_dec
# define RW_LOCK_UNLOCKED 0
typedef int wan_ioctl_cmd_t;
# define WP_SCHEDULE(arg,name) WP_MILLISECONDS_DELAY(arg)
# define WAN_IFT_OTHER 0x00
/* this pseudo lock is used only for debugging of LIP layer */
#define wan_rwlock_init(plock) *(plock)=RW_LOCK_UNLOCKED;
#endif /* __WINDOWS__ */
#if defined(__FreeBSD__)
# define WAN_MODULE_VERSION(module, version) \
MODULE_VERSION(module, version)
# define WAN_MODULE_DEPEND(module, mdepend, vmin, vpref, vmax) \
MODULE_DEPEND(module, mdepend, vmin, vpref, vmax)
# define WAN_MODULE_DEFINE(name,name_str,author,descr,lic,mod_init,mod_exit,devsw)\
int load_##name (module_t mod, int cmd, void *arg); \
int load_##name (module_t mod, int cmd, void *arg){ \
switch(cmd){ \
case WAN_MOD_LOAD: return mod_init((devsw)); \
case WAN_MOD_UNLOAD: return mod_exit((devsw)); \
case WAN_MOD_SHUTDOWN: return 0;\
case WAN_MOD_QUIESCE: return 0; \
} \
return -EINVAL; \
} \
DEV_MODULE(name, load_##name, NULL);
#elif defined(__OpenBSD__)
# define WAN_MODULE_VERSION(module, version)
# define WAN_MODULE_DEPEND(module, mdepend, vmin, vpref, vmax)
# define WAN_MODULE_DEFINE(name,name_str,author,descr,lic,mod_init,mod_exit,devsw)\
int (name)(struct lkm_table* lkmtp, int cmd, int ver);\
MOD_DEV(name_str, LM_DT_CHAR, -1, (devsw)); \
int load_##name(struct lkm_table* lkm_tp, int cmd){ \
switch(cmd){ \
case WAN_MOD_LOAD: return mod_init(NULL); \
case WAN_MOD_UNLOAD: return mod_exit(NULL); \
} \
return -EINVAL; \
} \
int (name)(struct lkm_table* lkmtp, int cmd, int ver){\
DISPATCH(lkmtp,cmd,ver,load_##name,load_##name,lkm_nofunc);\
}
#elif defined(__NetBSD__)
# define WAN_MODULE_VERSION(module, version)
# define WAN_MODULE_DEPEND(module, mdepend, vmin, vpref, vmax)
# if (__NetBSD_Version__ < 200000000)
# define WAN_MOD_DEV(name,devsw) MOD_DEV(name,LM_DT_CHAR,-1,(devsw));
# else
# define WAN_MOD_DEV(name,devsw) MOD_DEV(name,name,NULL,-1,(devsw),-1);
# endif
# define WAN_MODULE_DEFINE(name,name_str,author,descr,lic,mod_init,mod_exit,devsw)\
int (##name_lkmentry)(struct lkm_table* lkmtp, int cmd, int ver);\
WAN_MOD_DEV(name_str, (devsw)); \
int load_##name(struct lkm_table* lkm_tp, int cmd){ \
switch(cmd){ \
case WAN_MOD_LOAD: return mod_init(NULL); \
case WAN_MOD_UNLOAD: return mod_exit(NULL); \
} \
return -EINVAL; \
} \
int (##name_lkmentry)(struct lkm_table* lkmtp, int cmd, int ver){\
DISPATCH(lkmtp,cmd,ver,load_##name,load_##name,lkm_nofunc);\
}
#elif defined(__LINUX__)
# define WAN_MODULE_VERSION(module, version)
# define WAN_MODULE_DEPEND(module, mdepend, vmin, vpref, vmax)
# define WAN_MODULE_DEFINE(name,name_str,author,descr,lic,mod_init,mod_exit,devsw)\
MODULE_AUTHOR (author); \
MODULE_DESCRIPTION (descr); \
MODULE_LICENSE(lic); \
int __init load_##name(void){return mod_init(NULL);} \
void __exit unload_##name(void){mod_exit(NULL);} \
module_init(load_##name); \
module_exit(unload_##name);
#elif defined(__SOLARIS__)
# define WAN_MODULE_VERSION(module, version)
# define WAN_MODULE_DEPEND(module, mdepend, vmin, vpref, vmax)
# define WAN_MODULE_DEFINE(name,name_str,author,descr,lic,mod_init,mod_exit,devsw)\
int _init(void){\
int err=mod_init(NULL); \
if (err) return err; \
err=mod_install(&modlinkage) \
if (err) cmn_err(CE_CONT, "mod_install: failed\n"); \
return err; \
}\
void _fini(void){ \
int status \
mod_exit(NULL); \
if ((status = mod_remove(&modlinkage)) != 0) \
cmn_err(CE_CONT, "mod_remove: failed\n"); \
return status; \
}\
int _info(struct modinfo* modinfop) \
{ \
dcmn_err((CE_CONT, "Get module info!\n")); \
return (mod_info(&modlinkage, modinfop)); \
}
#elif defined(__WINDOWS__)
# define WAN_MODULE_VERSION(module, version)
# define WAN_MODULE_DEPEND(module, mdepend, vmin, vpref, vmax)
# define WAN_MODULE_DEFINE(name,name_str,author,descr,lic,mod_init,mod_exit,devsw)
#endif
/*
******************************************************************
** T Y P E D E F
******************************************************************
*/
#if !defined(__WINDOWS__)
#if !defined(offsetof)
# define offsetof(type, member) ((size_t)(&((type*)0)->member))
#endif
#endif
#if defined(__LINUX__)
/**************************** L I N U X **************************************/
typedef struct sk_buff netskb_t;
typedef struct sk_buff_head wan_skb_queue_t;
typedef struct timer_list wan_timer_info_t;
typedef void (*wan_timer_func_t)(unsigned long);
typedef unsigned long wan_timer_arg_t;
typedef void wan_tasklet_func_t(unsigned long);
# if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
typedef void (*wan_taskq_func_t)(void *);
# else
typedef void (*wan_taskq_func_t)(struct work_struct *);
#endif
/* Due to 2.6.20 kernel, the wan_taskq_t must be declared
* here as a workqueue structre. The tq_struct is declared
* as work queue in wanpipe_kernel.h */
typedef struct tq_struct wan_taskq_t;
typedef void* virt_addr_t;
typedef unsigned long wp_phys_addr_t;
typedef spinlock_t wan_spinlock_t;
#ifdef DEFINE_MUTEX
typedef struct mutex wan_mutexlock_t;
#else
typedef spinlock_t wan_mutexlock_t;
#endif
typedef rwlock_t wan_rwlock_t;
typedef unsigned long wan_smp_flag_t;
typedef unsigned long wan_rwlock_flag_t;
typedef void (*TASKQ_FUNC)(void *);
typedef struct tty_driver ttydriver_t;
typedef struct tty_struct ttystruct_t;
typedef struct termios termios_t;
# if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,10)
# define vsnprintf(a,b,c,d) vsprintf(a,c,d)
# endif
typedef void* wan_dma_tag_t;
typedef wait_queue_head_t wan_waitq_head_t;
typedef void (wan_pci_ifunc_t)(void*);
#elif defined(__FreeBSD__)
/**************************** F R E E B S D **********************************/
typedef struct ifnet netdevice_t;
typedef struct mbuf netskb_t;
# ifdef ALTQ
typedef struct ifaltq wan_skb_queue_t;
# else
typedef struct ifqueue wan_skb_queue_t;
# endif
typedef struct ether_header ethhdr_t;
typedef struct callout_handle wan_timer_info_t;
typedef timeout_t* wan_timer_func_t;
typedef void* wan_timer_arg_t;
typedef task_fn_t wan_tasklet_func_t;
typedef task_fn_t* wan_taskq_func_t;
typedef caddr_t virt_addr_t;
typedef u_int32_t wp_phys_addr_t;
typedef int atomic_t;
typedef dev_t ttydriver_t;
typedef struct tty ttystruct_t;
typedef struct termios termios_t;
typedef int (get_info_t)(char *, char **, off_t, int, int);
#if defined(SPINLOCK_OLD)
typedef int wan_spinlock_t;
#else
typedef struct mtx wan_spinlock_t;
#endif
typedef int wan_rwlock_t;
typedef int wan_smp_flag_t;
typedef int wan_rwlock_flag_t;
# if (__FreeBSD_version < 450000)
typedef struct proc wan_dev_thread_t;
# else
typedef d_thread_t wan_dev_thread_t;
# endif
typedef bus_dma_tag_t wan_dma_tag_t;
typedef int wan_waitq_head_t;
typedef void (wan_pci_ifunc_t)(void*);
#elif defined(__OpenBSD__)
/**************************** O P E N B S D **********************************/
typedef struct ifnet netdevice_t;
typedef struct mbuf netskb_t;
# ifdef ALTQ
typedef struct ifaltq wan_skb_queue_t;
# else
typedef struct ifqueue wan_skb_queue_t;
# endif
typedef struct ether_header ethhdr_t;
typedef struct timeout wan_timer_info_t;
typedef void (*wan_timer_func_t)(void*);
typedef void* wan_timer_arg_t;
typedef void wan_tasklet_func_t(void*, int);
typedef void (*wan_taskq_func_t)(void*, int);
typedef caddr_t virt_addr_t;
typedef u_int32_t wp_phys_addr_t;
typedef int atomic_t;
typedef dev_t ttydriver_t;
typedef struct tty ttystruct_t;
typedef struct termios termios_t;
typedef int (get_info_t)(char *, char **, off_t, int, int);
typedef bus_dma_tag_t wan_dma_tag_t;
typedef int wan_spinlock_t;
typedef int wan_smp_flag_t;
typedef int wan_rwlock_t;
typedef int wan_rwlock_flag_t;
typedef int (wan_pci_ifunc_t)(void*);
#elif defined(__NetBSD__)
/**************************** N E T B S D **********************************/
typedef struct ifnet netdevice_t;
typedef struct mbuf netskb_t;
# ifdef ALTQ
typedef struct ifaltq wan_skb_queue_t;
# else
typedef struct ifqueue wan_skb_queue_t;
# endif
typedef struct ether_header ethhdr_t;
typedef struct callout wan_timer_info_t;
typedef void (*wan_timer_func_t)(void*);
typedef void* wan_timer_arg_t;
typedef void wan_tasklet_func_t(void*, int);
typedef void (*wan_taskq_func_t)(void*, int);
typedef caddr_t virt_addr_t;
typedef u_int32_t wp_phys_addr_t;
typedef int atomic_t;
typedef dev_t ttydriver_t;
typedef struct tty ttystruct_t;
typedef struct termios termios_t;
typedef int (get_info_t)(char *, char **, off_t, int, int);
typedef bus_dma_tag_t wan_dma_tag_t;
typedef int wan_spinlock_t;
typedef int wan_smp_flag_t;
typedef int wan_rwlock_t;
typedef int wan_rwlock_flag_t;
typedef void (wan_pci_ifunc_t)(void*);
#elif defined(__SOLARIS__)
typedef mblk_t netskb_t;
#elif defined(__WINDOWS__)
/**************************** W I N D O W S **********************************/
typedef struct sk_buff netskb_t;
typedef struct sk_buff_head wan_skb_queue_t;
typedef struct
{
u8 DestAddr[ETHER_ADDR_LEN];
u8 SrcAddr[ETHER_ADDR_LEN];
u16 EtherType;
} ethhdr_t;
typedef int wan_rwlock_t;
typedef int wan_rwlock_flag_t;
typedef int pid_t;
typedef void (wan_pci_ifunc_t)(void*);
typedef wan_spinlock_t wan_mutexlock_t;
#define WAN_IOCTL_RET_TYPE int
#endif
/*
* Spin Locks
*/
#if 0
typedef struct _wan_spinlock
{
#if defined(__LINUX__)
spinlock_t slock;
unsigned long flags;
#elif defined(MAC_OS)
ULONG slock;
#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
int slock;
#endif /* OS */
} wan_spinlock_t;
#endif
/*
* Read Write Locks
*/
#if 0
typedef struct _wan_rwlock
{
#if defined(__LINUX__)
rwlock_t rwlock;
#elif defined(MAC_OS)
#error "wan_rwlock_t not defined"
#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
volatile unsigned int lock;
#else
#error "wan_rwlock_t not defined"
#endif /* OS */
} wan_rwlock_t;
#endif
/*
** FIXME: Redefined from sdla_adsl.c
** DMA structure for ADSL ONLY!!!!!!!
*/
typedef struct _wan_dma_descr_org
{
unsigned long* vAddr;
unsigned long pAddr;
unsigned long length;
unsigned long max_length;
#if defined(__FreeBSD__)
bus_dma_tag_t dmat;
bus_dmamap_t dmamap;
#elif defined(__OpenBSD__)
bus_dma_tag_t dmat;
bus_dma_segment_t dmaseg;
int rsegs;
#elif defined(__NetBSD__)
bus_dma_tag_t dmat;
bus_dma_segment_t dmaseg;
int rsegs;
#elif defined(__WINDOWS__)
PDMA_ADAPTER DmaAdapterObject;
#else /* other OS */
#endif
} wan_dma_descr_org_t;/*, *PDMA_DESCRIPTION;*/
/*
** TASK structure
*/
typedef struct _wan_tasklet
{
unsigned long running;
#if defined(__FreeBSD__) && (__FreeBSD_version >= 410000)
struct task task_id;
#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
wan_tasklet_func_t* task_func;
void* data;
#elif defined(__LINUX__)
struct tasklet_struct task_id;
#elif defined(__WINDOWS__)
KDPC tqueue;
#elif defined(__SOLARIS__)
#error "wan_tasklet: not defined in solaris"
#endif
} wan_tasklet_t;
#if !defined(__LINUX__) && !defined(__WINDOWS__)
typedef struct _wan_taskq
{
unsigned char running;
#if defined(__FreeBSD__) && (__FreeBSD_version >= 410000)
struct task tqueue;
#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
wan_taskq_func_t tfunc;
void* data;
#elif defined(__LINUX__)
/* Due to 2.6.20 kernel, we cannot abstract the
* wan_taskq_t here, we must declare it as work queue */
# error "Linux doesnt support wan_taskq_t here!"
# if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
struct tq_struct tqueue;
# else
struct work_struct tqueue;
# endif
#elif defined(__SOLARIS__)
#error "_wan_taskq: not defined in solaris"
#endif
} wan_taskq_t;
#endif
typedef struct wan_trace
{
u_int32_t tracing_enabled;
wan_skb_queue_t trace_queue;
wan_ticks_t trace_timeout;/* WARNING: has to be 'unsigned long' !!!*/
unsigned int max_trace_queue;
unsigned char last_trace_direction;
u_int32_t missed_idle_rx_counter;
u_int32_t time_stamp;
}wan_trace_t;
/*
** TIMER structure
*/
#if !defined(__WINDOWS__)
typedef struct _wan_timer
{
#define NDIS_TIMER_TAG 0xBEEF0005
unsigned long Tag;
wan_timer_func_t MiniportTimerFunction;
void * MiniportTimerContext;
void * MiniportAdapterHandle;
wan_timer_info_t timer_info;
#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
wan_timer_func_t timer_func;
#endif
void* timer_arg;
} wan_timer_t;
#endif
#if !defined(LINUX_2_6) && !defined(__WINDOWS__)
/* Define this structure for BSDs and not Linux-2.6 */
struct seq_file {
char* buf; /* pointer to buffer (buf)*/
size_t size; /* total buffer len (len)*/
size_t from; /* total buffer len (offs)*/
size_t count; /* offset into buffer (cnt)*/
# if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
unsigned long index; /* iteration index*/
# else
loff_t index; /* iteration index*/
# endif
int stop_cnt;/* last stop offset*/
};
#endif
#pragma pack(1)
#if defined(WAN_BIG_ENDIAN) || (1)
/* We use BIG ENDIAN because
RTP TAP needs to be transmitted
BIG ENDIAN */
typedef struct {
uint8_t cc:4; /* CSRC count */
uint8_t x:1; /* header extension flag */
uint8_t p:1; /* padding flag */
uint8_t version:2; /* protocol version */
uint8_t pt:7; /* payload type */
uint8_t m:1; /* marker bit */
uint16_t seq; /* sequence number */
uint32_t ts; /* timestamp */
uint32_t ssrc; /* synchronization source */
} wan_rtp_hdr_t;
#else /* BIG_ENDIAN */
/* not used */
typedef struct {
uint8_t version:2; /* protocol version */
uint8_t p:1; /* padding flag */
uint8_t x:1; /* header extension flag */
uint8_t cc:4; /* CSRC count */
uint8_t m:1; /* marker bit */
uint8_t pt:7; /* payload type */
uint16_t seq; /* sequence number */
uint32_t ts; /* timestamp */
uint32_t ssrc; /* synchronization source */
} wan_rtp_hdr_t;
#endif
typedef struct wan_rtp_pkt {
ethhdr_t eth_hdr;
iphdr_t ip_hdr;
udphdr_t udp_hdr;
wan_rtp_hdr_t rtp_hdr;
#define wan_eth_dest eth_hdr.w_eth_dest
#define wan_eth_src eth_hdr.w_eth_src
#define wan_eth_proto eth_hdr.w_eth_proto
} wan_rtp_pkt_t;
#pragma pack()
#if (!defined __WINDOWS__)
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
#define LINUX_HAS_NET_DEVICE_OPS
#endif
#endif
//#if defined(HAVE_NET_DEVICE_OPS) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
#if defined(HAVE_NET_DEVICE_OPS) || defined(LINUX_HAS_NET_DEVICE_OPS)
#define WAN_DECLARE_NETDEV_OPS(_ops_name) static struct net_device_ops _ops_name = {0};
#define WAN_NETDEV_OPS_BIND(dev,_ops_name) dev->netdev_ops = &_ops_name
#define WAN_NETDEV_OPS_INIT(dev,ops,wan_init) ops.ndo_init = wan_init
#define WAN_NETDEV_OPS_OPEN(dev,ops,wan_open) ops.ndo_open = wan_open
#define WAN_NETDEV_OPS_STOP(dev,ops,wan_stop) ops.ndo_stop = wan_stop
#define WAN_NETDEV_OPS_XMIT(dev,ops,wan_send) ops.ndo_start_xmit = wan_send
#define WAN_NETDEV_OPS_STATS(dev,ops,wan_stats) ops.ndo_get_stats = wan_stats
#define WAN_NETDEV_OPS_TIMEOUT(dev,ops,wan_timeout) ops.ndo_tx_timeout = wan_timeout
#define WAN_NETDEV_OPS_IOCTL(dev,ops,wan_ioctl) ops.ndo_do_ioctl = wan_ioctl
#define WAN_NETDEV_OPS_MTU(dev,ops,wan_mtu) ops.ndo_change_mtu = wan_mtu
#define WAN_NETDEV_OPS_CONFIG(dev,ops,wan_set_config) ops.ndo_set_config = wan_set_config
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)
#define WAN_NETDEV_OPS_SET_MULTICAST_LIST(dev,ops,wan_multicast_list)
#else
#define WAN_NETDEV_OPS_SET_MULTICAST_LIST(dev,ops,wan_multicast_list) ops.ndo_set_multicast_list = wan_multicast_list
#endif
//#define WAN_CHANGE_MTU(dev) dev->netdev_ops->ndo_change_mtu
//#define WAN_XMIT(dev) dev->netdev_ops->ndo_start_xmit
//#define WAN_IOCTL(dev) dev->netdev_ops->ndo_do_ioctl
#define WAN_NETDEV_TEST_XMIT(dev) dev->netdev_ops->ndo_start_xmit
#define WAN_NETDEV_XMIT(skb,dev) dev->netdev_ops->ndo_start_xmit(skb,dev)
#define WAN_NETDEV_TEST_IOCTL(dev) dev->netdev_ops->ndo_do_ioctl
#define WAN_NETDEV_IOCTL(dev,ifr,cmd) dev->netdev_ops->ndo_do_ioctl(dev,ifr,cmd)
#define WAN_NETDEV_TEST_MTU(dev) dev->netdev_ops->ndo_change_mtu
#define WAN_NETDEV_CHANGE_MTU(dev,skb) dev->netdev_ops->ndo_change_mtu(dev,skb)
#else
#define WAN_DECLARE_NETDEV_OPS(_ops_name)
#define WAN_NETDEV_OPS_BIND(dev,_ops_name)
#define WAN_NETDEV_OPS_INIT(dev,ops,wan_init) dev->init = wan_init
#define WAN_NETDEV_OPS_OPEN(dev,ops,wan_open) dev->open = wan_open
#define WAN_NETDEV_OPS_STOP(dev,ops,wan_stop) dev->stop = wan_stop
#define WAN_NETDEV_OPS_XMIT(dev,ops,wan_send) dev->hard_start_xmit = wan_send
#define WAN_NETDEV_OPS_STATS(dev,ops,wan_stats) dev->get_stats = wan_stats
#define WAN_NETDEV_OPS_TIMEOUT(dev,ops,wan_timeout) dev->tx_timeout = wan_timeout
#define WAN_NETDEV_OPS_IOCTL(dev,ops,wan_ioctl) dev->do_ioctl = wan_ioctl
#define WAN_NETDEV_OPS_MTU(dev,ops,wan_mtu) dev->change_mtu = wan_mtu
#define WAN_NETDEV_OPS_CONFIG(dev,ops,wan_set_config) dev->set_config = wan_set_config
#define WAN_NETDEV_OPS_SET_MULTICAST_LIST(dev,ops,wan_multicast_list) dev->set_multicast_list = wan_multicast_list
//#define WAN_CHANGE_MTU(dev) dev->change_mtu
//#define WAN_XMIT(dev) dev->hard_start_xmit
//#define WAN_IOCTL(dev) dev->do_ioctl
#define WAN_NETDEV_TEST_XMIT(dev) dev->hard_start_xmit
#define WAN_NETDEV_XMIT(skb,dev) dev->hard_start_xmit(skb,dev)
#define WAN_NETDEV_TEST_IOCTL(dev) dev->do_ioctl
#define WAN_NETDEV_IOCTL(dev,ifr,cmd) dev->do_ioctl(dev,ifr,cmd)
#define WAN_NETDEV_TEST_MTU(dev) dev->change_mtu
#define WAN_NETDEV_CHANGE_MTU(dev,skb) dev->change_mtu(dev,skb)
#endif /* HAVE_NET_DEVICE_OPS */
#endif /* KERNEL */
#endif /* __WANPIPE_DEFINES_H */