The patch titled

     ppp_mppe: add PPP MPPE encryption module (update)

has been added to the -mm tree.  Its filename is

     ppp_mppe-add-ppp-mppe-encryption-module-update.patch

Patches currently in -mm which might be from [EMAIL PROTECTED] are

ppp_mppe-add-ppp-mppe-encryption-module.patch
ppp_mppe-add-ppp-mppe-encryption-module-update.patch
ipmi-oem-flag-handling-and-hacks-for-some-dell-machines.patch
ipmi-clean-up-versioning-of-the-ipmi-driver.patch



From: Matt Domsch <[EMAIL PROTECTED]>

This patch implements the Microsoft Point-to-Point Tunnelling Protocol
kernel module, with minor changes to ppp_generic to have it drop
packets if they are not compressed/decompressed properly.  This adds a
new ppp flag SC_MUST_COMPRESS which will be set by pppd upon CCP UP
with MPPE enabled.

Signed-off-by: Matt Domsch <[EMAIL PROTECTED]>
Cc: Paul Mackerras <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
---

 drivers/net/ppp_generic.c |   19 +++++++++++++------
 drivers/net/ppp_mppe.c    |   10 +++++-----
 drivers/net/ppp_mppe.h    |    3 +--
 include/linux/if_ppp.h    |    9 +++++++--
 include/linux/ppp-comp.h  |   11 +++--------
 5 files changed, 29 insertions(+), 23 deletions(-)

diff -puN 
drivers/net/ppp_generic.c~ppp_mppe-add-ppp-mppe-encryption-module-update 
drivers/net/ppp_generic.c
--- 25/drivers/net/ppp_generic.c~ppp_mppe-add-ppp-mppe-encryption-module-update 
Wed Aug 17 16:04:37 2005
+++ 25-akpm/drivers/net/ppp_generic.c   Wed Aug 17 16:04:37 2005
@@ -137,13 +137,14 @@ struct ppp {
 
 /*
  * Bits in flags: SC_NO_TCP_CCID, SC_CCP_OPEN, SC_CCP_UP, SC_LOOP_TRAFFIC,
- * SC_MULTILINK, SC_MP_SHORTSEQ, SC_MP_XSHORTSEQ, SC_COMP_TCP, SC_REJ_COMP_TCP.
+ * SC_MULTILINK, SC_MP_SHORTSEQ, SC_MP_XSHORTSEQ, SC_COMP_TCP, SC_REJ_COMP_TCP,
+ * SC_MUST_COMP
  * Bits in rstate: SC_DECOMP_RUN, SC_DC_ERROR, SC_DC_FERROR.
  * Bits in xstate: SC_COMP_RUN
  */
 #define SC_FLAG_BITS   (SC_NO_TCP_CCID|SC_CCP_OPEN|SC_CCP_UP|SC_LOOP_TRAFFIC \
                         |SC_MULTILINK|SC_MP_SHORTSEQ|SC_MP_XSHORTSEQ \
-                        |SC_COMP_TCP|SC_REJ_COMP_TCP)
+                        |SC_COMP_TCP|SC_REJ_COMP_TCP|SC_MUST_COMP)
 
 /*
  * Private data structure for each channel.
@@ -1032,8 +1033,10 @@ pad_compress_skb(struct ppp *ppp, struct
 {
        struct sk_buff *new_skb;
        int len;
-       int new_skb_size = ppp->dev->mtu + ppp->xcomp->comp_skb_extra_space + 
ppp->dev->hard_header_len;
-       int compressor_skb_size = ppp->dev->mtu + 
ppp->xcomp->comp_skb_extra_space + PPP_HDRLEN;
+       int new_skb_size = ppp->dev->mtu +
+               ppp->xcomp->comp_extra + ppp->dev->hard_header_len;
+       int compressor_skb_size = ppp->dev->mtu +
+               ppp->xcomp->comp_extra + PPP_HDRLEN;
        new_skb = alloc_skb(new_skb_size, GFP_ATOMIC);
        if (!new_skb) {
                if (net_ratelimit())
@@ -1068,6 +1071,7 @@ pad_compress_skb(struct ppp *ppp, struct
                 */
                if (net_ratelimit())
                        printk(KERN_ERR "ppp: compressor dropped pkt\n");
+               kfree_skb(skb);
                kfree_skb(new_skb);
                new_skb = NULL;
        }
