wanpipe-7.0.26.tgz

This commit is contained in:
Harald Welte 2021-12-29 19:11:26 +01:00
parent 239dc6e15f
commit ff69be317e
39 changed files with 628 additions and 126 deletions

View File

@ -1,2 +1,2 @@
wanpipe_linux: git ver 9fc832f
wanpipe_common: git ver 2534792
wanpipe_linux: git ver a362c80
wanpipe_common: git ver 25d1643

View File

@ -1 +1 @@
wanpipe-7.0.25.1
wanpipe-7.0.26

View File

@ -2,11 +2,16 @@
WANPIPE TDM VOICE - IP/WAN Package
------------------------------------------------------------------------------
Copyright (c) 1995-2017 Sangoma Technologies Inc.
Copyright (c) 1995-2019 Sangoma Technologies Inc.
For more info visit: http://wiki.sangoma.com
------------------------------------------------------------------------------
* Tue Apr 02 2019 Pushkar Singh <psingh@sangoma.com> - 7.0.26
==================================================================
- Support for Kernel version 4.15+
- Support for GLIBC version 2.27+
* Wed Feb 23 2019 Nenad Corbic <ncorbic@sangoma.com> - 7.0.25
==================================================================
- Fix the build for DATA

View File

@ -209,10 +209,47 @@ ifneq (,$(wildcard $(KDIR)/include/linux/netdevice.h))
KERN_NDO_CHANGE_MTU_RH74=$(shell grep "ndo_change_mtu_rh74" $(KDIR)/include/linux/netdevice.h -c)
EXTRA_CFLAGS+=-DKERN_NDO_CHANGE_MTU_RH74=$(KERN_NDO_CHANGE_MTU_RH74)
else
KERN_NETIF_TRANS_UPDATE=$(shell grep "ndo_change_mtu_rh74" $(KSRC)/include/linux/netdevice.h -c)
KERN_NDO_CHANGE_MTU_RH74=$(shell grep "ndo_change_mtu_rh74" $(KSRC)/include/linux/netdevice.h -c)
EXTRA_CFLAGS+=-DKERN_NDO_CHANGE_MTU_RH74=$(KERN_NDO_CHANGE_MTU_RH74)
endif
ifneq (,$(wildcard $(KDIR)/include/linux/device.h))
KERN_CLASS_DEV_GROUPS=$(shell awk 'BEGIN { s=0 } /\*\*dev_groups;/ { s=1; exit } END { print s }' $(KDIR)/include/linux/device.h)
EXTRA_CFLAGS+=-DKERN_CLASS_DEV_GROUPS=$(KERN_CLASS_DEV_GROUPS)
else
KERN_CLASS_DEV_GROUPS=$(shell awk 'BEGIN { s=0 } /\*\*dev_groups;/ { s=1; exit } END { print s }' $(KSRC)/include/linux/device.h)
EXTRA_CFLAGS+=-DKERN_CLASS_DEV_GROUPS=$(KERN_CLASS_DEV_GROUPS)
endif
ifneq (,$(wildcard $(KDIR)/include/linux/timer.h))
KERN_TIMER_SETUP=$(shell grep 'define timer_setup' $(KDIR)/include/linux/timer.h -c)
EXTRA_CFLAGS+=-DKERN_TIMER_SETUP=$(KERN_TIMER_SETUP)
else
KERN_TIMER_SETUP=$(shell grep 'define timer_setup' $(KSRC)/include/linux/timer.h -c)
EXTRA_CFLAGS+=-DKERN_TIMER_SETUP=$(KERN_TIMER_SETUP)
endif
ifneq (,$(wildcard $(KDIR)/include/linux/refcount.h))
KERN_REFCNT_UPDATE=$(shell grep 'refcount_read' $(KDIR)/include/linux/refcount.h -c)
EXTRA_CFLAGS+=-DKERN_REFCNT_UPDATE=$(KERN_REFCNT_UPDATE)
else ifneq (,$(wildcard $(KSRC)/include/linux/refcount.h))
KERN_REFCNT_UPDATE=$(shell grep 'refcount_read' $(KSRC)/include/linux/refcount.h -c)
EXTRA_CFLAGS+=-DKERN_REFCNT_UPDATE=$(KERN_REFCNT_UPDATE)
else
KERN_REFCNT_UPDATE=0
EXTRA_CFLAGS+=-DKERN_REFCNT_UPDATE=$(KERN_REFCNT_UPDATE)
endif
ifneq (,$(wildcard $(KDIR)/include/linux/sched/signal.h))
KERN_SIG_UPDATE=$(shell grep 'signal_pending' $(KDIR)/include/linux/sched/signal.h -c)
EXTRA_CFLAGS+=-DKERN_SIG_UPDATE=$(KERN_SIG_UPDATE)
else ifneq (,$(wildcard $(KSRC)/include/linux/sched/signal.h))
KERN_SIG_UPDATE=$(shell grep 'signal_pending' $(KSRC)/include/linux/sched/signal.h -c)
EXTRA_CFLAGS+=-DKERN_SIG_UPDATE=$(KERN_SIG_UPDATE)
else
KERN_SIG_UPDATE=0
EXTRA_CFLAGS+=-DKERN_SIG_UPDATE=$(KERN_SIG_UPDATE)
endif
# First pass, kernel Makefile reads module objects
ifneq ($(KERNELRELEASE),)

99
Setup
View File

