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:
Detlef Wengorz 2000-10-28 19:31:13 +00:00
parent e346262860
commit fc10f79d69
12 changed files with 741 additions and 454 deletions

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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);

View File

@ -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 {

View File

@ -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
}

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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