Netdev List
 help / color / mirror / Atom feed
* Çö±ÝÀÌ ¿Í¸£¸£~~~½Ç°¨³ª´Â ´ë¹Ú Çö±Ý°í½ºÅé Æ÷Ä¿  i  nxqj mt znn jpy
From: ÀÌÀºÁ¤ @ 2005-08-14 20:40 UTC (permalink / raw)
  To: netdev

[-- Attachment #1: Type: text/html, Size: 2246 bytes --]

^ permalink raw reply

* If you are interested in brands like Microsoft, Macromedia, Adobe, Corel etc.
From: Sniff U. Militancy @ 2005-08-14 20:27 UTC (permalink / raw)
  To: Netdev

[-- Attachment #1: Type: text/plain, Size: 668 bytes --]



 http://kmupkd.primaryfe.info/?P2lUlAPxwUW7zDP

Software from well-known companies!

 Check up our pricelist. 

 Fireworks MX 2004 - $60 
 Win NT 4.0 Server - $49.95 
 MS Office 97 SR2 - $49.95 
 Director MX 2004 - $60 
 MS Office 2003 Professional (1 CD) - $89.95 
 Win 2000 Professional - $59.95 
 MS Office 2000 Premium Edition (2 CD) - $59.95 
 MS Office 2k Premium Edition (2 CD) - $59.95 
 Windows 95 - $49.95 
 Win Millenium - $59.95 
 Microsoft FileMaker 7.0 Pro - $69.95 
 Fireworks MX 2004 - $60 
 MS Office 2000 Premium Edition (2 CD Edition) - $59.95 
 Acrobat 6.0 Pro - $70 
 GoLive CS - $60 


 More info
 http://lbum.nightcapif.info/?etgPMvKsrPRyu2e


[-- Attachment #2: Type: text/html, Size: 5009 bytes --]

^ permalink raw reply

* ¡á¡á¡á¼±Âø¼ø333¸í²²¸ø¸»¸®´ÂÀ̺¥Æ®¡á¡á¡á qnsiy v
From: main @ 2005-08-14 20:21 UTC (permalink / raw)
  To: netdev

[-- Attachment #1: Type: text/html, Size: 4906 bytes --]

^ permalink raw reply

* Êàê ïåðåâîäèòñÿ cloakroom èëè dinah?
From: Ñàåä @ 2005-08-14 20:06 UTC (permalink / raw)
  To: netdev

[-- Attachment #1: Type: text/html, Size: 4304 bytes --]

^ permalink raw reply

* ±ä±ÞÀÚ±Ý 5ºÐÀ̸éÃÖ°í 5000¸¸¿ø±îÁö´ëÃâ °¡´É 100%½ÂÀÎ!!
From: Marcy Kirk @ 2005-08-14 19:17 UTC (permalink / raw)
  To: netdev

[-- Attachment #1: Type: text/html, Size: 1091 bytes --]

^ permalink raw reply

* [PATCH ppp-2.4.3] add SC_MUST_COMP flag
From: Matt Domsch @ 2005-08-14 19:05 UTC (permalink / raw)
  To: Paul Mackerras
  Cc: Jeff Garzik, akpm-3NddpPZAyC0, davem-fT/PcQaiUtIeIZ0/mPfg9Q,
	netdev-u79uwXL29TY76Z2rM5mHXA,
	Brice.Goglin-vYW+cPY1g1pg9hUCZPvPmw, james.cameron-VXdhtT5mjnY,
	pptpclient-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
In-Reply-To: <20050814141810.GC20944-XtjxT7Vmt5ZskZv2Y/7f+AC/G2K4zDHf@public.gmane.org>

(rediff with license on include/linux/if_ppp.h untouched, and I had
named the new flag SC_MUST_COMP not SC_MUST_COMPRESS)

PPP 2.4.3 patch creates the new flag SC_MUST_COMP.  This is set on
CCP UP with MPPE enabled, and never cleared.  The kernel uses this
flag to drop packets which aren't compressed/decompressed properly
when MPPE is enabled.
 
In the existing code, on SIGUSR2, CCP is renegotiated, and with MPPE
enabled, LCP (and thus the link) is taken down, so the user can't
disable MPPE after it's enabled on a link.


1) sync to kernel's include/linux/if_ppp.h copy, adding
   SC_MUST_COMP
2) add SC_MUST_COMP to include/net/if_ppp.h also
3) set SC_MUST_COMP on CCP UP

 include/linux/if_ppp.h |    5 +++--
 include/net/if_ppp.h   |    1
 pppd/ccp.c             |   15 +++++++----
 pppd/pppd.h            |    2 -
 pppd/sys-linux.c       |    6 +++-
 pppd/sys-solaris.c     |    4 +--
 6 files changed, 21 insertions(+), 12 deletions(-)


Lightly tested, review much appeciated.

Signed-off-by: Matt Domsch <Matt_Domsch-8PEkshWhKlo@public.gmane.org>

-- 
Matt Domsch
Software Architect
Dell Linux Solutions linux.dell.com & www.dell.com/linux
Linux on Dell mailing lists @ http://lists.us.dell.com

diff -urNp --exclude-from=/mdomsch2/excludes --minimal ppp-2.4.3.orig/include/linux/if_ppp.h ppp-2.4.3.ppp_mppe/include/linux/if_ppp.h
--- ppp-2.4.3.orig/include/linux/if_ppp.h	2002-12-06 01:49:15.000000000 -0800
+++ ppp-2.4.3.ppp_mppe/include/linux/if_ppp.h	2005-08-14 09:59:40.000000000 -0700
@@ -44,7 +44,7 @@
  */
 
 /*
- *  ==FILEVERSION 20000724==
+ *  ==FILEVERSION 20050812==
  *
  *  NOTE TO MAINTAINERS:
  *     If you modify this file at all, please set the above date.
@@ -93,7 +93,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?) */
diff -urNp --exclude-from=/mdomsch2/excludes --minimal ppp-2.4.3.orig/include/net/if_ppp.h ppp-2.4.3.ppp_mppe/include/net/if_ppp.h
--- ppp-2.4.3.orig/include/net/if_ppp.h	2002-12-06 01:49:15.000000000 -0800
+++ ppp-2.4.3.ppp_mppe/include/net/if_ppp.h	2005-08-13 20:08:55.000000000 -0700
@@ -66,6 +66,7 @@
 #define SC_RCV_EVNP	0x04000000	/* have rcvd char with even parity */
 #define SC_RCV_ODDP	0x08000000	/* have rcvd char with odd parity */
 #define SC_SYNC		0x00200000	/* use synchronous HDLC framing */
+#define	SC_MUST_COMP    0x00400000	/* no uncompressed packets may be sent or received */
 #define	SC_MASK		0x0fff00ff	/* bits that user can change */
 
 /*
diff -urNp --exclude-from=/mdomsch2/excludes --minimal ppp-2.4.3.orig/pppd/ccp.c ppp-2.4.3.ppp_mppe/pppd/ccp.c
--- ppp-2.4.3.orig/pppd/ccp.c	2004-11-12 18:28:15.000000000 -0800
+++ ppp-2.4.3.ppp_mppe/pppd/ccp.c	2005-08-12 11:53:31.000000000 -0700
@@ -390,7 +390,7 @@ ccp_open(unit)
     fsm *f = &ccp_fsm[unit];
 
     if (f->state != OPENED)
-	ccp_flags_set(unit, 1, 0);
+	ccp_flags_set(unit, 1, 0, 0);
 
     /*
      * Find out which compressors the kernel supports before
@@ -411,7 +411,7 @@ ccp_close(unit, reason)
     int unit;
     char *reason;
 {
-    ccp_flags_set(unit, 0, 0);
+    ccp_flags_set(unit, 0, 0, 0);
     fsm_close(&ccp_fsm[unit], reason);
 }
 
@@ -511,7 +511,7 @@ static void
 ccp_protrej(unit)
     int unit;
 {
-    ccp_flags_set(unit, 0, 0);
+    ccp_flags_set(unit, 0, 0, 0);
     fsm_lowerdown(&ccp_fsm[unit]);
 
 #ifdef MPPE
@@ -1424,8 +1424,13 @@ ccp_up(f)
     ccp_options *go = &ccp_gotoptions[f->unit];
     ccp_options *ho = &ccp_hisoptions[f->unit];
     char method1[64];
+    int must_comp = 0;
 
-    ccp_flags_set(f->unit, 1, 1);
+#ifdef MPPE
+    if (go->mppe)
+	    must_comp = 1;
+#endif
+    ccp_flags_set(f->unit, 1, 1, must_comp);
     if (ANY_COMPRESS(*go)) {
 	if (ANY_COMPRESS(*ho)) {
 	    if (go->method == ho->method) {
@@ -1458,7 +1463,7 @@ ccp_down(f)
     if (ccp_localstate[f->unit] & RACK_PENDING)
 	UNTIMEOUT(ccp_rack_timeout, f);
     ccp_localstate[f->unit] = 0;
-    ccp_flags_set(f->unit, 1, 0);
+    ccp_flags_set(f->unit, 1, 0, 0);
 #ifdef MPPE
     if (ccp_gotoptions[f->unit].mppe) {
 	ccp_gotoptions[f->unit].mppe = 0;
diff -urNp --exclude-from=/mdomsch2/excludes --minimal ppp-2.4.3.orig/pppd/pppd.h ppp-2.4.3.ppp_mppe/pppd/pppd.h
--- ppp-2.4.3.orig/pppd/pppd.h	2004-11-13 04:02:22.000000000 -0800
+++ ppp-2.4.3.ppp_mppe/pppd/pppd.h	2005-08-12 11:40:40.000000000 -0700
@@ -615,7 +615,7 @@ void tty_recv_config __P((int, u_int32_t
 				/* Configure i/f receive parameters */
 int  ccp_test __P((int, u_char *, int, int));
 				/* Test support for compression scheme */
-void ccp_flags_set __P((int, int, int));
+void ccp_flags_set __P((int, int, int, int));
 				/* Set kernel CCP state */
 int  ccp_fatal_error __P((int)); /* Test for fatal decomp error in kernel */
 int  get_idle_time __P((int, struct ppp_idle *));
diff -urNp --exclude-from=/mdomsch2/excludes --minimal ppp-2.4.3.orig/pppd/sys-linux.c ppp-2.4.3.ppp_mppe/pppd/sys-linux.c
--- ppp-2.4.3.orig/pppd/sys-linux.c	2005-07-23 08:35:09.000000000 -0700
+++ ppp-2.4.3.ppp_mppe/pppd/sys-linux.c	2005-08-12 11:37:39.000000000 -0700
@@ -1278,13 +1278,15 @@ ccp_test(int unit, u_char *opt_ptr, int 
 /********************************************************************
  *
  * ccp_flags_set - inform kernel about the current state of CCP.
+ *   Once SC_MUST_COMP is set, never clear it.
  */
 
-void ccp_flags_set (int unit, int isopen, int isup)
+void ccp_flags_set (int unit, int isopen, int isup, int must_comp)
 {
 	int x;
 
-	x = (isopen? SC_CCP_OPEN: 0) | (isup? SC_CCP_UP: 0);
+	x = (isopen? SC_CCP_OPEN: 0) | (isup? SC_CCP_UP: 0)
+		| (must_comp? SC_MUST_COMP: 0);
 	if (still_ppp() && ppp_dev_fd >= 0)
 		modify_flags(ppp_dev_fd, SC_CCP_OPEN|SC_CCP_UP, x);
 }
diff -urNp --exclude-from=/mdomsch2/excludes --minimal ppp-2.4.3.orig/pppd/sys-solaris.c ppp-2.4.3.ppp_mppe/pppd/sys-solaris.c
--- ppp-2.4.3.orig/pppd/sys-solaris.c	2004-11-04 02:02:26.000000000 -0800
+++ ppp-2.4.3.ppp_mppe/pppd/sys-solaris.c	2005-08-12 11:41:59.000000000 -0700
@@ -1633,8 +1633,8 @@ ccp_test(unit, opt_ptr, opt_len, for_tra
  * ccp_flags_set - inform kernel about the current state of CCP.
  */
 void
-ccp_flags_set(unit, isopen, isup)
-    int unit, isopen, isup;
+ccp_flags_set(unit, isopen, isup, unused_must_comp)
+    int unit, isopen, isup, unused_must_comp;
 {
     int cf[2];
 


-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf

^ permalink raw reply

* Buy Viagra Online here
From: Matty @ 2005-08-14 19:04 UTC (permalink / raw)
  To: netdev

Men's health pills - order securely online.
http://gardened.orangesweet.info/?Iranianxtvuyrascalzvpcommendations


Anybody can be good in the country. There are no temptations there. 
At least when I was govenor, cocaine was expensive.    
Some days you're the dog, some days you're the hydrant.   
Whenever people agree with me I always feel I must be wrong. 

^ permalink raw reply

* 免費公益******請大家支持*******感恩*****。
From: §K¶O¤½¯q******½Ð¤j®a¤ä«ù*******·P®¦*****¡C @ 2005-08-14 18:53 UTC (permalink / raw)
  Cc: §K¶O¤½¯q******½Ð¤j®a¤ä«ù*******·P®¦*****¡C

§K¶O¤½¯q******½Ð¤j®a¤ä«ù*******·P®¦*****¡C
*****
Åý»Ý­nªº¤H¤£¦A¨D§UµLªù /¬Û«H¬O¤@ºØºÖ³ø ¡C
******************************************************************************************************************
°ê¤º¡B¥~­«­n¬Ì±¡ ¡Ð 94¦~8¤ë9¤é¡]¸ê®ÆºI¤î®É¶¡¡G12¡G00N¡^ 

  

¨C¤é°ê»Ú¬Ì±¡¡G 

  

1.½ÞÃì²yµß·P¬V¯g¬Ì±¡¡G 

  

(1)¤¤°ê¤½¥¬8/7¤¤¤È12®É¦Ü8/8¤¤¤È12®É¡A¥|¤t¬Ù³ø§iµL·s¼W¤H·P¬V½ÞÃì²yµß¯f¯f¨Ò¡AµL·s¼W¦º¤`¯f¨Ò¡CºI¦Ü8/7¤¤¤È12®É¡A¥|¤t¬Ù²Ö­p³ø§i¤H·P¬V½ÞÃì²yµß¯f¯f¨Ò214¨Ò¡Aªv¡¥X°|89¨Ò¡A¦í°|86¨Ò¡]¯f¦M7¨Ò¡^¡A¦º¤`39¨Ò¡C8/3¦Ü¤µ¤w6¤éµL·sµo¯f¯f¨Ò¡A8/4¡B8/5¡B8/7¡B8/8§¡µL·s¼W¦º¤`¯f¨Ò¡A¸ê¶§¥«¤w11¤ÑµL·s¼W¯f¨Ò¡C7/31¼sªF­º§å¥Í²£ªº50¸U¥÷½ÞÃì²yµß¯f·À¬¡¬Ì­]¹B©è¥|¤t¡A¦Ó8/2¥Í²£ªº70¸U¥÷¬Ì­]¥¿¨üÀË¡A¥Ø«e¥[ºò¥Í²£¡A¥H´Á­º§å¬Ì­]¦b§ë©ñ«e¹F¨ì1¤d¸U¥÷¡C 

  

(2) ­»´ä½Ã¥Í¨¾Å@¤¤¤ßªí¥Ü¡A2003¦~7/1¦Ü¤µ¡A­»´ä¦@¦³18¤H·P¬V½ÞÃì²yµß¡A¥]¬A16¨k2¤k¡A¦~ÄÖ¤¶©ó26¦Ü84·³¡A¤¤¦ì¦~ÄÖ¬O59·³¡A¨C¦~­Ó®×¤Ö©ó10¥ó¡AÄݹs¬P­Ó®×¡A©¼¦¹µLÃö³s¡A¤j¦h¦b®L¤Ñµo¥Í¡A·í¤¤12¤H¦b5-8¤ëµo¯f¡A¥u¦³5¤H¬O¦]¤u§@±µÄ²½Þ¦×¦Ó·P¬V¡C18¦W±wªÌ¤¤¡A1¤H¤´¦í°|¡B1¤H¦º¤`¡A¨ä¾l³£¤w¥X°|¡C 

  

2. ¸V¬y·P¬Ì±¡¡G 

  

(1)´CÅé8/6³ø¾É¡A«Xù´µ·s¼W¶k¤ì´µ§J©M®wº¸·F2¦{¥X²{¸VÃþ¸V¬y·P¬Ì±¡¡A³y¦¨4,000¦h°¦®a¸V¦º¤`¡A¨´¤µ¦@¦³5¦{ªñ30­Ó§ø²ø¥X²{¬Ì±¡¡C¥ý«e¥X²{¬Ì±¡ªº·s¦è§B§Q¨È¦{¡Bªüº¸®õÃäæ°Ï©M¬î©ú¦{¤w¸g±Ä¨ú®_±þ¨ÃµI¿N®a¸Vµ¥ÄY®æ±¹¬I¥H¨¾¬Ì±¡ÂX´²¡A·s¦è§B§Q¨È¦{©M¬î©ú¦{±N¤À§O®_±þ6.5¸U°¦©M9,000°¦®a¸V¡C»P¸V¬y·P¬Ì°Ï¾Fªñªº¦a°Ï¤w¸T¤î±q¬Ì°ÏÁʶRÂû¦×µ¥¦×Ãþ²£«~¡C 

  

(2)»X¥j¥_³¡»P«Xù´µ±µÄ[ªº®wĬ¥jº¸¬Ùªü©Ô®æÃBº¸¼w¥§¿¤ªºÃBº¸»®º¸´ò¡A7¤ë©³¦Ü¤µ¤wµo²{76°¦¤ÑÃZ¤Î¤j¶­¦º¤`¡AÃÒ¹ê·P¬VA«¬¸V¬y·P¯f¬r¡C¥Ø«e¶È¦³­Ô³¾·P¬V¡A·í§½¥¿¥þ¤O±Ä¨ú±¹¬I¹w¨¾¸V¬y·P¦b®a¸V©M¬¹¯b¤¤¶Ç¼½¡C¸VÃþ«ÍÅé¤w³Q¾P·´±»®I¡A´òªy©P³ò¤]¤w®ø¬r¡A¨Ã¸T¤î¤H¯b¶i¤J´ò°Ï¡C´òªyªþªñªº28®aªª¤á¤w¥þ³¡Âà¦Ü§O³B©ñ¾i¬¹¯b¡C 

  

(3) ´CÅé³ø¾É¡A®õ°ê¯bªªÆUÃÒ¹ê¡A¤¤³¡²q¯Ç©²ªº´²¾iÀn³õ¤é«eÃzµo¸V¬y·P¡C·í§½¤w¤U¥O®_±þ¸Ó¾i´Þ³õ¤º1,700¦h°¦Àn¡A¦P®É¶i¦æ¬Ì½Õ¡AÀËÅé¤w©ó7¤ë¤¤¦¯°eÅç¡C 

  

(4 ´CÅé³ø¾É¡A¤é¥»ºÖ®q¿¤¦b¤ÆÅ翤¤º¤@®a¾iÂû³õªºÂû¦å²M®É¡Aµo²{§e¸V¬y·P¯f¬r¶§©Ê¤ÏÀ³¡C¯f¬r¤À«¬ÀË´ú¤¤¡A¹w­p2¤é«á·|¦³µ²ªG¡C 

  

3. ÀN¶Ã¬Ì±¡¡G 

  

­»´ä½Ã¥Í¨¾Å@¤¤¤ßÃÒ¹ê8/8¤µ¦~²Ä3¨ÒÀN¶Ã­Ó®×¡A±wªÌ¬O25·³¦L¥§Äy¤k¶Ä¡A8/3µo¯f¡A8/5¥Ñ¦L¥§©è¹F­»´ä¡A¤J°|³QÅç¥XÀN¶Ã©·µßO1¤p¤t«¬¡C¤µ¦~²Ö­p³q³ø3¨ÒÀN¶Ã¡A¥»¤g¯f¨Ò©M¹Ò¥~²¾¤J¦U1¨Ò¡A¥t1¨Ò¦³«Ý¤ÀÃþ¡C 

  

4.°h¥î­x¤H¯g¬Ì±¡¡G 

  

­»´ä½Ã¥Í¨¾Å@¤¤¤ßÃÒ¹ê1¨Ò°h¥î­x¤H¯g­Ó®×¡A±wªÌ¬°©~¦í¦b¤¸®Ôªº53·³¨k©Ê¡A8/3¦í°|¡A±¡ªp¦M¬p¡C­»´ä¤µ¦~²Ö­p³q³ø4¨Ò°h¥î­x¤H¯g¡A¨ä¤¤2¨Ò¬°¥»¤g¯f¨Ò¡A2¨Ò¦³«Ý¤ÀÃþ¡C 

  

5.°Æ¬y¦æ©Ê·P«_¬Ì±¡¡G 

  

­»´äªF°ÏÂå°|1­Ó¨à¬ì¯f©Ð¦³6¦W¯fµ£©M1¦W¯f©Ð¾­û¹ï²Ä1«¬°Æ¬y¦æ©Ê·P«_¯f¬rÀË´ú§e¶§©Ê¤ÏÀ³¡A6¦W¯fµ£¦~ÄÖ¤¶©ó5­Ó¤ë¦Ü3·³¤j¡A¨ä¤¤2¤H¤w¥X°|¡A4¤H¤´¦b¹jÂ÷ªvÀø¤¤¡C 

  

6. ¨Fªù¤óµß¯g¬Ì±¡¡G 

  

¦è¯Z¤ú7¤ë¤U¦¯Ãzµo¾ú¨Ó³ÌÄY­«¨Fªù¤óµß·P¬V¬Ì±¡¡A¸Ó°ê½Ã¥Í³¡¤½§G8/6¤î¦@±µÀò¦U¦a³q³ø2,055¨Ò¯f¨Ò¡]¤j¦h¥X²{»´·L¸z­Gª¢¯gª¬¡^¡A§t1¨Ò¦º¤`ªººÃ¦ü¯f¨Ò¡]90·³¨k©Ê¡A8/2¦º¤`¡^¡A¤´¦³41¨Ò¦í°|¶Eªv¤¤¡C¬Ì±¡»P1®a­¹«~¤½¥q¥X²£ªºPimpollo¤ÎSada 2­ÓµP¤lªº¯uªÅ¥]¸Ë¯NÂû¦³Ãö¡C 

  

7.  SARS¬Ì­]¡G 

  

¤¤°ê¬ã»sªº¡u¤H¥ÎSARS¯f¬r·À¬¡¬Ì­]¡v¶i¤JÁ{§É¸ÕÅç¶¥¬q¡A9¦ì¬ì¬ã¤H­ûª`®g¬Ì­]«á¸g©â¦åºÊ´ú¡A¥¼¥X²{¥ô¦ó¤£¨}¤ÏÀ³¡A¦å²G¤¤¤]²£¥Í§ÜÅé¡A¬Ì­]¦³®Ä´Á©µªø¨ì3¦~¡C 

  
 
************************************************************************************************************
´I¿A¤ì¤u¸Ë¿X ´£¨Ñ 
http://www.ykk.idv.tw/ ¥xÆW¦æµ½ºô´£¨Ñ¤W²M¤U½¬©~¤h·q¤W
http://home.kimo.com.tw/skvsbmw/index.html
**************************************************************************
 *********************************************************************
**************************** *¬Û«H¬O¤@ºØºÖ³ø ¤­¦æ«Cµæ´ö¬O¤é¥»²Ó­M¾ÇÅv«Â¥ß¥Û
©M³Õ¤h¯Ó¤T¤Q¾l¦~®É¶¡¡A¬ã¨s¥X¥H¤­ºØ¦¨¥÷¡A¤À§O¬OÅÚ½³¡BÅÚ½³¸­ ¡B¬õÅÚ½³¡B¤û㮡B
­»Û£µ¥¤­ºØ©Ê½è¤£¦P¤§½­µæ¡A«ö·Ó¤@©wªº¤ñ¨Ò½Õ°t¦Ó¦¨¡C¦] ¬°¤­ºØ§÷®Æ¾i¥÷¤£­«Å|¡A
¹F¨ì¤FÀç¾iÂ×´I´Xªñ§¡¿Å¤§¥Øªº¡C °·±dªº¨­Åé­º¥ý­n­«µø¶¼­¹¤Î¹B°Ê¡C¥Ø«e§Ú­Ì¦b¶¼
­¹¤è­±±`±`©¿µø°Êª«©Ê»P´Óª«©Ê­¹«~¡A¦b­G¤º®ø¤Æ¦¨¡u»Ä¡v ¡uÆP¡v©Ê ¤£§¡¿Å²{¶H¡C²{
¥NªÀ·|¥Í¬¡ºò±i¡A¤u§@¦£¸L¡B¥æ»ÚÀ³¹S¡B³¤°s¡B¦×­¹¡B¨Å³J»Ä¹L¦hªÌ¡AÅé½è¤j³£°¾¦V©ó
»Ä©Ê¡A ¦Ó»Ä©ÊÅé½è¬°¸U¯f¤§·½¡C ¡@¡@¸g¹L¬ü¤éÂå¾Ç¬ÉÀç¾i¾Ç±M®a¬ã¨s¡Aµo²{­¹ª«¶i¤J
­G¤º¡A¨ä¤Æ¾ÇÅܤơA­n¦³80%¬°ÆP©Ê¤Î20%¬°»Ä©Ê¤~¯à¹F¨ì§¡¿Å¦³¯q¤HÅé²Ó­M¾÷¯à¡C ¡@
¡@¦h­¹½­ªG¡A¥i¥H³vº¥½Õ¾ãÅé½è¦Ü·LÆP©Ê¡C¥Ø«eµo²{½­µæÃþ¨ã¦³°ª¤ñ­ÈÆP©ÊªÌ­p¦³¥ÕÅÚ
½³¬° 9.3¡A¬õÅÚ½³¬° 8.2¡A¤û㮬° 8.0¡A ³o¨Ç­¹ª«¦b¤HÅ餺®ø¤Æ«á¡A¨ã¦³ºû«ù°·±dµ¥
¥\®Ä¡C ¡·¤­¦æ«Cµæ´ö ¨­¤ß°·±d¬O¥Í©R»P¬¡¤Oªº¬u·½¶Ç¾\¡B§U¦L¤­¦æ«Cµæ±Ï©R´ö¥[´f¥L
¤H ¡B¥\¼wµL¶q¡C ¦³¯fªv¯f¡AµL¯f°·¨­¡C ¦n®Ñ¤j®a¬Ý¡A¦n¨Æ¤j®a°µ¡C Ä@±N¦¹¥\¼w¡A°j
¦V¦LÃØªÌ¡C ¡·³±¶§ ¦t©z¦³¤é¤ë¡A¸Uª«¤À³±¶§¡A³±¶§½Õ©M¬°¸Uª«¤§¥Í¦sªk«h; ¼É¶¼°¾
­¹¡A³ß­¹«B¦×¡A¹½±ó½­µæ¡A³±¶§¥¢½Õ ¹H¤Ïªk«h;Åé½è°¾»Ä¡A¯fµh¤ß·Ð¡A¯e¯fÄñ¨­¡AÀù¯g
¹Ü»î¡A°ß¦³¦¹´ö¡A ±Ï©R¥\¦Ú¡C ¡·¤­¦æ §Ú­Ì¥Í¬¡Àô¹ÒªÅ¶¡¤¤¦³¤­ºØÄݩʤ£¦Pªº§ÎºA-
¤ì¡B¤õ¡B¤g¡Bª÷¡B¤ô¡C ¦a²y¦]¦³¤­¦æ¡A¤~¯à¥¥¨|¥Í©R¡C¬ì¾Ç®a¨ì¥Ø«eÁÙµLªk¦b¦t©zªº
¨ä¥¦¬P²y¤W§ä¨ì¥Í©R¡A ­ì¦]¬O¨ä¥¦ªº¬P²y¨S¦³¤­¦æ¡C¤­¦æ¥¥¨|¤F¥Í©R¡A¤­¦æ§ó»P°·±d
®§®§¬ÛÃö¡C ¤­¦æ«Cµæ´ö¬O¤é¥»²Ó­M¾Ç³Õ¤h¥ß¥Û©M¥ý¥Í¡A¥H¦t©z³±¶§¤§²{¶H©M¦ÛµM¬É³o
¤­ºØ§ÎºA»P¤­¦â¡A «C¡B¬õ¡B¶À¡B¥Õ¡B¶Â¡A»P¤­Å¦¡A¤ß¡B¨x¡BµÊ¡BªÍ¡BµÇ¡A¤§Ãö«Y°µ¬°
²z½×»P¬ã¨s¤§°ò¦¡A ¥H¤­ºØ¦¨¥÷ÃC¦â§¹¥þ¤£¦P¤§½­µæ½Õ°t¦Ó¦¨¡A§ó¦]¬°¤­¦â¤À¶}¾i¥÷
¤£Å|¡A¦Ó¹F¨ìÀç¾i§¡¿Å¤§¥Øªº¡A ¦]¤­¦æÂI¤@¤Þ°_¥Íª«¤Æ¾Ç§@¥Î¡A¦Ó²£¥Í¤F¤£¥i«äijªº
¯«©_¤O¶q¡C
****************************************************************************
************************ ¦Û¤v°µ³Ì¦w¥þ¥i¾a ¡·«Cµæ´öªº§@ªk °ò¥»§÷®Æ ¥÷¶q(¤G¤é
¥÷) ÅÚ½³ ¤@¤ç~¤ç¥| ÅÚ½³¸­ ¥b¤ç~¤Q¨â ¬õÅÚ½³ ¥b¤ç~¤Q¨â ¤ûã® ¤»¨â~¤K¨â ­»Û£ ¤T
¤ù~¤­¤ù(¥Î¤Ó¶§Åபº¡A¦p¶R¤£¨ì½Ð¥Î¥Íªº¦Û¤v°®Àê¡A©Î¥H¥«³cªÌ¦A«×ÅΤӶ§¦Ó¥ÍVIT.
D) 1. «Cµæ­n³s¥Ö¤Á¡C 2. ©ñ«Cµæ¶qªº¤T­¿¤ô¡C 3. ¤ôµN¶}«á¥Î¤p¤õµN¤G¤p®É¡C 4. ´ö
·í°µ¯ù³Ü¡C 5. ³Ü¤£§¹ªº´ö¥i¥Î©ó¨ýäø´ö¡B²M´ö©ÎÄѤ¤¡C 6. ¬Ö®â¤ºªº¯ó¤ì§Ö¬\µä®É¡A
±N«Cµæ´ö¼å¦b¨ä©P³ò¡A·|¦^´_¤¸®ð¡C ¡·ÁW¦Ì¯ùªº§@ªk ¡µÁW¦Ì¤@¦X(180C.C¤@¸J)¤ô¤K¦X
(¤K¸J) 1.¥ÎÀáªgªoªºÁç¡A§âÁW¦Ì½ª£¦Ó¤£­nÃzµõªºª£¦Ó¶À½Å¦â¬°¤î¡C 2.¦P®É¦bÁ礤©ñ
¤H¸J¤ôµN¶}«á©ñ¶iª£¹LªºÁW¦Ì°¨¤W°±¤õ¡C 3.­ì«Ê¤£°Ê©ñ¤­¤ÀÄÁ¡C 4.±NÁW¦Ì¹LÂo«á·í¯ù
³Ü¡C ¡µ¤G¦¸¯ùªº§@ªk ¦P¼Ëªº¤K¸J¤ô¡AµN¥U«á©ñ¶i¤W°O¹L Âo«áªº²Ä¤@¦¸¯ùÁW¦Ì´í¤l¡A
ÀH§Y±N¤õÃö¤p¬ùµN¤­¤ÀÄÁ¡A°ª¤ÀÄÁ«á»P«e°O¦P¡A¥Îºô¤l¹LÂo¡C¤@¸ò¤G«e¯ù²V¦XµÛ³Ü¤]¥i
¥H¡C ¡·¤î«yÃĪº§@ªk §÷®Æ:¤@¡B¸Á»e ¤G¡BÅÚ½³(³s¥Ö) ÅÚ½³·Ó¸Á»eªº°ª«×ªº¤À¶q¤Á¦¨
Áû²É(¬ù¶À¨§¤j¤p)©ñ¶i¸Á»e²~¤º¡C ¤j¬ù¤G­Ó¤p®É¸Á»e·»¸ÑÅܤô¤@¯ë¡C µM«á±N¦¹¥Ä¤@¤j
´ö°Í­Ë¤J¬Á¼þªM¤H¡A¥Î·Å¶}¤ô¨R²H¡A¤@¤Ñ³Ü¥|~¤­¦¸¡C¹j¤Ñ¥ª¥k«y¹Â·|°±¤î¡C
****************************************************************************
*************** ª`·N¨Æ¶µ********* 1.¶¼¶q¨Ì¯f±¡¦ÓÅÜ¡C 2.ÁW¦Ì¯ùµ´¹ï¤£­n»P³J¥Õ
½èµ¥²V¦X¤@°_³Ü¡C 3.«Cµæ´ö»PÁW¦Ì¯ù¤£­n¦P®É³Ü¡C¦]®ÄªG·|´î¥b¡A½Ð°È¥²¿í¦u(¶¡¹j­n
¤Q¤­¤ÀÄÁ¥H¤W) 4.¤£­n¤p¬Ý¬O«Cµæ´ö¡CµW·ã¡BÅK¬tÀs(»E¥|¬t¤Aµ}ÅÖºû)¥[¤u¹LªºÁç½Ðµ´
¹ï¤£­n¥Î¡C¦]µW­¦¡BÅK ¬tÀs¬O ·|·»¸Ñªº¡C 5.¤£­n²V¦X¨ä¥LÃįó¡B´Óª«µ¥¡A§_«h¦³®É
·|Åܦ¨¼@¬r¡C 6.°ò¥»¥óªk¥H¥~ªº§÷®Æ¡Aµ´¹ï¤£­n©ñ¶i¥h¡C 7.µL½×¤°»ò¯f¯g¡AªA¥Î«áÅé
·Å·|»P¤@¯ë¤H¤£¦P¡A¤@®É·|¤U­°¤@ÂI¡C·P«_ªº¾÷·|·|´î¤Ö¡A§ó¤£¥² ¾á¤ßµo¼ö¡C 8.µÇŦ
¯fªº¤H½Ð¥Î¥t¤è-½Ð°Ñ¾\¤¸¯ª½­µæ´ö±j°·ªk(®Ñ§½¦³°â)¡C 9.³Ü¤F«Cµæ´ö¡A°s¶q©úÅ㪺·|
¼W±j¡C³Ü«Cµæ´ö¤@­Ó±ä«ô«á®ÄªG·|Åã²{¥X¨Ó¡A¦P®É¤£·|±J¾K¡A³Ü °s½Ð¾A¥i¦Ó¤î¡C 10.
¤k©Ê»P¦~ÄÖµLÃö¡A¦³«Ü¦h¤H³Ü¤F «Cµæ´ö«á«ì´_¥Í²z¡C¥Ø«e¦³¤@¦ì¤K¤Q¤@·³ªº¦~ªøªÌ¦o
ªº¥Í ²z«ì´_¦³¤@¦~¥b¤§¤[¡A¦Ó¥B¤@¤Ñªº»~®t¤]¨S¦³¡C 11.¤k©Ê¥Í²zªº±¡§Î¡A³Ü«Cµæ´ö
«e»P³Ü¹L¥|­Ó¤ë°_¡A¦]·sÂ¥Ͳzªº§ó·s(Âà´«)¶}©l·|¦³¤@­Ó¤ë¨Ó ¤G¦¸ªº²{¶H¡Aµ´«D²§
ª¬¡A¨ä«á·|¨C­Ó¤ë·Ç®Éªº¨Ó¤@«e¡A©w´Á¦Ó¨Ó¡C ´I¿A¤ì¤u¸Ë¿X ´£¨Ñ
http://www.ykk.idv.tw/ ¥xÆW¦æµ½ºô´£¨Ñ¤W²M¤U½¬©~¤h·q¤W
http://home.kimo.com.tw/skvsbmw/index.html
****************************************************************************

´I¿A¤ì¤u¸Ë¿X ´£¨Ñ
http://www.ykk.idv.tw/
************** Subject: ªø©°Âå°|³Â·Ð±z±N³o­Ó®ø®§forward¥X¥h] > > > ªø©°Âå°|
±µ¨ü¤ý¥Ã¼y¸³¨Æªø®½ÃؤG»õ¤¸¡AÁʸm¤H¤u¹q¤l¦Õ¡A > > > > > > ¹Å´f¥¢Áo¥Á²³¡F¦pªG
§Aªº¦P¨Æ©ÎªB¤Í·í¤¤¦³³o¤è­±ªº»Ý¨D¡A > > > ½Ð»Pªø©°Âå°|³sµ¸¡F©Ò¦³¥Ó½Ðªº­Ó®×¡A
> > > > > > > > > ªø©°Âå°|±N©e¥ÑªÀ·|ªA°È³B¡A¨Ì¥Ó½Ð¤H®a®x¤§¸gÀÙª¬ªp¡A > > >
µû¦ô¨ä¸É§UªºÃB«×¡A¥H½T¹ê¹Å´f¥Á²³¡I > > > > > > > > > ªø©°Âå°|Ápµ¸¤H¬OªL´f¬Ã
¤p©j > > > Ápµ¸¹q¸Ü¡G03-328-1200¤À¾÷2064 > > > °|¤º©I¥s¾¹¡G4550 > > > > > >
³Â·Ð±zºÉ¶q¦aForwardµ¹§Aªº¤Í¤H¡I > > > > > > > > > > > PS¡G¦³¨Ç¥¢Áoªº¤pªB¤Í¦b
¸Ë¤F¤H¤u¹q¤l¦Õ«á¡A³vº¥¸É§ì¨ì¬ü§®ªºÁn­µ¡A > > > ¥­¿Å·P¤]¶i¨B¤F¡F´²¼½§Aªº¼ö¤ß
»P¼ö¸Û¡AÅý¤H¶¡¦³·R¡C
 **********************************************************************************
 ´I¿A¤ì¤u¸Ë¿X ´£¨Ñ http://www.ykk.idv.tw/ ¥xÆW
¦æµ½ºô´£¨Ñ¤W²M¤U½¬©~¤h·q¤W http://home.kimo.com.tw/skvsbmw/index.html SARS¤£
°h­»¿¼/ ¦Ëµ«/»ù®æª½º¦ ¶Ç¨¥¦Y­»¿¼/ ¦Ëµ«/¨¾¢á¢Ï¢à¢á¡A¨Ï±o­»¿¼/ ¦Ëµ«/¦æ±¡¬Ý«N
****************************************************************************
***************************** Ä@±N¦¹¡y¯ë­Yªiù±K¦h¤ß¸g¡z°j¦Vµ¹©Ò¦³ªk¬É²³¥Í¡A
Ä@¤j®a³£¯à²ß±o¤ß¸g¡A¨Ã¥H¤ß¸g«ä·Q¬°¤@¤Á¦æ¬°ªº·Ç«h¡C Ä@¤j®a³£¯à¥@¨Æ¶¶¤ß¡Bªk³ß
¥Rº¡¡B´¼¼z¼s¶}¡B¥­¦w³ß¼Ö¡C
----------------------------------------------------------------------------
---- ¯ë­Yªiù±K¦h¤ß¸g Æ[¦Û¦bµÐÂÄ¡A¦æ²`¯ë­Yªiù»e¦h®É¡A·Ó¨£¤­Ä­¬ÒªÅ¡A´ç¤@¤Á­W
¤Ì¡C ªÙ§Q¤l¡A¦â¤£²§ªÅ¡AªÅ¤£²§¦â¡A¦â§Y¬OªÅ¡AªÅ§Y¬O¦â; ¨ü¡B·Q¡B¦æ¡BÃÑ¡A¥ç´_¦p
¬O¡CªÙ§Q¤l¡A¬O½ÑªkªÅ¬Û¡A ¤£¥Í¡B¤£·À¡A¤£«¯¡B¤£²b¡A¤£¼W¡B¤£´î;¬O¬GªÅ¤¤µL¦â¡A
µL ¨ü¡B·Q¡B¦æ¡BÃÑ¡AµL²´¡B¦Õ¡B»ó¡B¦Þ¡B¨­¡B·N¡A µL¦â¡BÁn¡B­»¡B¨ý¡BIJ¡Bªk;µL²´
¬É¡A¤D¦ÜµL·NÃѬɡA µLµL©ú¡A¥çµLµL©úºÉ¡A¤D¦ÜµL¦Ñ¦º¡A¥çµL¦Ñ¦ººÉ; µL­W¡B¶°¡B
·À¡B¹D¡AµL´¼¥çµL±o¡C¥HµL©Ò±o¬G¡AµÐ´£ÂÄØ¦¡A ¨Ì¯ë­Yªiù±K¦h¬G¡A¤ßµLÖñê¡AµLÖñ
ê¬G¡A µL¦³®£©Æ¡A »·Â÷ÄA­Ë¹Ú·Q¡A¨s³º¯Iºn¡C ¤T¥@½Ñ¦ò¡A¨Ì¯ë­Yªiù±K¦h¬G¡A±oªü
¿®¦hù¤TÂÆ¤TµÐ´£¡A ¬Gª¾¯ë­Yªiù»e¦h¡A¬O¤j¯«©G¡A¬O¤j©ú©G¡A¬OµL¤W©G¡A¬OµLµ¥µ¥
©G¡A ¯à°£¤@¤Á­W¡A¯u¹ê¤£µê¡C ¬G»¡¯ë­Yªiù»e¦h©G¡A§Y»¡©G¤ê¡G¡u´¦¿Í´¦¿Í¡Aªiù´¦
¿Í¡Aªiù¹¬´¦¿Í¡AµÐ´£ÂıC¶F¡C¡v §Ú©ó¤µ¤é ¤£¦Û©õ¨­¦ýÂ÷©Ò·R ¤ß¼~·T¦Õ ....ª÷¥ú©ú
¸g
----------------------------------------------------------------------------
---- ·q½Ð¬y¶Ç¯ë­Yªiù±K¦h¤ß¸g¦Ü¦U³B§Q²³¡A¨Ãµo¤ß¹|Ū¡A¥H¨Ï¦¹¤ß¸g¼s¶Ç¸s²³¥Í¡C
¦pµo¤ß¹|Ū¡A¨Ã«Å´­¤ß¸gªÌ¡A±N¤Æ¤@¤Á¦Û¨­­W¤Ì¡C¤TÄ_§Ì¤l®¥»s¡C
************************************************************** ºô¸ô ¥[­Èµo°e
 ´I¿A¤ì¤u¸Ë¿X ´£¨Ñ http://www.ykk.idv.tw/ ¥xÆW¦æµ½ºô´£¨Ñ¤W²M¤U½¬©~¤h·q¤W
http://home.kimo.com.tw/skvsbmw/index.html ³°­x69­x***1535T Please note that
the Association is a membership organisation only and does not offer or
provide any form of legal advice, referral or information service. §Ú­Ì«OÃÒ
´£¨Ñ³ÌÀu­Èªº°Ó«~»P³Ì¦nªºªA°È¡A±zªºº¡·N´N¬O§Ú­Ìªººa©¯¡C ¡@
****************************************************************************
*********** ´¼¨¹¤½¯qÀ]¦¨¥ß©v¦® ¡@¨C¤Ñ¡A³ø³¹´CÅé¤W¡A¤@¥ó¤@¥ó¡A¤@¹õ¤@¹õªÀ·|±Ï
§U»Ý¨D¡A ´d±¡ªº¶D»¡¥Í©Rªº¯Ü®z»P¤H¥ÍªºµL±`¡AÁ`¬OÁôÁô²o°Ê§Ú­Ìªº¼¦¼§¤ß¡F ¬Û¹ï©ó
¨º¨Ç¦]¸gÀÙ°ÝÃD©Î³y¤Æ§Ë¤Hªº´d­W¬G¨Æ¡AÁٯ७¦w¦Û³Bªº§Ú­Ì¡A ¤ß¦s·P®¦¡C¦]¦¹¡A§Ú
­ÌµoÄ@¡A¦b§Ú­Ì·PÁÂ¥­¦w©¯ºÖªº¦P®É¡A ¤]¯à°÷¹ï³o¶ô¼°·Rªº¤g¦a¡A¹ï¨º¨Ç§Ú­Ì»{ÃÑ©Î
¤£»{ÃѪº¤H­Ì¡A °^Äm¤@ÂI¤ß¤O¡C ¡@¦]¦¹¡A´¼¨¹¬ì§Þ¦b2001¦~«Ø¥ß¡y´¼¨¹¤½¯qÀ]¡z
(www.e-charity.com.tw) ªººô¸ô¥­¥x¡A³z¹L´¼¨¹¦bºô¸ô³q°T»â°ìªº±M·~¡A ¥HDirect
Donation-Direct Helpªº²z©À§@¬°¥XµoÂI¡A ¾ã¦Xºô¸ô§Þ³N»PªÀ·|·Oµ½¸ê·½¡AÂǥѺô¸ô
ªºµLæ¬É¡A«Ø¥ßªÀ·|±Ï§Uºôµ¸¡C Åý»Ý­nÀ°§Uªº¤H©MÄ@·N§U¤HªÌ¯à°÷¡yª½±µ¡z³s¤W½u¡F
Åý»Ý­nªº¤H¤£¦A¨D§UµLªù¡A¤]ÅýªÀ·|ªº·R¤ß®½§U¡A ¦bºô¸ô¤W±o¨ì¨}¦nªº¼x«H¡C¦¹¥~¡A
¨C¤@­Ó¦b´¼¨¹¤½¯qÀ]´M¨DªÀ·|±Ï§Uªº­Ó®×¡A ¤]±N³z¹L±M·~ªºªÀ·|ªA°È¾÷ºc¡A´£¨Ñªø´Á
ªº¤ß²z»P¥Í¬¡ªº¨ó§U¡C ¡@´¼¨¹¤½¯qÀ]¦P®É¬O¤½¯q¸ê·½¥æ¬yªº¥­¥x¡A´£¨Ñ®z¶Õ¹ÎÅé¡BªÀ
·|ºÖ§QÅé¨tµ¥¾÷ºc¡A ³z¹Lºô¸ôªº¼s¼½³q¸ô¡A¶Ç§G¦UºØªÀ·|»Ý¨D»PªA°Èªº¸ê°T¡A¿n·¥¦³
®Äªº´M¨DªÀ·|·Oµ½¸ê·½¡A ÂÇ¥H¼sÁÜ¥ø·~¤ÎªÀ·|¤j²³¡A¦³¿ú¥X¿ú¡A¦³¤O¥X¤O¡A¦@¦PÀ°§U
©t­WµL¨Ìªº®z¶Õ±Ú¸s¡C ¡y§ÓÄ@ªA°È--Volunteer¡z¡B¡y¤À¨É°^Äm--Contribution¡z¬Oºô
»Úºô¸ô¶i¨Bªºªì°J¡A ´¼¨¹¤½¯qÀ]¤]¥H¦¹¬°Â¾§Ó¡A­P¤O©óªÀ·|·R¤ß¥­¥xªº«Ø¸m¡A§Æ±æ±N
ªÀ·|·Oµ½ªº¤O¶q¡A ¸g¥Ñ¤@­Ó»´»´ªº·Æ¹«°Ê§@(click)¡A±N»Ý¨D¶Ç»¼¥X¥h¡A»P¨º¨Ç§Ú­Ì»{
ÃѩΤ£»{ÃѪº¤H­Ì¡A µL»·¥±¬Éªº¤À¨É¥Í©Rªº·P°Ê¡C ¡@¬°¤F¦¨´Nºô¸ô¤½¯qªÀ·|ªº²z·Q¡A
§Ú­ÌÁܽЪÀ·|¼ö¤ß¤½¯q½å¹F¤H¤h¡A ¦@¦P¦¨¥ß¡y¥xÆW¤½¯qªA°È¨ó·|¡z¡A¸Ó²Õ´¬°®Ú¾Ú
¡y¤H¥Á¹ÎÅéªk¡z³]¥ß¤§¥þ°ê©ÊªÀ¹Îªk¤H¡A ·½¦¹¡A³z¹L´¼¨¹¤½¯qÀ]ªºªÀ·|±Ï§U¬¡°Ê¡A¤]
±N¦b¸Ó²Õ´ªº©e°U»PºÊ·þ¤U°õ¦æ¡A¾¬¨D²Å¦XªÀ·|ªA°Èªº³d«H­ì«h¡C ¡@§Ú­Ì²`«H¡A«D¥H
ª÷¿ú­pºâªºÀ°§U¡A¬O¤@ºØÅý¥Í©R±o¨ì¤O¶qªº«G¥ú¡C §Ú­Ì¬Û«HªÀ·|®z¶Õ±Ú¸sªº·Oµ½Ãö
Ãh¡A¬O½l³y¤HÃþ¤å©úªº§Æ±æ¤§µ¡¡A¦Ó³o¤@®°µ¡¡A ²×±N³z¹L±zªº·R¤ß°Ñ»P¡AÅý§Ú­Ì±o¥H
¿s¨£¡y¯u¡Bµ½¡B¬ü¡zªº¹Ò¬É¡C
****************************************************************************
½Ð¦U¦ì¥ý¶i/
«e½ú¨ó§U¥»ºô´£¨Ñ³]³Æ/¶l¥ó¦øªA¾¹¤Î¤¤¥j¹q¸£CPU500HZ¥H¤W,©Î¶l¥ó¦W³æ/Åý»Ý­nÀ°§Uªº¤H©MÄ@·N§U¤HªÌ¯à°÷¤£¦A¨D§UµLªù/
½Ð¤Å²{ª÷®½´Ú¡C¦³Åv¥XÅv/¦³¤O¥X¤O¡C ´I¿A¤ì¤u¸Ë¿X ´£¨Ñ http://www.ykk.idv.tw/
¥xÆW¦æµ½ºô´£¨Ñ¤W²M¤U½¬©~¤h·q¤W http://home.kimo.com.tw/skvsbmw/index.html
http://www.china5j.com/zhufu/xinyuan.htm

^ permalink raw reply

* 海关稽查应对
From: 降低关税成本 @ 2005-08-14 18:25 UTC (permalink / raw)
  To: netdev

[-- Attachment #1: Type: text/html, Size: 12716 bytes --]

^ permalink raw reply

* ¢º¾ÆÁ÷µµºñ½ÑÀÌÀڷε¹·Á¸·±â ÇϽóª¿ä?
From: ¾¾Æ¼ÀºÇà @ 2005-08-14 17:42 UTC (permalink / raw)
  To: netdev

[-- Attachment #1: Type: text/html, Size: 2259 bytes --]

^ permalink raw reply

* RELOGIOS DIA DOS PAIS !!!
From:   @ 2005-08-14 17:28 UTC (permalink / raw)
  To: netdev

[-- Attachment #1: Type: text/plain, Size: 567 bytes --]

________________________________________________________
  SUPER PROMOCAO REPLICAS DE RELOGIOS FAMOSOS
________________________________________________________

  SUPER PROMOCAO DE RELOGIOS MASCULINOS E FEMININOS.
  PRECOS PROMOCIONAIS E BRINDE NA COMPRA
  TODAS AS MARCAS MAIS COBICADAS DO MUNDO
  BVLGARI - OMEGA - BREITLING - CARTIER - TAG HEUER
  E OUTROS.
  MODELOS APARTIR DE R$ 199,00
________________________________________________________
  *SOLICITE FOTOS E PRECOS EM:
   superrelogios@yahoo.com.br
________________________________________________________

^ permalink raw reply

* HELLO FROM RICHARD JAONS
From: richard_jonas00 @ 2005-08-14 17:26 UTC (permalink / raw)
  To: richard_jonas00

[-- Attachment #1: Type: text/html, Size: 5246 bytes --]

^ permalink raw reply

* ÃâÀåºÎÆä¸¦°èȹÇÏ°í °è½Ê´Ï±î?
From: ÆÄÆ®³Ê @ 2005-08-14 16:42 UTC (permalink / raw)
  To: netdev

[-- Attachment #1: Type: text/html, Size: 993 bytes --]

^ permalink raw reply

* ÀüÈ­·Î ÇÏ´Â"¿µ¾îȸȭ" ¸ÅÀÏ10ºÐ¾¿ 1ÁÖÀϹ«·áüÇèÇØº¸¼¼¿ä~~
From: ¼ÛÇý±³ @ 2005-08-14 16:37 UTC (permalink / raw)
  To: devfs

[-- Attachment #1: Type: text/html, Size: 2635 bytes --]

^ permalink raw reply

* boost your energy level, 1st month free
From: octavio_hope @ 2005-08-14 15:52 UTC (permalink / raw)
  To: ralf, reese, owner-projects, arnold
  Cc: devfs, pcp, cvs, csa, burns, postwait, schmidt, daniel, andrews

Want to lose weight, while reverse the aging process?
Look younger, feel more energy!

Try HGH!

http://www.brightfun.com




























Seven people on a Russian mini-submarine trapped for nearly three days on the Pacific floor were rescued Sunday when a British remote-controlled vehicle cut away undersea cables that snarled their vessel, allowing it to surface.
ADVERTISEMENT

The seven, whose oxygen supply had been dwindling, appeared to be in satisfactory condition when they emerged, navy spokesman Capt. Igor Dygalo said. They were examined in the clinic of a naval ship, then transferred to a larger vessel to return to the mainland.

About five hours after their rescue, six sailors were brought to a hospital on the mainland for examination, waving to relatives as they went in. The seventh was kept aboard a hospital ship for unspecified reasons.

At the edge of the gangplank leading to shore, the mini-sub's commander, Lt. Vyacheslav Milashevsky, held a long and solemn salute, then a slight smile crossed his face. Pale, but walking confidently, he told journalists he was "fine" before climbing into a van for the drive to the hospital.

His wife, Yelena, said earlier that she was overjoyed when she learned the crew had been rescued.

"My feelings danced. I was happy, I cried," she told Channel One television.

Another crewman in the van swiveled his head back and forth, gazing at the green trees and gray skies.

The red-and-white mini-sub, the AS-28, surfaced at 4:26 p.m. local time Sunday, some three days after becoming entangled in 600 feet of water Thursday. It was carrying six sailors and a representative of the company that manufactured it.

"The crew opened the hatch themselves, exited the vessel and climbed aboard a speedboat," said Rear Adm. Vladimir Pepelyayev, deputy head of the naval general staff.

"I can only thank our English colleagues for their joint work and the help they gave in order to complete this operation within the time we had available — that is, before the oxygen reserves ran out."

The United States also sent three remote-controlled underwater vehicles for the rescue, but they arrived several hours after the British vehicle and were not used.

Both countries sent rescue teams after the Russian navy made an urgent appeal for international help — unlike during the August 2000 sinking of the nuclear submarine Kursk, when authorities held off asking for outside assistance for days. All 118 aboard the Kursk died.

Russian ships tried to tow the mini-sub and its entanglements to shallower water where divers could reach it but could only move it less than 100 yards in Beryozovaya Bay, about 10 miles off the Kamchatka coast.

Then, a British remote-controlled Super Scorpio cut away the cables snarling the 44-foot-long mini-sub. Once the obstructions were removed, there was a last spasm of anxiety as the submarine stayed still.

"Then after two or three minutes, it broke free and within three minutes it surfaced," Ivanov said.

The men aboard the mini-sub had waited out tense hours of uncertainty as rescuers raced to free them before their air supply ran out. They put on thermal suits to insulate them against temperatures of about 40 degrees inside the sub and were told to lie flat and breathe as lightly as possible to conserve oxygen.

To save electricity, they turned off the submarine's lights and used communications equipment only sporadically to contact the surface.

"The crew were steadfast, very professional," Pepelyayev said on Channel One television. "Their self-possession allowed them to conserve the air and wait for the rescue operation."

In an echo of the Kursk sinking, President
Vladimir Putin had made no public comment by Sunday on the mini-sub drama. Putin remained on vacation as the Kursk disaster unfolded, raising criticism that he appeared either callous or ineffectual.

Defense Minister Sergei Ivanov, who went to Kamchatka to supervise the operation, praised the help provided by Britain and the United States.

"We have seen in deeds, not in words, what the brotherhood of the sea means," he said.

Officials said the Russian submarine was participating in a combat training exercise and got snarled on an underwater antenna assembly that is part of a coastal monitoring system. The system is anchored with a weight of about 66 tons, according to news reports.

The sub's propeller initially became ensnared in a fishing net, they said.

The events and an array of confusing and contradictory statements — with wildly varying estimates of how much air the crew had left — darkly echoed the sinking of the Kursk.

Russia's cash-strapped navy apparently lacks rescue vehicles capable of operating at the depth where the sub was stranded, and officials say it was too deep for divers to reach or the crew to swim out on their own.

The submarine's problems indicated that promises by Putin to improve the navy's equipment apparently have had little effect. He was criticized for his slow response to the Kursk crisis and reluctance to accept foreign assistance.

The new crisis has been highly embarrassing for Russia, which will hold an unprecedented joint military exercise with China later this month, including the use of submarines to settle an imaginary conflict in a foreign land. In the exercise, Russia is to field a naval squadron and 17 long-haul aircraft.

New criticism arose within hours of the mini-sub's crew being rescued. Dmitry Rogozin, head of the nationalist Rodina party in the lower house of parliament, said he would demand an assessment from the Military Prosecutor's Office of the navy's performance in the incident, the Interfax news agency reported.

Rogozin said he wanted to know why Russia has not acquired underwater vehicles similar to the ones provided by Britain and the United States and "why fishing nets and cables litter the area of naval maneuvers."

"It appears the naval command is not in control of the area of naval exercises," he said, according to Interfax.

^ permalink raw reply

* [°³ÀÎȸ»ý]°³ÀÎȸ»ýÀºÃ¤¹«ÀÚ °­Á¦Á¶Á¤¹ýÀÔ´Ï´Ù.[»ó¼¼º¸±â]
From: "°³ÀÎȸ»ý4" <"Bank" @ 2005-08-14 15:50 UTC (permalink / raw)
  To: netdev

[-- Attachment #1: Type: text/html, Size: 427 bytes --]

^ permalink raw reply

* 免費輔導創業至 8月底!
From: 比網拍更容易賺的! @ 2005-08-14 15:44 UTC (permalink / raw)


[-- Attachment #1: Type: text/html, Size: 1377 bytes --]

^ permalink raw reply

* ¿Ü±¹ ¿µ¾îÄÍÇÁ ¹«·áÂü¿© ±âȸ¸¦µå¸³´Ï´Ù!
From: Doreen Stein @ 2005-08-14 15:37 UTC (permalink / raw)
  To: netdev

[-- Attachment #1: Type: text/html, Size: 1927 bytes --]

^ permalink raw reply

* Re:¾È³çÇϼ¼¿ä. zym ef
From: À̹οµ @ 2005-08-14 15:37 UTC (permalink / raw)
  To: netdev

[-- Attachment #1: Type: text/html, Size: 4916 bytes --]

^ permalink raw reply

* Á÷ÀåÀÎ,°ø¹«¿øÀ»À§ÇÑ·ÐÀÎÆ÷,ÃÖ°íÀÇÇýÅÿù0.5%´ë±Ý¸®
From: ±ÝÀ¶Á¤Ã¥ @ 2005-08-14 15:09 UTC (permalink / raw)
  To: netdev

[-- Attachment #1: Type: text/html, Size: 1117 bytes --]

^ permalink raw reply

* °ÔÀÓÀÚ°ÝÁõÀ»È¹µæÇϼ¼¿ä!ÇÁ·Î°ÔÀ̸ÓÀÇÁö¸§±æ
From: ±è»ï½Ä @ 2005-08-14 14:53 UTC (permalink / raw)
  To: netdev

[-- Attachment #1: Type: text/html, Size: 3118 bytes --]

^ permalink raw reply

* Re: [PATCH ppp-2.4.3] add SC_MUST_COMPRESS flag
From: Patrick McHardy @ 2005-08-14 14:31 UTC (permalink / raw)
  To: Matt Domsch
  Cc: Paul Mackerras, Jeff Garzik, akpm-3NddpPZAyC0,
	davem-fT/PcQaiUtIeIZ0/mPfg9Q, netdev-u79uwXL29TY76Z2rM5mHXA,
	Brice.Goglin-vYW+cPY1g1pg9hUCZPvPmw, james.cameron-VXdhtT5mjnY,
	pptpclient-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
In-Reply-To: <42FF54E3.8000808-dcUjhNyLwpNeoWH0uzbU5w@public.gmane.org>

Patrick McHardy wrote:
> Matt Domsch wrote:
> 
>> include/linux/if_ppp.h |   62 +++++++++++++++++--------------------------------
> 
> 
> - * 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.
> 
> + * Redistribution and use in source and binary forms are permitted
> + * provided that the above copyright notice and this paragraph are
> + * duplicated in all such forms and that any documentation,
> + * advertising materials, and other materials related to such
> + * distribution and use acknowledge that the software was developed
> + * by Carnegie Mellon University.
> 
> Why do you change the license, especially to something GPL-incompatible?

I see now its for pppd, sorry :) Still looks like a mistake:

-/*	$Id: if_ppp.h,v 1.23 2002/12/06 09:49:15 paulus Exp $	*/
+/*	$Id: if_ppp.h,v 1.21 2000/03/27 06:03:36 paulus Exp $	*/


-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf

^ permalink raw reply

* Re: [PATCH ppp-2.4.3] add SC_MUST_COMPRESS flag
From: Patrick McHardy @ 2005-08-14 14:27 UTC (permalink / raw)
  To: Matt Domsch
  Cc: Paul Mackerras, Jeff Garzik, akpm-3NddpPZAyC0,
	davem-fT/PcQaiUtIeIZ0/mPfg9Q, netdev-u79uwXL29TY76Z2rM5mHXA,
	Brice.Goglin-vYW+cPY1g1pg9hUCZPvPmw, james.cameron-VXdhtT5mjnY,
	pptpclient-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
In-Reply-To: <20050814141810.GC20944-XtjxT7Vmt5ZskZv2Y/7f+AC/G2K4zDHf@public.gmane.org>

Matt Domsch wrote:
>  include/linux/if_ppp.h |   62 +++++++++++++++++--------------------------------

- * 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.

+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by Carnegie Mellon University.

Why do you change the license, especially to something GPL-incompatible?


-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf

^ permalink raw reply

* [PATCH ppp-2.4.3] add SC_MUST_COMPRESS flag
From: Matt Domsch @ 2005-08-14 14:18 UTC (permalink / raw)
  To: Paul Mackerras
  Cc: Jeff Garzik, akpm-3NddpPZAyC0, davem-fT/PcQaiUtIeIZ0/mPfg9Q,
	netdev-u79uwXL29TY76Z2rM5mHXA,
	Brice.Goglin-vYW+cPY1g1pg9hUCZPvPmw, james.cameron-VXdhtT5mjnY,
	pptpclient-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
In-Reply-To: <20050814141046.GB20944-XtjxT7Vmt5ZskZv2Y/7f+AC/G2K4zDHf@public.gmane.org>

PPP 2.4.3 patch creates the new flag SC_MUST_COMPRESS.  This is set on
CCP UP with MPPE enabled, and never cleared.  The kernel uses this
flag to drop packets which aren't compressed/decompressed properly
when MPPE is enabled.

In the existing code, on SIGUSR2, CCP is renegotiated, and with MPPE
enabled, LCP (and thus the link) is taken down, so the user can't
disable MPPE after it's enabled on a link.


1) sync to kernel's include/linux/if_ppp.h copy, adding
   SC_MUST_COMPRESS
2) add SC_MUST_COMPRESS to include/net/if_ppp.h also
3) set SC_MUST_COMPRESS on CCP UP

 include/linux/if_ppp.h |   62 +++++++++++++++++--------------------------------
 include/net/if_ppp.h   |    1
 pppd/ccp.c             |   15 +++++++----
 pppd/pppd.h            |    2 -
 pppd/sys-linux.c       |    6 +++-
 pppd/sys-solaris.c     |    4 +--
 6 files changed, 40 insertions(+), 50 deletions(-)


Lightly tested, review much appeciated.

Signed-off-by: Matt Domsch <Matt_Domsch-8PEkshWhKlo@public.gmane.org>

-- 
Matt Domsch
Software Architect
Dell Linux Solutions linux.dell.com & www.dell.com/linux
Linux on Dell mailing lists @ http://lists.us.dell.com

diff -urNp --exclude-from=/mdomsch2/excludes --minimal ppp-2.4.3.orig/include/linux/if_ppp.h ppp-2.4.3.ppp_mppe/include/linux/if_ppp.h
--- ppp-2.4.3.orig/include/linux/if_ppp.h	2002-12-06 01:49:15.000000000 -0800
+++ ppp-2.4.3.ppp_mppe/include/linux/if_ppp.h	2005-08-12 11:07:01.000000000 -0700
@@ -1,50 +1,27 @@
-/*	$Id: if_ppp.h,v 1.23 2002/12/06 09:49:15 paulus Exp $	*/
+/*	$Id: if_ppp.h,v 1.21 2000/03/27 06:03:36 paulus Exp $	*/
 
 /*
  * if_ppp.h - Point-to-Point Protocol definitions.
  *
- * 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-OM76b2Iv3yLQjUSlxSEPGw@public.gmane.org
- *
- * 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/)."
+ * Copyright (c) 1989 Carnegie Mellon University.
+ * All rights reserved.
  *
- * 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.
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by Carnegie Mellon University.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
  */
 
 /*
- *  ==FILEVERSION 20000724==
+ *  ==FILEVERSION 20050812==
  *
  *  NOTE TO MAINTAINERS:
  *     If you modify this file at all, please set the above date.
@@ -93,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?) */
@@ -113,9 +91,13 @@ struct npioctl {
 	enum NPmode	mode;
 };
 
+#ifndef __user
+#define __user
+#endif
+
 /* Structure describing a CCP configuration option, for PPPIOCSCOMPRESS */
 struct ppp_option_data {
-	__u8	*ptr;
+	__u8	__user *ptr;
 	__u32	length;
 	int	transmit;
 };
diff -urNp --exclude-from=/mdomsch2/excludes --minimal ppp-2.4.3.orig/include/net/if_ppp.h ppp-2.4.3.ppp_mppe/include/net/if_ppp.h
--- ppp-2.4.3.orig/include/net/if_ppp.h	2002-12-06 01:49:15.000000000 -0800
+++ ppp-2.4.3.ppp_mppe/include/net/if_ppp.h	2005-08-13 20:08:55.000000000 -0700
@@ -66,6 +66,7 @@
 #define SC_RCV_EVNP	0x04000000	/* have rcvd char with even parity */
 #define SC_RCV_ODDP	0x08000000	/* have rcvd char with odd parity */
 #define SC_SYNC		0x00200000	/* use synchronous HDLC framing */
+#define	SC_MUST_COMP    0x00400000	/* no uncompressed packets may be sent or received */
 #define	SC_MASK		0x0fff00ff	/* bits that user can change */
 
 /*
diff -urNp --exclude-from=/mdomsch2/excludes --minimal ppp-2.4.3.orig/pppd/ccp.c ppp-2.4.3.ppp_mppe/pppd/ccp.c
--- ppp-2.4.3.orig/pppd/ccp.c	2004-11-12 18:28:15.000000000 -0800
+++ ppp-2.4.3.ppp_mppe/pppd/ccp.c	2005-08-12 11:53:31.000000000 -0700
@@ -390,7 +390,7 @@ ccp_open(unit)
     fsm *f = &ccp_fsm[unit];
 
     if (f->state != OPENED)
-	ccp_flags_set(unit, 1, 0);
+	ccp_flags_set(unit, 1, 0, 0);
 
     /*
      * Find out which compressors the kernel supports before
@@ -411,7 +411,7 @@ ccp_close(unit, reason)
     int unit;
     char *reason;
 {
-    ccp_flags_set(unit, 0, 0);
+    ccp_flags_set(unit, 0, 0, 0);
     fsm_close(&ccp_fsm[unit], reason);
 }
 
@@ -511,7 +511,7 @@ static void
 ccp_protrej(unit)
     int unit;
 {
-    ccp_flags_set(unit, 0, 0);
+    ccp_flags_set(unit, 0, 0, 0);
     fsm_lowerdown(&ccp_fsm[unit]);
 
 #ifdef MPPE
@@ -1424,8 +1424,13 @@ ccp_up(f)
     ccp_options *go = &ccp_gotoptions[f->unit];
     ccp_options *ho = &ccp_hisoptions[f->unit];
     char method1[64];
+    int must_comp = 0;
 
-    ccp_flags_set(f->unit, 1, 1);
+#ifdef MPPE
+    if (go->mppe)
+	    must_comp = 1;
+#endif
+    ccp_flags_set(f->unit, 1, 1, must_comp);
     if (ANY_COMPRESS(*go)) {
 	if (ANY_COMPRESS(*ho)) {
 	    if (go->method == ho->method) {
@@ -1458,7 +1463,7 @@ ccp_down(f)
     if (ccp_localstate[f->unit] & RACK_PENDING)
 	UNTIMEOUT(ccp_rack_timeout, f);
     ccp_localstate[f->unit] = 0;
-    ccp_flags_set(f->unit, 1, 0);
+    ccp_flags_set(f->unit, 1, 0, 0);
 #ifdef MPPE
     if (ccp_gotoptions[f->unit].mppe) {
 	ccp_gotoptions[f->unit].mppe = 0;
diff -urNp --exclude-from=/mdomsch2/excludes --minimal ppp-2.4.3.orig/pppd/pppd.h ppp-2.4.3.ppp_mppe/pppd/pppd.h
--- ppp-2.4.3.orig/pppd/pppd.h	2004-11-13 04:02:22.000000000 -0800
+++ ppp-2.4.3.ppp_mppe/pppd/pppd.h	2005-08-12 11:40:40.000000000 -0700
@@ -615,7 +615,7 @@ void tty_recv_config __P((int, u_int32_t
 				/* Configure i/f receive parameters */
 int  ccp_test __P((int, u_char *, int, int));
 				/* Test support for compression scheme */
-void ccp_flags_set __P((int, int, int));
+void ccp_flags_set __P((int, int, int, int));
 				/* Set kernel CCP state */
 int  ccp_fatal_error __P((int)); /* Test for fatal decomp error in kernel */
 int  get_idle_time __P((int, struct ppp_idle *));
diff -urNp --exclude-from=/mdomsch2/excludes --minimal ppp-2.4.3.orig/pppd/sys-linux.c ppp-2.4.3.ppp_mppe/pppd/sys-linux.c
--- ppp-2.4.3.orig/pppd/sys-linux.c	2005-07-23 08:35:09.000000000 -0700
+++ ppp-2.4.3.ppp_mppe/pppd/sys-linux.c	2005-08-12 11:37:39.000000000 -0700
@@ -1278,13 +1278,15 @@ ccp_test(int unit, u_char *opt_ptr, int 
 /********************************************************************
  *
  * ccp_flags_set - inform kernel about the current state of CCP.
+ *   Once SC_MUST_COMP is set, never clear it.
  */
 
-void ccp_flags_set (int unit, int isopen, int isup)
+void ccp_flags_set (int unit, int isopen, int isup, int must_comp)
 {
 	int x;
 
-	x = (isopen? SC_CCP_OPEN: 0) | (isup? SC_CCP_UP: 0);
+	x = (isopen? SC_CCP_OPEN: 0) | (isup? SC_CCP_UP: 0)
+		| (must_comp? SC_MUST_COMP: 0);
 	if (still_ppp() && ppp_dev_fd >= 0)
 		modify_flags(ppp_dev_fd, SC_CCP_OPEN|SC_CCP_UP, x);
 }
diff -urNp --exclude-from=/mdomsch2/excludes --minimal ppp-2.4.3.orig/pppd/sys-solaris.c ppp-2.4.3.ppp_mppe/pppd/sys-solaris.c
--- ppp-2.4.3.orig/pppd/sys-solaris.c	2004-11-04 02:02:26.000000000 -0800
+++ ppp-2.4.3.ppp_mppe/pppd/sys-solaris.c	2005-08-12 11:41:59.000000000 -0700
@@ -1633,8 +1633,8 @@ ccp_test(unit, opt_ptr, opt_len, for_tra
  * ccp_flags_set - inform kernel about the current state of CCP.
  */
 void
-ccp_flags_set(unit, isopen, isup)
-    int unit, isopen, isup;
+ccp_flags_set(unit, isopen, isup, unused_must_comp)
+    int unit, isopen, isup, unused_must_comp;
 {
     int cf[2];
 


-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf

^ permalink raw reply

* [PATCH 2.6.13-rc] ppp_mppe: add PPP MPPE encryption module
From: Matt Domsch @ 2005-08-14 14:10 UTC (permalink / raw)
  To: Paul Mackerras
  Cc: Jeff Garzik, akpm-3NddpPZAyC0, davem-fT/PcQaiUtIeIZ0/mPfg9Q,
	netdev-u79uwXL29TY76Z2rM5mHXA,
	Brice.Goglin-vYW+cPY1g1pg9hUCZPvPmw, james.cameron-VXdhtT5mjnY,
	pptpclient-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
In-Reply-To: <17102.30763.326707.473425-UYQwCShxghk5kJ7NmlRacFaTQe2KTcn/@public.gmane.org>

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.


 drivers/net/Kconfig       |   13
 drivers/net/Makefile      |    1
 drivers/net/ppp_generic.c |   88 ++++-
 drivers/net/ppp_mppe.c    |  724 ++++++++++++++++++++++++++++++++++++++++++++++
 drivers/net/ppp_mppe.h    |   86 +++++
 include/linux/if_ppp.h    |    9
 include/linux/ppp-comp.h  |    9
 7 files changed, 904 insertions(+), 26 deletions(-)

Signed-off-by: Matt Domsch <Matt_Domsch-8PEkshWhKlo@public.gmane.org>

-- 
Matt Domsch
Software Architect
Dell Linux Solutions linux.dell.com & www.dell.com/linux
Linux on Dell mailing lists @ http://lists.us.dell.com

diff -urNp --exclude-from=/mdomsch2/excludes --minimal linux-2.6/drivers/net/Kconfig linux-2.6-ppp_mppe/drivers/net/Kconfig
--- linux-2.6/drivers/net/Kconfig	2005-08-11 22:38:44.000000000 -0700
+++ linux-2.6-ppp_mppe/drivers/net/Kconfig	2005-08-12 09:48:56.000000000 -0700
@@ -2417,6 +2417,19 @@ config PPP_BSDCOMP
 	  module; it is called bsd_comp and will show up in the directory
 	  modules once you have said "make modules". If unsure, say N.
 
+config PPP_MPPE
+       tristate "PPP MPPE compression (encryption) (EXPERIMENTAL)"
+       depends on PPP && EXPERIMENTAL
+       select CRYPTO
+       select CRYPTO_SHA1
+       select CRYPTO_ARC4
+       ---help---
+         Support for the MPPE Encryption protocol, as employed by the
+	 Microsoft Point-to-Point Tunneling Protocol.
+
+	 See http://pptpclient.sourceforge.net/ for information on
+	 configuring PPTP clients and servers to utilize this method.
+
 config PPPOE
 	tristate "PPP over Ethernet (EXPERIMENTAL)"
 	depends on EXPERIMENTAL && PPP
diff -urNp --exclude-from=/mdomsch2/excludes --minimal linux-2.6/drivers/net/Makefile linux-2.6-ppp_mppe/drivers/net/Makefile
--- linux-2.6/drivers/net/Makefile	2005-08-11 22:38:44.000000000 -0700
+++ linux-2.6-ppp_mppe/drivers/net/Makefile	2005-08-12 09:48:56.000000000 -0700
@@ -105,6 +105,7 @@ obj-$(CONFIG_PPP_ASYNC) += ppp_async.o
 obj-$(CONFIG_PPP_SYNC_TTY) += ppp_synctty.o
 obj-$(CONFIG_PPP_DEFLATE) += ppp_deflate.o
 obj-$(CONFIG_PPP_BSDCOMP) += bsd_comp.o
+obj-$(CONFIG_PPP_MPPE) += ppp_mppe.o
 obj-$(CONFIG_PPPOE) += pppox.o pppoe.o
 
 obj-$(CONFIG_SLIP) += slip.o
diff -urNp --exclude-from=/mdomsch2/excludes --minimal linux-2.6/drivers/net/ppp_generic.c linux-2.6-ppp_mppe/drivers/net/ppp_generic.c
--- linux-2.6/drivers/net/ppp_generic.c	2005-08-11 22:38:48.000000000 -0700
+++ linux-2.6-ppp_mppe/drivers/net/ppp_generic.c	2005-08-12 10:52:50.000000000 -0700
@@ -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.
@@ -1027,6 +1028,56 @@ ppp_xmit_process(struct ppp *ppp)
 	ppp_xmit_unlock(ppp);
 }
 
+static inline struct sk_buff *
+pad_compress_skb(struct ppp *ppp, struct sk_buff *skb)
+{
+	struct sk_buff *new_skb;
+	int len;
+	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())
+			printk(KERN_ERR "PPP: no memory (comp pkt)\n");
+		return NULL;
+	}
+	if (ppp->dev->hard_header_len > PPP_HDRLEN)
+		skb_reserve(new_skb,
+			    ppp->dev->hard_header_len - PPP_HDRLEN);
+
+	/* compressor still expects A/C bytes in hdr */
+	len = ppp->xcomp->compress(ppp->xc_state, skb->data - 2,
+				   new_skb->data, skb->len + 2,
+				   compressor_skb_size);
+	if (len > 0 && (ppp->flags & SC_CCP_UP)) {
+		kfree_skb(skb);
+		skb = new_skb;
+		skb_put(skb, len);
+		skb_pull(skb, 2);	/* pull off A/C bytes */
+	} else if (len == 0) {
+		/* didn't compress, or CCP not up yet */
+		kfree_skb(new_skb);
+		new_skb = skb;
+	} else {
+		/*
+		 * (len < 0)
+		 * MPPE requires that we do not send unencrypted
+		 * frames.  The compressor will return -1 if we
+		 * should drop the frame.  We cannot simply test
+		 * the compress_proto because MPPE and MPPC share
+		 * the same number.
+		 */
+		if (net_ratelimit())
+			printk(KERN_ERR "ppp: compressor dropped pkt\n");
+		kfree_skb(skb);
+		kfree_skb(new_skb);
+		new_skb = NULL;
+	}
+	return new_skb;
+}
+
 /*
  * Compress and send a frame.
  * The caller should have locked the xmit path,
@@ -1113,29 +1164,14 @@ 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) {
-		new_skb = alloc_skb(ppp->dev->mtu + ppp->dev->hard_header_len,
-				    GFP_ATOMIC);
-		if (new_skb == 0) {
-			printk(KERN_ERR "PPP: no memory (comp pkt)\n");
+		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;
 		}
-		if (ppp->dev->hard_header_len > PPP_HDRLEN)
-			skb_reserve(new_skb,
-				    ppp->dev->hard_header_len - PPP_HDRLEN);
-
-		/* 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);
-		if (len > 0 && (ppp->flags & SC_CCP_UP)) {
-			kfree_skb(skb);
-			skb = new_skb;
-			skb_put(skb, len);
-			skb_pull(skb, 2);	/* pull off A/C bytes */
-		} else {
-			/* didn't compress, or CCP not up yet */
-			kfree_skb(new_skb);
-		}
+		skb = pad_compress_skb(ppp, skb);
+		if (!skb)
+			goto drop;
 	}
 
 	/*
@@ -1155,7 +1191,8 @@ ppp_send_frame(struct ppp *ppp, struct s
 	return;
 
  drop:
-	kfree_skb(skb);
+	if (skb)
+		kfree_skb(skb);
 	++ppp->stats.tx_errors;
 }
 
@@ -1553,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:
diff -urNp --exclude-from=/mdomsch2/excludes --minimal linux-2.6/drivers/net/ppp_mppe.c linux-2.6-ppp_mppe/drivers/net/ppp_mppe.c
--- linux-2.6/drivers/net/ppp_mppe.c	1969-12-31 16:00:00.000000000 -0800
+++ linux-2.6-ppp_mppe/drivers/net/ppp_mppe.c	2005-08-12 11:17:02.000000000 -0700
@@ -0,0 +1,724 @@
+/*
+ * ppp_mppe.c - interface MPPE to the PPP code.
+ * This version is for use with Linux kernel 2.6.14+
+ *
+ * By Frank Cusack <frank-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>.
+ * Copyright (c) 2002,2003,2004 Google, Inc.
+ * All rights reserved.
+ *
+ * License:
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation is hereby granted, provided that the above copyright
+ * notice appears in all copies.  This software is provided without any
+ * warranty, express or implied.
+ *
+ * ALTERNATIVELY, provided that this notice is retained in full, this product
+ * may be distributed under the terms of the GNU General Public License (GPL),
+ * in which case the provisions of the GPL apply INSTEAD OF those given above.
+ *
+ *   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.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *
+ * Changelog:
+ *      08/12/05 - Matt Domsch <Matt_Domsch-8PEkshWhKlo@public.gmane.org>
+ *                 Only need extra skb padding on transmit, not receive.
+ *      06/18/04 - Matt Domsch <Matt_Domsch-8PEkshWhKlo@public.gmane.org>, Oleg Makarenko <mole-aTJdtAV7WjCHXe+LvDLADg@public.gmane.org>
+ *                 Use Linux kernel 2.6 arc4 and sha1 routines rather than
+ *                 providing our own.
+ *      2/15/04 - TS: added #include <version.h> and testing for Kernel
+ *                    version before using
+ *                    MOD_DEC_USAGE_COUNT/MOD_INC_USAGE_COUNT which are
+ *                    deprecated in 2.6
+ */
+
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/version.h>
+#include <linux/init.h>
+#include <linux/types.h>
+#include <linux/slab.h>
+#include <linux/string.h>
+#include <linux/crypto.h>
+#include <linux/mm.h>
+#include <linux/ppp_defs.h>
+#include <linux/ppp-comp.h>
+#include <asm/scatterlist.h>
+
+#include "ppp_mppe.h"
+
+MODULE_AUTHOR("Frank Cusack <frank-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>");
+MODULE_DESCRIPTION("Point-to-Point Protocol Microsoft Point-to-Point Encryption support");
+MODULE_LICENSE("Dual BSD/GPL");
+MODULE_ALIAS("ppp-compress-" __stringify(CI_MPPE));
+MODULE_VERSION("1.0.2");
+
+static void
+setup_sg(struct scatterlist *sg, const void *address, unsigned int length)
+{
+	sg[0].page = virt_to_page(address);
+	sg[0].offset = offset_in_page(address);
+	sg[0].length = length;
+}
+
+#define SHA1_PAD_SIZE 40
+
+/*
+ * kernel crypto API needs its arguments to be in kmalloc'd memory, not in the module
+ * static data area.  That means sha_pad needs to be kmalloc'd.
+ */
+
+struct sha_pad {
+	unsigned char sha_pad1[SHA1_PAD_SIZE];
+	unsigned char sha_pad2[SHA1_PAD_SIZE];
+};
+static struct sha_pad *sha_pad;
+
+static inline void sha_pad_init(struct sha_pad *shapad)
+{
+	memset(shapad->sha_pad1, 0x00, sizeof(shapad->sha_pad1));
+	memset(shapad->sha_pad2, 0xF2, sizeof(shapad->sha_pad2));
+}
+
+/*
+ * State for an MPPE (de)compressor.
+ */
+struct ppp_mppe_state {
+	struct crypto_tfm *arc4;
+	struct crypto_tfm *sha1;
+	unsigned char *sha1_digest;
+	unsigned char master_key[MPPE_MAX_KEY_LEN];
+	unsigned char session_key[MPPE_MAX_KEY_LEN];
+	unsigned 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  */
+	unsigned char bits;	/* MPPE control bits */
+	unsigned ccount;	/* 12-bit coherency count (seqno)  */
+	unsigned stateful;	/* stateful mode flag */
+	int discard;		/* stateful mode packet loss flag */
+	int sanity_errors;	/* take down LCP if too many */
+	int unit;
+	int debug;
+	struct compstat stats;
+};
+
+/* struct ppp_mppe_state.bits definitions */
+#define MPPE_BIT_A	0x80	/* Encryption table were (re)inititalized */
+#define MPPE_BIT_B	0x40	/* MPPC only (not implemented) */
+#define MPPE_BIT_C	0x20	/* MPPC only (not implemented) */
+#define MPPE_BIT_D	0x10	/* This is an encrypted frame */
+
+#define MPPE_BIT_FLUSHED	MPPE_BIT_A
+#define MPPE_BIT_ENCRYPTED	MPPE_BIT_D
+
+#define MPPE_BITS(p) ((p)[4] & 0xf0)
+#define MPPE_CCOUNT(p) ((((p)[4] & 0x0f) << 8) + (p)[5])
+#define MPPE_CCOUNT_SPACE 0x1000	/* The size of the ccount space */
+
+#define MPPE_OVHD	2	/* MPPE overhead/packet */
+#define SANITY_MAX	1600	/* Max bogon factor we will tolerate */
+
+/*
+ * Key Derivation, from RFC 3078, RFC 3079.
+ * Equivalent to Get_Key() for MS-CHAP as described in RFC 3079.
+ */
+static void get_new_key_from_sha(struct ppp_mppe_state * state, unsigned char *InterimKey)
+{
+	struct scatterlist sg[4];
+
+	setup_sg(&sg[0], state->master_key, state->keylen);
+	setup_sg(&sg[1], sha_pad->sha_pad1, sizeof(sha_pad->sha_pad1));
+	setup_sg(&sg[2], state->session_key, state->keylen);
+	setup_sg(&sg[3], sha_pad->sha_pad2, sizeof(sha_pad->sha_pad2));
+
+	crypto_digest_digest (state->sha1, sg, 4, state->sha1_digest);
+
+	memcpy(InterimKey, state->sha1_digest, state->keylen);
+}
+
+/*
+ * Perform the MPPE rekey algorithm, from RFC 3078, sec. 7.3.
+ * Well, not what's written there, but rather what they meant.
+ */
+static void mppe_rekey(struct ppp_mppe_state * state, int initial_key)
+{
+	unsigned char InterimKey[MPPE_MAX_KEY_LEN];
+	struct scatterlist sg_in[1], sg_out[1];
+
+	get_new_key_from_sha(state, InterimKey);
+	if (!initial_key) {
+		crypto_cipher_setkey(state->arc4, InterimKey, state->keylen);
+		setup_sg(sg_in, InterimKey, state->keylen);
+		setup_sg(sg_out, state->session_key, state->keylen);
+		if (crypto_cipher_encrypt(state->arc4, sg_out, sg_in,
+				      state->keylen) != 0) {
+    		    printk(KERN_WARNING "mppe_rekey: cipher_encrypt failed\n");
+		}
+	} else {
+		memcpy(state->session_key, InterimKey, state->keylen);
+	}
+	if (state->keylen == 8) {
+		/* See RFC 3078 */
+		state->session_key[0] = 0xd1;
+		state->session_key[1] = 0x26;
+		state->session_key[2] = 0x9e;
+	}
+	crypto_cipher_setkey(state->arc4, state->session_key, state->keylen);
+}
+
+/*
+ * Allocate space for a (de)compressor.
+ */
+static void *mppe_alloc(unsigned char *options, int optlen)
+{
+	struct ppp_mppe_state *state;
+	unsigned int digestsize;
+
+	if (optlen != CILEN_MPPE + sizeof(state->master_key)
+	    || options[0] != CI_MPPE || options[1] != CILEN_MPPE)
+		goto out;
+
+	state = (struct ppp_mppe_state *) kmalloc(sizeof(*state), GFP_KERNEL);
+	if (state == NULL)
+		goto out;
+
+	memset(state, 0, sizeof(*state));
+
+	state->arc4 = crypto_alloc_tfm("arc4", 0);
+	if (!state->arc4)
+		goto out_free;
+
+	state->sha1 = crypto_alloc_tfm("sha1", 0);
+	if (!state->sha1)
+		goto out_free;
+
+	digestsize = crypto_tfm_alg_digestsize(state->sha1);
+	if (digestsize < MPPE_MAX_KEY_LEN)
+		goto out_free;
+
+	state->sha1_digest = kmalloc(digestsize, GFP_KERNEL);
+	if (!state->sha1_digest)
+		goto out_free;
+
+	/* Save keys. */
+	memcpy(state->master_key, &options[CILEN_MPPE],
+	       sizeof(state->master_key));
+	memcpy(state->session_key, state->master_key,
+	       sizeof(state->master_key));
+
+	/*
+	 * We defer initial key generation until mppe_init(), as mppe_alloc()
+	 * is called frequently during negotiation.
+	 */
+
+	return (void *)state;
+
+	out_free:
+	    if (state->sha1_digest)
+		kfree(state->sha1_digest);
+	    if (state->sha1)
+		crypto_free_tfm(state->sha1);
+	    if (state->arc4)
+		crypto_free_tfm(state->arc4);
+	    kfree(state);
+	out:
+	return NULL;
+}
+
+/*
+ * Deallocate space for a (de)compressor.
+ */
+static void mppe_free(void *arg)
+{
+	struct ppp_mppe_state *state = (struct ppp_mppe_state *) arg;
+	if (state) {
+	    if (state->sha1_digest)
+		kfree(state->sha1_digest);
+	    if (state->sha1)
+		crypto_free_tfm(state->sha1);
+	    if (state->arc4)
+		crypto_free_tfm(state->arc4);
+	    kfree(state);
+	}
+}
+
+/*
+ * Initialize (de)compressor state.
+ */
+static int
+mppe_init(void *arg, unsigned char *options, int optlen, int unit, int debug,
+	  const char *debugstr)
+{
+	struct ppp_mppe_state *state = (struct ppp_mppe_state *) arg;
+	unsigned char mppe_opts;
+
+	if (optlen != CILEN_MPPE
+	    || options[0] != CI_MPPE || options[1] != CILEN_MPPE)
+		return 0;
+
+	MPPE_CI_TO_OPTS(&options[2], mppe_opts);
+	if (mppe_opts & MPPE_OPT_128)
+		state->keylen = 16;
+	else if (mppe_opts & MPPE_OPT_40)
+		state->keylen = 8;
+	else {
+		printk(KERN_WARNING "%s[%d]: unknown key length\n", debugstr,
+		       unit);
+		return 0;
+	}
+	if (mppe_opts & MPPE_OPT_STATEFUL)
+		state->stateful = 1;
+
+	/* Generate the initial session key. */
+	mppe_rekey(state, 1);
+
+	if (debug) {
+		int i;
+		char mkey[sizeof(state->master_key) * 2 + 1];
+		char skey[sizeof(state->session_key) * 2 + 1];
+
+		printk(KERN_DEBUG "%s[%d]: initialized with %d-bit %s mode\n",
+		       debugstr, unit, (state->keylen == 16) ? 128 : 40,
+		       (state->stateful) ? "stateful" : "stateless");
+
+		for (i = 0; i < sizeof(state->master_key); i++)
+			sprintf(mkey + i * 2, "%02x", state->master_key[i]);
+		for (i = 0; i < sizeof(state->session_key); i++)
+			sprintf(skey + i * 2, "%02x", state->session_key[i]);
+		printk(KERN_DEBUG
+		       "%s[%d]: keys: master: %s initial session: %s\n",
+		       debugstr, unit, mkey, skey);
+	}
+
+	/*
+	 * Initialize the coherency count.  The initial value is not specified
+	 * in RFC 3078, but we can make a reasonable assumption that it will
+	 * start at 0.  Setting it to the max here makes the comp/decomp code
+	 * do the right thing (determined through experiment).
+	 */
+	state->ccount = MPPE_CCOUNT_SPACE - 1;
+
+	/*
+	 * Note that even though we have initialized the key table, we don't
+	 * set the FLUSHED bit.  This is contrary to RFC 3078, sec. 3.1.
+	 */
+	state->bits = MPPE_BIT_ENCRYPTED;
+
+	state->unit = unit;
+	state->debug = debug;
+
+	return 1;
+}
+
+static int
+mppe_comp_init(void *arg, unsigned char *options, int optlen, int unit,
+	       int hdrlen, int debug)
+{
+	/* ARGSUSED */
+	return mppe_init(arg, options, optlen, unit, debug, "mppe_comp_init");
+}
+
+/*
+ * We received a CCP Reset-Request (actually, we are sending a Reset-Ack),
+ * tell the compressor to rekey.  Note that we MUST NOT rekey for
+ * every CCP Reset-Request; we only rekey on the next xmit packet.
+ * We might get multiple CCP Reset-Requests if our CCP Reset-Ack is lost.
+ * So, rekeying for every CCP Reset-Request is broken as the peer will not
+ * know how many times we've rekeyed.  (If we rekey and THEN get another
+ * CCP Reset-Request, we must rekey again.)
+ */
+static void mppe_comp_reset(void *arg)
+{
+	struct ppp_mppe_state *state = (struct ppp_mppe_state *) arg;
+
+	state->bits |= MPPE_BIT_FLUSHED;
+}
+
+/*
+ * Compress (encrypt) a packet.
+ * It's strange to call this a compressor, since the output is always
+ * MPPE_OVHD + 2 bytes larger than the input.
+ */
+static int
+mppe_compress(void *arg, unsigned char *ibuf, unsigned char *obuf,
+	      int isize, int osize)
+{
+	struct ppp_mppe_state *state = (struct ppp_mppe_state *) arg;
+	int proto;
+	struct scatterlist sg_in[1], sg_out[1];
+
+	/*
+	 * Check that the protocol is in the range we handle.
+	 */
+	proto = PPP_PROTOCOL(ibuf);
+	if (proto < 0x0021 || proto > 0x00fa)
+		return 0;
+
+	/* Make sure we have enough room to generate an encrypted packet. */
+	if (osize < isize + MPPE_OVHD + 2) {
+		/* Drop the packet if we should encrypt it, but can't. */
+		printk(KERN_DEBUG "mppe_compress[%d]: osize too small! "
+		       "(have: %d need: %d)\n", state->unit,
+		       osize, osize + MPPE_OVHD + 2);
+		return -1;
+	}
+
+	osize = isize + MPPE_OVHD + 2;
+
+	/*
+	 * Copy over the PPP header and set control bits.
+	 */
+	obuf[0] = PPP_ADDRESS(ibuf);
+	obuf[1] = PPP_CONTROL(ibuf);
+	obuf[2] = PPP_COMP >> 8;	/* isize + MPPE_OVHD + 1 */
+	obuf[3] = PPP_COMP;	/* isize + MPPE_OVHD + 2 */
+	obuf += PPP_HDRLEN;
+
+	state->ccount = (state->ccount + 1) % MPPE_CCOUNT_SPACE;
+	if (state->debug >= 7)
+		printk(KERN_DEBUG "mppe_compress[%d]: ccount %d\n", state->unit,
+		       state->ccount);
+	obuf[0] = state->ccount >> 8;
+	obuf[1] = state->ccount & 0xff;
+
+	if (!state->stateful ||	/* stateless mode     */
+	    ((state->ccount & 0xff) == 0xff) ||	/* "flag" packet      */
+	    (state->bits & MPPE_BIT_FLUSHED)) {	/* CCP Reset-Request  */
+		/* We must rekey */
+		if (state->debug && state->stateful)
+			printk(KERN_DEBUG "mppe_compress[%d]: rekeying\n",
+			       state->unit);
+		mppe_rekey(state, 0);
+		state->bits |= MPPE_BIT_FLUSHED;
+	}
+	obuf[0] |= state->bits;
+	state->bits &= ~MPPE_BIT_FLUSHED;	/* reset for next xmit */
+
+	obuf += MPPE_OVHD;
+	ibuf += 2;		/* skip to proto field */
+	isize -= 2;
+
+	/* Encrypt packet */
+	setup_sg(sg_in, ibuf, isize);
+	setup_sg(sg_out, obuf, osize);
+	if (crypto_cipher_encrypt(state->arc4, sg_out, sg_in, isize) != 0) {
+		printk(KERN_DEBUG "crypto_cypher_encrypt failed\n");
+		return -1;
+	}
+
+	state->stats.unc_bytes += isize;
+	state->stats.unc_packets++;
+	state->stats.comp_bytes += osize;
+	state->stats.comp_packets++;
+
+	return osize;
+}
+
+/*
+ * Since every frame grows by MPPE_OVHD + 2 bytes, this is always going
+ * to look bad ... and the longer the link is up the worse it will get.
+ */
+static void mppe_comp_stats(void *arg, struct compstat *stats)
+{
+	struct ppp_mppe_state *state = (struct ppp_mppe_state *) arg;
+
+	*stats = state->stats;
+}
+
+static int
+mppe_decomp_init(void *arg, unsigned char *options, int optlen, int unit,
+		 int hdrlen, int mru, int debug)
+{
+	/* ARGSUSED */
+	return mppe_init(arg, options, optlen, unit, debug, "mppe_decomp_init");
+}
+
+/*
+ * We received a CCP Reset-Ack.  Just ignore it.
+ */
+static void mppe_decomp_reset(void *arg)
+{
+	/* ARGSUSED */
+	return;
+}
+
+/*
+ * Decompress (decrypt) an MPPE packet.
+ */
+static int
+mppe_decompress(void *arg, unsigned char *ibuf, int isize, unsigned char *obuf,
+		int osize)
+{
+	struct ppp_mppe_state *state = (struct ppp_mppe_state *) arg;
+	unsigned ccount;
+	int flushed = MPPE_BITS(ibuf) & MPPE_BIT_FLUSHED;
+	int sanity = 0;
+	struct scatterlist sg_in[1], sg_out[1];
+
+	if (isize <= PPP_HDRLEN + MPPE_OVHD) {
+		if (state->debug)
+			printk(KERN_DEBUG
+			       "mppe_decompress[%d]: short pkt (%d)\n",
+			       state->unit, isize);
+		return DECOMP_ERROR;
+	}
+
+	/*
+	 * Make sure we have enough room to decrypt the packet.
+	 * Note that for our test we only subtract 1 byte whereas in
+	 * mppe_compress() we added 2 bytes (+MPPE_OVHD);
+	 * this is to account for possible PFC.
+	 */
+	if (osize < isize - MPPE_OVHD - 1) {
+		printk(KERN_DEBUG "mppe_decompress[%d]: osize too small! "
+		       "(have: %d need: %d)\n", state->unit,
+		       osize, isize - MPPE_OVHD - 1);
+		return DECOMP_ERROR;
+	}
+	osize = isize - MPPE_OVHD - 2;	/* assume no PFC */
+
+	ccount = MPPE_CCOUNT(ibuf);
+	if (state->debug >= 7)
+		printk(KERN_DEBUG "mppe_decompress[%d]: ccount %d\n",
+		       state->unit, ccount);
+
+	/* sanity checks -- terminate with extreme prejudice */
+	if (!(MPPE_BITS(ibuf) & MPPE_BIT_ENCRYPTED)) {
+		printk(KERN_DEBUG
+		       "mppe_decompress[%d]: ENCRYPTED bit not set!\n",
+		       state->unit);
+		state->sanity_errors += 100;
+		sanity = 1;
+	}
+	if (!state->stateful && !flushed) {
+		printk(KERN_DEBUG "mppe_decompress[%d]: FLUSHED bit not set in "
+		       "stateless mode!\n", state->unit);
+		state->sanity_errors += 100;
+		sanity = 1;
+	}
+	if (state->stateful && ((ccount & 0xff) == 0xff) && !flushed) {
+		printk(KERN_DEBUG "mppe_decompress[%d]: FLUSHED bit not set on "
+		       "flag packet!\n", state->unit);
+		state->sanity_errors += 100;
+		sanity = 1;
+	}
+
+	if (sanity) {
+		if (state->sanity_errors < SANITY_MAX)
+			return DECOMP_ERROR;
+		else
+			/*
+			 * Take LCP down if the peer is sending too many bogons.
+			 * We don't want to do this for a single or just a few
+			 * instances since it could just be due to packet corruption.
+			 */
+			return DECOMP_FATALERROR;
+	}
+
+	/*
+	 * Check the coherency count.
+	 */
+
+	if (!state->stateful) {
+		/* RFC 3078, sec 8.1.  Rekey for every packet. */
+		while (state->ccount != ccount) {
+			mppe_rekey(state, 0);
+			state->ccount = (state->ccount + 1) % MPPE_CCOUNT_SPACE;
+		}
+	} else {
+		/* RFC 3078, sec 8.2. */
+		if (!state->discard) {
+			/* normal state */
+			state->ccount = (state->ccount + 1) % MPPE_CCOUNT_SPACE;
+			if (ccount != state->ccount) {
+				/*
+				 * (ccount > state->ccount)
+				 * Packet loss detected, enter the discard state.
+				 * Signal the peer to rekey (by sending a CCP Reset-Request).
+				 */
+				state->discard = 1;
+				return DECOMP_ERROR;
+			}
+		} else {
+			/* discard state */
+			if (!flushed) {
+				/* ccp.c will be silent (no additional CCP Reset-Requests). */
+				return DECOMP_ERROR;
+			} else {
+				/* Rekey for every missed "flag" packet. */
+				while ((ccount & ~0xff) !=
+				       (state->ccount & ~0xff)) {
+					mppe_rekey(state, 0);
+					state->ccount =
+					    (state->ccount +
+					     256) % MPPE_CCOUNT_SPACE;
+				}
+
+				/* reset */
+				state->discard = 0;
+				state->ccount = ccount;
+				/*
+				 * Another problem with RFC 3078 here.  It implies that the
+				 * peer need not send a Reset-Ack packet.  But RFC 1962
+				 * requires it.  Hopefully, M$ does send a Reset-Ack; even
+				 * though it isn't required for MPPE synchronization, it is
+				 * required to reset CCP state.
+				 */
+			}
+		}
+		if (flushed)
+			mppe_rekey(state, 0);
+	}
+
+	/*
+	 * Fill in the first part of the PPP header.  The protocol field
+	 * comes from the decrypted data.
+	 */
+	obuf[0] = PPP_ADDRESS(ibuf);	/* +1 */
+	obuf[1] = PPP_CONTROL(ibuf);	/* +1 */
+	obuf += 2;
+	ibuf += PPP_HDRLEN + MPPE_OVHD;
+	isize -= PPP_HDRLEN + MPPE_OVHD;	/* -6 */
+	/* net osize: isize-4 */
+
+	/*
+	 * Decrypt the first byte in order to check if it is
+	 * a compressed or uncompressed protocol field.
+	 */
+	setup_sg(sg_in, ibuf, 1);
+	setup_sg(sg_out, obuf, 1);
+	if (crypto_cipher_decrypt(state->arc4, sg_out, sg_in, 1) != 0) {
+		printk(KERN_DEBUG "crypto_cypher_decrypt failed\n");
+		return DECOMP_ERROR;
+	}
+
+	/*
+	 * Do PFC decompression.
+	 * This would be nicer if we were given the actual sk_buff
+	 * instead of a char *.
+	 */
+	if ((obuf[0] & 0x01) != 0) {
+		obuf[1] = obuf[0];
+		obuf[0] = 0;
+		obuf++;
+		osize++;
+	}
+
+	/* And finally, decrypt the rest of the packet. */
+	setup_sg(sg_in, ibuf + 1, isize - 1);
+	setup_sg(sg_out, obuf + 1, osize - 1);
+	if (crypto_cipher_decrypt(state->arc4, sg_out, sg_in, isize - 1) != 0) {
+		printk(KERN_DEBUG "crypto_cypher_decrypt failed\n");
+		return DECOMP_ERROR;
+	}
+
+	state->stats.unc_bytes += osize;
+	state->stats.unc_packets++;
+	state->stats.comp_bytes += isize;
+	state->stats.comp_packets++;
+
+	/* good packet credit */
+	state->sanity_errors >>= 1;
+
+	return osize;
+}
+
+/*
+ * Incompressible data has arrived (this should never happen!).
+ * We should probably drop the link if the protocol is in the range
+ * of what should be encrypted.  At the least, we should drop this
+ * packet.  (How to do this?)
+ */
+static void mppe_incomp(void *arg, unsigned char *ibuf, int icnt)
+{
+	struct ppp_mppe_state *state = (struct ppp_mppe_state *) arg;
+
+	if (state->debug &&
+	    (PPP_PROTOCOL(ibuf) >= 0x0021 && PPP_PROTOCOL(ibuf) <= 0x00fa))
+		printk(KERN_DEBUG
+		       "mppe_incomp[%d]: incompressible (unencrypted) data! "
+		       "(proto %04x)\n", state->unit, PPP_PROTOCOL(ibuf));
+
+	state->stats.inc_bytes += icnt;
+	state->stats.inc_packets++;
+	state->stats.unc_bytes += icnt;
+	state->stats.unc_packets++;
+}
+
+/*************************************************************
+ * Module interface table
+ *************************************************************/
+
+/*
+ * Procedures exported to if_ppp.c.
+ */
+static struct compressor ppp_mppe = {
+	.compress_proto = CI_MPPE,
+	.comp_alloc     = mppe_alloc,
+	.comp_free      = mppe_free,
+	.comp_init      = mppe_comp_init,
+	.comp_reset     = mppe_comp_reset,
+	.compress       = mppe_compress,
+	.comp_stat      = mppe_comp_stats,
+	.decomp_alloc   = mppe_alloc,
+	.decomp_free    = mppe_free,
+	.decomp_init    = mppe_decomp_init,
+	.decomp_reset   = mppe_decomp_reset,
+	.decompress     = mppe_decompress,
+	.incomp         = mppe_incomp,
+	.decomp_stat    = mppe_comp_stats,
+	.owner          = THIS_MODULE,
+	.comp_extra     = MPPE_PAD,
+};
+
+/*
+ * ppp_mppe_init()
+ *
+ * Prior to allowing load, try to load the arc4 and sha1 crypto
+ * libraries.  The actual use will be allocated later, but
+ * this way the module will fail to insmod if they aren't available.
+ */
+
+static int __init ppp_mppe_init(void)
+{
+	int answer;
+	if (!(crypto_alg_available("arc4", 0) &&
+	      crypto_alg_available("sha1", 0)))
+		return -ENODEV;
+
+	sha_pad = kmalloc(sizeof(struct sha_pad), GFP_KERNEL);
+	if (!sha_pad)
+		return -ENOMEM;
+	sha_pad_init(sha_pad);
+
+	answer = ppp_register_compressor(&ppp_mppe);
+
+	if (answer == 0)
+		printk(KERN_INFO "PPP MPPE Compression module registered\n");
+	else
+		kfree(sha_pad);
+
+	return answer;
+}
+
+static void __exit ppp_mppe_cleanup(void)
+{
+	ppp_unregister_compressor(&ppp_mppe);
+	kfree(sha_pad);
+}
+
+module_init(ppp_mppe_init);
+module_exit(ppp_mppe_cleanup);
diff -urNp --exclude-from=/mdomsch2/excludes --minimal linux-2.6/drivers/net/ppp_mppe.h linux-2.6-ppp_mppe/drivers/net/ppp_mppe.h
--- linux-2.6/drivers/net/ppp_mppe.h	1969-12-31 16:00:00.000000000 -0800
+++ linux-2.6-ppp_mppe/drivers/net/ppp_mppe.h	2005-08-12 11:19:18.000000000 -0700
@@ -0,0 +1,86 @@
+#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)
diff -urNp --exclude-from=/mdomsch2/excludes --minimal linux-2.6/include/linux/if_ppp.h linux-2.6-ppp_mppe/include/linux/if_ppp.h
--- linux-2.6/include/linux/if_ppp.h	2005-08-11 22:39:31.000000000 -0700
+++ linux-2.6-ppp_mppe/include/linux/if_ppp.h	2005-08-12 11:06:26.000000000 -0700
@@ -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 -urNp --exclude-from=/mdomsch2/excludes --minimal linux-2.6/include/linux/ppp-comp.h linux-2.6-ppp_mppe/include/linux/ppp-comp.h
--- linux-2.6/include/linux/ppp-comp.h	2005-08-11 22:39:31.000000000 -0700
+++ linux-2.6-ppp_mppe/include/linux/ppp-comp.h	2005-08-12 11:18:26.000000000 -0700
@@ -111,6 +111,8 @@ struct compressor {
 
 	/* Used in locking compressor modules */
 	struct module *owner;
+	/* Extra skb space needed by the compressor algorithm */
+	unsigned int comp_extra;
 };
 
 /*
@@ -191,6 +193,13 @@ struct compressor {
 #define DEFLATE_CHK_SEQUENCE	0
 
 /*
+ * Definitions for MPPE.
+ */
+
+#define CI_MPPE                18      /* config option for MPPE */
+#define CILEN_MPPE              6      /* length of config option */
+
+/*
  * Definitions for other, as yet unsupported, compression methods.
  */
 


-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox