# isdn_timru.h

    /* isdn_timru.h
     *
     * Linux ISDN subsystem, timeout-rules for network interfaces.
     *
     * Copyright 1997       by Christian Lademann <cal@zls.de>
     *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 2, or (at your option)
     * any later version.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
     *
     */

    /*
    02.06.97:cal:ISDN_TIMRU_PACKET_NONE def., ISDN_TIMRU_PACKET_* inkr.
    */

    #ifndef __isdn_timru_h__
    #define __isdn_timru_h__

    #define	ISDN_TIMRU_PACKET_NONE		0
    #define	ISDN_TIMRU_PACKET_SKB		1
    #define	ISDN_TIMRU_PACKET_PPP		2
    #define	ISDN_TIMRU_PACKET_PPP_NO_HEADER	3

    #define	ISDN_TIMRU_BRINGUP		0
    #define	ISDN_TIMRU_KEEPUP_IN		1
    #define	ISDN_TIMRU_KEEPUP_OUT		2
    #define	ISDN_TIMRU_BRINGDOWN		3
    #define	ISDN_TIMRU_NUM_CHECK		4

    #define	ISDN_TIMRU_PROTFAM_WILDCARD	0
    #define	ISDN_TIMRU_PROTFAM_IP		1
    #define	ISDN_TIMRU_PROTFAM_PPP		2
    #define	ISDN_TIMRU_PROTFAM_IPX		3
    #define	ISDN_TIMRU_NUM_PROTFAM		4

    #define	ISDN_TIMRU_IP_WILDCARD		0
    #define	ISDN_TIMRU_IP_ICMP		1
    #define	ISDN_TIMRU_IP_TCP		2
    #define	ISDN_TIMRU_IP_UDP		3

    #define	ISDN_TIMRU_PPP_WILDCARD		0
    #define	ISDN_TIMRU_PPP_IPCP		1
    #define	ISDN_TIMRU_PPP_IPXCP		2
    #define	ISDN_TIMRU_PPP_CCP		3
    #define	ISDN_TIMRU_PPP_LCP		4
    #define	ISDN_TIMRU_PPP_PAP		5
    #define	ISDN_TIMRU_PPP_LQR		6
    #define	ISDN_TIMRU_PPP_CHAP		7

    typedef struct {
    	struct in_addr	saddr,		/* Source Address */
    			smask,		/* Source Subnetmask */
    			daddr,		/* Dest. Address */
    			dmask;		/* Dest. Subnetmask */
    	ushort		protocol;	/* TCP, UDP, ... */
    	union {
    		struct {
    			__u16	s_from,	/* Source Port */
    				s_to,
    				d_from,
    				d_to;
    		}		port;
    		struct {
    			__u8	from,	/* ICMP-Type */
    				to;
    		}		type;
    	}		pt;
    }	isdn_timeout_rule_ip;

    typedef struct {
    	ushort		protocol;	/* IPCP, LCP, ... */
    }	isdn_timeout_rule_ppp;

    typedef struct isdn_timeout_rule_s {
    	struct isdn_timeout_rule_s	*next,		/* Pointer to next rule */
    					*prev;		/* Pointer to previous rule */
    	ushort				type,		/* BRINGUP, KEEPUP_*, ... */
    					neg;
    	int				timeout;	/* Timeout value */
    	ushort				protfam;	/* IP, IPX, PPP, ... */
    	union {
    		isdn_timeout_rule_ip	ip;	/* IP-Rule */
    		isdn_timeout_rule_ppp	ppp;	/* PPP-Rule */
    	}				rule;	/* Prot.-specific rule */
    }	isdn_timeout_rule;

    typedef struct {
    	char			name [9];	/* Interface */
    	int			where,		/* 0/1: add to start/end of list, -1: handle default */
    				type,
    				protfam,
    				index,
    				defval;
    	isdn_timeout_rule	rule;		/* Rule */
    }	isdn_ioctl_timeout_rule;

    #ifdef __KERNEL__
    extern int	isdn_net_recalc_timeout(int, int, struct device *, void *, ulong);
    extern int	isdn_timru_alloc_timeout_rules(struct device *);
    extern int	isdn_timru_ioctl_add_rule(isdn_ioctl_timeout_rule *);
    extern int	isdn_timru_ioctl_del_rule(isdn_ioctl_timeout_rule *);
    extern int	isdn_timru_ioctl_get_rule(isdn_ioctl_timeout_rule *);
    #endif /* __KERNEL__ */

    #endif /* __isdn_timru_h__ */