⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vjcomp.h

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 H
字号:
/*
 * FILENAME: slcompre.h
 *
 * Copyright 1997- 2000 By InterNiche Technologies Inc. All rights reserved
 *
 * Definitions for tcp compression routines.
 *
 * MODULE: PPP
 *
 *
 * PORTABLE: yes
 */

/* Additional Copyrights: */

/* Portions Copyright 1996 by NetPort Software. 
 * Portions Copyright (c) 1989 Regents of the University of 
 * California. All rights reserved. Redistribution and use in source 
 * and binary forms, with or without modification, are permitted 
 * provided that the following conditions are met: 1. Redistributions 
 * of source code must retain the above copyright notice, this list 
 * of conditions and the following disclaimer. 2. Redistributions in 
 * binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation 
 * and/or other materials provided with the distribution. 3. All 
 * advertising materials mentioning features or use of this software 
 * must display the following acknowledgement: This product includes 
 * software developed by the University of California, Berkeley and 
 * its contributors. 4. Neither the name of the University nor the 
 * names of its contributors may be used to endorse or promote 
 * products derived from this software without specific prior written 
 * permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND 
 * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE 
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 
 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 
 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
 * SUCH DAMAGE.
 */

#ifndef _SLCOMPRESS_H_
#define  _SLCOMPRESS_H_

#include "mppp.h"   /* include IP header */

#define  MAX_STATES  16    /* must be > 2 and < 256 */
#define  MAX_HDR  128      /* MLEN 4bsd-ism: should really be 128 */

/*
 * Compressed packet format:
 *
 * The first octet contains the packet type (top 3 bits), TCP
 * 'push' bit, and flags that indicate which of the 4 TCP sequence
 * numbers have changed (bottom 5 bits).  The next octet is a
 * conversation number that associates a saved IP/TCP header with
 * the compressed packet.  The next two octets are the TCP checksum
 * from the original datagram.  The next 0 to 15 octets are
 * sequence number changes, one change per bit set in the header
 * (there may be no changes and there are two special cases where
 * the receiver implicitly knows what changed -- see below).
 * 
 * There are 5 numbers which can change (they are always inserted
 * in the following order): TCP urgent pointer, window,
 * acknowlegement, sequence number and IP ID.  (The urgent pointer
 * is different from the others in that its value is sent, not the
 * change in value.)  Since typical use of SLIP links is biased
 * toward small packets (see comments on MTU/MSS below), changes
 * use a variable length coding with one octet for numbers in the
 * range 1 - 255 and 3 octets (0, MSB, LSB) for numbers in the
 * range 256 - 65535 or 0.  (If the change in sequence number or
 * ack is more than 65535, an uncompressed packet is sent.)
 *
 *
 * Packet types (must not conflict with IP protocol version)
 *
 * The top nibble of the first octet is the packet type.  There are
 * three possible types: IP (not proto TCP or tcp with one of the
 * control flags set); uncompressed TCP (a normal IP/TCP packet but
 * with the 8-bit protocol field replaced by an 8-bit connection id --
 * this type of packet syncs the sender & receiver); and compressed
 * TCP (described above).
 *
 * LSB of 4-bit field is TCP "PUSH" bit (a worthless anachronism) and
 * is logically part of the 4-bit "changes" field that follows.  Top
 * three bits are actual packet type.  For backward compatibility
 * and in the interest of conserving bits, numbers are chosen so the
 * IP protocol version number (4) which normally appears in this nibble
 * means "IP packet".
 */
/* packet types */
#define  TYPE_IP                 0x40
#define  TYPE_UNCOMPRESSED_TCP   0x70
#define  TYPE_COMPRESSED_TCP     0x80
#define  TYPE_ERROR              0x00

/* Bits in first octet of compressed packet */
#define  NEW_C    0x40  /* flag bits for what changed in a packet */
#define  NEW_I    0x20
#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)



/* This PPP header compression code assumes BSD-like TCP/IP  
 * definitions. ALthough this duplicates some of the definitions in 
 * the NetPort  TCP/IP directory, we define the BSD-like styles 
 * here rather than convulute the build process through includes.
 */
#define  TCP_PUSH_BIT   0x10
struct vj_ip
{
   u_char   ip_ver_ihl;    /* 4 bit version, 4 bit hdr len in 32bit words */
   u_char   ip_tos;        /* Type of Service */
   unshort  ip_len;        /* Total packet length including header */
   unshort  ip_id;         /* ID for fragmentation */
   unshort  ip_flgs_foff;  /* mask in flags as needed */
   u_char   ip_time;       /* Time to live (secs) */
   u_char   ip_prot;       /* protocol */
   unshort  ip_chksum;     /* Header checksum */
   ip_addr  ip_src;        /* Source name */
   ip_addr  ip_dest;       /* Destination name */
};


/*
 * "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
 * we saw from the conversation 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
   {
      char  csu_hdr[MAX_HDR];
      struct vj_ip   csu_ip;     /* ip/tcp hdr from most recent packet */
   }  slcs_u;
};


/*
 * 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;
#ifndef SL_NO_STATS
   long  sls_packets;         /* outbound packets */
   long  sls_compressed;      /* outbound compressed packets */
   long  sls_searches;        /* searches for connection state */
   long  sls_misses;          /* times couldn't find conn. state */
   long  sls_uncompressedin;  /*   inbound  uncompressed   packets */
   long  sls_compressedin;    /* inbound compressed packets */
   long  sls_errorin;         /* inbound unknown type packets */
   long  sls_tossed;          /* inbound packets tossed because of error */
#endif
   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 */

void     vj_compress_init (struct slcompress *, u_char maxslotindex);
u_char   vj_compress_tcp (u_char **buf, unsigned * len, struct vj_ip * ip, 
            struct slcompress *, int   comp_cid_flag);
int      vj_uncompress_tcp (u_char **bufp, int len, unsigned type, 
             struct slcompress *);
int      vj_uncompress_tcp_part (u_char **bufp, int buflen, 
              int   total_len,  unsigned type, struct slcompress *);
int      sifvjcomp(M_PPP mppp, int vjcomp, u_char maxslotindex, int cidcomp); 


#endif   /* _SLCOMPRESS_H_ */
/* end of file slcompre.h */



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -