Documentation

Documentation

Includes

netif/ppp/ppp_opts.h

#include "netif/ppp/ppp_opts.h"
#include "netif/ppp/ppp_opts.h"

netif/ppp/pppcrypt.h

#include "netif/ppp/pppcrypt.h"
#include "netif/ppp/pppcrypt.h"

Macros

Marco MPPE_H

#define MPPE_H


      

Marco MPPE_PAD

#define MPPE_PAD	4 /* MPPE growth per frame */


      

Marco MPPE_MAX_KEY_LEN

#define MPPE_MAX_KEY_LEN 16 /* largest key length (128-bit) */


      

Marco MPPE_OPT_40

#define MPPE_OPT_40	1 /* 40 bit */
/* option bits for ccp_options.mppe */

Marco MPPE_OPT_128

#define MPPE_OPT_128	2 /* 128 bit */


      

Marco MPPE_OPT_STATEFUL

#define MPPE_OPT_STATEFUL 4 /* stateful mode */


      

Marco MPPE_OPT_56

#define MPPE_OPT_56	8 /* 56 bit */
/* unsupported opts */

Marco MPPE_OPT_MPPC

#define MPPE_OPT_MPPC	16 /* MPPC compression */


      

Marco MPPE_OPT_D

#define MPPE_OPT_D	32 /* Unknown */


      

Marco MPPE_OPT_UNSUPPORTED

#define MPPE_OPT_UNSUPPORTED (MPPE_OPT_56|MPPE_OPT_MPPC|MPPE_OPT_D)


      

Marco MPPE_OPT_UNKNOWN

#define MPPE_OPT_UNKNOWN 64 /* Bits !defined in RFC 3078 were set */


      

Marco MPPE_C_BIT

#define MPPE_C_BIT	1 /* MPPC */
/*
 * 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 lwip_htonl() all the time and/or we still need
 * to know which octet is which.
 */

Marco MPPE_D_BIT

#define MPPE_D_BIT	16 /* Obsolete, usage unknown */


      

Marco MPPE_L_BIT

#define MPPE_L_BIT	32 /* 40-bit */


      

Marco MPPE_S_BIT

#define MPPE_S_BIT	64 /* 128-bit */


      

Marco MPPE_M_BIT

#define MPPE_M_BIT	128 /* 56-bit, not supported */


      

Marco MPPE_H_BIT

#define MPPE_H_BIT	1 /* Stateless (in a different byte) */


      

Marco MPPE_ALL_BITS

#define MPPE_ALL_BITS (MPPE_D_BIT|MPPE_L_BIT|MPPE_S_BIT|MPPE_M_BIT|MPPE_H_BIT)
/* Does not include H bit; used for least significant octet only. */

Marco MPPE_OPTS_TO_CI(opts, ci)

#define MPPE_OPTS_TO_CI(opts, ci)	\
   do {				\
 u_char *ptr = ci; /* u_char[4] */ \
					\
 /* H bit */			\
 if (opts & MPPE_OPT_STATEFUL)	\
    *ptr++ = 0;		\
 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)
/* Build a CI from mppe opts (see RFC 3078) */

Marco MPPE_CI_TO_OPTS(ci, opts)

#define MPPE_CI_TO_OPTS(ci, opts)	\
   do {				\
 const 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)
/* The reverse of the above */

Marco SHA1_PAD_SIZE

#define SHA1_PAD_SIZE 40
/* Shared MPPE padding between MSCHAP and MPPE */

Functions

Func mppe_set_key

void mppe_set_key(ppp_pcb *pcb, ppp_mppe_state *state, u8_t *key);


      

Func mppe_init

void mppe_init(ppp_pcb *pcb, ppp_mppe_state *state, u8_t options);


      

Func mppe_comp_reset

void mppe_comp_reset(ppp_pcb *pcb, ppp_mppe_state *state);


      

Func mppe_compress

err_t mppe_compress(ppp_pcb *pcb, ppp_mppe_state *state, struct pbuf **pb, u16_t protocol);


      

Func mppe_decomp_reset

void mppe_decomp_reset(ppp_pcb *pcb, ppp_mppe_state *state);


      

Func mppe_decompress

err_t mppe_decompress(ppp_pcb *pcb, ppp_mppe_state *state, struct pbuf **pb);

      

Vars

Consts

Types

Typedefs

Typedef ppp_mppe_state;

typedef struct ppp_mppe_state {
 lwip_arc4_context arc4;
 u8_t master_key[MPPE_MAX_KEY_LEN];
 u8_t session_key[MPPE_MAX_KEY_LEN];
 u8_t keylen;               /* key length in bytes */
 /* NB: 128-bit == 16, 40-bit == 8!
	 * If we want to support 56-bit, the unit has to change to bits
	 */
 u8_t bits;                 /* MPPE control bits */
 u16_t ccount;              /* 12-bit coherency count (seqno)  */
 u16_t sanity_errors;       /* take down LCP if too many */
 unsigned int stateful :1; /* stateful mode flag */
 unsigned int discard  :1; /* stateful mode packet loss flag */
} ppp_mppe_state;
/*
 * State for an MPPE (de)compressor.
 */