@ -247,7 +247,7 @@ check_kern_memcpy_from_msg ()
fi
PROTOCOL_DEFINES="$PROTOCOL_DEFINES $MEMCPY_FROM_MSG_FEATURE "
elif [ -e $DEBSRCDIR/include/linux/skbuff.h ];then
eval "grep PDE_DATA $DEBSRCDIR/include/linux/skbuff.h >/dev/null 2>/dev/null"
eval "grep \"memcpy_from_msg\" $DEBSRCDIR/include/linux/skbuff.h >/dev/null 2>/dev/null"
if [ $? -eq 0 ]; then
MEMCPY_FROM_MSG_FEATURE="-DKERN_MEMCPY_FROM_MSG=1"
else
@ -268,7 +268,7 @@ check_kern_memcpy_to_msg ()
fi
PROTOCOL_DEFINES="$PROTOCOL_DEFINES $MEMCPY_TO_MSG_FEATURE "
elif [ -e $DEBSRCDIR/include/linux/skbuff.h ];then
eval "grep PDE_DATA $DEBSRCDIR/include/linux/skbuff.h >/dev/null 2>/dev/null"
eval "grep \"memcpy_to_msg\" $DEBSRCDIR/include/linux/skbuff.h >/dev/null 2>/dev/null"
if [ $? -eq 0 ]; then
MEMCPY_TO_MSG_FEATURE="-DKERN_MEMCPY_TO_MSG=1"
else
@ -277,6 +277,91 @@ check_kern_memcpy_to_msg ()
PROTOCOL_DEFINES="$PROTOCOL_DEFINES $MEMCPY_TO_MSG_FEATURE "
fi
}
check_kern_dev_group_struct ()
{
if [ -e $SOURCEDIR/include/linux/device.h ];then
eval "awk 'BEGIN { s=0 } /\*\*dev_groups;/ { s=1; exit } END { print s }' $SOURCEDIR/include/linux/device.h >/dev/null 2>/dev/null"
if [ $? -eq 0 ]; then
DEV_GRP_STRUCT="-DKERN_CLASS_DEV_GROUPS=1"
else
DEV_GRP_STRUCT="-DKERN_CLASS_DEV_GROUPS=0"
fi
PROTOCOL_DEFINES="$PROTOCOL_DEFINES $DEV_GRP_STRUCT "
elif [ -e $DEBSRCDIR/include/linux/device.h ];then
eval "awk 'BEGIN { s=0 } /\*\*dev_groups;/ { s=1; exit } END { print s }' $DEBSRCDIR/include/linux/device.h >/dev/null 2>/dev/null"
if [ $? -eq 0 ]; then
DEV_GRP_STRUCT="-DKERN_CLASS_DEV_GROUPS=1"
else
DEV_GRP_STRUCT="-DKERN_CLASS_DEV_GROUPS=0"
fi
PROTOCOL_DEFINES="$PROTOCOL_DEFINES $DEV_GRP_STRUCT "
fi
}
check_kern_timer_struct ()
{
if [ -e $SOURCEDIR/include/linux/timer.h ];then
eval "grep \"define timer_setup\" $SOURCEDIR/include/linux/timer.h >/dev/null 2>/dev/null"
if [ $? -eq 0 ]; then
TIMER_STRUCT="-DKERN_TIMER_SETUP=1"
else
TIMER_STRUCT="-DKERN_TIMER_SETUP=0"
fi
PROTOCOL_DEFINES="$PROTOCOL_DEFINES $TIMER_STRUCT "
elif [ -e $DEBSRCDIR/include/linux/timer.h ];then
eval "grep \"define timer_setup\" $DEBSRCDIR/include/linux/timer.h >/dev/null 2>/dev/null"
if [ $? -eq 0 ]; then
TIMER_STRUCT="-DKERN_TIMER_SETUP=1"
else
TIMER_STRUCT="-DKERN_TIMER_SETUP=0"
fi
PROTOCOL_DEFINES="$PROTOCOL_DEFINES $TIMER_STRUCT "
fi
}
check_kern_refcount_feature ()
{
if [ -e $SOURCEDIR/include/linux/refcount.h ];then
eval "grep \"refcount_read\" $SOURCEDIR/include/linux/refcount.h >/dev/null 2>/dev/null"
if [ $? -eq 0 ]; then
REFCOUNT_UPDATE="-DKERN_REFCNT_UPDATE=1"
else
REFCOUNT_UPDATE="-DKERN_REFCNT_UPDATE=0"
fi
PROTOCOL_DEFINES="$PROTOCOL_DEFINES $REFCOUNT_UPDATE "
elif [ -e $DEBSRCDIR/include/linux/refcount.h ];then
eval "grep \"refcount_read\" $DEBSRCDIR/include/linux/refcount.h >/dev/null 2>/dev/null"
if [ $? -eq 0 ]; then
REFCOUNT_UPDATE="-DKERN_REFCNT_UPDATE=1"
else
REFCOUNT_UPDATE="-DKERN_REFCNT_UPDATE=0"
fi
PROTOCOL_DEFINES="$PROTOCOL_DEFINES $REFCOUNT_UPDATE "
fi
}
check_kern_signal_feature ()
{
if [ -e $SOURCEDIR/include/linux/sched/signal.h ];then
eval "grep \"signal_pending\" $SOURCEDIR/include/linux/sched/signal.h >/dev/null 2>/dev/null"
if [ $? -eq 0 ]; then
SIGNAL_UPDATE="-DKERN_SIG_UPDATE=1"
else
SIGNAL_UPDATE="-DKERN_SIG_UPDATE=0"
fi
PROTOCOL_DEFINES="$PROTOCOL_DEFINES $SIGNAL_UPDATE "
elif [ -e $DEBSRCDIR/include/linux/sched/signal.h ];then
eval "grep \"signal_pending\" $DEBSRCDIR/include/linux/sched/signal.h >/dev/null 2>/dev/null"
if [ $? -eq 0 ]; then
SIGNAL_UPDATE="-DKERN_SIG_UPDATE=1"
else
SIGNAL_UPDATE="-DKERN_SIG_UPDATE=0"
fi
PROTOCOL_DEFINES="$PROTOCOL_DEFINES $SIGNAL_UPDATE "
fi
}
# ----------------------------------------------------------------------------
# Display error message.
# ----------------------------------------------------------------------------
@ -3693,6 +3778,14 @@ CFLAGS="$CC -Wp,-MD,.wanpipe.o.d -nostdinc -iwithprefix include -D__LINUX__ -Dli
check_kern_memcpy_to_msg
check_kern_dev_group_struct
check_kern_timer_struct
check_kern_refcount_feature
check_kern_signal_feature
if [ "$BRI_MODULE_TEST" = "YES" ]; then
PROTOCOL_DEFINES="$PROTOCOL_DEFINES -DBUILD_MOD_TESTER"
fi
@ -7470,7 +7563,7 @@ KERNEL_UNAME=`uname -r`
PKG_NAME=wanpipe
DISTR_NAME="WANPIPE"
PROD=wanrouter
PROD_VER=7.0.25.1
PROD_VER=7.0.26
PROD_HOME=`pwd`
META_CONF=$PROD_HOME/$PROD.rc
WAN_INTR_DIR=$PROD_HOME/interfaces

View File

@ -705,6 +705,11 @@ int registry_write_front_end_cfg(HKEY hPortRegistryKey, port_cfg_t *port_cfg)
break;
}
iReturnCode = registry_set_integer_value(hPortRegistryKey, "TE_IGNORE_DEBOUNCE", te_cfg->ignore_debounce_alarm);
if(iReturnCode){
break;
}
iReturnCode = registry_set_integer_value(hPortRegistryKey, "ACTIVE_CH", ENABLE_ALL_CHANNELS /*must be hardcoded*/);
if(iReturnCode){
break;

View File

@ -1,5 +1,5 @@
Package: wanpipe
Version: 7.0.25.1-0
Version: 7.0.26-0
Section: networking
Priority: optional
Architecture: all

View File

@ -637,6 +637,8 @@ int aft_background_timer_add(sdla_t* card, unsigned long delay);
void aft_background_timer_expire(void* pcard);
#elif defined(__WINDOWS__)
void aft_background_timer_expire(IN PKDPC Dpc, void* pcard, void* arg2, void* arg3);
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
void aft_background_timer_expire(struct timer_list *t);
#else
void aft_background_timer_expire(unsigned long pcard);
#endif

View File

@ -389,8 +389,16 @@ typedef struct wanpipe_datascope
wan_free(dev); \
}
/* since in kernel release 4.15 and after atomic_inc take argument of type atomic_t
* and since sock struct sk_refcnt member is not atomic_t type we need to type cast the same
* here as we donot want to change the kernel sock struct */
#if defined(KERN_REFCNT_UPDATE) && KERN_REFCNT_UPDATE > 0
#define wp_sock_hold(sk) refcount_inc(&(sk)->sk_refcnt)
#define wp_sock_put(sk) refcount_dec_and_test(&(sk)->sk_refcnt)
#else
#define wp_sock_hold(sk) atomic_inc(&(sk)->sk_refcnt)
#define wp_sock_put(sk) atomic_dec_and_test(&(sk)->sk_refcnt)
#endif
struct wanpipe_api_register_struct

View File

@ -462,6 +462,7 @@ typedef struct sdla_te_cfg {
u_int8_t ignore_yel_alarm;
u_int8_t ais_maintenance;
u_int8_t ais_auto_on_los;
u_int8_t ignore_debounce_alarm;
} sdla_te_cfg_t;
/* Performamce monitor counters */

View File

