From 6117748f5e7872c78d32c18e68b5fb7ce3f78670 Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Mon, 18 Aug 2008 22:21:18 +1000 Subject: [PATCH] Remove more stuff that we don't need to distribute This removes some files from include/linux that any halfway-modern distro will have under /usr/include, and removes the stuff from the linux/ directory that we haven't included in the tarballs for ages. This also moves some MPPE macros from include/{linux,net}/ppp-comp.h to a new pppd/mppe.h. Signed-off-by: Paul Mackerras --- include/linux/if_ether.h | 99 --- include/linux/if_pppol2tp.h | 4 - include/linux/if_pppox.h | 145 ----- include/linux/if_pppvar.h | 169 ----- include/linux/ppp-comp.h | 92 --- include/net/ppp-comp.h | 87 --- include/pcap-int.h | 117 ---- linux/bsd_comp.c | 1203 ----------------------------------- linux/kinstall.sh | 257 -------- pppd/chap_ms.h | 2 +- pppd/mppe.h | 121 ++++ 11 files changed, 122 insertions(+), 2174 deletions(-) delete mode 100644 include/linux/if_ether.h delete mode 100644 include/linux/if_pppox.h delete mode 100644 include/linux/if_pppvar.h delete mode 100644 include/pcap-int.h delete mode 100644 linux/bsd_comp.c delete mode 100755 linux/kinstall.sh create mode 100644 pppd/mppe.h diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h deleted file mode 100644 index e9191ba..0000000 --- a/include/linux/if_ether.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * INET An implementation of the TCP/IP protocol suite for the LINUX - * operating system. INET is implemented using the BSD Socket - * interface as the means of communication with the user level. - * - * Global definitions for the Ethernet IEEE 802.3 interface. - * - * Version: @(#)if_ether.h 1.0.1a 02/08/94 - * - * Author: Fred N. van Kempen, - * Donald Becker, - * Alan Cox, - * Steve Whitehouse, - * - * 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 of the License, or (at your option) any later version. - */ - -#ifndef _LINUX_IF_ETHER_H -#define _LINUX_IF_ETHER_H - -/* - * IEEE 802.3 Ethernet magic constants. The frame sizes omit the preamble - * and FCS/CRC (frame check sequence). - */ - -#define ETH_ALEN 6 /* Octets in one ethernet addr */ -#define ETH_HLEN 14 /* Total octets in header. */ -#define ETH_ZLEN 60 /* Min. octets in frame sans FCS */ -#define ETH_DATA_LEN 1500 /* Max. octets in payload */ -#define ETH_FRAME_LEN 1514 /* Max. octets in frame sans FCS */ - -/* - * These are the defined Ethernet Protocol ID's. - */ - -#define ETH_P_LOOP 0x0060 /* Ethernet Loopback packet */ -#define ETH_P_PUP 0x0200 /* Xerox PUP packet */ -#define ETH_P_PUPAT 0x0201 /* Xerox PUP Addr Trans packet */ -#define ETH_P_IP 0x0800 /* Internet Protocol packet */ -#define ETH_P_X25 0x0805 /* CCITT X.25 */ -#define ETH_P_ARP 0x0806 /* Address Resolution packet */ -#define ETH_P_BPQ 0x08FF /* G8BPQ AX.25 Ethernet Packet [ NOT AN OFFICIALLY REGISTERED ID ] */ -#define ETH_P_IEEEPUP 0x0a00 /* Xerox IEEE802.3 PUP packet */ -#define ETH_P_IEEEPUPAT 0x0a01 /* Xerox IEEE802.3 PUP Addr Trans packet */ -#define ETH_P_DEC 0x6000 /* DEC Assigned proto */ -#define ETH_P_DNA_DL 0x6001 /* DEC DNA Dump/Load */ -#define ETH_P_DNA_RC 0x6002 /* DEC DNA Remote Console */ -#define ETH_P_DNA_RT 0x6003 /* DEC DNA Routing */ -#define ETH_P_LAT 0x6004 /* DEC LAT */ -#define ETH_P_DIAG 0x6005 /* DEC Diagnostics */ -#define ETH_P_CUST 0x6006 /* DEC Customer use */ -#define ETH_P_SCA 0x6007 /* DEC Systems Comms Arch */ -#define ETH_P_RARP 0x8035 /* Reverse Addr Res packet */ -#define ETH_P_ATALK 0x809B /* Appletalk DDP */ -#define ETH_P_AARP 0x80F3 /* Appletalk AARP */ -#define ETH_P_IPX 0x8137 /* IPX over DIX */ -#define ETH_P_IPV6 0x86DD /* IPv6 over bluebook */ -#define ETH_P_PPP_DISC 0x8863 /* PPPoE discovery messages */ -#define ETH_P_PPP_SES 0x8864 /* PPPoE session messages */ -#define ETH_P_ATMMPOA 0x884c /* MultiProtocol Over ATM */ -#define ETH_P_ATMFATE 0x8884 /* Frame-based ATM Transport - * over Ethernet - */ - -/* - * Non DIX types. Won't clash for 1500 types. - */ - -#define ETH_P_802_3 0x0001 /* Dummy type for 802.3 frames */ -#define ETH_P_AX25 0x0002 /* Dummy protocol id for AX.25 */ -#define ETH_P_ALL 0x0003 /* Every packet (be careful!!!) */ -#define ETH_P_802_2 0x0004 /* 802.2 frames */ -#define ETH_P_SNAP 0x0005 /* Internal only */ -#define ETH_P_DDCMP 0x0006 /* DEC DDCMP: Internal only */ -#define ETH_P_WAN_PPP 0x0007 /* Dummy type for WAN PPP frames*/ -#define ETH_P_PPP_MP 0x0008 /* Dummy type for PPP MP frames */ -#define ETH_P_LOCALTALK 0x0009 /* Localtalk pseudo type */ -#define ETH_P_PPPTALK 0x0010 /* Dummy type for Atalk over PPP*/ -#define ETH_P_TR_802_2 0x0011 /* 802.2 frames */ -#define ETH_P_MOBITEX 0x0015 /* Mobitex (kaz@cafe.net) */ -#define ETH_P_CONTROL 0x0016 /* Card specific control frames */ -#define ETH_P_IRDA 0x0017 /* Linux-IrDA */ -#define ETH_P_ECONET 0x0018 /* Acorn Econet */ - -/* - * This is an Ethernet frame header. - */ - -struct ethhdr -{ - unsigned char h_dest[ETH_ALEN]; /* destination eth addr */ - unsigned char h_source[ETH_ALEN]; /* source ether addr */ - unsigned short h_proto; /* packet type ID field */ -}; - -#endif /* _LINUX_IF_ETHER_H */ diff --git a/include/linux/if_pppol2tp.h b/include/linux/if_pppol2tp.h index a7d6a22..4113d6a 100644 --- a/include/linux/if_pppol2tp.h +++ b/include/linux/if_pppol2tp.h @@ -17,10 +17,6 @@ #include -#ifdef __KERNEL__ -#include -#endif - /* Structure used to connect() the socket to a particular tunnel UDP * socket. */ diff --git a/include/linux/if_pppox.h b/include/linux/if_pppox.h deleted file mode 100644 index 79684be..0000000 --- a/include/linux/if_pppox.h +++ /dev/null @@ -1,145 +0,0 @@ -/*************************************************************************** - * Linux PPP over X - Generic PPP transport layer sockets - * Linux PPP over Ethernet (PPPoE) Socket Implementation (RFC 2516) - * - * This file supplies definitions required by the PPP over Ethernet driver - * (pppox.c). All version information wrt this file is located in pppox.c - * - * License: - * 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 of the License, or (at your option) any later version. - * - */ - -#ifndef __LINUX_IF_PPPOX_H -#define __LINUX_IF_PPPOX_H - - -#include -#include - -#ifdef __KERNEL__ -#include -#include -#include -#include -#include -#include -#endif /* __KERNEL__ */ - -/* For user-space programs to pick up these definitions - * which they wouldn't get otherwise without defining __KERNEL__ - */ -#ifndef AF_PPPOX -#define AF_PPPOX 24 -#define PF_PPPOX AF_PPPOX -#endif /* !(AF_PPPOX) */ - -/************************************************************************ - * PPPoE addressing definition - */ -typedef __u16 sid_t; -struct pppoe_addr{ - sid_t sid; /* Session identifier */ - unsigned char remote[ETH_ALEN]; /* Remote address */ - char dev[IFNAMSIZ]; /* Local device to use */ -}; - -/************************************************************************ - * Protocols supported by AF_PPPOX - */ -#define PX_PROTO_OE 0 /* Currently just PPPoE */ -#define PX_MAX_PROTO 1 - -struct sockaddr_pppox { - sa_family_t sa_family; /* address family, AF_PPPOX */ - unsigned int sa_protocol; /* protocol identifier */ - union{ - struct pppoe_addr pppoe; - }sa_addr; -}__attribute__ ((packed)); - - -/********************************************************************* - * - * ioctl interface for defining forwarding of connections - * - ********************************************************************/ - -#define PPPOEIOCSFWD _IOW(0xB1 ,0, sizeof(struct sockaddr_pppox)) -#define PPPOEIOCDFWD _IO(0xB1 ,1) -/*#define PPPOEIOCGFWD _IOWR(0xB1,2, sizeof(struct sockaddr_pppox))*/ - -/* Codes to identify message types */ -#define PADI_CODE 0x09 -#define PADO_CODE 0x07 -#define PADR_CODE 0x19 -#define PADS_CODE 0x65 -#define PADT_CODE 0xa7 -struct pppoe_tag { - __u16 tag_type; - __u16 tag_len; - char tag_data[0]; -} __attribute ((packed)); - -/* Tag identifiers */ -#define PTT_EOL __constant_htons(0x0000) -#define PTT_SRV_NAME __constant_htons(0x0101) -#define PTT_AC_NAME __constant_htons(0x0102) -#define PTT_HOST_UNIQ __constant_htons(0x0103) -#define PTT_AC_COOKIE __constant_htons(0x0104) -#define PTT_VENDOR __constant_htons(0x0105) -#define PTT_RELAY_SID __constant_htons(0x0110) -#define PTT_SRV_ERR __constant_htons(0x0201) -#define PTT_SYS_ERR __constant_htons(0x0202) -#define PTT_GEN_ERR __constant_htons(0x0203) - -struct pppoe_hdr { -#if defined(__LITTLE_ENDIAN_BITFIELD) - __u8 ver : 4; - __u8 type : 4; -#elif defined(__BIG_ENDIAN_BITFIELD) - __u8 type : 4; - __u8 ver : 4; -#else -#error "Please fix " -#endif - __u8 code; - __u16 sid; - __u16 length; - struct pppoe_tag tag[0]; -} __attribute__ ((packed)); - -#ifdef __KERNEL__ - -struct pppox_proto { - int (*create)(struct socket *sock); - int (*ioctl)(struct socket *sock, unsigned int cmd, - unsigned long arg); -}; - -extern int register_pppox_proto(int proto_num, struct pppox_proto *pp); -extern void unregister_pppox_proto(int proto_num); -extern void pppox_unbind_sock(struct sock *sk);/* delete ppp-channel binding */ -extern int pppox_channel_ioctl(struct ppp_channel *pc, unsigned int cmd, - unsigned long arg); - -/* PPPoE socket states */ -enum { - PPPOX_NONE = 0, /* initial state */ - PPPOX_CONNECTED = 1, /* connection established ==TCP_ESTABLISHED */ - PPPOX_BOUND = 2, /* bound to ppp device */ - PPPOX_RELAY = 4, /* forwarding is enabled */ - PPPOX_ZOMBIE = 8, /* dead, but still connected */ - PPPOX_DEAD = 16 -}; - -extern struct ppp_channel_ops pppoe_chan_ops; - -extern int pppox_proto_init(struct net_proto *np); - -#endif /* __KERNEL__ */ - -#endif /* !(__LINUX_IF_PPPOX_H) */ diff --git a/include/linux/if_pppvar.h b/include/linux/if_pppvar.h deleted file mode 100644 index ff7bd3f..0000000 --- a/include/linux/if_pppvar.h +++ /dev/null @@ -1,169 +0,0 @@ -/* From: if_pppvar.h,v 1.2 1995/06/12 11:36:51 paulus Exp */ -/* - * if_pppvar.h - private structures and declarations for PPP. - * - * Copyright (c) 1989-2002 Paul Mackerras. 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. The name(s) of the authors of this software must not be used to - * endorse or promote products derived from this software without - * prior written permission. - * - * 4. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by Paul Mackerras - * ". - * - * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY - * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Copyright (c) 1984-2000 Carnegie Mellon University. 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. The name "Carnegie Mellon University" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For permission or any legal - * details, please contact - * Office of Technology Transfer - * Carnegie Mellon University - * 5000 Forbes Avenue - * Pittsburgh, PA 15213-3890 - * (412) 268-4387, fax: (412) 268-7395 - * tech-transfer@andrew.cmu.edu - * - * 4. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by Computing Services - * at Carnegie Mellon University (http://www.cmu.edu/computing/)." - * - * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE - * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * ==FILEVERSION 990911== - * - * NOTE TO MAINTAINERS: - * If you modify this file at all, please set the above date. - * if_pppvar.h is shipped with a PPP distribution as well as with the kernel; - * if everyone increases the FILEVERSION number above, then scripts - * can do the right thing when deciding whether to install a new if_pppvar.h - * file. Don't change the format of that line otherwise, so the - * installation script can recognize it. - */ - -/* - * Supported network protocols. These values are used for - * indexing sc_npmode. - */ - -#define NP_IP 0 /* Internet Protocol */ -#define NP_IPX 1 /* IPX protocol */ -#define NP_AT 2 /* Appletalk protocol */ -#define NP_IPV6 3 /* Internet Protocol */ -#define NUM_NP 4 /* Number of NPs. */ - -#define OBUFSIZE 256 /* # chars of output buffering */ - -/* - * Structure describing each ppp unit. - */ - -struct ppp { - int magic; /* magic value for structure */ - struct ppp *next; /* unit with next index */ - unsigned long inuse; /* are we allocated? */ - int line; /* network interface unit # */ - __u32 flags; /* miscellaneous control flags */ - int mtu; /* maximum xmit frame size */ - int mru; /* maximum receive frame size */ - struct slcompress *slcomp; /* for TCP header compression */ - struct sk_buff_head xmt_q; /* frames to send from pppd */ - struct sk_buff_head rcv_q; /* frames for pppd to read */ - unsigned long xmit_busy; /* bit 0 set when xmitter busy */ - - /* Information specific to using ppp on async serial lines. */ - struct tty_struct *tty; /* ptr to TTY structure */ - struct tty_struct *backup_tty; /* TTY to use if tty gets closed */ - __u8 escape; /* 0x20 if prev char was PPP_ESC */ - __u8 toss; /* toss this frame */ - volatile __u8 tty_pushing; /* internal state flag */ - volatile __u8 woke_up; /* internal state flag */ - __u32 xmit_async_map[8]; /* 1 bit means that given control - character is quoted on output*/ - __u32 recv_async_map; /* 1 bit means that given control - character is ignored on input*/ - __u32 bytes_sent; /* Bytes sent on frame */ - __u32 bytes_rcvd; /* Bytes recvd on frame */ - - /* Async transmission information */ - struct sk_buff *tpkt; /* frame currently being sent */ - int tpkt_pos; /* how much of it we've done */ - __u16 tfcs; /* FCS so far for it */ - unsigned char *optr; /* where we're up to in sending */ - unsigned char *olim; /* points past last valid char */ - - /* Async reception information */ - struct sk_buff *rpkt; /* frame currently being rcvd */ - __u16 rfcs; /* FCS so far of rpkt */ - - /* Queues for select() functionality */ - struct wait_queue *read_wait; /* queue for reading processes */ - - /* info for detecting idle channels */ - unsigned long last_xmit; /* time of last transmission */ - unsigned long last_recv; /* time last packet received */ - - /* Statistic information */ - struct pppstat stats; /* statistic information */ - - /* PPP compression protocol information */ - struct compressor *sc_xcomp; /* transmit compressor */ - void *sc_xc_state; /* transmit compressor state */ - struct compressor *sc_rcomp; /* receive decompressor */ - void *sc_rc_state; /* receive decompressor state */ - - enum NPmode sc_npmode[NUM_NP]; /* what to do with each NP */ - int sc_xfer; /* PID of reserved PPP table */ - char name[8]; /* space for unit name */ - struct device dev; /* net device structure */ - struct enet_statistics estats; /* more detailed stats */ - - /* tty output buffer */ - unsigned char obuf[OBUFSIZE]; /* buffer for characters to send */ -}; - -#define PPP_MAGIC 0x5002 -#define PPP_VERSION "2.3.11" diff --git a/include/linux/ppp-comp.h b/include/linux/ppp-comp.h index fc96d94..d30cacb 100644 --- a/include/linux/ppp-comp.h +++ b/include/linux/ppp-comp.h @@ -201,93 +201,6 @@ struct compressor { #define CI_MPPE 18 /* config option for MPPE */ #define CILEN_MPPE 6 /* length of config option */ -#define MPPE_PAD 4 /* MPPE growth per frame */ -#define MPPE_MAX_KEY_LEN 16 /* largest key length (128-bit) */ - -/* option bits for ccp_options.mppe */ -#define MPPE_OPT_40 0x01 /* 40 bit */ -#define MPPE_OPT_128 0x02 /* 128 bit */ -#define MPPE_OPT_STATEFUL 0x04 /* stateful mode */ -/* unsupported opts */ -#define MPPE_OPT_56 0x08 /* 56 bit */ -#define MPPE_OPT_MPPC 0x10 /* MPPC compression */ -#define MPPE_OPT_D 0x20 /* Unknown */ -#define MPPE_OPT_UNSUPPORTED (MPPE_OPT_56|MPPE_OPT_MPPC|MPPE_OPT_D) -#define MPPE_OPT_UNKNOWN 0x40 /* Bits !defined in RFC 3078 were set */ - -/* - * This is not nice ... the alternative is a bitfield struct though. - * And unfortunately, we cannot share the same bits for the option - * names above since C and H are the same bit. We could do a u_int32 - * but then we have to do a htonl() all the time and/or we still need - * to know which octet is which. - */ -#define MPPE_C_BIT 0x01 /* MPPC */ -#define MPPE_D_BIT 0x10 /* Obsolete, usage unknown */ -#define MPPE_L_BIT 0x20 /* 40-bit */ -#define MPPE_S_BIT 0x40 /* 128-bit */ -#define MPPE_M_BIT 0x80 /* 56-bit, not supported */ -#define MPPE_H_BIT 0x01 /* Stateless (in a different byte) */ - -/* Does not include H bit; used for least significant octet only. */ -#define MPPE_ALL_BITS (MPPE_D_BIT|MPPE_L_BIT|MPPE_S_BIT|MPPE_M_BIT|MPPE_H_BIT) - -/* Build a CI from mppe opts (see RFC 3078) */ -#define MPPE_OPTS_TO_CI(opts, ci) \ - do { \ - u_char *ptr = ci; /* u_char[4] */ \ - \ - /* H bit */ \ - if (opts & MPPE_OPT_STATEFUL) \ - *ptr++ = 0x0; \ - else \ - *ptr++ = MPPE_H_BIT; \ - *ptr++ = 0; \ - *ptr++ = 0; \ - \ - /* S,L bits */ \ - *ptr = 0; \ - if (opts & MPPE_OPT_128) \ - *ptr |= MPPE_S_BIT; \ - if (opts & MPPE_OPT_40) \ - *ptr |= MPPE_L_BIT; \ - /* M,D,C bits not supported */ \ - } while (/* CONSTCOND */ 0) - -/* The reverse of the above */ -#define MPPE_CI_TO_OPTS(ci, opts) \ - do { \ - u_char *ptr = ci; /* u_char[4] */ \ - \ - opts = 0; \ - \ - /* H bit */ \ - if (!(ptr[0] & MPPE_H_BIT)) \ - opts |= MPPE_OPT_STATEFUL; \ - \ - /* S,L bits */ \ - if (ptr[3] & MPPE_S_BIT) \ - opts |= MPPE_OPT_128; \ - if (ptr[3] & MPPE_L_BIT) \ - opts |= MPPE_OPT_40; \ - \ - /* M,D,C bits */ \ - if (ptr[3] & MPPE_M_BIT) \ - opts |= MPPE_OPT_56; \ - if (ptr[3] & MPPE_D_BIT) \ - opts |= MPPE_OPT_D; \ - if (ptr[3] & MPPE_C_BIT) \ - opts |= MPPE_OPT_MPPC; \ - \ - /* Other bits */ \ - if (ptr[0] & ~MPPE_H_BIT) \ - opts |= MPPE_OPT_UNKNOWN; \ - if (ptr[1] || ptr[2]) \ - opts |= MPPE_OPT_UNKNOWN; \ - if (ptr[3] & ~MPPE_ALL_BITS) \ - opts |= MPPE_OPT_UNKNOWN; \ - } while (/* CONSTCOND */ 0) - /* * Definitions for other, as yet unsupported, compression methods. */ @@ -297,9 +210,4 @@ struct compressor { #define CI_PREDICTOR_2 2 /* config option for Predictor-2 */ #define CILEN_PREDICTOR_2 2 /* length of its config option */ -#ifdef __KERNEL__ -extern int ppp_register_compressor(struct compressor *); -extern void ppp_unregister_compressor(struct compressor *); -#endif /* __KERNEL__ */ - #endif /* _NET_PPP_COMP_H */ diff --git a/include/net/ppp-comp.h b/include/net/ppp-comp.h index 894bf12..088c73e 100644 --- a/include/net/ppp-comp.h +++ b/include/net/ppp-comp.h @@ -168,93 +168,6 @@ struct compressor { #define CI_MPPE 18 /* config option for MPPE */ #define CILEN_MPPE 6 /* length of config option */ -#define MPPE_PAD 4 /* MPPE growth per frame */ -#define MPPE_MAX_KEY_LEN 16 /* largest key length (128-bit) */ - -/* option bits for ccp_options.mppe */ -#define MPPE_OPT_40 0x01 /* 40 bit */ -#define MPPE_OPT_128 0x02 /* 128 bit */ -#define MPPE_OPT_STATEFUL 0x04 /* stateful mode */ -/* unsupported opts */ -#define MPPE_OPT_56 0x08 /* 56 bit */ -#define MPPE_OPT_MPPC 0x10 /* MPPC compression */ -#define MPPE_OPT_D 0x20 /* Unknown */ -#define MPPE_OPT_UNSUPPORTED (MPPE_OPT_56|MPPE_OPT_MPPC|MPPE_OPT_D) -#define MPPE_OPT_UNKNOWN 0x40 /* Bits !defined in RFC 3078 were set */ - -/* - * This is not nice ... the alternative is a bitfield struct though. - * And unfortunately, we cannot share the same bits for the option - * names above since C and H are the same bit. We could do a u_int32 - * but then we have to do a htonl() all the time and/or we still need - * to know which octet is which. - */ -#define MPPE_C_BIT 0x01 /* MPPC */ -#define MPPE_D_BIT 0x10 /* Obsolete, usage unknown */ -#define MPPE_L_BIT 0x20 /* 40-bit */ -#define MPPE_S_BIT 0x40 /* 128-bit */ -#define MPPE_M_BIT 0x80 /* 56-bit, not supported */ -#define MPPE_H_BIT 0x01 /* Stateless (in a different byte) */ - -/* Does not include H bit; used for least significant octet only. */ -#define MPPE_ALL_BITS (MPPE_D_BIT|MPPE_L_BIT|MPPE_S_BIT|MPPE_M_BIT|MPPE_H_BIT) - -/* Build a CI from mppe opts (see RFC 3078) */ -#define MPPE_OPTS_TO_CI(opts, ci) \ - do { \ - u_char *ptr = ci; /* u_char[4] */ \ - \ - /* H bit */ \ - if (opts & MPPE_OPT_STATEFUL) \ - *ptr++ = 0x0; \ - else \ - *ptr++ = MPPE_H_BIT; \ - *ptr++ = 0; \ - *ptr++ = 0; \ - \ - /* S,L bits */ \ - *ptr = 0; \ - if (opts & MPPE_OPT_128) \ - *ptr |= MPPE_S_BIT; \ - if (opts & MPPE_OPT_40) \ - *ptr |= MPPE_L_BIT; \ - /* M,D,C bits not supported */ \ - } while (/* CONSTCOND */ 0) - -/* The reverse of the above */ -#define MPPE_CI_TO_OPTS(ci, opts) \ - do { \ - u_char *ptr = ci; /* u_char[4] */ \ - \ - opts = 0; \ - \ - /* H bit */ \ - if (!(ptr[0] & MPPE_H_BIT)) \ - opts |= MPPE_OPT_STATEFUL; \ - \ - /* S,L bits */ \ - if (ptr[3] & MPPE_S_BIT) \ - opts |= MPPE_OPT_128; \ - if (ptr[3] & MPPE_L_BIT) \ - opts |= MPPE_OPT_40; \ - \ - /* M,D,C bits */ \ - if (ptr[3] & MPPE_M_BIT) \ - opts |= MPPE_OPT_56; \ - if (ptr[3] & MPPE_D_BIT) \ - opts |= MPPE_OPT_D; \ - if (ptr[3] & MPPE_C_BIT) \ - opts |= MPPE_OPT_MPPC; \ - \ - /* Other bits */ \ - if (ptr[0] & ~MPPE_H_BIT) \ - opts |= MPPE_OPT_UNKNOWN; \ - if (ptr[1] || ptr[2]) \ - opts |= MPPE_OPT_UNKNOWN; \ - if (ptr[3] & ~MPPE_ALL_BITS) \ - opts |= MPPE_OPT_UNKNOWN; \ - } while (/* CONSTCOND */ 0) - /* * Definitions for other, as yet unsupported, compression methods. */ diff --git a/include/pcap-int.h b/include/pcap-int.h deleted file mode 100644 index ba10a95..0000000 --- a/include/pcap-int.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) 1994, 1995, 1996 - * The 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 Computer Systems - * Engineering Group at Lawrence Berkeley Laboratory. - * 4. Neither the name of the University nor of the Laboratory 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. - * - * @(#) $Header: /home/paulus/ppp/samba.org/ppp/include/pcap-int.h,v 1.1 2000/08/01 01:37:24 paulus Exp $ (LBL) - */ - -#ifndef pcap_int_h -#define pcap_int_h - -#include - -/* - * Savefile - */ -struct pcap_sf { - FILE *rfile; - int swapped; - int version_major; - int version_minor; - u_char *base; -}; - -struct pcap_md { - struct pcap_stat stat; - /*XXX*/ - int use_bpf; - u_long TotPkts; /* can't oflow for 79 hrs on ether */ - u_long TotAccepted; /* count accepted by filter */ - u_long TotDrops; /* count of dropped packets */ - long TotMissed; /* missed by i/f during this run */ - long OrigMissed; /* missed by i/f before this run */ -#ifdef linux - int pad; - int skip; - char *device; -#endif -}; - -struct pcap { - int fd; - int snapshot; - int linktype; - int tzoff; /* timezone offset */ - int offset; /* offset for proper alignment */ - - struct pcap_sf sf; - struct pcap_md md; - - /* - * Read buffer. - */ - int bufsize; - u_char *buffer; - u_char *bp; - int cc; - - /* - * Place holder for pcap_next(). - */ - u_char *pkt; - - - /* - * Placeholder for filter code if bpf not in kernel. - */ - struct bpf_program fcode; - - char errbuf[PCAP_ERRBUF_SIZE]; -}; - -int yylex(void); - -#ifndef min -#define min(a, b) ((a) > (b) ? (b) : (a)) -#endif - -/* XXX should these be in pcap.h? */ -int pcap_offline_read(pcap_t *, int, pcap_handler, u_char *); -int pcap_read(pcap_t *, int cnt, pcap_handler, u_char *); - -/* Ultrix pads to make everything line up on a nice boundary */ -#if defined(ultrix) || defined(__alpha) -#define PCAP_FDDIPAD 3 -#endif - -/* XXX */ -extern int pcap_fddipad; -#endif diff --git a/linux/bsd_comp.c b/linux/bsd_comp.c deleted file mode 100644 index 952b32f..0000000 --- a/linux/bsd_comp.c +++ /dev/null @@ -1,1203 +0,0 @@ -/* Because this code is derived from the 4.3BSD compress source: - * - * Copyright (c) 1985, 1986 The Regents of the University of California. - * All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * James A. Woods, derived from original work by Spencer Thomas - * and Joseph Orost. - * - * 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. - */ - -/* - * This version is for use with contiguous buffers on Linux-derived systems. - * - * ==FILEVERSION 970607== - * - * NOTE TO MAINTAINERS: - * If you modify this file at all, please set the number above to the - * date of the modification as YYMMDD (year month day). - * bsd_comp.c is shipped with a PPP distribution as well as with - * the kernel; if everyone increases the FILEVERSION number above, - * then scripts can do the right thing when deciding whether to - * install a new bsd_comp.c file. Don't change the format of that - * line otherwise, so the installation script can recognize it. - * - * From: bsd_comp.c,v 1.3 1994/12/08 01:59:58 paulus Exp - */ - -#ifndef MODULE -#error This file must be compiled as a module. -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#undef VERSION -/* a nice define to generate linux version numbers */ -#define VERSION(major,minor,patch) (((((major)<<8)+(minor))<<8)+(patch)) - -#if LINUX_VERSION_CODE >= VERSION(2,1,4) -#include -#endif - -#include -#include -#include /* to get the struct task_struct */ -#include /* used in new tty drivers */ -#include /* used in new tty drivers */ - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include - -#include - -#undef PACKETPTR -#define PACKETPTR 1 -#include -#undef PACKETPTR - -/* - * PPP "BSD compress" compression - * The differences between this compression and the classic BSD LZW - * source are obvious from the requirement that the classic code worked - * with files while this handles arbitrarily long streams that - * are broken into packets. They are: - * - * When the code size expands, a block of junk is not emitted by - * the compressor and not expected by the decompressor. - * - * New codes are not necessarily assigned every time an old - * code is output by the compressor. This is because a packet - * end forces a code to be emitted, but does not imply that a - * new sequence has been seen. - * - * The compression ratio is checked at the first end of a packet - * after the appropriate gap. Besides simplifying and speeding - * things up, this makes it more likely that the transmitter - * and receiver will agree when the dictionary is cleared when - * compression is not going well. - */ - -/* - * Macros to extract protocol version and number of bits - * from the third byte of the BSD Compress CCP configuration option. - */ - -#define BSD_VERSION(x) ((x) >> 5) -#define BSD_NBITS(x) ((x) & 0x1F) - -#define BSD_CURRENT_VERSION 1 - -/* - * A dictionary for doing BSD compress. - */ - -struct bsd_dict { - union { /* hash value */ - unsigned long fcode; - struct { -#if defined(__LITTLE_ENDIAN) /* Little endian order */ - unsigned short prefix; /* preceding code */ - unsigned char suffix; /* last character of new code */ - unsigned char pad; -#elif defined(__BIG_ENDIAN) /* Big endian order */ - unsigned char pad; - unsigned char suffix; /* last character of new code */ - unsigned short prefix; /* preceding code */ -#else -#error Endianness not defined... -#endif - } hs; - } f; - unsigned short codem1; /* output of hash table -1 */ - unsigned short cptr; /* map code to hash table entry */ -}; - -struct bsd_db { - int totlen; /* length of this structure */ - unsigned int hsize; /* size of the hash table */ - unsigned char hshift; /* used in hash function */ - unsigned char n_bits; /* current bits/code */ - unsigned char maxbits; /* maximum bits/code */ - unsigned char debug; /* non-zero if debug desired */ - unsigned char unit; /* ppp unit number */ - unsigned short seqno; /* sequence # of next packet */ - unsigned int mru; /* size of receive (decompress) bufr */ - unsigned int maxmaxcode; /* largest valid code */ - unsigned int max_ent; /* largest code in use */ - unsigned int in_count; /* uncompressed bytes, aged */ - unsigned int bytes_out; /* compressed bytes, aged */ - unsigned int ratio; /* recent compression ratio */ - unsigned int checkpoint; /* when to next check the ratio */ - unsigned int clear_count; /* times dictionary cleared */ - unsigned int incomp_count; /* incompressible packets */ - unsigned int incomp_bytes; /* incompressible bytes */ - unsigned int uncomp_count; /* uncompressed packets */ - unsigned int uncomp_bytes; /* uncompressed bytes */ - unsigned int comp_count; /* compressed packets */ - unsigned int comp_bytes; /* compressed bytes */ - unsigned short *lens; /* array of lengths of codes */ - struct bsd_dict *dict; /* dictionary */ -}; - -#define BSD_OVHD 2 /* BSD compress overhead/packet */ -#define MIN_BSD_BITS 9 -#define BSD_INIT_BITS MIN_BSD_BITS -#define MAX_BSD_BITS 15 - -static void bsd_free (void *state); -static void *bsd_alloc(unsigned char *options, int opt_len, int decomp); -static void *bsd_comp_alloc (unsigned char *options, int opt_len); -static void *bsd_decomp_alloc (unsigned char *options, int opt_len); - -static int bsd_init (void *db, unsigned char *options, - int opt_len, int unit, int debug, int decomp); -static int bsd_comp_init (void *state, unsigned char *options, - int opt_len, int unit, int opthdr, int debug); -static int bsd_decomp_init (void *state, unsigned char *options, - int opt_len, int unit, int opthdr, int mru, - int debug); - -static void bsd_reset (void *state); -static void bsd_comp_stats (void *state, struct compstat *stats); - -static int bsd_compress (void *state, unsigned char *rptr, - unsigned char *obuf, int isize, int osize); -static void bsd_incomp (void *state, unsigned char *ibuf, int icnt); - -static int bsd_decompress (void *state, unsigned char *ibuf, int isize, - unsigned char *obuf, int osize); - -/* These are in ppp.c */ -extern int ppp_register_compressor (struct compressor *cp); -extern void ppp_unregister_compressor (struct compressor *cp); - -/* - * the next two codes should not be changed lightly, as they must not - * lie within the contiguous general code space. - */ -#define CLEAR 256 /* table clear output code */ -#define FIRST 257 /* first free entry */ -#define LAST 255 - -#define MAXCODE(b) ((1 << (b)) - 1) -#define BADCODEM1 MAXCODE(MAX_BSD_BITS); - -#define BSD_HASH(prefix,suffix,hshift) ((((unsigned long)(suffix))<<(hshift)) \ - ^ (unsigned long)(prefix)) -#define BSD_KEY(prefix,suffix) ((((unsigned long)(suffix)) << 16) \ - + (unsigned long)(prefix)) - -#define CHECK_GAP 10000 /* Ratio check interval */ - -#define RATIO_SCALE_LOG 8 -#define RATIO_SCALE (1<>RATIO_SCALE_LOG) - -/* - * clear the dictionary - */ - -static void -bsd_clear(struct bsd_db *db) -{ - db->clear_count++; - db->max_ent = FIRST-1; - db->n_bits = BSD_INIT_BITS; - db->bytes_out = 0; - db->in_count = 0; - db->ratio = 0; - db->checkpoint = CHECK_GAP; -} - -/* - * If the dictionary is full, then see if it is time to reset it. - * - * Compute the compression ratio using fixed-point arithmetic - * with 8 fractional bits. - * - * Since we have an infinite stream instead of a single file, - * watch only the local compression ratio. - * - * Since both peers must reset the dictionary at the same time even in - * the absence of CLEAR codes (while packets are incompressible), they - * must compute the same ratio. - */ - -static int bsd_check (struct bsd_db *db) /* 1=output CLEAR */ - { - unsigned int new_ratio; - - if (db->in_count >= db->checkpoint) - { - /* age the ratio by limiting the size of the counts */ - if (db->in_count >= RATIO_MAX || db->bytes_out >= RATIO_MAX) - { - db->in_count -= (db->in_count >> 2); - db->bytes_out -= (db->bytes_out >> 2); - } - - db->checkpoint = db->in_count + CHECK_GAP; - - if (db->max_ent >= db->maxmaxcode) - { - /* Reset the dictionary only if the ratio is worse, - * or if it looks as if it has been poisoned - * by incompressible data. - * - * This does not overflow, because - * db->in_count <= RATIO_MAX. - */ - - new_ratio = db->in_count << RATIO_SCALE_LOG; - if (db->bytes_out != 0) - { - new_ratio /= db->bytes_out; - } - - if (new_ratio < db->ratio || new_ratio < 1 * RATIO_SCALE) - { - bsd_clear (db); - return 1; - } - db->ratio = new_ratio; - } - } - return 0; - } - -/* - * Return statistics. - */ - -static void bsd_comp_stats (void *state, struct compstat *stats) - { - struct bsd_db *db = (struct bsd_db *) state; - - stats->unc_bytes = db->uncomp_bytes; - stats->unc_packets = db->uncomp_count; - stats->comp_bytes = db->comp_bytes; - stats->comp_packets = db->comp_count; - stats->inc_bytes = db->incomp_bytes; - stats->inc_packets = db->incomp_count; - stats->in_count = db->in_count; - stats->bytes_out = db->bytes_out; - } - -/* - * Reset state, as on a CCP ResetReq. - */ - -static void bsd_reset (void *state) - { - struct bsd_db *db = (struct bsd_db *) state; - - bsd_clear(db); - - db->seqno = 0; - db->clear_count = 0; - } - -/* - * Release the compression structure - */ - -static void bsd_free (void *state) - { - struct bsd_db *db = (struct bsd_db *) state; - - if (db) - { -/* - * Release the dictionary - */ - if (db->dict) - { - vfree (db->dict); - db->dict = NULL; - } -/* - * Release the string buffer - */ - if (db->lens) - { - vfree (db->lens); - db->lens = NULL; - } -/* - * Finally release the structure itself. - */ - kfree (db); - MOD_DEC_USE_COUNT; - } - } - -/* - * Allocate space for a (de) compressor. - */ - -static void *bsd_alloc (unsigned char *options, int opt_len, int decomp) - { - int bits; - unsigned int hsize, hshift, maxmaxcode; - struct bsd_db *db; - - if (opt_len != 3 || options[0] != CI_BSD_COMPRESS || options[1] != 3 - || BSD_VERSION(options[2]) != BSD_CURRENT_VERSION) - { - return NULL; - } - - bits = BSD_NBITS(options[2]); - - switch (bits) - { - case 9: /* needs 82152 for both directions */ - case 10: /* needs 84144 */ - case 11: /* needs 88240 */ - case 12: /* needs 96432 */ - hsize = 5003; - hshift = 4; - break; - case 13: /* needs 176784 */ - hsize = 9001; - hshift = 5; - break; - case 14: /* needs 353744 */ - hsize = 18013; - hshift = 6; - break; - case 15: /* needs 691440 */ - hsize = 35023; - hshift = 7; - break; - case 16: /* needs 1366160--far too much, */ - /* hsize = 69001; */ /* and 69001 is too big for cptr */ - /* hshift = 8; */ /* in struct bsd_db */ - /* break; */ - default: - return NULL; - } -/* - * Allocate the main control structure for this instance. - */ - maxmaxcode = MAXCODE(bits); - db = (struct bsd_db *) kmalloc (sizeof (struct bsd_db), - GFP_KERNEL); - if (!db) - { - return NULL; - } - - memset (db, 0, sizeof(struct bsd_db)); -/* - * Allocate space for the dictionary. This may be more than one page in - * length. - */ - db->dict = (struct bsd_dict *) vmalloc (hsize * - sizeof (struct bsd_dict)); - if (!db->dict) - { - bsd_free (db); - return NULL; - } - - MOD_INC_USE_COUNT; -/* - * If this is the compression buffer then there is no length data. - */ - if (!decomp) - { - db->lens = NULL; - } -/* - * For decompression, the length information is needed as well. - */ - else - { - db->lens = (unsigned short *) vmalloc ((maxmaxcode + 1) * - sizeof (db->lens[0])); - if (!db->lens) - { - bsd_free (db); - return (NULL); - } - } -/* - * Initialize the data information for the compression code - */ - db->totlen = sizeof (struct bsd_db) + - (sizeof (struct bsd_dict) * hsize); - - db->hsize = hsize; - db->hshift = hshift; - db->maxmaxcode = maxmaxcode; - db->maxbits = bits; - - return (void *) db; - } - -static void *bsd_comp_alloc (unsigned char *options, int opt_len) - { - return bsd_alloc (options, opt_len, 0); - } - -static void *bsd_decomp_alloc (unsigned char *options, int opt_len) - { - return bsd_alloc (options, opt_len, 1); - } - -/* - * Initialize the database. - */ - -static int bsd_init (void *state, unsigned char *options, - int opt_len, int unit, int debug, int decomp) - { - struct bsd_db *db = state; - int indx; - - if ((opt_len != 3) || (options[0] != CI_BSD_COMPRESS) || (options[1] != 3) - || (BSD_VERSION(options[2]) != BSD_CURRENT_VERSION) - || (BSD_NBITS(options[2]) != db->maxbits) - || (decomp && db->lens == NULL)) - { - return 0; - } - - if (decomp) - { - indx = LAST; - do - { - db->lens[indx] = 1; - } - while (indx-- > 0); - } - - indx = db->hsize; - while (indx-- != 0) - { - db->dict[indx].codem1 = BADCODEM1; - db->dict[indx].cptr = 0; - } - - db->unit = unit; - db->mru = 0; -#ifndef DEBUG - if (debug) -#endif - db->debug = 1; - - bsd_reset(db); - - return 1; - } - -static int bsd_comp_init (void *state, unsigned char *options, - int opt_len, int unit, int opthdr, int debug) - { - return bsd_init (state, options, opt_len, unit, debug, 0); - } - -static int bsd_decomp_init (void *state, unsigned char *options, - int opt_len, int unit, int opthdr, int mru, - int debug) - { - return bsd_init (state, options, opt_len, unit, debug, 1); - } - -/* - * Obtain pointers to the various structures in the compression tables - */ - -#define dict_ptrx(p,idx) &(p->dict[idx]) -#define lens_ptrx(p,idx) &(p->lens[idx]) - -#ifdef DEBUG -static unsigned short *lens_ptr(struct bsd_db *db, int idx) - { - if ((unsigned int) idx > (unsigned int) db->maxmaxcode) - { - printk ("<9>ppp: lens_ptr(%d) > max\n", idx); - idx = 0; - } - return lens_ptrx (db, idx); - } - -static struct bsd_dict *dict_ptr(struct bsd_db *db, int idx) - { - if ((unsigned int) idx >= (unsigned int) db->hsize) - { - printk ("<9>ppp: dict_ptr(%d) > max\n", idx); - idx = 0; - } - return dict_ptrx (db, idx); - } - -#else -#define lens_ptr(db,idx) lens_ptrx(db,idx) -#define dict_ptr(db,idx) dict_ptrx(db,idx) -#endif - -/* - * compress a packet - * - * The result of this function is the size of the compressed - * packet. A zero is returned if the packet was not compressed - * for some reason, such as the size being larger than uncompressed. - * - * One change from the BSD compress command is that when the - * code size expands, we do not output a bunch of padding. - */ - -static int bsd_compress (void *state, unsigned char *rptr, unsigned char *obuf, - int isize, int osize) - { - struct bsd_db *db; - int hshift; - unsigned int max_ent; - unsigned int n_bits; - unsigned int bitno; - unsigned long accm; - int ent; - unsigned long fcode; - struct bsd_dict *dictp; - unsigned char c; - int hval; - int disp; - int ilen; - int mxcode; - unsigned char *wptr; - int olen; - -#define PUTBYTE(v) \ - { \ - ++olen; \ - if (wptr) \ - { \ - *wptr++ = (unsigned char) (v); \ - if (olen >= osize) \ - { \ - wptr = NULL; \ - } \ - } \ - } - -#define OUTPUT(ent) \ - { \ - bitno -= n_bits; \ - accm |= ((ent) << bitno); \ - do \ - { \ - PUTBYTE(accm >> 24); \ - accm <<= 8; \ - bitno += 8; \ - } \ - while (bitno <= 24); \ - } - - /* - * If the protocol is not in the range we're interested in, - * just return without compressing the packet. If it is, - * the protocol becomes the first byte to compress. - */ - - ent = PPP_PROTOCOL(rptr); - if (ent < 0x21 || ent > 0xf9) - { - return 0; - } - - db = (struct bsd_db *) state; - hshift = db->hshift; - max_ent = db->max_ent; - n_bits = db->n_bits; - bitno = 32; - accm = 0; - mxcode = MAXCODE (n_bits); - - /* Initialize the output pointers */ - wptr = obuf; - olen = PPP_HDRLEN + BSD_OVHD; - - if (osize > isize) - { - osize = isize; - } - - /* This is the PPP header information */ - if (wptr) - { - *wptr++ = PPP_ADDRESS(rptr); - *wptr++ = PPP_CONTROL(rptr); - *wptr++ = 0; - *wptr++ = PPP_COMP; - *wptr++ = db->seqno >> 8; - *wptr++ = db->seqno; - } - - /* Skip the input header */ - rptr += PPP_HDRLEN; - isize -= PPP_HDRLEN; - ilen = ++isize; /* Low byte of protocol is counted as input */ - - while (--ilen > 0) - { - c = *rptr++; - fcode = BSD_KEY (ent, c); - hval = BSD_HASH (ent, c, hshift); - dictp = dict_ptr (db, hval); - - /* Validate and then check the entry. */ - if (dictp->codem1 >= max_ent) - { - goto nomatch; - } - - if (dictp->f.fcode == fcode) - { - ent = dictp->codem1 + 1; - continue; /* found (prefix,suffix) */ - } - - /* continue probing until a match or invalid entry */ - disp = (hval == 0) ? 1 : hval; - - do - { - hval += disp; - if (hval >= db->hsize) - { - hval -= db->hsize; - } - dictp = dict_ptr (db, hval); - if (dictp->codem1 >= max_ent) - { - goto nomatch; - } - } - while (dictp->f.fcode != fcode); - - ent = dictp->codem1 + 1; /* finally found (prefix,suffix) */ - continue; - -nomatch: - OUTPUT(ent); /* output the prefix */ - - /* code -> hashtable */ - if (max_ent < db->maxmaxcode) - { - struct bsd_dict *dictp2; - struct bsd_dict *dictp3; - int indx; - - /* expand code size if needed */ - if (max_ent >= mxcode) - { - db->n_bits = ++n_bits; - mxcode = MAXCODE (n_bits); - } - - /* Invalidate old hash table entry using - * this code, and then take it over. - */ - - dictp2 = dict_ptr (db, max_ent + 1); - indx = dictp2->cptr; - dictp3 = dict_ptr (db, indx); - - if (dictp3->codem1 == max_ent) - { - dictp3->codem1 = BADCODEM1; - } - - dictp2->cptr = hval; - dictp->codem1 = max_ent; - dictp->f.fcode = fcode; - db->max_ent = ++max_ent; - - if (db->lens) - { - unsigned short *len1 = lens_ptr (db, max_ent); - unsigned short *len2 = lens_ptr (db, ent); - *len1 = *len2 + 1; - } - } - ent = c; - } - - OUTPUT(ent); /* output the last code */ - - db->bytes_out += olen - PPP_HDRLEN - BSD_OVHD; - db->uncomp_bytes += isize; - db->in_count += isize; - ++db->uncomp_count; - ++db->seqno; - - if (bitno < 32) - { - ++db->bytes_out; /* must be set before calling bsd_check */ - } - - /* - * Generate the clear command if needed - */ - - if (bsd_check(db)) - { - OUTPUT (CLEAR); - } - - /* - * Pad dribble bits of last code with ones. - * Do not emit a completely useless byte of ones. - */ - - if (bitno != 32) - { - PUTBYTE((accm | (0xff << (bitno-8))) >> 24); - } - - /* - * Increase code size if we would have without the packet - * boundary because the decompressor will do so. - */ - - if (max_ent >= mxcode && max_ent < db->maxmaxcode) - { - db->n_bits++; - } - - /* If output length is too large then this is an incomplete frame. */ - if (wptr == NULL) - { - ++db->incomp_count; - db->incomp_bytes += isize; - olen = 0; - } - else /* Count the number of compressed frames */ - { - ++db->comp_count; - db->comp_bytes += olen; - } - - /* Return the resulting output length */ - return olen; -#undef OUTPUT -#undef PUTBYTE - } - -/* - * Update the "BSD Compress" dictionary on the receiver for - * incompressible data by pretending to compress the incoming data. - */ - -static void bsd_incomp (void *state, unsigned char *ibuf, int icnt) - { - (void) bsd_compress (state, ibuf, (char *) 0, icnt, 0); - } - -/* - * Decompress "BSD Compress". - * - * Because of patent problems, we return DECOMP_ERROR for errors - * found by inspecting the input data and for system problems, but - * DECOMP_FATALERROR for any errors which could possibly be said to - * be being detected "after" decompression. For DECOMP_ERROR, - * we can issue a CCP reset-request; for DECOMP_FATALERROR, we may be - * infringing a patent of Motorola's if we do, so we take CCP down - * instead. - * - * Given that the frame has the correct sequence number and a good FCS, - * errors such as invalid codes in the input most likely indicate a - * bug, so we return DECOMP_FATALERROR for them in order to turn off - * compression, even though they are detected by inspecting the input. - */ - -static int bsd_decompress (void *state, unsigned char *ibuf, int isize, - unsigned char *obuf, int osize) - { - struct bsd_db *db; - unsigned int max_ent; - unsigned long accm; - unsigned int bitno; /* 1st valid bit in accm */ - unsigned int n_bits; - unsigned int tgtbitno; /* bitno when we have a code */ - struct bsd_dict *dictp; - int explen; - int seq; - unsigned int incode; - unsigned int oldcode; - unsigned int finchar; - unsigned char *p; - unsigned char *wptr; - int adrs; - int ctrl; - int ilen; - int codelen; - int extra; - - db = (struct bsd_db *) state; - max_ent = db->max_ent; - accm = 0; - bitno = 32; /* 1st valid bit in accm */ - n_bits = db->n_bits; - tgtbitno = 32 - n_bits; /* bitno when we have a code */ - - /* - * Save the address/control from the PPP header - * and then get the sequence number. - */ - - adrs = PPP_ADDRESS (ibuf); - ctrl = PPP_CONTROL (ibuf); - - seq = (ibuf[4] << 8) + ibuf[5]; - - ibuf += (PPP_HDRLEN + 2); - ilen = isize - (PPP_HDRLEN + 2); - - /* - * Check the sequence number and give up if it differs from - * the value we're expecting. - */ - - if (seq != db->seqno) - { - if (db->debug) - { - printk("bsd_decomp%d: bad sequence # %d, expected %d\n", - db->unit, seq, db->seqno - 1); - } - return DECOMP_ERROR; - } - - ++db->seqno; - db->bytes_out += ilen; - - /* - * Fill in the ppp header, but not the last byte of the protocol - * (that comes from the decompressed data). - */ - - wptr = obuf; - *wptr++ = adrs; - *wptr++ = ctrl; - *wptr++ = 0; - - oldcode = CLEAR; - explen = 3; - - /* - * Keep the checkpoint correctly so that incompressible packets - * clear the dictionary at the proper times. - */ - - for (;;) - { - if (ilen-- <= 0) - { - db->in_count += (explen - 3); /* don't count the header */ - break; - } - - /* - * Accumulate bytes until we have a complete code. - * Then get the next code, relying on the 32-bit, - * unsigned accm to mask the result. - */ - - bitno -= 8; - accm |= *ibuf++ << bitno; - if (tgtbitno < bitno) - { - continue; - } - - incode = accm >> tgtbitno; - accm <<= n_bits; - bitno += n_bits; - - /* - * The dictionary must only be cleared at the end of a packet. - */ - - if (incode == CLEAR) - { - if (ilen > 0) - { - if (db->debug) - { - printk("bsd_decomp%d: bad CLEAR\n", db->unit); - } - return DECOMP_FATALERROR; /* probably a bug */ - } - - bsd_clear(db); - break; - } - - if ((incode > max_ent + 2) || (incode > db->maxmaxcode) - || (incode > max_ent && oldcode == CLEAR)) - { - if (db->debug) - { - printk("bsd_decomp%d: bad code 0x%x oldcode=0x%x ", - db->unit, incode, oldcode); - printk("max_ent=0x%x explen=%d seqno=%d\n", - max_ent, explen, db->seqno); - } - return DECOMP_FATALERROR; /* probably a bug */ - } - - /* Special case for KwKwK string. */ - if (incode > max_ent) - { - finchar = oldcode; - extra = 1; - } - else - { - finchar = incode; - extra = 0; - } - - codelen = *(lens_ptr (db, finchar)); - explen += codelen + extra; - if (explen > osize) - { - if (db->debug) - { - printk("bsd_decomp%d: ran out of mru\n", db->unit); -#ifdef DEBUG - printk(" len=%d, finchar=0x%x, codelen=%d, explen=%d\n", - ilen, finchar, codelen, explen); -#endif - } - return DECOMP_FATALERROR; - } - - /* - * Decode this code and install it in the decompressed buffer. - */ - - wptr += codelen; - p = wptr; - while (finchar > LAST) - { - struct bsd_dict *dictp2 = dict_ptr (db, finchar); - - dictp = dict_ptr (db, dictp2->cptr); -#ifdef DEBUG - if (--codelen <= 0 || dictp->codem1 != finchar-1) - { - if (codelen <= 0) - { - printk("bsd_decomp%d: fell off end of chain ", db->unit); - printk("0x%x at 0x%x by 0x%x, max_ent=0x%x\n", - incode, finchar, dictp2->cptr, max_ent); - } - else - { - if (dictp->codem1 != finchar-1) - { - printk("bsd_decomp%d: bad code chain 0x%x " - "finchar=0x%x ", - db->unit, incode, finchar); - - printk("oldcode=0x%x cptr=0x%x codem1=0x%x\n", - oldcode, dictp2->cptr, dictp->codem1); - } - } - return DECOMP_FATALERROR; - } -#endif - *--p = dictp->f.hs.suffix; - finchar = dictp->f.hs.prefix; - } - *--p = finchar; - -#ifdef DEBUG - if (--codelen != 0) - { - printk("bsd_decomp%d: short by %d after code 0x%x, max_ent=0x%x\n", - db->unit, codelen, incode, max_ent); - } -#endif - - if (extra) /* the KwKwK case again */ - { - *wptr++ = finchar; - } - - /* - * If not first code in a packet, and - * if not out of code space, then allocate a new code. - * - * Keep the hash table correct so it can be used - * with uncompressed packets. - */ - - if (oldcode != CLEAR && max_ent < db->maxmaxcode) - { - struct bsd_dict *dictp2, *dictp3; - unsigned short *lens1, *lens2; - unsigned long fcode; - int hval, disp, indx; - - fcode = BSD_KEY(oldcode,finchar); - hval = BSD_HASH(oldcode,finchar,db->hshift); - dictp = dict_ptr (db, hval); - - /* look for a free hash table entry */ - if (dictp->codem1 < max_ent) - { - disp = (hval == 0) ? 1 : hval; - do - { - hval += disp; - if (hval >= db->hsize) - { - hval -= db->hsize; - } - dictp = dict_ptr (db, hval); - } - while (dictp->codem1 < max_ent); - } - - /* - * Invalidate previous hash table entry - * assigned this code, and then take it over - */ - - dictp2 = dict_ptr (db, max_ent + 1); - indx = dictp2->cptr; - dictp3 = dict_ptr (db, indx); - - if (dictp3->codem1 == max_ent) - { - dictp3->codem1 = BADCODEM1; - } - - dictp2->cptr = hval; - dictp->codem1 = max_ent; - dictp->f.fcode = fcode; - db->max_ent = ++max_ent; - - /* Update the length of this string. */ - lens1 = lens_ptr (db, max_ent); - lens2 = lens_ptr (db, oldcode); - *lens1 = *lens2 + 1; - - /* Expand code size if needed. */ - if (max_ent >= MAXCODE(n_bits) && max_ent < db->maxmaxcode) - { - db->n_bits = ++n_bits; - tgtbitno = 32-n_bits; - } - } - oldcode = incode; - } - - ++db->comp_count; - ++db->uncomp_count; - db->comp_bytes += isize - BSD_OVHD - PPP_HDRLEN; - db->uncomp_bytes += explen; - - if (bsd_check(db)) - { - if (db->debug) - { - printk("bsd_decomp%d: peer should have cleared dictionary on %d\n", - db->unit, db->seqno - 1); - } - } - return explen; - } - -/************************************************************* - * Table of addresses for the BSD compression module - *************************************************************/ - -static struct compressor ppp_bsd_compress = { - CI_BSD_COMPRESS, /* compress_proto */ - bsd_comp_alloc, /* comp_alloc */ - bsd_free, /* comp_free */ - bsd_comp_init, /* comp_init */ - bsd_reset, /* comp_reset */ - bsd_compress, /* compress */ - bsd_comp_stats, /* comp_stat */ - bsd_decomp_alloc, /* decomp_alloc */ - bsd_free, /* decomp_free */ - bsd_decomp_init, /* decomp_init */ - bsd_reset, /* decomp_reset */ - bsd_decompress, /* decompress */ - bsd_incomp, /* incomp */ - bsd_comp_stats /* decomp_stat */ -}; - -/************************************************************* - * Module support routines - *************************************************************/ - -int -init_module(void) -{ - int answer = ppp_register_compressor (&ppp_bsd_compress); - if (answer == 0) - printk (KERN_INFO "PPP BSD Compression module registered\n"); - return answer; -} - -void -cleanup_module(void) -{ - ppp_unregister_compressor (&ppp_bsd_compress); -} diff --git a/linux/kinstall.sh b/linux/kinstall.sh deleted file mode 100755 index 0391a23..0000000 --- a/linux/kinstall.sh +++ /dev/null @@ -1,257 +0,0 @@ -#!/bin/sh -# -# kinstall.sh -- install updated kernel PPP driver in Linux kernel source -# Michael Callahan callahan@maths.ox.ac.uk 17 May 1995 -# -# This script is complicated because we want to avoid installing a driver -# in a kernel if it won't work in that kernel. This means two things: -# 1) we check the version of the kernel and refuse to install if the -# kernel is too old; -# 2) we check that the files already in the kernel aren't more recent -# than the one we're about to install. -# If either 1) or 2) occurs then we exit with an error message and don't -# touch anything. -# -# In addition, we have to edit the Makefile in the drivers/net -# directory to add support for the ppp-comp compression option. - -LINUXSRC=/usr/src/linux - -if [ $# -gt 1 ]; then - echo usage: $0 [linux-source-directory] - exit 1 -fi - -if [ $# -eq 1 ]; then - LINUXSRC=$1 -fi - -# -# Make sure we can find the kernel source - -LINUXMK=$LINUXSRC/Makefile - -if [ ! -r $LINUXMK -o ! -d $LINUXSRC/drivers ]; then - echo There appears to be no kernel source distribution in $LINUXSRC. - echo Give the top-level kernel source directory as the argument to - echo this script. - echo usage: $0 [linux-source-directory] - exit 1 -fi - -# -# Check that the kernel source Makefile includes the -# VERSION, PATCHLEVEL, SUBLEVEL version-numbering scheme -# introduced in 1.0.1 -if [ `egrep '^VERSION|^PATCHLEVEL|^SUBLEVEL' $LINUXMK | wc -l` -ne 3 ]; then - echo You appear to have a very old kernel. You must upgrade. - echo It is recommended that you upgrade to the most recent 2.0.x kernel. - exit 1 -fi - -# -# Set the VERSION, PATCHLEVEL, SUBLEVEL variables -VERSION=`egrep '^VERSION' $LINUXMK | sed 's/[^0-9]//g'` -PATCHLEVEL=`egrep '^PATCHLEVEL' $LINUXMK | sed 's/[^0-9]//g'` -SUBLEVEL=`egrep '^SUBLEVEL' $LINUXMK | sed 's/[^0-9]//g'` - -KERNEL=$VERSION.$PATCHLEVEL.$SUBLEVEL - -# -# Pass judgement on the kernel version -if [ $VERSION -lt 2 ]; then - echo You appear to be running $KERNEL. There is no support for - echo kernels predating 2.0.0. It is recommended that you upgrade - echo to the most recent 2.0.x kernel. - exit 1 -fi - -# -# convenience function to exit if the last command failed - -bombiffailed () { - STATUS=$? - if [ $STATUS -ne 0 ]; then - echo "=== kinstall.sh exiting with failure status $STATUS" - exit $STATUS - fi -} - -# -# convenience function to compare two files marked with ==FILEVERSION -# version numbers; returns success if $1 is not older than $2 - -newer () { - file1=$1 - file2=$2 - pat='==FILEVERSION[ \t]+[0-9]+[ \t]*==' - - # Find the revision in the kernel - f1rev="" - if [ -r $file1 ]; then - f1rev=`egrep "$pat" $file1 | head -1 | sed 's/[^0-9]//g'` - fi - - # Find the revision of the local file - f2rev="" - if [ -r $file2 ]; then - f2rev=`egrep "$pat" $file2 | head -1 | sed 's/[^0-9]//g'` - fi - - # Make the strings the same length to avoid comparison problems - f1rev=`echo "0000000000"$f1rev | tail -c 10` - f2rev=`echo "0000000000"$f2rev | tail -c 10` - - # Test the order of the two revisions - if [ $f1rev -ge $f2rev ]; then - true ; return - fi - - false ; return -} - -# -# Install the files. - -installfile () { - BASE=`basename $1` - if [ ! -e $BASE ]; then - if [ -e ../include/linux/$BASE ]; then - BASE=../include/linux/$BASE - else - echo Could not find source file $BASE ! - false ; return - fi - fi - if newer $1 $BASE; then - echo $1 is not older than $BASE, skipping - return 0 - fi - BACKUP=`echo $1 | sed 's/.c$/.old.c/;s/.h$/.old.h/'` - if [ -f $1 -a $BACKUP != $1 ]; then - echo Saving old $1 as `basename $BACKUP` - mv $1 $BACKUP - bombiffailed - fi - echo Installing new $1 - cp $BASE $1 - bombiffailed - touch $1 - bombiffailed -} - -# -# Check for the root user -test_root() { - my_uid=`id -u` - my_name=`id -u -n` - if [ $my_uid -ne 0 ]; then - echo - echo "********************************************************************" - echo "Hello, $my_name. Since you are not running as the root user, it" - echo "is possible that this script will fail to install the needed files." - echo "If this happens then please use the root account and re-execute the" - echo "'make kernel' command. (This script is paused for 10 seconds.)" - echo "********************************************************************" - echo - sleep 10s - fi -} - -test_root - -echo -echo "Notice to the user:" -echo -echo "It is perfectly legal for this script to run without making any changes" -echo "to your system. This means that the system currently contains the" -echo "necessary changes to support this package. Please do not attempt to" -echo "force this script to replace any file nor make any patch. If you do so" -echo "then it is probable that you are actually putting older, buggier, code" -echo "over the newer, fixed, code. Thank you." -echo -echo Installing into kernel version $KERNEL in $LINUXSRC -echo - -if [ -f $LINUXSRC/drivers/net/ppp.h ]; then - echo Moving old $LINUXSRC/drivers/net/ppp.h file out of the way - mv $LINUXSRC/drivers/net/ppp.h $LINUXSRC/drivers/net/ppp.old.h - bombiffailed -fi - -for FILE in $LINUXSRC/drivers/net/bsd_comp.c \ - $LINUXSRC/drivers/net/ppp_deflate.c \ - $LINUXSRC/drivers/net/zlib.c \ - $LINUXSRC/drivers/net/zlib.h \ - $LINUXSRC/include/linux/if_ppp.h \ - $LINUXSRC/include/linux/if_pppvar.h \ - $LINUXSRC/include/linux/ppp-comp.h \ - $LINUXSRC/include/linux/ppp_defs.h - do - installfile $FILE no -done - -installfile $LINUXSRC/drivers/net/ppp.c yes - -echo -n 'Adding BSD compression module to drivers makefile...' -NETMK=$LINUXSRC/drivers/net/Makefile -fgrep bsd_comp.o $NETMK >/dev/null -if [ ! "$?" = "0" ]; then - if [ -f $NETMK.orig ]; then - mv $NETMK.orig $NETMK - fi - sed 's/ppp.o$/ppp.o bsd_comp.o/g' <$NETMK >$NETMK.temp - bombiffailed - echo -n '.' - mv $NETMK $NETMK.orig - bombiffailed - echo -n '.' - mv $NETMK.temp $NETMK - bombiffailed -else - echo -n '(already there--skipping)' -fi -echo -echo -n 'Adding Deflate compression module to drivers makefile...' -NETMK=$LINUXSRC/drivers/net/Makefile -fgrep ppp_deflate.o $NETMK >/dev/null -if [ ! "$?" = "0" ]; then - echo -n '.' - sed 's/bsd_comp.o$/bsd_comp.o ppp_deflate.o/g' <$NETMK >$NETMK.temp - bombiffailed - echo -n '.' - mv $NETMK $NETMK.orig - bombiffailed - echo -n '.' - mv $NETMK.temp $NETMK - bombiffailed -else - echo -n '(already there--skipping)' -fi -echo - -# # -# # install header stub files in /usr/include/net - -# for FILE in if_ppp.h \ -# if_pppvar.h \ -# ppp-comp.h \ -# if.h \ -# ppp_defs.h -# do -# if [ ! -f /usr/include/net/$FILE ]; then -# echo Installing stub include file in /usr/include/net/$FILE -# echo "#include " > /usr/include/net/$FILE -# bombiffailed -# chown 0:0 /usr/include/net/$FILE -# bombiffailed -# chmod 444 /usr/include/net/$FILE -# bombiffailed -# touch /usr/include/net/$FILE -# bombiffailed -# fi -# done - -echo "Kernel driver files installation done." - -exit 0 diff --git a/pppd/chap_ms.h b/pppd/chap_ms.h index 57e2929..040d80a 100644 --- a/pppd/chap_ms.h +++ b/pppd/chap_ms.h @@ -68,7 +68,7 @@ #define MS_CHAP2_FLAGS 48 #ifdef MPPE -#include /* MPPE_MAX_KEY_LEN */ +#include "mppe.h" /* MPPE_MAX_KEY_LEN */ extern u_char mppe_send_key[MPPE_MAX_KEY_LEN]; extern u_char mppe_recv_key[MPPE_MAX_KEY_LEN]; extern int mppe_keys_set; diff --git a/pppd/mppe.h b/pppd/mppe.h new file mode 100644 index 0000000..5eb3b37 --- /dev/null +++ b/pppd/mppe.h @@ -0,0 +1,121 @@ +/* + * mppe.h - Definitions for MPPE + * + * Copyright (c) 2008 Paul Mackerras. 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. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#define MPPE_PAD 4 /* MPPE growth per frame */ +#define MPPE_MAX_KEY_LEN 16 /* largest key length (128-bit) */ + +/* option bits for ccp_options.mppe */ +#define MPPE_OPT_40 0x01 /* 40 bit */ +#define MPPE_OPT_128 0x02 /* 128 bit */ +#define MPPE_OPT_STATEFUL 0x04 /* stateful mode */ +/* unsupported opts */ +#define MPPE_OPT_56 0x08 /* 56 bit */ +#define MPPE_OPT_MPPC 0x10 /* MPPC compression */ +#define MPPE_OPT_D 0x20 /* Unknown */ +#define MPPE_OPT_UNSUPPORTED (MPPE_OPT_56|MPPE_OPT_MPPC|MPPE_OPT_D) +#define MPPE_OPT_UNKNOWN 0x40 /* Bits !defined in RFC 3078 were set */ + +/* + * This is not nice ... the alternative is a bitfield struct though. + * And unfortunately, we cannot share the same bits for the option + * names above since C and H are the same bit. We could do a u_int32 + * but then we have to do a htonl() all the time and/or we still need + * to know which octet is which. + */ +#define MPPE_C_BIT 0x01 /* MPPC */ +#define MPPE_D_BIT 0x10 /* Obsolete, usage unknown */ +#define MPPE_L_BIT 0x20 /* 40-bit */ +#define MPPE_S_BIT 0x40 /* 128-bit */ +#define MPPE_M_BIT 0x80 /* 56-bit, not supported */ +#define MPPE_H_BIT 0x01 /* Stateless (in a different byte) */ + +/* Does not include H bit; used for least significant octet only. */ +#define MPPE_ALL_BITS (MPPE_D_BIT|MPPE_L_BIT|MPPE_S_BIT|MPPE_M_BIT|MPPE_H_BIT) + +/* Build a CI from mppe opts (see RFC 3078) */ +#define MPPE_OPTS_TO_CI(opts, ci) \ + do { \ + u_char *ptr = ci; /* u_char[4] */ \ + \ + /* H bit */ \ + if (opts & MPPE_OPT_STATEFUL) \ + *ptr++ = 0x0; \ + else \ + *ptr++ = MPPE_H_BIT; \ + *ptr++ = 0; \ + *ptr++ = 0; \ + \ + /* S,L bits */ \ + *ptr = 0; \ + if (opts & MPPE_OPT_128) \ + *ptr |= MPPE_S_BIT; \ + if (opts & MPPE_OPT_40) \ + *ptr |= MPPE_L_BIT; \ + /* M,D,C bits not supported */ \ + } while (/* CONSTCOND */ 0) + +/* The reverse of the above */ +#define MPPE_CI_TO_OPTS(ci, opts) \ + do { \ + u_char *ptr = ci; /* u_char[4] */ \ + \ + opts = 0; \ + \ + /* H bit */ \ + if (!(ptr[0] & MPPE_H_BIT)) \ + opts |= MPPE_OPT_STATEFUL; \ + \ + /* S,L bits */ \ + if (ptr[3] & MPPE_S_BIT) \ + opts |= MPPE_OPT_128; \ + if (ptr[3] & MPPE_L_BIT) \ + opts |= MPPE_OPT_40; \ + \ + /* M,D,C bits */ \ + if (ptr[3] & MPPE_M_BIT) \ + opts |= MPPE_OPT_56; \ + if (ptr[3] & MPPE_D_BIT) \ + opts |= MPPE_OPT_D; \ + if (ptr[3] & MPPE_C_BIT) \ + opts |= MPPE_OPT_MPPC; \ + \ + /* Other bits */ \ + if (ptr[0] & ~MPPE_H_BIT) \ + opts |= MPPE_OPT_UNKNOWN; \ + if (ptr[1] || ptr[2]) \ + opts |= MPPE_OPT_UNKNOWN; \ + if (ptr[3] & ~MPPE_ALL_BITS) \ + opts |= MPPE_OPT_UNKNOWN; \ + } while (/* CONSTCOND */ 0) -- 2.39.2