@@ -1160,7 +1164,7 @@ ppp_send_frame(struct ppp *ppp, struct s
        /* try to do packet compression */
        if ((ppp->xstate & SC_COMP_RUN) && ppp->xc_state != 0
            && proto != PPP_LCP && proto != PPP_CCP) {
-               if (!(ppp->flags & SC_CCP_UP) && ppp->xcomp->must_compress) {
+               if (!(ppp->flags & SC_CCP_UP) && (ppp->flags & SC_MUST_COMP)) {
                        if (net_ratelimit())
                                printk(KERN_ERR "ppp: compression required but 
down - pkt dropped.\n");
                        goto drop;
@@ -1586,6 +1590,9 @@ ppp_receive_nonmp_frame(struct ppp *ppp,
            && (ppp->rstate & (SC_DC_FERROR | SC_DC_ERROR)) == 0)
                skb = ppp_decompress_frame(ppp, skb);
 
+       if (ppp->flags & SC_MUST_COMP && ppp->rstate & SC_DC_FERROR)
+               goto err;
+
        proto = PPP_PROTO(skb);
        switch (proto) {
        case PPP_VJC_COMP:
@@ -1715,7 +1722,7 @@ ppp_decompress_frame(struct ppp *ppp, st
                goto err;
 
        if (proto == PPP_COMP) {
-               ns = dev_alloc_skb(ppp->mru + 
ppp->rcomp->decomp_skb_extra_space + PPP_HDRLEN);
+               ns = dev_alloc_skb(ppp->mru + PPP_HDRLEN);
                if (ns == 0) {
                        printk(KERN_ERR "ppp_decompress_frame: no memory\n");
                        goto err;
diff -puN drivers/net/ppp_mppe.c~ppp_mppe-add-ppp-mppe-encryption-module-update 
drivers/net/ppp_mppe.c
--- 25/drivers/net/ppp_mppe.c~ppp_mppe-add-ppp-mppe-encryption-module-update    
Wed Aug 17 16:04:37 2005
+++ 25-akpm/drivers/net/ppp_mppe.c      Wed Aug 17 16:04:37 2005
@@ -1,6 +1,6 @@
 /*
- * ppp_mppe_compress.c - interface MPPE to the PPP code.
- * This version is for use with Linux kernel 2.2.19+, 2.4.18+ and 2.6.2+.
+ * ppp_mppe.c - interface MPPE to the PPP code.
+ * This version is for use with Linux kernel 2.6.14+
  *
  * By Frank Cusack <[EMAIL PROTECTED]>.
  * Copyright (c) 2002,2003,2004 Google, Inc.
@@ -32,6 +32,8 @@
  *
  *
  * Changelog:
+ *      08/12/05 - Matt Domsch <[EMAIL PROTECTED]>
+ *                 Only need extra skb padding on transmit, not receive.
  *      06/18/04 - Matt Domsch <[EMAIL PROTECTED]>, Oleg Makarenko <[EMAIL 
PROTECTED]>
  *                 Use Linux kernel 2.6 arc4 and sha1 routines rather than
  *                 providing our own.
@@ -679,9 +681,7 @@ static struct compressor ppp_mppe = {
        .incomp         = mppe_incomp,
        .decomp_stat    = mppe_comp_stats,
        .owner          = THIS_MODULE,
-       .comp_skb_extra_space = MPPE_COMPRESS_PAD,
-       .decomp_skb_extra_space = MPPE_DECOMPRESS_PAD,
-       .must_compress  = 1,
+       .comp_extra     = MPPE_PAD,
 };
 
 /*
diff -puN drivers/net/ppp_mppe.h~ppp_mppe-add-ppp-mppe-encryption-module-update 
drivers/net/ppp_mppe.h
--- 25/drivers/net/ppp_mppe.h~ppp_mppe-add-ppp-mppe-encryption-module-update    
Wed Aug 17 16:04:37 2005
+++ 25-akpm/drivers/net/ppp_mppe.h      Wed Aug 17 16:04:37 2005
@@ -1,5 +1,4 @@
-#define MPPE_COMPRESS_PAD       8       /* MPPE growth per frame */
-#define MPPE_DECOMPRESS_PAD   128
+#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 */
diff -puN include/linux/if_ppp.h~ppp_mppe-add-ppp-mppe-encryption-module-update 
include/linux/if_ppp.h
--- 25/include/linux/if_ppp.h~ppp_mppe-add-ppp-mppe-encryption-module-update    
Wed Aug 17 16:04:37 2005
+++ 25-akpm/include/linux/if_ppp.h      Wed Aug 17 16:04:37 2005
@@ -21,7 +21,7 @@
  */
 
 /*
- *  ==FILEVERSION 20000724==
+ *  ==FILEVERSION 20050812==
  *
  *  NOTE TO MAINTAINERS:
  *     If you modify this file at all, please set the above date.
@@ -70,7 +70,8 @@
 #define SC_LOG_RAWIN   0x00080000      /* log all chars received */
 #define SC_LOG_FLUSH   0x00100000      /* log all chars flushed */
 #define        SC_SYNC         0x00200000      /* synchronous serial mode */
-#define        SC_MASK         0x0f200fff      /* bits that user can change */
+#define        SC_MUST_COMP    0x00400000      /* no uncompressed packets may 
be sent or received */
+#define        SC_MASK         0x0f600fff      /* bits that user can change */
 
 /* state bits */
 #define SC_XMIT_BUSY   0x10000000      /* (used by isdn_ppp?) */
@@ -90,6 +91,10 @@ struct npioctl {
        enum NPmode     mode;
 };
 
+#ifndef __user
+#define __user
+#endif
+
 /* Structure describing a CCP configuration option, for PPPIOCSCOMPRESS */
 struct ppp_option_data {
        __u8    __user *ptr;
diff -puN 
include/linux/ppp-comp.h~ppp_mppe-add-ppp-mppe-encryption-module-update 
include/linux/ppp-comp.h
--- 25/include/linux/ppp-comp.h~ppp_mppe-add-ppp-mppe-encryption-module-update  
Wed Aug 17 16:04:37 2005
+++ 25-akpm/include/linux/ppp-comp.h    Wed Aug 17 16:04:37 2005
@@ -112,12 +112,7 @@ struct compressor {
        /* Used in locking compressor modules */
        struct module *owner;
        /* Extra skb space needed by the compressor algorithm */
-       unsigned int comp_skb_extra_space;
-       /* Extra skb space needed by the decompressor algorithm */
-       unsigned int decomp_skb_extra_space;
-       /* if must_compress is set, but ppp->flags != SC_CCP_UP
-        * then drop the packet */
-       unsigned int must_compress;
+       unsigned int comp_extra;
 };
 
 /*
@@ -201,8 +196,8 @@ struct compressor {
  * Definitions for MPPE.
  */
 
-#define CI_MPPE                        18      /* config option for MPPE */
-#define CILEN_MPPE             6       /* length of config option */
+#define CI_MPPE                18      /* config option for MPPE */
+#define CILEN_MPPE              6      /* length of config option */
 
 /*
  * Definitions for other, as yet unsupported, compression methods.
_
-
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to