@ -1050,9 +1050,13 @@ static __inline void
wan_init_timer(wan_timer_t* wan_timer, wan_timer_func_t timer_func, wan_timer_arg_t arg)
{
#if defined(__LINUX__)
# if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
timer_setup(&wan_timer->timer_info, timer_func, 0);
# else
init_timer(&wan_timer->timer_info);
wan_timer->timer_info.function = timer_func;
wan_timer->timer_info.data = arg;
# endif
#elif defined(__FreeBSD__)
/* FIXME_ADSL_TIMER */
callout_handle_init(&wan_timer->timer_info);

View File

@ -527,7 +527,11 @@ typedef int wan_ioctl_cmd_t;
typedef struct sk_buff netskb_t;
typedef struct sk_buff_head wan_skb_queue_t;
typedef struct timer_list wan_timer_info_t;
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
typedef void (*wan_timer_func_t)(struct timer_list *t);
#else
typedef void (*wan_timer_func_t)(unsigned long);
#endif
typedef unsigned long wan_timer_arg_t;
typedef void wan_tasklet_func_t(unsigned long);
# if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))

View File

@ -269,6 +269,12 @@
# include <linux/inet.h>
# include <linux/netdevice.h>
# include <linux/list.h>
# if defined(KERN_SIG_UPDATE) && KERN_SIG_UPDATE > 0
# include <linux/sched/signal.h>
# endif
# if defined(KERN_REFCNT_UPDATE) && KERN_REFCNT_UPDATE > 0
# include <linux/refcount.h>
# endif
# include <asm/io.h> /* phys_to_virt() */
# if LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)
# include <asm/system.h>

View File

@ -10,15 +10,15 @@
#define WANPIPE_COMPANY "Sangoma Technologies Inc"
/********** LINUX **********/
#define WANPIPE_VERSION "7.0.25.1"
#define WANPIPE_VERSION "7.0.26"
#define WANPIPE_SUB_VERSION "0"
#define WANPIPE_LITE_VERSION "1.1.1"
#if defined(__LINUX__)
#define WANPIPE_VERSION_MAJOR 7
#define WANPIPE_VERSION_MINOR 0
#define WANPIPE_VERSION_MINOR1 25
#define WANPIPE_VERSION_MINOR2 1
#define WANPIPE_VERSION_MINOR1 26
#define WANPIPE_VERSION_MINOR2 0
#endif
/********** FreeBSD **********/

View File

@ -22,6 +22,8 @@ static wplip_prot_reg_t wplip_prot_reg_ops;
#if defined(__WINDOWS__)
static void wplip_prot_timer(IN PKDPC Dpc, void *arg, void *arg2, void *arg3);
extern void wplip_poll_carrier_status(wplip_link_t *lip_link);
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void wplip_prot_timer(struct timer_list *t);
#else
static void wplip_prot_timer(wan_timer_arg_t arg);
#endif
@ -587,11 +589,17 @@ static void wplip_port_task (struct work_struct *work)
#if defined(__WINDOWS__)
/* This timer runs all the time. The delay is 1 second. */
static void wplip_prot_timer(IN PKDPC Dpc, void *arg, void *arg2, void *arg3)
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void wplip_prot_timer(struct timer_list *t)
#else
static void wplip_prot_timer(wan_timer_arg_t arg)
#endif
{
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
wplip_link_t *lip_link=from_timer(lip_link, t, prot_timer.timer_info);
#else
wplip_link_t *lip_link=(wplip_link_t *)arg;
#endif
unsigned int period=HZ;
wan_smp_flag_t flags;
wplip_prot_iface_t *prot_iface;

View File

@ -3434,6 +3434,8 @@ int aft_background_timer_add(sdla_t* card, unsigned long delay)
void aft_background_timer_expire(void* pcard)
#elif defined(__WINDOWS__)
void aft_background_timer_expire(IN PKDPC Dpc, void* pcard, void* arg2, void* arg3)
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
void aft_background_timer_expire(struct timer_list *t)
#else
void aft_background_timer_expire(unsigned long pcard)
#endif

View File

@ -292,6 +292,8 @@ static int sdla_ds_te1_sigctrl(sdla_fe_t *fe, int, unsigned long, int);
static void sdla_ds_te1_timer(void* pfe);
#elif defined(__WINDOWS__)
static void sdla_ds_te1_timer(IN PKDPC Dpc, void* pfe, void* arg2, void* arg3);
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void sdla_ds_te1_timer(struct timer_list *t);
#else
static void sdla_ds_te1_timer(unsigned long pfe);
#endif
@ -2361,62 +2363,103 @@ static u_int32_t sdla_ds_te1_read_frame_alarms(sdla_fe_t *fe)
fe->name, FE_MEDIA_DECODE(fe),
rrts1, alarm);
/* Framer alarms */
if (rrts1 & BIT_RRTS1_RRAI){
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_RAI,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_ON,
WAN_T1_ALARM_THRESHOLD_RAI_ON);
}else{
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_RAI,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_OFF,
WAN_T1_ALARM_THRESHOLD_RAI_OFF);
if (fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_YES) {
alarm &= ~WAN_TE_BIT_ALARM_RAI;
/* Framer alarms */
//if (WAN_FE_FRAME(fe) != WAN_FR_UNFRAMED){
if (rrts1 & BIT_RRTS1_RRAI){
if (!(alarm & WAN_TE_BIT_ALARM_RAI)){
DEBUG_WARNING("%s: RAI : ON\n",
fe->name);
}
if (fe->fe_cfg.cfg.te_cfg.ignore_yel_alarm == WANOPT_NO){
alarm |= WAN_TE_BIT_ALARM_RAI;
}
}else{
if (alarm & WAN_TE_BIT_ALARM_RAI){
DEBUG_WARNING("%s: RAI : OFF\n",
fe->name);
}
alarm &= ~WAN_TE_BIT_ALARM_RAI;
}
//}
} else {
/* Framer alarms */
if (rrts1 & BIT_RRTS1_RRAI){
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_RAI,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_ON,
WAN_T1_ALARM_THRESHOLD_RAI_ON);
}else{
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_RAI,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_OFF,
WAN_T1_ALARM_THRESHOLD_RAI_OFF);
}
}
if (rrts1 & BIT_RRTS1_RAIS){
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_AIS,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_ON,
WAN_T1_ALARM_THRESHOLD_AIS_ON);
if ((fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_NO) ||
((fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_YES) && (!IS_TE_ALARM_AIS(alarm)))) {
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_AIS,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_ON,
WAN_T1_ALARM_THRESHOLD_AIS_ON);
}
}else{
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_AIS,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_OFF,
WAN_T1_ALARM_THRESHOLD_AIS_OFF);
if ((fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_NO) ||
((fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_YES) && (IS_TE_ALARM_AIS(alarm)))) {
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_AIS,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_OFF,
WAN_T1_ALARM_THRESHOLD_AIS_OFF);
}
}
if (rrts1 & BIT_RRTS1_RLOS){
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_LOS,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_ON,
WAN_T1_ALARM_THRESHOLD_LOS_ON);
if ((fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_NO) ||
((fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_YES) && (!IS_TE_ALARM_LOS(alarm)))) {
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_LOS,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_ON,
WAN_T1_ALARM_THRESHOLD_LOS_ON);
}
}else{
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_LOS,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_OFF,
WAN_T1_ALARM_THRESHOLD_LOS_OFF);
if ((fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_NO) ||
((fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_YES) && (IS_TE_ALARM_LOS(alarm)))) {
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_LOS,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_OFF,
WAN_T1_ALARM_THRESHOLD_LOS_OFF);
}
}
if (WAN_FE_FRAME(fe) != WAN_FR_UNFRAMED){
if (rrts1 & BIT_RRTS1_RLOF){
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_LOF,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_ON,
WAN_T1_ALARM_THRESHOLD_LOF_ON);
if ((fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_NO) ||
((fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_YES) && (!IS_TE_ALARM_LOF(alarm)))) {
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_LOF,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_ON,
WAN_T1_ALARM_THRESHOLD_LOF_ON);
}
}else{
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_LOF,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_OFF,
WAN_T1_ALARM_THRESHOLD_LOF_OFF);
if ((fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_NO) ||
((fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_YES) && (IS_TE_ALARM_LOF(alarm)))) {
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_LOF,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_OFF,
WAN_T1_ALARM_THRESHOLD_LOF_OFF);
}
}
}
/* Aug 30, 2006
@ -2543,24 +2586,26 @@ static u_int32_t sdla_ds_te1_read_alarms(sdla_fe_t *fe, int action)
static int
sdla_ds_te1_update_alarms(sdla_fe_t *fe, u_int32_t alarms)
{
if (!IS_TE_ALARM_RAI(fe->fe_alarm)){
if (IS_TE_ALARM_RAI(alarms)){
if (fe->fe_cfg.cfg.te_cfg.ignore_yel_alarm == WANOPT_NO){
DEBUG_EVENT("%s: RAI : ON\n",
fe->name);
fe->fe_alarm |= WAN_TE_BIT_ALARM_RAI;
} else {
DEBUG_EVENT("%s: RAI : ON (Skipped)\n",
fe->name);
if (fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_NO) {
if (!IS_TE_ALARM_RAI(fe->fe_alarm)){
if (IS_TE_ALARM_RAI(alarms)){
if (fe->fe_cfg.cfg.te_cfg.ignore_yel_alarm == WANOPT_NO){
DEBUG_EVENT("%s: RAI : ON\n",
fe->name);
fe->fe_alarm |= WAN_TE_BIT_ALARM_RAI;
} else {
DEBUG_EVENT("%s: RAI : ON (Skipped)\n",
fe->name);
fe->fe_alarm &= ~WAN_TE_BIT_ALARM_RAI;
}
}
}else{
if (!IS_TE_ALARM_RAI(alarms)){
DEBUG_EVENT("%s: RAI : OFF\n",
fe->name);
fe->fe_alarm &= ~WAN_TE_BIT_ALARM_RAI;
}
}
}else{
if (!IS_TE_ALARM_RAI(alarms)){
DEBUG_EVENT("%s: RAI : OFF\n",
fe->name);
fe->fe_alarm &= ~WAN_TE_BIT_ALARM_RAI;
}
}
if (!IS_TE_ALARM_AIS(fe->fe_alarm)){
@ -3455,17 +3500,29 @@ static int sdla_ds_te1_fr_rxintr_rls1(sdla_fe_t *fe, int silent)
if (rls1 & (BIT_RLS1_RRAIC|BIT_RLS1_RRAID)){
if (rrts1 & BIT_RRTS1_RRAI){
sdla_ds_te1_swirq_trigger(
if (fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_YES) {
fe->fe_alarm |= WAN_TE_BIT_ALARM_RAI;
if (!silent) DEBUG_EVENT("%s: RAI alarm is ON\n",
fe->name);
} else {
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_RAI,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_ON,
WAN_T1_ALARM_THRESHOLD_RAI_ON);
}
}else{
sdla_ds_te1_swirq_trigger(
if (fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_YES) {
fe->fe_alarm &= ~WAN_TE_BIT_ALARM_RAI;
if (!silent) DEBUG_EVENT("%s: RAI alarm is OFF\n",
fe->name);
} else {
sdla_ds_te1_swirq_trigger(
fe,
WAN_TE1_SWIRQ_TYPE_ALARM_RAI,
WAN_TE1_SWIRQ_SUBTYPE_ALARM_OFF,
WAN_T1_ALARM_THRESHOLD_RAI_OFF);
}
}
}
@ -4053,11 +4110,17 @@ static int sdla_ds_te1_intr(sdla_fe_t *fe)
static void sdla_ds_te1_timer(void* pfe)
#elif defined(__WINDOWS__)
static void sdla_ds_te1_timer(IN PKDPC Dpc, void* pfe, void* arg2, void* arg3)
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void sdla_ds_te1_timer(struct timer_list *t)
#else
static void sdla_ds_te1_timer(unsigned long pfe)
#endif
{
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
sdla_fe_t *fe = from_timer(fe, t, timer.timer_info);
#else
sdla_fe_t *fe = (sdla_fe_t*)pfe;
#endif
sdla_t *card = (sdla_t*)fe->card;
wan_device_t *wandev = &card->wandev;
wan_smp_flag_t smp_flags;
@ -4340,8 +4403,10 @@ static int sdla_ds_te1_swirq_alarm(sdla_fe_t* fe, int type)
if (swirq->subtype == WAN_TE1_SWIRQ_SUBTYPE_ALARM_ON){
if (fe->fe_status == FE_DISCONNECTED && type == WAN_TE1_SWIRQ_TYPE_ALARM_RAI) {
swirq->delay=0;
if (fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_NO) {
if (fe->fe_status == FE_DISCONNECTED && type == WAN_TE1_SWIRQ_TYPE_ALARM_RAI) {
swirq->delay=0;
}
}
if (WAN_STIMEOUT(swirq->start, swirq->delay)){
@ -4352,7 +4417,7 @@ static int sdla_ds_te1_swirq_alarm(sdla_fe_t* fe, int type)
alarms |= WAN_TE_BIT_ALARM_LOS;
}else if (type == WAN_TE1_SWIRQ_TYPE_ALARM_LOF){
alarms |= WAN_TE_BIT_ALARM_LOF;
}else if (type == WAN_TE1_SWIRQ_TYPE_ALARM_RAI){
}else if ((fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_NO) && (type == WAN_TE1_SWIRQ_TYPE_ALARM_RAI)) {
alarms |= WAN_TE_BIT_ALARM_RAI;
}
wan_clear_bit(1, (void*)&swirq->pending);
@ -4377,7 +4442,7 @@ static int sdla_ds_te1_swirq_alarm(sdla_fe_t* fe, int type)
alarms &= ~WAN_TE_BIT_ALARM_LOS;
}else if (type == WAN_TE1_SWIRQ_TYPE_ALARM_LOF){
alarms &= ~WAN_TE_BIT_ALARM_LOF;
}else if (type == WAN_TE1_SWIRQ_TYPE_ALARM_RAI){
}else if ((fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_NO) && (type == WAN_TE1_SWIRQ_TYPE_ALARM_RAI)) {
alarms &= ~WAN_TE_BIT_ALARM_RAI;
}
wan_clear_bit(1, (void*)&swirq->pending);
@ -4444,18 +4509,28 @@ static int sdla_ds_te1_swirq_trigger(sdla_fe_t* fe, int type, int subtype, int d
/* new swirq */
fe->swirq[type].subtype = (u8)subtype;
fe->swirq[type].start = SYSTEM_TICKS;
fe->swirq[type].delay = delay;
wan_set_bit(type, (void*)&fe->swirq_map);
if (fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_NO) {
fe->swirq[type].delay = delay;
wan_set_bit(type, (void*)&fe->swirq_map);
}
}else{
/* already in a process */
if (fe->swirq[type].subtype != subtype){
fe->swirq[type].subtype = (u8)subtype;
fe->swirq[type].start = SYSTEM_TICKS;
fe->swirq[type].delay = delay;
wan_set_bit(type, (void*)&fe->swirq_map);
if (fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_NO) {
fe->swirq[type].delay = delay;
wan_set_bit(type, (void*)&fe->swirq_map);
}
}
}
if (fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_YES) {
fe->swirq[type].delay = delay;
wan_set_bit(type, (void*)&fe->swirq_map);
}
return 0;
}
@ -4488,10 +4563,11 @@ static int sdla_ds_te1_swirq(sdla_fe_t* fe)
sdla_ds_te1_swirq_alarm(fe, WAN_TE1_SWIRQ_TYPE_ALARM_LOF);
}
if (wan_test_bit(1, (void*)&fe->swirq[WAN_TE1_SWIRQ_TYPE_ALARM_RAI].pending)){
sdla_ds_te1_swirq_alarm(fe, WAN_TE1_SWIRQ_TYPE_ALARM_RAI);
if (fe->fe_cfg.cfg.te_cfg.ignore_debounce_alarm == WANOPT_NO) {
if (wan_test_bit(1, (void*)&fe->swirq[WAN_TE1_SWIRQ_TYPE_ALARM_RAI].pending)){
sdla_ds_te1_swirq_alarm(fe, WAN_TE1_SWIRQ_TYPE_ALARM_RAI);
}
}
return 0;
}

