struct sock_fprog pass_filter; /* filter for packets to pass */
struct sock_fprog active_filter;/* filter for pkts to reset idle */
#endif /* CONFIG_PPP_FILTER */
-+ int comp_pad; /* padding for compressor (MPPE) */
++ int xpad; /* ECP or CCP (MPPE) transmit padding */
};
/*
-@@ -531,6 +533,10 @@
+@@ -531,6 +533,8 @@
if (get_user(val, (int *) arg))
break;
- ppp->mru = val;
-+ if (ppp->mru > ppp->mru_alloc)
-+ ppp->mru_alloc = ppp->mru;
-+ else if (ppp->mru < PPP_MRU)
-+ ppp->mru_alloc = PPP_MRU; /* shrink to minimum */
+- ppp->mru = val;
++ ppp->mru_alloc = ppp->mru = val;
++ if (ppp->mru_alloc < PPP_MRU)
++ ppp->mru_alloc = PPP_MRU; /* increase for broken peers */
err = 0;
break;
-@@ -1006,8 +1012,8 @@
+@@ -1006,8 +1010,8 @@
/* try to do packet compression */
if ((ppp->xstate & SC_COMP_RUN) && ppp->xc_state != 0
&& proto != PPP_LCP && proto != PPP_CCP) {
- new_skb = alloc_skb(ppp->dev->mtu + ppp->dev->hard_header_len,
- GFP_ATOMIC);
+ new_skb = alloc_skb(ppp->dev->mtu + ppp->dev->hard_header_len
-+ + ppp->comp_pad, GFP_ATOMIC);
++ + ppp->xpad, GFP_ATOMIC);
if (new_skb == 0) {
printk(KERN_ERR "PPP: no memory (comp pkt)\n");
goto drop;
-@@ -1019,15 +1025,28 @@
+@@ -1019,15 +1023,28 @@
/* compressor still expects A/C bytes in hdr */
len = ppp->xcomp->compress(ppp->xc_state, skb->data - 2,
new_skb->data, skb->len + 2,
- ppp->dev->mtu + PPP_HDRLEN);
-+ ppp->dev->mtu + ppp->comp_pad
++ ppp->dev->mtu + ppp->xpad
+ + PPP_HDRLEN);
if (len > 0 && (ppp->flags & SC_CCP_UP)) {
kfree_skb(skb);
}
}
-@@ -1515,14 +1534,15 @@
+@@ -1515,14 +1532,15 @@
int len;
if (proto == PPP_COMP) {
if (len < 0) {
/* Pass the compressed frame to pppd as an
error indication. */
-@@ -1949,6 +1969,20 @@
+@@ -1949,6 +1967,20 @@
ppp_xmit_unlock(ppp);
err = 0;
}
+ * but that seems inefficient compared to this
+ * little trick.
+ */
-+ ppp->comp_pad = MPPE_PAD;
++ ppp->xpad = MPPE_PAD;
+ else
-+ ppp->comp_pad = 0;
++ ppp->xpad = 0;
} else {
ppp_recv_lock(ppp);
-@@ -2229,6 +2263,7 @@
+@@ -2229,6 +2261,7 @@
ppp->file.index = unit;
ppp->mru = PPP_MRU;