add new netfilter target ISDNDIAL (natfilter/Postrouting).
add a kernel-patch to insert isdn_skb_bits field in skbuff's. stop using of skb->nfmark field.
This commit is contained in:
parent
e346262860
commit
fc10f79d69
|
@ -16,49 +16,40 @@ if [ "$CONFIG_X25" != "n" ]; then
|
|||
bool ' X.25 PLP on top of ISDN' CONFIG_ISDN_X25
|
||||
fi
|
||||
|
||||
if [ "$CONFIG_EXPERIMENTAL" != "n" ]; then
|
||||
mainmenu_option next_comment
|
||||
comment 'ISDN abc-dw-extension'
|
||||
bool 'Enable isdn-abc-dw-extension' CONFIG_ISDN_WITH_ABC
|
||||
if [ "$CONFIG_ISDN_WITH_ABC" != "n" ]; then
|
||||
bool ' Use D-Channel-Callback with Channel in use check' CONFIG_ISDN_WITH_ABC_CALLB
|
||||
bool ' Enable Outgoing-EAZ-Support' CONFIG_ISDN_WITH_ABC_OUTGOING_EAZ
|
||||
bool ' Enable LCR-Support (need isdnlog)' CONFIG_ISDN_WITH_ABC_LCR_SUPPORT
|
||||
bool ' TCP keepalive detect and response (ip4 only)' CONFIG_ISDN_WITH_ABC_IPV4_TCP_KEEPALIVE
|
||||
bool ' Drop frames s_addr != iface_addr (ip4 only)' CONFIG_ISDN_WITH_ABC_IPV4_DYNADDR
|
||||
mainmenu_option next_comment
|
||||
comment 'ISDN abc-dw-extension'
|
||||
bool 'Enable isdn-abc-dw-extension' CONFIG_ISDN_WITH_ABC
|
||||
if [ "$CONFIG_ISDN_WITH_ABC" != "n" ]; then
|
||||
bool ' Use D-Channel-Callback with Channel in use check' CONFIG_ISDN_WITH_ABC_CALLB
|
||||
bool ' Enable Outgoing-EAZ-Support' CONFIG_ISDN_WITH_ABC_OUTGOING_EAZ
|
||||
bool ' Enable LCR-Support (need isdnlog)' CONFIG_ISDN_WITH_ABC_LCR_SUPPORT
|
||||
bool ' TCP keepalive detect and response (ip4 only)' CONFIG_ISDN_WITH_ABC_IPV4_TCP_KEEPALIVE
|
||||
bool ' RX dont reset hanguptimeout' CONFIG_ISDN_WITH_ABC_RCV_NO_HUPTIMER
|
||||
bool ' Drop frames with s_addr != iface_addr (ip4 only)' CONFIG_ISDN_WITH_ABC_IPV4_DYNADDR
|
||||
if [ "$CONFIG_EXPERIMENTAL" != "n" ]; then
|
||||
if [ "$CONFIG_ISDN_WITH_ABC_IPV4_DYNADDR" != "n" ]; then
|
||||
bool ' Rewrite socket and frame saddr-field (tcp-ip4 only and very experimental)' CONFIG_ISDN_WITH_ABC_IPV4_RW_SOCKADDR
|
||||
bool ' Rewrite socket and frame saddr-field (udp-ip4 only and very experimental)' CONFIG_ISDN_WITH_ABC_IPV4_RWUDP_SOCKADDR
|
||||
bool ' Rewrite socket and frame saddr-field (ipv4 only)' CONFIG_ISDN_WITH_ABC_IPV4_RW_SOCKADDR
|
||||
fi
|
||||
bool ' RX dont reset hanguptimeout' CONFIG_ISDN_WITH_ABC_RCV_NO_HUPTIMER
|
||||
if [ "$CONFIG_NETFILTER" != "n" ]; then
|
||||
if [ "$CONFIG_IP_NF_IPTABLES" != "n" ]; then
|
||||
bool ' Iptables-support (IPV4 kernel >= 2.4.0)' CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
fi
|
||||
if [ "$CONFIG_IP6_NF_IPTABLES" != "n" ]; then
|
||||
bool ' Iptables-support (IPV6 kernel >= 2.4.0)' CONFIG_ISDN_WITH_ABC_IPV6TABLES_NETFILTER
|
||||
fi
|
||||
bool ' Iptables_DWISDN target support (kernel >= 2.4.0' CONFIG_ISDN_WITH_ABC_IPT_TARGET
|
||||
if [ "$CONFIG_ISDN_WITH_ABC_IPT_TARGET" != "n" ]; then
|
||||
int ' skb->nfmark bit (1-32) for tx without huptime-reset' CONFIG_ISDN_WITH_ABC_IPT_TARGET_HBIT 25
|
||||
int ' Bit (1-32) for send icmp-unreach in offline case ' CONFIG_ISDN_WITH_ABC_IPT_TARGET_DBIT 26
|
||||
bool ' Iptables-support (IPV4 kernel >= 2.4.0)' CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
fi
|
||||
fi
|
||||
|
||||
bool ' Support (device-channel)<->(bind-groups)' CONFIG_ISDN_WITH_ABC_ICALL_BIND
|
||||
bool ' Skip channel if used external (dial only)' CONFIG_ISDN_WITH_ABC_CH_EXTINUSE
|
||||
bool ' Support interface-auto-disable if config-error' CONFIG_ISDN_WITH_ABC_CONN_ERROR
|
||||
bool ' Enable UDP-Info-Support' CONFIG_ISDN_WITH_ABC_UDP_CHECK
|
||||
if [ "$CONFIG_ISDN_WITH_ABC_UDP_CHECK" != "n" ]; then
|
||||
bool ' Enable Hangup-Support with UDP-INFO' CONFIG_ISDN_WITH_ABC_UDP_CHECK_HANGUP
|
||||
bool ' Enable Dial-Support with UDP-INFO' CONFIG_ISDN_WITH_ABC_UDP_CHECK_DIAL
|
||||
fi
|
||||
if [ "$CONFIG_ISDN_PPP" != "n" ]; then
|
||||
bool ' Enable Compression with rawip and x75i' CONFIG_ISDN_WITH_ABC_RAWIPCOMPRESS
|
||||
bool ' Enable Hangup-Support with UDP-INFO' CONFIG_ISDN_WITH_ABC_UDP_CHECK_HANGUP
|
||||
bool ' Enable Dial-Support with UDP-INFO' CONFIG_ISDN_WITH_ABC_UDP_CHECK_DIAL
|
||||
fi
|
||||
fi
|
||||
endmenu
|
||||
|
||||
bool ' Support (device-channel)<->(bind-groups)' CONFIG_ISDN_WITH_ABC_ICALL_BIND
|
||||
bool ' Skip channel if used external (dial only)' CONFIG_ISDN_WITH_ABC_CH_EXTINUSE
|
||||
bool ' Support interface-auto-disable if config-error' CONFIG_ISDN_WITH_ABC_CONN_ERROR
|
||||
if [ "$CONFIG_ISDN_PPP" != "n" ]; then
|
||||
bool ' Enable Compression with rawip and x75i' CONFIG_ISDN_WITH_ABC_RAWIPCOMPRESS
|
||||
fi
|
||||
fi
|
||||
endmenu
|
||||
|
||||
mainmenu_option next_comment
|
||||
comment 'ISDN feature submodules'
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -288,7 +288,6 @@ static void
|
|||
#endif
|
||||
isdn_net_unreachable(struct net_device *dev, struct sk_buff *skb, char *reason)
|
||||
{
|
||||
|
||||
if(skb) {
|
||||
|
||||
u_short proto = ntohs(skb->protocol);
|
||||
|
@ -305,6 +304,10 @@ isdn_net_unreachable(struct net_device *dev, struct sk_buff *skb, char *reason)
|
|||
dev->name,
|
||||
(reason != NULL) ? reason : "reason unknown");
|
||||
}
|
||||
#ifdef CONFIG_ISDN_WITH_ABC
|
||||
if(dev != NULL)
|
||||
dwisdn_nfw_send((isdn_net_local *)dev->priv,1);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -610,6 +613,9 @@ isdn_net_stat_callback(int idx, isdn_ctrl *c)
|
|||
lp->dialstate = 1;
|
||||
dev->dwabc_chan_external_inuse[idx] = jiffies + HZ * 30;
|
||||
printk(KERN_INFO "%s: Channel %d look like external in use\n",lp->name,idx);
|
||||
#if CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
dwisdn_nfw_send(lp,1);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1334,8 +1340,7 @@ void isdn_net_write_super(isdn_net_local *lp, struct sk_buff *skb)
|
|||
/*
|
||||
* called from tq_immediate
|
||||
*/
|
||||
static void
|
||||
isdn_net_softint(void *private)
|
||||
static void isdn_net_softint(void *private)
|
||||
{
|
||||
isdn_net_local *lp = private;
|
||||
struct sk_buff *skb;
|
||||
|
@ -1417,14 +1422,11 @@ isdn_net_xmit(struct net_device *ndev, struct sk_buff *skb)
|
|||
isdn_net_local *slp;
|
||||
isdn_net_local *lp = (isdn_net_local *) ndev->priv;
|
||||
int retv = 0;
|
||||
#ifdef CONFIG_ISDN_WITH_ABC_IPT_TARGET
|
||||
#ifdef CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
ulong old_huptimer = lp->huptimer;
|
||||
|
||||
short d_reset_frame =
|
||||
skb != NULL &&
|
||||
CONFIG_ISDN_WITH_ABC_IPT_TARGET_HBIT > 0 &&
|
||||
CONFIG_ISDN_WITH_ABC_IPT_TARGET_HBIT < 33 &&
|
||||
(skb->nfmark & ( 1lu << (CONFIG_ISDN_WITH_ABC_IPT_TARGET_HBIT - 1)));
|
||||
short d_reset_frame = skb != NULL &&
|
||||
(skb->isdn_skb_bits & ( 1lu << ISDN_SKB_BIT_NF_NO_RS_TX));
|
||||
#endif
|
||||
|
||||
if (((isdn_net_local *) (ndev->priv))->master) {
|
||||
|
@ -1436,7 +1438,7 @@ isdn_net_xmit(struct net_device *ndev, struct sk_buff *skb)
|
|||
/* For the other encaps the header has already been built */
|
||||
#ifdef CONFIG_ISDN_PPP
|
||||
if (lp->p_encap == ISDN_NET_ENCAP_SYNCPPP) {
|
||||
#ifdef CONFIG_ISDN_WITH_ABC_IPT_TARGET
|
||||
#ifdef CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
int r = isdn_ppp_xmit(skb, ndev);
|
||||
|
||||
if(d_reset_frame)
|
||||
|
@ -1459,7 +1461,7 @@ isdn_net_xmit(struct net_device *ndev, struct sk_buff *skb)
|
|||
/* Reset hangup-timeout */
|
||||
lp->huptimer = 0; // FIXME?
|
||||
#ifdef CONFIG_ISDN_WITH_ABC
|
||||
#ifdef CONFIG_ISDN_WITH_ABC_IPT_TARGET
|
||||
#ifdef CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
if(d_reset_frame)
|
||||
lp->huptimer = old_huptimer;
|
||||
#endif
|
||||
|
@ -1715,6 +1717,166 @@ static int isdn_net_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
|||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef CONFIG_ISDN_WITH_ABC
|
||||
int isdn_auto_dial_helper( isdn_net_local *lp,
|
||||
struct sk_buff *skb,
|
||||
int dm_manual_allowed)
|
||||
/**********************************************************************
|
||||
return's:
|
||||
-1 dial not allowed or impossible
|
||||
0 interface is connected
|
||||
1 dial is started
|
||||
***********************************************************************/
|
||||
{
|
||||
int retw = -1;
|
||||
int chi;
|
||||
ulong flags;
|
||||
char *errmsg = NULL;
|
||||
|
||||
#ifdef ISDN_DEBUG_NET_DUMP
|
||||
{
|
||||
char *buf = skb->data;
|
||||
isdn_dumppkt("S:", buf, skb->len, 40);
|
||||
}
|
||||
#endif
|
||||
if (lp->flags & ISDN_NET_CONNECTED)
|
||||
return(0);
|
||||
|
||||
save_flags(flags);
|
||||
cli();
|
||||
|
||||
do {
|
||||
|
||||
/* Log packet, which triggered dialing */
|
||||
if (dev->net_verbose)
|
||||
isdn_net_log_skb(skb, lp);
|
||||
#ifdef CONFIG_ISDN_WITH_ABC
|
||||
#ifdef CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
if((skb->isdn_skb_bits & ( 1lu << ISDN_SKB_BIT_NF_NO_RS_TX))) {
|
||||
if((skb->isdn_skb_bits & (1lu << ISDN_SKB_BIT_NF_S_UNREACH))) {
|
||||
errmsg = "dial rejected: Iptables_DWISDN --hutimer --unreach";
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
/* only do autodial if allowed by config */
|
||||
if (!(ISDN_NET_DIALMODE(*lp) == ISDN_NET_DM_AUTO)) {
|
||||
errmsg = "dial rejected: interface not in dialmode `auto'";
|
||||
|
||||
if(dm_manual_allowed &&
|
||||
!(ISDN_NET_DIALMODE(*lp) == ISDN_NET_DM_MANUAL)) {
|
||||
|
||||
errmsg =
|
||||
"dial rejected: interface not in dialmode `auto or manual'";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (!lp->phone[1]) {
|
||||
|
||||
errmsg = "No phone number";
|
||||
break;
|
||||
}
|
||||
|
||||
if(lp->dialwait_timer <= 0) {
|
||||
|
||||
if( lp->dialstarted > 0 &&
|
||||
lp->dialtimeout > 0 &&
|
||||
jiffies < (lp->dialstarted + lp->dialtimeout + lp->dialwait)) {
|
||||
|
||||
lp->dialwait_timer =
|
||||
lp->dialstarted + lp->dialtimeout + lp->dialwait;
|
||||
}
|
||||
}
|
||||
|
||||
if(lp->dialwait_timer > 0) {
|
||||
|
||||
if(jiffies < lp->dialwait_timer) {
|
||||
|
||||
errmsg = "dial rejected: retry-time not reached";
|
||||
break;
|
||||
|
||||
} else lp->dialwait_timer = 0;
|
||||
}
|
||||
#ifdef CONFIG_ISDN_WITH_ABC
|
||||
if(isdn_dwabc_is_interface_disabled(lp))
|
||||
break;
|
||||
#endif
|
||||
/* Grab a free ISDN-Channel */
|
||||
if (((chi =
|
||||
#ifdef CONFIG_ISDN_WITH_ABC_ICALL_BIND
|
||||
dwabc_isdn_get_net_free_channel(lp)
|
||||
#else
|
||||
isdn_get_free_channel(
|
||||
ISDN_USAGE_NET,
|
||||
lp->l2_proto,
|
||||
lp->l3_proto,
|
||||
lp->pre_device,
|
||||
lp->pre_channel,
|
||||
#ifdef CONFIG_ISDN_WITH_ABC_OUTGOING_EAZ
|
||||
(*lp->dw_out_msn) ? lp->dw_out_msn :
|
||||
#endif
|
||||
lp->msn)
|
||||
#endif
|
||||
) < 0) &&
|
||||
((chi =
|
||||
#ifdef CONFIG_ISDN_WITH_ABC_ICALL_BIND
|
||||
dwabc_isdn_get_net_free_channel(lp)
|
||||
#else
|
||||
isdn_get_free_channel(
|
||||
ISDN_USAGE_NET,
|
||||
lp->l2_proto,
|
||||
lp->l3_proto,
|
||||
lp->pre_device,
|
||||
lp->pre_channel^1,
|
||||
#ifdef CONFIG_ISDN_WITH_ABC_OUTGOING_EAZ
|
||||
(*lp->dw_out_msn) ? lp->dw_out_msn :
|
||||
#endif
|
||||
lp->msn)
|
||||
#endif
|
||||
) < 0)) {
|
||||
|
||||
errmsg = "No channel";
|
||||
break;
|
||||
}
|
||||
|
||||
lp->dialstate = 1;
|
||||
/* Connect interface with channel */
|
||||
isdn_net_bind_channel(lp, chi);
|
||||
#ifdef CONFIG_ISDN_PPP
|
||||
if (lp->p_encap == ISDN_NET_ENCAP_SYNCPPP) {
|
||||
/* no 'first_skb' handling for syncPPP */
|
||||
if (isdn_ppp_bind(lp) < 0) {
|
||||
isdn_net_unbind_channel(lp);
|
||||
break;
|
||||
}
|
||||
|
||||
isdn_net_dial(); /* Initiate dialing */
|
||||
netif_stop_queue(&lp->netdev->dev);
|
||||
retw = 1;
|
||||
break;
|
||||
/* let upper layer requeue skb packet */
|
||||
}
|
||||
#endif
|
||||
/* Initiate dialing */
|
||||
isdn_net_dial();
|
||||
isdn_net_device_stop_queue(lp);
|
||||
retw = 1;
|
||||
|
||||
} while(0);
|
||||
|
||||
if(retw < 0 && errmsg != NULL)
|
||||
isdn_net_unreachable(&lp->netdev->dev, skb, errmsg);
|
||||
|
||||
restore_flags(flags);
|
||||
return(retw);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
static int
|
||||
dwabc_isdn_net_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
||||
#else
|
||||
|
@ -1765,6 +1927,40 @@ isdn_net_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
|||
} else
|
||||
#endif
|
||||
/* auto-dialing xmit function */
|
||||
#ifdef CONFIG_ISDN_WITH_ABC
|
||||
{
|
||||
int r;
|
||||
|
||||
isdn_net_adjust_hdr(skb, ndev);
|
||||
|
||||
if(!(r = isdn_auto_dial_helper(lp,skb,0))) {
|
||||
|
||||
/*
|
||||
** Device is connected to an ISDN channel
|
||||
*/
|
||||
ndev->trans_start = jiffies;
|
||||
|
||||
if (!lp->dialstate) {
|
||||
|
||||
/*
|
||||
** ISDN connection is established, try sending
|
||||
*/
|
||||
r = isdn_net_xmit(ndev, skb);
|
||||
|
||||
} else r = 1;
|
||||
|
||||
if(r)
|
||||
netif_stop_queue(ndev);
|
||||
|
||||
} else if(r < 0) {
|
||||
|
||||
dev_kfree_skb(skb);
|
||||
r = 0;
|
||||
}
|
||||
|
||||
return(r);
|
||||
}
|
||||
#else
|
||||
{
|
||||
#ifdef ISDN_DEBUG_NET_DUMP
|
||||
u_char *buf;
|
||||
|
@ -1774,17 +1970,14 @@ isdn_net_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
|||
buf = skb->data;
|
||||
isdn_dumppkt("S:", buf, skb->len, 40);
|
||||
#endif
|
||||
|
||||
if (!(lp->flags & ISDN_NET_CONNECTED)) {
|
||||
int chi;
|
||||
#ifdef CONFIG_ISDN_WITH_ABC
|
||||
#ifdef CONFIG_ISDN_WITH_ABC_IPT_TARGET
|
||||
if( CONFIG_ISDN_WITH_ABC_IPT_TARGET_HBIT > 0 &&
|
||||
CONFIG_ISDN_WITH_ABC_IPT_TARGET_HBIT < 33 &&
|
||||
(skb->nfmark & ( 1lu << (CONFIG_ISDN_WITH_ABC_IPT_TARGET_HBIT - 1)))) {
|
||||
#ifdef CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
if((skb->isdn_skb_bits & ( 1lu << ISDN_SKB_BIT_NF_NO_RS_TX))) {
|
||||
|
||||
if( CONFIG_ISDN_WITH_ABC_IPT_TARGET_DBIT > 0 &&
|
||||
CONFIG_ISDN_WITH_ABC_IPT_TARGET_DBIT < 33 &&
|
||||
(skb->nfmark & ( 1lu << (CONFIG_ISDN_WITH_ABC_IPT_TARGET_DBIT - 1)))) {
|
||||
if((skb->isdn_skb_bits & (1lu << ISDN_SKB_BIT_NF_S_UNREACH))) {
|
||||
|
||||
isdn_net_unreachable(ndev, skb,
|
||||
"dial rejected: Iptables_DWISDN --hutimer --unreach");
|
||||
|
@ -1839,10 +2032,9 @@ isdn_net_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
|||
lp->pre_device,
|
||||
lp->pre_channel,
|
||||
#ifdef CONFIG_ISDN_WITH_ABC_OUTGOING_EAZ
|
||||
(*lp->dw_out_msn) ? lp->dw_out_msn : lp->msn)
|
||||
#else
|
||||
lp->msn)
|
||||
(*lp->dw_out_msn) ? lp->dw_out_msn :
|
||||
#endif
|
||||
lp->msn)
|
||||
#endif
|
||||
) < 0) &&
|
||||
((chi =
|
||||
|
@ -1856,10 +2048,9 @@ isdn_net_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
|||
lp->pre_device,
|
||||
lp->pre_channel^1,
|
||||
#ifdef CONFIG_ISDN_WITH_ABC_OUTGOING_EAZ
|
||||
(*lp->dw_out_msn) ? lp->dw_out_msn : lp->msn)
|
||||
#else
|
||||
lp->msn)
|
||||
(*lp->dw_out_msn) ? lp->dw_out_msn :
|
||||
#endif
|
||||
lp->msn)
|
||||
#endif
|
||||
) < 0)) {
|
||||
restore_flags(flags);
|
||||
|
@ -1914,6 +2105,7 @@ isdn_net_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
|||
}
|
||||
}
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -3256,6 +3448,9 @@ isdn_net_new(char *name, struct net_device *master)
|
|||
of those who forget configuring this */
|
||||
#ifdef CONFIG_ISDN_WITH_ABC
|
||||
netdev->local->dw_abc_old_onhtime = netdev->local->onhtime;
|
||||
#if CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER || CONFIG_ISDN_WITH_ABC_IPV6TABLES_NETFILTER
|
||||
skb_queue_head_init(&netdev->local->dw_abc_nfq);
|
||||
#endif
|
||||
#endif
|
||||
netdev->local->dialmax = 1;
|
||||
netdev->local->flags = ISDN_NET_CBHUP | ISDN_NET_DM_MANUAL; /* Hangup before Callback, manual dial */
|
||||
|
@ -3828,6 +4023,7 @@ isdn_net_realrm(isdn_net_dev * p, isdn_net_dev * q)
|
|||
if (dev->netdev == NULL)
|
||||
isdn_timer_ctrl(ISDN_TIMER_NETHANGUP, 0);
|
||||
#ifdef CONFIG_ISDN_WITH_ABC
|
||||
dwisdn_nfw_send(p->local,1);
|
||||
isdn_dw_clear_if(~0l,p->local);
|
||||
dwabc_bsd_free(p->local);
|
||||
#endif
|
||||
|
|
|
@ -134,6 +134,9 @@ isdn_ppp_free(isdn_net_local * lp)
|
|||
if (lp->ppp_slot < 0 || lp->ppp_slot > ISDN_MAX_CHANNELS)
|
||||
return 0;
|
||||
|
||||
#if CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
dwisdn_nfw_send(lp,1);
|
||||
#endif
|
||||
save_flags(flags);
|
||||
cli();
|
||||
|
||||
|
@ -377,6 +380,9 @@ isdn_ppp_release(int min, struct file *file)
|
|||
* removing the IPPP_CONNECT flag omits calling of isdn_ppp_wakeup_daemon()
|
||||
*/
|
||||
isdn_net_hangup(&p->dev);
|
||||
#if CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
dwisdn_nfw_send(is->lp,1);
|
||||
#endif
|
||||
}
|
||||
for (i = 0; i < NUM_RCV_BUFFS; i++) {
|
||||
if (is->rq[i].buf) {
|
||||
|
@ -507,6 +513,9 @@ isdn_ppp_ioctl(int min, struct file *file, unsigned int cmd, unsigned long arg)
|
|||
if (lp) {
|
||||
/* OK .. we are ready to send buffers */
|
||||
netif_wake_queue(&lp->netdev->dev);
|
||||
#if CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
dwisdn_nfw_send(lp,0);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
is->pppcfg = val;
|
||||
|
@ -1934,7 +1943,14 @@ isdn_ppp_hangup_slave(char *name)
|
|||
return 1;
|
||||
lp = ndev->local;
|
||||
if (!(lp->flags & ISDN_NET_CONNECTED))
|
||||
#if CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
{
|
||||
dwisdn_nfw_send(lp,1);
|
||||
return 5;
|
||||
}
|
||||
#else
|
||||
return 5;
|
||||
#endif
|
||||
|
||||
sdev = lp->slave;
|
||||
while (sdev) {
|
||||
|
@ -1947,6 +1963,9 @@ isdn_ppp_hangup_slave(char *name)
|
|||
return 2;
|
||||
|
||||
isdn_net_hangup(sdev);
|
||||
#if CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
dwisdn_nfw_send(lp,1);
|
||||
#endif
|
||||
return 0;
|
||||
#else
|
||||
return -1;
|
||||
|
|
|
@ -68,11 +68,7 @@
|
|||
#undef CONFIG_ISDN_WITH_ABC_CH_EXTINUSE
|
||||
#undef CONFIG_ISDN_WITH_ABC_CONN_ERROR
|
||||
#undef CONFIG_ISDN_WITH_ABC_RAWIPCOMPRESS
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_RW_SOCKADDR
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_RWUDP_SOCKADDR
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV6TABLES_NETFILTER
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPT_TARGET
|
||||
#else
|
||||
#include <linux/isdn_dwabc.h>
|
||||
|
||||
|
@ -92,6 +88,13 @@ typedef struct DWABCJIFFIES {
|
|||
|
||||
} DWABCJIFFIES;
|
||||
|
||||
enum ISDN_SKB_BITS {
|
||||
|
||||
ISDN_SKB_BIT_NF_NO_RS_TX = 0, /* don't reset huptimer on tx */
|
||||
ISDN_SKB_BIT_NF_S_UNREACH, /* send dest-unreach in offline case */
|
||||
ISDN_SKB_BIT_NF_DIALLOOP, /* ISDNDIAL target deadloop detection */
|
||||
};
|
||||
|
||||
#ifdef CONFIG_ISDN_WITH_ABC_NEED_DWSJIFFIES
|
||||
DWABCJIFFIES isdn_dwabc_jiffies;
|
||||
#else
|
||||
|
@ -110,8 +113,6 @@ extern DWABCJIFFIES isdn_dwabc_jiffies;
|
|||
#define ISDN_DW_ABC_FLAG_NO_CONN_ERROR 0x00000080L
|
||||
#define ISDN_DW_ABC_FLAG_BSD_COMPRESS 0x00000100L
|
||||
#define ISDN_DW_ABC_FLAG_NO_LCR 0x00000200L
|
||||
#define ISDN_DW_ABC_FLAG_RW_SOCKADDR 0x00000400L
|
||||
#define ISDN_DW_ABC_FLAG_RWUDP_SOCKADDR 0x00000800L
|
||||
#define ISDN_DW_ABC_FLAG_LEASED_LINE 0x00001000L
|
||||
|
||||
#define ISDN_DW_ABC_IFFLAG_NODCHAN 0x00000001L
|
||||
|
@ -508,6 +509,10 @@ typedef struct isdn_net_local_s {
|
|||
ulong dw_abc_bsd_bsd_snd;
|
||||
ulong dw_abc_bsd_rcv;
|
||||
ulong dw_abc_bsd_bsd_rcv;
|
||||
#if CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER || CONFIG_ISDN_WITH_ABC_IPV6TABLES_NETFILTER
|
||||
struct sk_buff_head dw_abc_nfq;
|
||||
short dw_abc_addr_ready;
|
||||
#endif
|
||||
#endif
|
||||
} isdn_net_local;
|
||||
|
||||
|
@ -816,6 +821,8 @@ typedef struct isdn_devt {
|
|||
extern isdn_dev *dev;
|
||||
|
||||
#ifdef CONFIG_ISDN_WITH_ABC
|
||||
extern int isdn_auto_dial_helper(isdn_net_local *,struct sk_buff *,int);
|
||||
extern void dwisdn_nfw_send(isdn_net_local *lp,int drop_only);
|
||||
extern void isdn_net_unreachable(struct net_device *,struct sk_buff *,char *);
|
||||
extern void isdn_net_log_skb_dwabc(struct sk_buff *,isdn_net_local *,char *);
|
||||
extern void isdn_net_hangup(struct net_device *d);
|
||||
|
|
|
@ -46,13 +46,15 @@ struct ISDN_DWABC_LCR_IOCTL {
|
|||
|
||||
|
||||
enum iptdwisdn {
|
||||
IPT_DWISDN_NOT = 0x800,
|
||||
IPT_DWISDN_NOT = 0x80,
|
||||
IPT_DWISDN_CON = 1,
|
||||
IPT_DWISDN_IDEV = 2,
|
||||
IPT_DWISDN_CHARGE = 3,
|
||||
IPT_DWISDN_OUTGOING = 4,
|
||||
IPT_DWISDN_CBOUT = 5,
|
||||
IPT_DWISDN_DIALMODE = 6,
|
||||
IPT_DWISDN_ADDROK = 7,
|
||||
IPT_DWISDN_FEQIADR = 8,
|
||||
};
|
||||
|
||||
|
||||
|
@ -64,7 +66,7 @@ enum iptdwisdn_constat {
|
|||
};
|
||||
|
||||
enum tiptdwisdn {
|
||||
TIPT_DWISDN_NOT = 0x800,
|
||||
TIPT_DWISDN_NOT = 0x80,
|
||||
TIPT_DWISDN_CLEAR = 1,
|
||||
TIPT_DWISDN_SET = 2,
|
||||
TIPT_DWISDN_DIAL = 3,
|
||||
|
@ -87,6 +89,8 @@ static struct option IPT_dwisdn_opts[] = {
|
|||
{"outgoing", 0,0,IPT_DWISDN_OUTGOING },
|
||||
{"cbout", 0,0,IPT_DWISDN_CBOUT },
|
||||
{"dialmode", 1,0,IPT_DWISDN_DIALMODE },
|
||||
{"addr_ok", 0,0,IPT_DWISDN_ADDROK },
|
||||
{"f_eq_iadr", 0,0,IPT_DWISDN_FEQIADR },
|
||||
{0},
|
||||
};
|
||||
#define IPTDWISDN_ANZOPS ((sizeof(IPT_dwisdn_opts)/sizeof(*IPT_dwisdn_opts))-1)
|
||||
|
@ -109,7 +113,7 @@ static struct option TIPT_dwisdn_opts[] = {
|
|||
#endif
|
||||
|
||||
#define IPTDWISDN_MAXOPS 16
|
||||
#define IPTDWISDN_REVISION (u_short)2
|
||||
#define IPTDWISDN_REVISION (u_short)3
|
||||
|
||||
|
||||
typedef struct IPTDWISDN_INFO {
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
diff -urN --minimal linux-2.4.0-test9/include/linux/skbuff.h linux/include/linux/skbuff.h
|
||||
--- linux-2.4.0-test9/include/linux/skbuff.h Sat Sep 9 08:34:22 2000
|
||||
+++ linux/include/linux/skbuff.h Wed Oct 18 15:52:43 2000
|
||||
@@ -146,6 +146,9 @@
|
||||
#ifdef CONFIG_NET_SCHED
|
||||
__u32 tc_index; /* traffic control index */
|
||||
#endif
|
||||
+#if defined(CONFIG_ISDN) || defined(CONFIG_ISDN_MODULE)
|
||||
+ unsigned short isdn_skb_bits; /* isdn netfilter support */
|
||||
+#endif
|
||||
};
|
||||
|
||||
#define SK_WMEM_MAX 65535
|
||||
diff -urN --minimal linux-2.4.0-test9/net/core/skbuff.c linux/net/core/skbuff.c
|
||||
--- linux-2.4.0-test9/net/core/skbuff.c Mon May 22 16:50:55 2000
|
||||
+++ linux/net/core/skbuff.c Wed Oct 18 15:51:51 2000
|
||||
@@ -246,6 +246,9 @@
|
||||
#endif
|
||||
memset(skb->cb, 0, sizeof(skb->cb));
|
||||
skb->priority = 0;
|
||||
+#if defined(CONFIG_ISDN) || defined(CONFIG_ISDN_MODULE)
|
||||
+ skb->isdn_skb_bits = 0;
|
||||
+#endif
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -375,6 +378,9 @@
|
||||
#endif
|
||||
#ifdef CONFIG_NET_SCHED
|
||||
new->tc_index = old->tc_index;
|
||||
+#endif
|
||||
+#if defined(CONFIG_ISDN) || defined(CONFIG_ISDN_MODULE)
|
||||
+ new->isdn_skb_bits = old->isdn_skb_bits;
|
||||
#endif
|
||||
}
|
||||
|
|
@ -40,6 +40,7 @@
|
|||
#undef CONFIG_ISDN_WITH_ABC_LCR_SUPPORT
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_TCP_KEEPALIVE
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_DYNADDR
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_RW_SOCKADDR
|
||||
#undef CONFIG_ISDN_WITH_ABC_RCV_NO_HUPTIMER
|
||||
#undef CONFIG_ISDN_WITH_ABC_ICALL_BIND
|
||||
#undef CONFIG_ISDN_WITH_ABC_CH_EXTINUSE
|
||||
|
@ -47,8 +48,6 @@
|
|||
#undef CONFIG_ISDN_WITH_ABC_RAWIPCOMPRESS
|
||||
#undef CONFIG_ISDN_WITH_ABC_FRAME_LIMIT
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV6TABLES_NETFILTER
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPT_TARGET
|
||||
#undef ISDN_NEW_TBUSY
|
||||
#delete #define ISDN_NEW_TBUSY
|
||||
#define COMPAT_NO_SOFTNET
|
||||
|
|
|
@ -47,6 +47,7 @@
|
|||
#undef CONFIG_ISDN_WITH_ABC_LCR_SUPPORT
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_TCP_KEEPALIVE
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_DYNADDR
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_RW_SOCKADDR
|
||||
#undef CONFIG_ISDN_WITH_ABC_RCV_NO_HUPTIMER
|
||||
#undef CONFIG_ISDN_WITH_ABC_ICALL_BIND
|
||||
#undef CONFIG_ISDN_WITH_ABC_CH_EXTINUSE
|
||||
|
@ -54,7 +55,6 @@
|
|||
#undef CONFIG_ISDN_WITH_ABC_RAWIPCOMPRESS
|
||||
#undef CONFIG_ISDN_WITH_ABC_FRAME_LIMIT
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV6TABLES_NETFILTER
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPT_TARGET
|
||||
#define COMPAT_NO_SOFTNET
|
||||
#undef HAVE_DEVFS_FS
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
#undef CONFIG_ISDN_WITH_ABC_LCR_SUPPORT
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_TCP_KEEPALIVE
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_DYNADDR
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_RW_SOCKADDR
|
||||
#undef CONFIG_ISDN_WITH_ABC_RCV_NO_HUPTIMER
|
||||
#undef CONFIG_ISDN_WITH_ABC_ICALL_BIND
|
||||
#undef CONFIG_ISDN_WITH_ABC_CH_EXTINUSE
|
||||
|
@ -53,8 +54,6 @@
|
|||
#undef CONFIG_ISDN_WITH_ABC_RAWIPCOMPRESS
|
||||
#undef CONFIG_ISDN_WITH_ABC_FRAME_LIMIT
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV6TABLES_NETFILTER
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPT_TARGET
|
||||
#define COMPAT_NO_SOFTNET
|
||||
#undef HAVE_DEVFS_FS
|
||||
#define devfs_register_chrdev(m,n,f) register_chrdev(m,n,f)
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
#undef CONFIG_ISDN_WITH_ABC_LCR_SUPPORT
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_TCP_KEEPALIVE
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_DYNADDR
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_RW_SOCKADDR
|
||||
#undef CONFIG_ISDN_WITH_ABC_RCV_NO_HUPTIMER
|
||||
#undef CONFIG_ISDN_WITH_ABC_ICALL_BIND
|
||||
#undef CONFIG_ISDN_WITH_ABC_CH_EXTINUSE
|
||||
|
@ -49,8 +50,6 @@
|
|||
#undef CONFIG_ISDN_WITH_ABC_RAWIPCOMPRESS
|
||||
#undef CONFIG_ISDN_WITH_ABC_FRAME_LIMIT
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV6TABLES_NETFILTER
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPT_TARGET
|
||||
#define BIG_PHONE_NUMBERS
|
||||
#undef COMPAT_NO_SOFTNET
|
||||
#define HAVE_DEVFS_FS
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
#undef CONFIG_ISDN_WITH_ABC_LCR_SUPPORT
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_TCP_KEEPALIVE
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_DYNADDR
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV4_RW_SOCKADDR
|
||||
#undef CONFIG_ISDN_WITH_ABC_RCV_NO_HUPTIMER
|
||||
#undef CONFIG_ISDN_WITH_ABC_ICALL_BIND
|
||||
#undef CONFIG_ISDN_WITH_ABC_CH_EXTINUSE
|
||||
|
@ -49,8 +50,6 @@
|
|||
#undef CONFIG_ISDN_WITH_ABC_RAWIPCOMPRESS
|
||||
#undef CONFIG_ISDN_WITH_ABC_FRAME_LIMIT
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPTABLES_NETFILTER
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPV6TABLES_NETFILTER
|
||||
#undef CONFIG_ISDN_WITH_ABC_IPT_TARGET
|
||||
#define BIG_PHONE_NUMBERS
|
||||
#undef COMPAT_NO_SOFTNET
|
||||
#define HAVE_DEVFS_FS
|
||||
|
|
Loading…
Reference in New Issue