home *** CD-ROM | disk | FTP | other *** search
- #ifndef _sl_compress_h
- #define _sl_compress_h
-
- struct net_ip {
- unsigned int ip_hl:4; /* header length */
- unsigned int ip_v:4; /* version */
- unsigned int ip_tos:8; /* type of service */
- int ip_len:16; /* total length */
- u_short ip_id; /* identification */
- short ip_off; /* fragment offset field */
- #define IP_DF 0x4000 /* dont fragment flag */
- #define IP_MF 0x2000 /* more fragments flag */
- #define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
- u_char ip_ttl; /* time to live */
- u_char ip_p; /* protocol */
- u_short ip_sum; /* checksum */
- unsigned int ip_src,ip_dst; /* source and dest address */
- };
-
-
- /*
- * Copyright (c) 1989 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are
- * permitted provided that the above copyright notice and this
- * paragraph are duplicated in all such forms and that any
- * documentation, advertising materials, and other materials
- * related to such distribution and use acknowledge that the
- * software was developed by the University of California,
- * Berkeley. The name of the University may not be used to
- * endorse or promote products derived from this software
- * without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS
- * OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
- * IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE.
- */
-
- /* A.1 Definitions and State Data */
-
- #define MAX_STATES 16 /* must be >2 and <255 */
- #define MAX_HDR 128 /* max TCP+IP hdr length (by protocol def) */
-
- /* packet types */
- #define TYPE_IP 0x40
- #define TYPE_UNCOMPRESSED_TCP 0x70
- #define TYPE_COMPRESSED_TCP 0x80
- #define TYPE_ERROR 0x00 /* this is not a type that ever appears on
- * the wire. The receive framer uses it to
- * tell the decompressor there was a packet
- * transmission error. */
- /*
- * Bits in first octet of compressed packet
- */
-
- /* flag bits for what changed in a packet */
-
- #define NEW_C 0x40
- #define NEW_I 0x20
- #define TCP_PUSH_BIT 0x10
-
- #define NEW_S 0x08
- #define NEW_A 0x04
- #define NEW_W 0x02
- #define NEW_U 0x01
-
- /* reserved, special-case values of above */
- #define SPECIAL_I (NEW_S|NEW_W|NEW_U) /* echoed interactive traffic */
- #define SPECIAL_D (NEW_S|NEW_A|NEW_W|NEW_U) /* unidirectional data */
- #define SPECIALS_MASK (NEW_S|NEW_A|NEW_W|NEW_U)
-
-
- /*
- * "state" data for each active tcp conversation on the wire. This is
- * basically a copy of the entire IP/TCP header from the last packet together
- * with a small identifier the transmit & receive ends of the line use to
- * locate saved header.
- */
- struct cstate {
- struct cstate *cs_next; /* next most recently used cstate (xmit only) */
- u_short cs_hlen; /* size of hdr (receive only) */
- u_char cs_id; /* connection # associated with this state */
- u_char cs_filler;
- union {
- struct net_ip csu_ip; /* ip/tcp hdr from most recent packet */
- char hdr[MAX_HDR];
- } slcs_u;
- };
-
- #define cs_ip slcs_u.csu_ip
- #define cs_hdr slcs_u.csu_hdr
-
- /*
- * all the state data for one serial line (we need one of these per line).
- */
- struct slcompress {
- struct cstate *last_cs; /* most recently used tstate */
- u_char last_recv; /* last rcvd conn. id */
- u_char last_xmit; /* last sent conn. id */
- u_short flags;
- struct cstate tstate[MAX_STATES]; /* xmit connection states */
- struct cstate rstate[MAX_STATES]; /* receive connection states */
- };
-
- /* flag values */
- #define SLF_TOSS 1 /* tossing rcvd frames because of input err */
-
- int sl_compress_init(struct slcompress **compptr);
- u_char sl_compress_tcp(char **bufp, int *len, struct slcompress *comp, int compress_cid);
- u_char *sl_uncompress_tcp(char *bufp, int *len, u_int type, struct slcompress *comp);
-
- #endif
-