Subversion Repositories shark

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/* Linux ISDN subsystem, sync PPP, interface to ipppd
 *
 * Copyright 1994-1999  by Fritz Elfert (fritz@isdn4linux.de)
 * Copyright 1995,96    Thinking Objects Software GmbH Wuerzburg
 * Copyright 1995,96    by Michael Hipp (Michael.Hipp@student.uni-tuebingen.de)
 * Copyright 2000-2002  by Kai Germaschewski (kai@germaschewski.name)
 *
 * This software may be used and distributed according to the terms
 * of the GNU General Public License, incorporated herein by reference.
 *
 */


#ifndef _LINUX_ISDN_PPP_H
#define _LINUX_ISDN_PPP_H

#define CALLTYPE_INCOMING 0x1
#define CALLTYPE_OUTGOING 0x2
#define CALLTYPE_CALLBACK 0x4

#define IPPP_VERSION    "2.2.0"

struct pppcallinfo
{
        int calltype;
        unsigned char local_num[64];
        unsigned char remote_num[64];
        int charge_units;
};

#define PPPIOCGCALLINFO    _IOWR('t',128,struct pppcallinfo)
#define PPPIOCBUNDLE       _IOW('t',129,int)
#define PPPIOCGMPFLAGS     _IOR('t',130,int)
#define PPPIOCSMPFLAGS     _IOW('t',131,int)
#define PPPIOCSMPMTU       _IOW('t',132,int)
#define PPPIOCSMPMRU       _IOW('t',133,int)
#define PPPIOCGCOMPRESSORS _IOR('t',134,unsigned long[8])
#define PPPIOCSCOMPRESSOR  _IOW('t',135,int)
#define PPPIOCGIFNAME      _IOR('t',136,char[IFNAMSIZ])

#define SC_MP_PROT       0x00000200
#define SC_REJ_MP_PROT   0x00000400
#define SC_OUT_SHORT_SEQ 0x00000800
#define SC_IN_SHORT_SEQ  0x00004000

#define ISDN_PPP_COMP_MAX_OPTIONS 16

#define IPPP_COMP_FLAG_XMIT 0x1
#define IPPP_COMP_FLAG_LINK 0x2

struct isdn_ppp_comp_data {
        int num;
        unsigned char options[ISDN_PPP_COMP_MAX_OPTIONS];
        int optlen;
        int flags;
};

#ifdef __KERNEL__

#include <linux/skbuff.h>
#include <linux/ppp_defs.h>

#define DECOMP_ERR_NOMEM        (-10)

/*
 * We need a way for the decompressor to influence the generation of CCP
 * Reset-Requests in a variety of ways. The decompressor is already returning
 * a lot of information (generated skb length, error conditions) so we use
 * another parameter. This parameter is a pointer to a structure which is
 * to be marked valid by the decompressor and only in this case is ever used.
 * Furthermore, the only case where this data is used is when the decom-
 * pressor returns DECOMP_ERROR.
 *
 * We use this same struct for the reset entry of the compressor to commu-
 * nicate to its caller how to deal with sending of a Reset Ack. In this
 * case, expra is not used, but other options still apply (suppressing
 * sending with rsend, appending arbitrary data, etc).
 */


#define IPPP_RESET_MAXDATABYTES 32

struct isdn_ppp_resetparams {
        unsigned char valid:1;  /* rw Is this structure filled at all ? */
        unsigned char rsend:1;  /* rw Should we send one at all ? */
        unsigned char idval:1;  /* rw Is the id field valid ? */
        unsigned char dtval:1;  /* rw Is the data field valid ? */
        unsigned char expra:1;  /* rw Is an Ack expected for this Req ? */
        unsigned char id;               /* wo Send CCP ResetReq with this id */
        unsigned short maxdlen; /* ro Max bytes to be stored in data field */
        unsigned short dlen;            /* rw Bytes stored in data field */
        unsigned char *data;            /* wo Data for ResetReq info field */
};

/*
 * this is an 'old friend' from ppp-comp.h under a new name
 * check the original include for more information
 */

struct isdn_ppp_compressor {
        struct module *owner;
        struct list_head list;
        int num; /* CCP compression protocol number */
 
        void *(*alloc) (struct isdn_ppp_comp_data *);
        void (*free) (void *state);
        int  (*init) (void *state, struct isdn_ppp_comp_data *,
                      int unit,int debug);
 
        /* The reset entry needs to get more exact information about the
           ResetReq or ResetAck it was called with. The parameters are
           obvious. If reset is called without a Req or Ack frame which
           could be handed into it, code MUST be set to 0. Using rsparm,
           the reset entry can control if and how a ResetAck is returned. */

 
        void (*reset) (void *state, unsigned char code, unsigned char id,
                       unsigned char *data, unsigned len,
                       struct isdn_ppp_resetparams *rsparm);
 
        int  (*compress) (void *state, struct sk_buff *in,
                          struct sk_buff *skb_out, int proto);
 
        int  (*decompress) (void *state,struct sk_buff *in,
                            struct sk_buff *skb_out,
                            struct isdn_ppp_resetparams *rsparm);
 
        void (*incomp) (void *state, struct sk_buff *in,int proto);
        void (*stat) (void *state, struct compstat *stats);
};

extern int isdn_ppp_register_compressor(struct isdn_ppp_compressor *);
extern int isdn_ppp_unregister_compressor(struct isdn_ppp_compressor *);

#endif /* __KERNEL__ */
#endif /* _LINUX_ISDN_PPP_H */