View File

@ -228,7 +228,11 @@ static int set_dev_config(struct file*, const char*, unsigned long, void *);
static int set_if_info(struct file*, const char*, unsigned long, void *);
#endif
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void atm_timer_poll(struct timer_list *t);
#else
static void atm_timer_poll(unsigned long data);
#endif
static netdevice_t* move_dev_to_next (sdla_t *card, netdevice_t *dev);
@ -575,10 +579,20 @@ int wp_atm_init (sdla_t* card, wandev_conf_t* conf)
return 0;
}
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void atm_timer_poll(struct timer_list *t)
#else
static void atm_timer_poll(unsigned long data)
#endif
{
struct wan_dev_le *devle;
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
sdla_t *card = from_timer(card, t, u.atm.atm_timer.timer_info);
#else
sdla_t *card = (sdla_t *)data;
#endif
netdevice_t *dev;
private_area_t *chan;
int err;

View File

@ -264,6 +264,9 @@ static void l1_timer_expire_t4(void* pfe);
#elif defined(__WINDOWS__)
static void l1_timer_expire_t3(IN PKDPC Dpc, void* pfe, void* arg2, void* arg3);
static void l1_timer_expire_t4(IN PKDPC Dpc, void* pfe, void* arg2, void* arg3);
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void l1_timer_expire_t3(struct timer_list *t);
static void l1_timer_expire_t4(struct timer_list *t);
#else
static void l1_timer_expire_t3(unsigned long pfe);
static void l1_timer_expire_t4(unsigned long pfe);
@ -281,6 +284,8 @@ static void __l1_timer_expire_t3(sdla_fe_t *fe);
static void l1_timer_expire_t1(void* pfe);
#elif defined(__WINDOWS__)
static void l1_timer_expire_t1(IN PKDPC Dpc, void* pfe, void* arg2, void* arg3);
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void l1_timer_expire_t1(struct timer_list *t);
#else
static void l1_timer_expire_t1(unsigned long pfe);
#endif
@ -2292,11 +2297,17 @@ static void l1_timer_stop_t3(void *pport)
static void l1_timer_expire_t3(void* pport)
#elif defined(__WINDOWS__)
static void l1_timer_expire_t3(IN PKDPC Dpc, void* pport, void* arg2, void* arg3)
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void l1_timer_expire_t3(struct timer_list *t)
#else
static void l1_timer_expire_t3(unsigned long pport)
#endif
{
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
bri_xhfc_port_t *port_ptr = from_timer(port_ptr, t, t3_timer.timer_info);
#else
bri_xhfc_port_t *port_ptr = (bri_xhfc_port_t*)pport;
#endif
wp_bri_module_t *bri_module = port_ptr->hw;
sdla_fe_t *fe = (sdla_fe_t*)bri_module->fe;
sdla_t *card = (sdla_t*)fe->card;
@ -2408,11 +2419,17 @@ static void l1_timer_stop_t4(void *pport)
static void l1_timer_expire_t4(void* pport)
#elif defined(__WINDOWS__)
static void l1_timer_expire_t4(IN PKDPC Dpc, void* pport, void* arg2, void* arg3)
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void l1_timer_expire_t4(struct timer_list *t)
#else
static void l1_timer_expire_t4(unsigned long pport)
#endif
{
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
bri_xhfc_port_t *port_ptr = from_timer(port_ptr, t, t4_timer.timer_info);
#else
bri_xhfc_port_t *port_ptr = (bri_xhfc_port_t*)pport;
#endif
wp_bri_module_t *bri_module = port_ptr->hw;
sdla_fe_t *fe = bri_module->fe;
u8 mod_no, port_no;
@ -2442,11 +2459,17 @@ static void l1_timer_expire_t4(unsigned long pport)
static void l1_timer_expire_t1(void* pport)
#elif defined(__WINDOWS__)
static void l1_timer_expire_t1(IN PKDPC Dpc, void* pport, void* arg2, void* arg3)
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void l1_timer_expire_t1(struct timer_list *t)
#else
static void l1_timer_expire_t1(unsigned long pport)
#endif
{
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
bri_xhfc_port_t *port_ptr = from_timer(port_ptr, t, t1_timer.timer_info);
#else
bri_xhfc_port_t *port_ptr = (bri_xhfc_port_t*)pport;
#endif
wp_bri_module_t *bri_module = port_ptr->hw;
sdla_fe_t *fe = (sdla_fe_t*)bri_module->fe;
sdla_t *card = (sdla_t*)fe->card;

View File

@ -237,7 +237,12 @@ static int config_chdlc (sdla_t *card, netdevice_t *dev);
static void disable_comm (sdla_t *card);
static void trigger_chdlc_poll (netdevice_t *);
static void trigger_chdlc_poll_priv_area (chdlc_private_area_t *);
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void chdlc_poll_delay (struct timer_list *t);
#else
static void chdlc_poll_delay (unsigned long dev_ptr);
#endif
static int chdlc_calibrate_baud (sdla_t *card);
static int chdlc_read_baud_calibration (sdla_t *card);
@ -1111,9 +1116,13 @@ static int new_if (wan_device_t* wandev, netdevice_t* dev, wanif_conf_t* conf)
WAN_TASKQ_INIT((&chdlc_priv_area->poll_task),0,chdlc_poll,dev);
/* Initialize the polling delay timer */
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
timer_setup(&chdlc_priv_area->poll_delay_timer, chdlc_poll_delay, 0);
#else
init_timer(&chdlc_priv_area->poll_delay_timer);
chdlc_priv_area->poll_delay_timer.data = (unsigned long)dev;
chdlc_priv_area->poll_delay_timer.function = chdlc_poll_delay;
#endif
/*
* Create interface file in proc fs.
@ -4530,18 +4539,9 @@ static void chdlc_poll (struct work_struct *work)
* a polling routine.
*
*/
static void trigger_chdlc_poll (netdevice_t *dev)
static void trigger_chdlc_poll_priv_area (chdlc_private_area_t *chdlc_priv_area)
{
chdlc_private_area_t *chdlc_priv_area;
sdla_t *card;
if (!dev)
return;
if ((chdlc_priv_area = wan_netif_priv(dev))==NULL)
return;
card = chdlc_priv_area->card;
sdla_t * card = chdlc_priv_area->card;
if (test_and_set_bit(POLL_CRIT,&card->wandev.critical)){
return;
@ -4553,13 +4553,32 @@ static void trigger_chdlc_poll (netdevice_t *dev)
return;
}
static void trigger_chdlc_poll (netdevice_t *dev)
{
chdlc_private_area_t *chdlc_priv_area;
if (!dev)
return;
if ((chdlc_priv_area = wan_netif_priv(dev))==NULL)
return;
trigger_chdlc_poll_priv_area(chdlc_priv_area);
}
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void chdlc_poll_delay (struct timer_list *t)
{
chdlc_private_area_t *chdlc_priv_area = from_timer(chdlc_priv_area, t, poll_delay_timer);
trigger_chdlc_poll_priv_area(chdlc_priv_area);
}
#else
static void chdlc_poll_delay (unsigned long dev_ptr)
{
netdevice_t *dev = (netdevice_t *)dev_ptr;
trigger_chdlc_poll(dev);
}
#endif
static int set_adapter_config (sdla_t* card)
{

View File

@ -449,8 +449,12 @@ int is_arp(void *buf);
int send_inarp_request(sdla_t *card, netdevice_t *dev);
static void trigger_fr_arp (netdevice_t *);
static void fr_arp (unsigned long data);
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void fr_arp (struct timer_list *t);
#else
static void fr_arp (unsigned long data);
#endif
/* Udp management functions */
static int process_udp_mgmt_pkt(sdla_t *card, void *local_dev);
@ -1282,9 +1286,13 @@ static int new_if (wan_device_t* wandev, netdevice_t* dev, wanif_conf_t* conf)
WAN_TASKQ_INIT((&chan->fr_poll_task),0,fr_poll,dev);
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
timer_setup(&chan->fr_arp_timer, fr_arp, 0);
#else
init_timer(&chan->fr_arp_timer);
chan->fr_arp_timer.data=(unsigned long)dev;
chan->fr_arp_timer.function = fr_arp;
#endif
/* Tells us that if this interface is a
* gateway or not */
@ -5379,10 +5387,18 @@ static void trigger_fr_arp (netdevice_t *dev)
* to the remote end.
*/
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void fr_arp (struct timer_list *t)
#else
static void fr_arp (unsigned long data)
#endif
{
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
fr_channel_t *chan = from_timer(chan, t, fr_arp_timer);
#else
netdevice_t *dev = (netdevice_t *)data;
fr_channel_t *chan = wan_netif_priv(dev);
#endif
sdla_t *card = chan->card;
/* Send ARP packets for all devs' until

View File

@ -332,7 +332,12 @@ static int chk_bcast_mcast_addr(sdla_t* card, netdevice_t* dev,
static int config_ppp (sdla_t *);
static void trigger_ppp_poll(netdevice_t *);
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void ppp_poll_delay (struct timer_list *t);
#else
static void ppp_poll_delay (unsigned long dev_ptr);
#endif
# if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
static void ppp_poll (void *card_ptr);
@ -772,9 +777,13 @@ static int new_if(wan_device_t *wandev, netdevice_t *dev, wanif_conf_t *conf)
WAN_TASKQ_INIT((&ppp_priv_area->poll_task),0,ppp_poll,dev);
/* Initialize the polling delay timer */
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
timer_setup(&ppp_priv_area->poll_delay_timer, ppp_poll_delay, 0);
#else
init_timer(&ppp_priv_area->poll_delay_timer);
ppp_priv_area->poll_delay_timer.data = (unsigned long)dev;
ppp_priv_area->poll_delay_timer.function = ppp_poll_delay;
#endif
/*
* Create interface file in proc fs.
@ -4048,32 +4057,44 @@ static void ppp_poll (struct work_struct *work)
*
*/
static void trigger_ppp_poll_priv_area (ppp_private_area_t *ppp_priv_area)
{
sdla_t *card = ppp_priv_area->card;
if (test_bit(PERI_CRIT,&card->wandev.critical)){
return;
}
if (test_and_set_bit(POLL_CRIT,&card->wandev.critical)){
return;
}
WAN_TASKQ_SCHEDULE((&ppp_priv_area->poll_task));
}
static void trigger_ppp_poll (netdevice_t *dev)
{
ppp_private_area_t *ppp_priv_area;
if ((ppp_priv_area=wan_netif_priv(dev)) != NULL){
sdla_t *card = ppp_priv_area->card;
if (test_bit(PERI_CRIT,&card->wandev.critical)){
return;
}
if (test_and_set_bit(POLL_CRIT,&card->wandev.critical)){
return;
}
WAN_TASKQ_SCHEDULE((&ppp_priv_area->poll_task));
trigger_ppp_poll_priv_area(ppp_priv_area);
}
return;
}
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void ppp_poll_delay (struct timer_list *t)
{
ppp_private_area_t *ppp_priv_area = from_timer(ppp_priv_area, t, poll_delay_timer);
trigger_ppp_poll_priv_area(ppp_priv_area);
}
#else
static void ppp_poll_delay (unsigned long dev_ptr)
{
netdevice_t *dev = (netdevice_t *)dev_ptr;
trigger_ppp_poll(dev);
}
#endif
/*============================================================
* detect_and_fix_tx_bug

View File

@ -423,6 +423,8 @@ static int wp_remora_add_timer(sdla_fe_t*, unsigned long);
static void wp_remora_timer(void*);
#elif defined(__WINDOWS__)
static void wp_remora_timer(IN PKDPC,void*,void*,void*);
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void wp_remora_timer(struct timer_list *t);
#else
static void wp_remora_timer(unsigned long);
#endif
@ -2000,11 +2002,17 @@ static int wp_remora_set_dtmf(sdla_fe_t *fe, int mod_no, unsigned char val)
static void wp_remora_timer(void* pfe)
#elif defined(__WINDOWS__)
static void wp_remora_timer(IN PKDPC Dpc, void* pfe, void* arg2, void* arg3)
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void wp_remora_timer(struct timer_list *t)
#else
static void wp_remora_timer(unsigned long pfe)
#endif
{
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
sdla_fe_t *fe = from_timer(fe, t, timer.timer_info);
#else
sdla_fe_t *fe = (sdla_fe_t*)pfe;
#endif
DEBUG_TEST("%s: RM timer!\n", fe->name);

View File

@ -2304,6 +2304,8 @@ static int sdla_te_txlbcode_done(sdla_fe_t *fe);
static void sdla_te_timer(void*);
#elif defined(__WINDOWS__)
static void sdla_te_timer(IN PKDPC,void*,void*,void*);
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void sdla_te_timer(struct timer_list *t);
#else
static void sdla_te_timer(unsigned long);
#endif
@ -6322,11 +6324,18 @@ static u32 sdla_te_get_lbmode(sdla_fe_t *fe)
static void sdla_te_timer(void* pfe)
#elif defined(__WINDOWS__)
static void sdla_te_timer(IN PKDPC Dpc, void* pfe, void* arg2, void* arg3)
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void sdla_te_timer(struct timer_list *t)
#else
static void sdla_te_timer(unsigned long pfe)
#endif
{
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
sdla_fe_t *fe = from_timer(fe, t, timer.timer_info
);
#else
sdla_fe_t *fe = (sdla_fe_t*)pfe;
#endif
sdla_t *card = (sdla_t*)fe->card;
wan_device_t *wandev = &card->wandev;
wan_smp_flag_t smp_flags;

View File

@ -1387,11 +1387,17 @@ static int sdla_te3_add_timer(sdla_fe_t* fe, unsigned long delay)
static void sdla_te3_timer(void* pfe)
#elif defined(__WINDOWS__)
static void sdla_te3_timer(IN PKDPC Dpc, void* pfe, void* arg2, void* arg3)
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void sdla_te3_timer(struct timer_list *t)
#else
static void sdla_te3_timer(unsigned long pfe)
#endif
{
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
sdla_fe_t *fe = from_timer(fe, t, timer.timer_info);
#else
sdla_fe_t *fe = (sdla_fe_t*)pfe;
#endif
sdla_t *card = (sdla_t*)fe->card;
wan_device_t *wandev = &card->wandev;

View File

@ -411,6 +411,8 @@ static int wp_usb_remora_add_event(sdla_fe_t*, sdla_fe_timer_event_t*);
static void wp_usb_remora_timer(void*);
#elif defined(__WINDOWS__)
static void wp_usb_remora_timer(IN PKDPC,void*,void*,void*);
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void wp_usb_remora_timer(struct timer_list *t);
#else
static void wp_usb_remora_timer(unsigned long);
#endif
@ -1807,14 +1809,21 @@ static int wp_usb_remora_set_dtmf(sdla_fe_t *fe, int mod_no, unsigned char val)
******************************************************************************
*/
#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
static void wp_usb_remora_timer(void* pfe)
static void
wp_usb_remora_timer(void* pfe)
#elif defined(__WINDOWS__)
static void wp_usb_remora_timer(IN PKDPC Dpc, void* pfe, void* arg2, void* arg3)
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void wp_usb_remora_timer(struct timer_list *t)
#else
static void wp_usb_remora_timer(unsigned long pfe)
#endif
{
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
sdla_fe_t *fe = from_timer(fe, t, timer.timer_info);
#else
sdla_fe_t *fe = (sdla_fe_t*)pfe;
#endif
sdla_t *card = (sdla_t*)fe->card;
wan_device_t *wandev = &card->wandev;
wan_smp_flag_t smp_flags;

View File

@ -430,7 +430,7 @@ static netdevice_t * move_dev_to_next (sdla_t *, netdevice_t *);
/*=================================================
* Background polling routines
*/
# if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
# if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
static void wpx_poll (void *card_ptr);
#else
static void wpx_poll (struct work_struct *work);
@ -439,7 +439,11 @@ static void poll_disconnected (sdla_t* card);
static void poll_connecting (sdla_t* card);
static void poll_active (sdla_t* card);
static void trigger_x25_poll(sdla_t *card);
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void x25_timer_routine(struct timer_list *t);
#else
static void x25_timer_routine(unsigned long data);
#endif
@ -994,9 +998,13 @@ int wpx_init (sdla_t* card, wandev_conf_t* conf)
WAN_TASKQ_INIT((&card->u.x.x25_poll_task),0,wpx_poll,card);
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
timer_setup(&card->u.x.x25_timer, x25_timer_routine, 0);
#else
init_timer(&card->u.x.x25_timer);
card->u.x.x25_timer.data = (unsigned long)card;
card->u.x.x25_timer.function = x25_timer_routine;
#endif
skb_queue_head_init(&card->u.x.trace_queue);
@ -2359,7 +2367,9 @@ static void rx_intr (sdla_t* card)
return;
}
#if KERN_TIMER_SETUP == 0
dev->last_rx = jiffies; /* timestamp */
#endif
/* set rx_skb to NULL so we won't access it later when
* kernel already owns it */
@ -3069,7 +3079,7 @@ static void spur_intr (sdla_t* card)
* enabled. Beware!
*====================================================================*/
# if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
# if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
static void wpx_poll (void *card_ptr)
#else
static void wpx_poll (struct work_struct *work)
@ -4902,10 +4912,12 @@ static int chan_send (netdevice_t* dev, void* buff, unsigned data_len, unsigned
case 0x00: /* success */
chan->i_timeout_sofar = jiffies;
#if defined(LINUX_2_4)||defined(LINUX_2_6)
# if defined(KERN_NETIF_TRANS_UPDATE) && KERN_NETIF_TRANS_UPDATE > 0
netif_trans_update(dev);
#elif defined(LINUX_2_4)||defined(LINUX_2_6)
dev->trans_start=jiffies;
#endif
if ((qdm & M_BIT) && !card->u.x.LAPB_hdlc){
chan->tx_offset += len;
@ -6640,10 +6652,17 @@ static void S508_S514_unlock(sdla_t *card, unsigned long *smp_flags)
*
* FIXME Polling should be rethinked.
*==============================================================*/
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void x25_timer_routine(struct timer_list *t)
#else
static void x25_timer_routine(unsigned long data)
#endif
{
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
sdla_t *card = from_timer(card, t, u.x.x25_timer);
#else
sdla_t *card = (sdla_t*)data;
#endif
if (test_bit(PERI_CRIT,&card->wandev.critical)){
printk(KERN_INFO "%s: Stopping the X25 Poll Timer: Shutting down.\n",

View File

@ -154,17 +154,27 @@ static struct cdev wp_cdev_dev = {
/* Global WANDEV Structure */
static wanpipe_cdev_device_t wandev;
#if defined(KERN_CLASS_DEV_GROUPS) && KERN_CLASS_DEV_GROUPS > 0
static struct attribute * wanpipe_device_attrs[] = {
NULL,
};
ATTRIBUTE_GROUPS(wanpipe_device);
#else
static struct device_attribute wanpipe_device_attrs[] = {
__ATTR_NULL,
};
#endif
static struct bus_type wanpipe_device_bus = {
.name = "wanpipe_devices",
#if defined(KERN_CLASS_DEV_GROUPS) && KERN_CLASS_DEV_GROUPS > 0
.dev_groups = wanpipe_device_groups,
#else
.dev_attrs = wanpipe_device_attrs,
#endif
};
/*=========================================================
* PUBLIC FUNCTIONS
*========================================================*/

View File

@ -1159,7 +1159,7 @@ static void if_tx_timeout (netdevice_t *dev)
card->devname,wan_netif_name(dev));
WAN_NETIF_WAKE_QUEUE (dev);
#if defined(__LINUX__)
# if (LINUX_VERSION_CODE > KERNEL_VERSION(4,7,0))
# if defined(KERN_NETIF_TRANS_UPDATE) && KERN_NETIF_TRANS_UPDATE > 0
netif_trans_update(dev);
# else
dev->trans_start = SYSTEM_TICKS;
@ -1379,7 +1379,7 @@ static int if_send(netdevice_t *dev, netskb_t *skb, struct sockaddr *dst,struct
++card->wandev.stats.tx_packets;
card->wandev.stats.tx_bytes += wan_skb_len(skb);
#if defined(__LINUX__)
# if (LINUX_VERSION_CODE > KERNEL_VERSION(4,7,0))
# if defined(KERN_NETIF_TRANS_UPDATE) && KERN_NETIF_TRANS_UPDATE > 0
netif_trans_update(dev);
# else
dev->trans_start = SYSTEM_TICKS;

View File

@ -240,7 +240,12 @@ static struct timer_list sppp_keepalive_timer;
wan_spinlock_t spppq_lock;
wan_spinlock_t authenticate_lock;
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void sppp_keepalive (struct timer_list *t);
#else
static void sppp_keepalive (unsigned long dummy);
#endif
static void sppp_cp_send (struct sppp *sp, u16 proto, u8 type,
u8 ident, u16 len, void *data);
static void sppp_cisco_send (struct sppp *sp, int type, long par1, long par2);
@ -251,7 +256,11 @@ static void sppp_lcp_open (struct sppp *sp);
static void sppp_ipcp_open (struct sppp *sp);
static int sppp_lcp_conf_parse_options (struct sppp *sp, struct lcp_header *h,
int len, u32 *magic);
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void sppp_cp_timeout (struct timer_list *t);
#else
static void sppp_cp_timeout (unsigned long arg);
#endif
static char *sppp_lcp_type_name (u8 type);
static char *sppp_ipcp_type_name (u8 type);
static void sppp_print_bytes (u8 *p, u16 len);
@ -363,10 +372,15 @@ static void sppp_set_timeout(struct sppp *p,int s)
{
if (! (p->pp_flags & PP_TIMO))
{
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
timer_setup(&p->pp_timer, sppp_cp_timeout, 0);
mod_timer(&p->pp_timer, jiffies+s*HZ);
#else
init_timer(&p->pp_timer);
p->pp_timer.function=sppp_cp_timeout;
p->pp_timer.expires=jiffies+s*HZ;
p->pp_timer.data=(unsigned long)p;
#endif
p->pp_flags |= PP_TIMO;
add_timer(&p->pp_timer);
}
@ -397,10 +411,15 @@ static void auth_timeout(void * function, struct sppp *p, unsigned int seconds)
if (! (p->pp_auth_flags & PP_TIMO1))
{
printk(KERN_INFO "starting pp_auth_timer...\n");
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
timer_setup(&p->pp_auth_timer, function, 0);
mod_timer(&p->pp_auth_timer, jiffies + seconds * HZ);
#else
init_timer(&p->pp_auth_timer);
p->pp_auth_timer.function = function;
p->pp_auth_timer.expires = jiffies + seconds * HZ;
p->pp_auth_timer.data = (unsigned long)p;
#endif
p->pp_auth_flags |= PP_TIMO1;
add_timer(&p->pp_auth_timer);
}
@ -1465,7 +1484,11 @@ static const struct header_ops sppp_header_ops = {
* Send keepalive packets, every 10 seconds.
*/
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void sppp_keepalive (struct timer_list *dummy)
#else
static void sppp_keepalive (unsigned long dummy)
#endif
{
struct sppp *sp;
//unsigned long flags;
@ -2250,10 +2273,15 @@ void wp_sppp_attach(struct ppp_device *pd)
/* Initialize keepalive handler. */
if (! spppq)
{
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
timer_setup(&sppp_keepalive_timer, sppp_keepalive, 0);
mod_timer(&sppp_keepalive_timer, jiffies+10*HZ);
#else
init_timer(&sppp_keepalive_timer);
sppp_keepalive_timer.expires=jiffies+10*HZ;
sppp_keepalive_timer.function=sppp_keepalive;
add_timer(&sppp_keepalive_timer);
#endif
}
/* Insert new entry into the keepalive list. */
sp->pp_next = spppq;
@ -2995,10 +3023,17 @@ static void sppp_ipcp_open (struct sppp *sp)
/*
* Process PPP control protocol timeouts.
*/
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void sppp_cp_timeout (struct timer_list *t)
#else
static void sppp_cp_timeout (unsigned long arg)
#endif
{
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
struct sppp *sp = from_timer(sp, t, pp_timer);
#else
struct sppp *sp = (struct sppp*) arg;
#endif
//unsigned long flags;
//wan_spin_lock_irq(&spppq_lock, &flags);

View File

@ -69,6 +69,8 @@ static void wanpipe_debug_timer(void* arg);
#elif defined(__WINDOWS__)
static void wanpipe_debug_timer(IN PKDPC Dpc, void* arg, void* arg2, void* arg3);
extern int set_netdev_state(sdla_t* card, netdevice_t* sdla_net_dev, int state);
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void wanpipe_debug_timer(struct timer_list *t);
#else
static void wanpipe_debug_timer(unsigned long arg);
#endif
@ -498,11 +500,17 @@ void wanpipe_debug_timer_init(void* card_id)
static void wanpipe_debug_timer(void* arg)
#elif defined(__WINDOWS__)
static void wanpipe_debug_timer(IN PKDPC Dpc, void* arg, void* arg2, void* arg3)
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void wanpipe_debug_timer(struct timer_list *t)
#else
static void wanpipe_debug_timer(unsigned long arg)
#endif
{
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
sdla_t* card = from_timer(card, t, debug_timer.timer_info);
#else
sdla_t* card = (sdla_t*)arg;
#endif
wan_tasklet_t* debug_task = NULL;
/*
** I should set running flag to zero in order to

View File

@ -211,7 +211,11 @@ static int wanpipe_ioctl(struct socket *sock, unsigned int cmd, unsigned long ar
switch(cmd)
{
case SIOC_WANPIPE_CHECK_TX:
#if defined(KERN_REFCNT_UPDATE) && KERN_REFCNT_UPDATE > 0
if (refcount_read(&sk->sk_wmem_alloc))
#else
if (atomic_read(&sk->sk_wmem_alloc))
#endif
return 1;
goto dev_private_ioctl;
@ -564,8 +568,11 @@ static int wanpipe_listen(struct socket *sock, int backlog)
* For each incoming call, create a new socket and
* return it to the user.
*=====================================================================*/
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static int wanpipe_accept(struct socket *sock, struct socket *newsock, int flags, bool kern)
#else
static int wanpipe_accept(struct socket *sock, struct socket *newsock, int flags)
#endif
{
struct sock *sk;
struct sock *newsk=NULL, *newsk_frmskb=NULL;
@ -1086,11 +1093,19 @@ void wanpipe_kill_sock (struct sock *sk)
SK_PRIV_INIT(sk,NULL);
#if defined(LINUX_2_4)||defined(LINUX_2_6)
#if defined(KERN_REFCNT_UPDATE) && KERN_REFCNT_UPDATE > 0
if (refcount_read(&sk->sk_refcnt) != 1){
DEBUG_TEST("af_wanpipe: Error, wrong reference count: %i ! :Kill.\n",
refcount_read(&sk->sk_refcnt));
refcount_set(&sk->sk_refcnt,1);
}
#else
if (atomic_read(&sk->sk_refcnt) != 1){
DEBUG_TEST("af_wanpipe: Error, wrong reference count: %i ! :Kill.\n",
atomic_read(&sk->sk_refcnt));
atomic_set(&sk->sk_refcnt,1);
}
#endif
sock_put(sk);
#else
sk_free(sk);
@ -1277,11 +1292,19 @@ static int wanpipe_release(struct socket *sock, struct socket *peersock)
SK_PRIV_INIT(sk,NULL);
#if defined(LINUX_2_4)||defined(LINUX_2_6)
#if defined(KERN_REFCNT_UPDATE) && KERN_REFCNT_UPDATE > 0
if (refcount_read(&sk->sk_refcnt) != 1){
DEBUG_EVENT("af_wanpipe: Error, wrong reference count: %i !:release.\n",
refcount_read(&sk->sk_refcnt));
refcount_set(&sk->sk_refcnt,1);
}
#else
if (atomic_read(&sk->sk_refcnt) != 1){
DEBUG_EVENT("af_wanpipe: Error, wrong reference count: %i !:release.\n",
atomic_read(&sk->sk_refcnt));
atomic_set(&sk->sk_refcnt,1);
}
#endif
sock_put(sk);
#else
sk_free(sk);
@ -1311,7 +1334,11 @@ static void check_write_queue(struct sock *sk)
if (sk->sk_state != WANSOCK_CONNECTED)
return;
#if defined(KERN_REFCNT_UPDATE) && KERN_REFCNT_UPDATE > 0
if (!refcount_read(&sk->sk_wmem_alloc))
#else
if (!atomic_read(&sk->sk_wmem_alloc))
#endif
return;
printk(KERN_INFO "af_wanpipe: MAJOR ERROR, Data lost on sock release !!!\n");

View File

@ -464,13 +464,18 @@ wanec_bypass(wan_ec_dev_t *ec_dev, int fe_chan, int enable, int verbose)
static void wanec_timer(void* p_ec_dev)
#elif defined(__WINDOWS__)
static void wanec_timer(IN PKDPC Dpc, void* p_ec_dev, void* arg2, void* arg3)
#elif defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
static void wanec_timer(struct timer_list *t)
#else
static void wanec_timer(unsigned long p_ec_dev)
#endif
{
wan_ec_dev_t *ec_dev = (wan_ec_dev_t*)p_ec_dev;
sdla_t *card = NULL;
#if defined(KERN_TIMER_SETUP) && KERN_TIMER_SETUP > 0
wan_ec_dev_t *ec_dev = from_timer(ec_dev, t, timer.timer_info);
#else
wan_ec_dev_t *ec_dev = (wan_ec_dev_t*)p_ec_dev;
#endif
WAN_ASSERT1(ec_dev == NULL);
WAN_ASSERT1(ec_dev->card == NULL);
card = (sdla_t*)ec_dev->card;

View File

@ -1,6 +1,6 @@
%define WANPIPE_VER wanpipe-modules
%define name %{WANPIPE_VER}
%define version 7.0.25.1
%define version 7.0.26
%define release 0
%define serial 1
%define MODULES_DIR /lib/modules
@ -58,6 +58,11 @@ fi
%changelog
* Tue Apr 02 2019 Pushkar Singh <psingh@sangoma.com> - 7.0.26
==================================================================
- Support for Kernel version 4.15+
- Support for GLIBC version 2.27+
* Wed Feb 23 2019 Nenad Corbic <ncorbic@sangoma.com> - 7.0.25
==================================================================
- Fix the build for DATA

View File

@ -1,6 +1,6 @@
%define WANPIPE_VER wanpipe-util
%define name %{WANPIPE_VER}
%define version 7.0.25.1
%define version 7.0.26
%define release 0
%define serial 1
%define UTILS_DIR /usr/sbin
@ -228,6 +228,11 @@ chmod 755 /usr/local/sbin/setup-sangoma
%changelog
* Tue Apr 02 2019 Pushkar Singh <psingh@sangoma.com> - 7.0.26
==================================================================
- Support for Kernel version 4.15+
- Support for GLIBC version 2.27+
* Wed Feb 23 2019 Nenad Corbic <ncorbic@sangoma.com> - 7.0.25
==================================================================
- Fix the build for DATA

View File

@ -1,7 +1,7 @@
%define KERNEL_VERSION %{?kern_ver}
%define WANPIPE_VER wanpipe
%define name %{WANPIPE_VER}
%define version 7.0.25.1
%define version 7.0.26
%define release 0
%define serial 1
%define UTILS_DIR /usr/sbin
@ -245,6 +245,11 @@ chmod 755 /usr/local/sbin/setup-sangoma
%changelog
* Tue Apr 02 2019 Pushkar Singh <psingh@sangoma.com> - 7.0.26
==================================================================
- Support for Kernel version 4.15+
- Support for GLIBC version 2.27+
* Wed Feb 23 2019 Nenad Corbic <ncorbic@sangoma.com> - 7.0.25
==================================================================
- Fix the build for DATA

View File

@ -2231,7 +2231,7 @@ init_global_params()
{
if [ $OSYSTEM = "Linux" ]; then
ROUTER_VERSION=7.0.25.1
ROUTER_VERSION=7.0.26
IFCONFIG_LIST=ifconfig
MODULE_STAT=lsmod
WAN_DRIVERS="wanpipe"

View File

@ -21,6 +21,7 @@
#include <stddef.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
@ -282,6 +283,7 @@ static key_word_t common_conftab[] = /* Common configuration parameters */
{ "TE_REF_CLOCK", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te_cfg_t, te_ref_clock), DTYPE_UCHAR },
{ "TE_SIG_MODE", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te_cfg_t, sig_mode), DTYPE_UCHAR },
{ "TE_IGNORE_YEL", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te_cfg_t, ignore_yel_alarm), DTYPE_UCHAR },
{ "TE_IGNORE_DEBOUNCE", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te_cfg_t, ignore_debounce_alarm), DTYPE_UCHAR },
{ "TE_AIS_MAINTENANCE", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te_cfg_t, ais_maintenance), DTYPE_UCHAR },
{ "TE_AIS_AUTO_ON_LOS", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te_cfg_t, ais_auto_on_los), DTYPE_UCHAR },
/* T1/E1 Front-End parameters (old style) */

View File

@ -25,7 +25,7 @@
#
%define NAME wanpipe
%define VERSION 7.0.25.1
%define VERSION 7.0.26
%define RELEASE 0
%define KVERSION %{?kernel}
%define KSRC %{?ksrc}
@ -259,6 +259,11 @@ fi
################################################################################
%changelog
* Tue Apr 02 2019 Pushkar Singh <psingh@sangoma.com> - 7.0.26
==================================================================
- Support for Kernel version 4.15+
- Support for GLIBC version 2.27+
* Wed Feb 23 2019 Nenad Corbic <ncorbic@sangoma.com> - 7.0.25
==================================================================
- Fix the build for DATA