--- ppp-2.4.6/pppd/pppd.h	2014-01-17 13:45:00.603145180 +0100
+++ src/pppd/pppd.h	2014-01-17 13:32:34.460703207 +0100
@@ -267,6 +267,7 @@
 extern struct notifier *link_down_notifier; /* link has gone down */
 extern struct notifier *fork_notifier;	/* we are a new child process */
 extern struct notifier *first_lcp_notifier; /* first LCP packet received */
+extern struct notifier *mppe_state_notifier; /* mppe state changed */
 
 /* Values for do_callback and doing_callback */
 #define CALLBACK_DIALIN		1	/* we are expecting the call back */
--- ppp-2.4.6/pppd/ccp.c	2014-01-17 11:37:24.000000000 +0100
+++ src/pppd/ccp.c	2014-01-17 13:39:03.516233793 +0100
@@ -161,6 +161,8 @@
     { NULL }
 };
 
+struct notifier *mppe_state_notifier = NULL;
+
 /*
  * Protocol entry points from main code.
  */
@@ -1445,6 +1447,11 @@
 	notice("%s transmit compression enabled", method_name(ho, NULL));
 #ifdef MPPE
     if (go->mppe) {
+	int arg = (1 << 0);
+
+	if ((go->mppe & MPPE_OPT_128))
+		arg |= (1 << 1);
+	notify(mppe_state_notifier, arg);
 	BZERO(mppe_recv_key, MPPE_MAX_KEY_LEN);
 	BZERO(mppe_send_key, MPPE_MAX_KEY_LEN);
 	continue_networks(f->unit);		/* Bring up IP et al */
@@ -1468,6 +1475,7 @@
 	ccp_gotoptions[f->unit].mppe = 0;
 	if (lcp_fsm[f->unit].state == OPENED) {
 	    /* If LCP is not already going down, make sure it does. */
+	    notify(mppe_state_notifier, 0);
 	    error("MPPE disabled");
 	    lcp_close(f->unit, "MPPE disabled");
 	}
