📄 ppp.diff
字号:
diff -uNr ppp/pppd/main.c ppp-mpls/pppd/main.c--- ppp/pppd/main.c 2005-01-24 21:02:51.659741400 -0600+++ ppp-mpls/pppd/main.c 2005-01-24 21:09:10.904087496 -0600@@ -70,6 +70,9 @@ #include "fsm.h" #include "lcp.h" #include "ipcp.h"++#include "mplscp.h"+ #ifdef INET6 #include "ipv6cp.h" #endif@@ -246,6 +249,7 @@ &cbcp_protent, #endif &ipcp_protent,+ &mplscp_protent, #ifdef INET6 &ipv6cp_protent, #endifdiff -uNr ppp/pppd/Makefile.linux ppp-mpls/pppd/Makefile.linux--- ppp/pppd/Makefile.linux 2005-01-24 21:02:51.661741096 -0600+++ ppp-mpls/pppd/Makefile.linux 2005-01-24 21:09:10.185196784 -0600@@ -13,16 +13,16 @@ PPPDSRCS = main.c magic.c fsm.c lcp.c ipcp.c upap.c chap-new.c md5.c ccp.c \ ecp.c ipxcp.c auth.c options.c sys-linux.c md4.c chap_ms.c \- demand.c utils.c tty.c eap.c chap-md5.c+ demand.c utils.c tty.c eap.c chap-md5.c mplscp.c HEADERS = ccp.h chap-new.h ecp.h fsm.h ipcp.h \ ipxcp.h lcp.h magic.h md5.h patchlevel.h pathnames.h pppd.h \- upap.h eap.h+ upap.h eap.h mplscp.h MANPAGES = pppd.8 PPPDOBJS = main.o magic.o fsm.o lcp.o ipcp.o upap.o chap-new.o md5.o ccp.o \ ecp.o auth.o options.o demand.o utils.o sys-linux.o ipxcp.o tty.o \- eap.o chap-md5.o+ eap.o chap-md5.o mplscp.o # # include dependencies if presentdiff -uNr ppp/pppd/mplscp.c ppp-mpls/pppd/mplscp.c--- ppp/pppd/mplscp.c 1969-12-31 18:00:00.000000000 -0600+++ ppp-mpls/pppd/mplscp.c 2004-07-13 22:46:26.000000000 -0500@@ -0,0 +1,371 @@++/* MPLSCP - Serge.Krier@advalvas.be (C) 2001 */++#include <stdio.h>+#include <string.h>+#include <netdb.h>+#include <sys/param.h>+#include <sys/types.h>+#include <sys/socket.h>+#include <netinet/in.h>+#include <arpa/inet.h>++#include "pppd.h"+#include "fsm.h"+#include "mplscp.h"+++/* local vars */+/* static int mplscp_is_up; */ /* have called np_up() */++/*+ * Callbacks for fsm code. (CI = Configuration Information)+ */+static void mplscp_resetci __P((fsm *)); /* Reset our CI */+static int mplscp_cilen __P((fsm *)); /* Return length of our CI */+static void mplscp_addci __P((fsm *, u_char *, int *)); /* Add our CI */+static int mplscp_ackci __P((fsm *, u_char *, int)); /* Peer ack'd our CI */+static int mplscp_nakci __P((fsm *, u_char *, int)); /* Peer nak'd our CI */+static int mplscp_rejci __P((fsm *, u_char *, int)); /* Peer rej'd our CI */+static int mplscp_reqci __P((fsm *, u_char *, int *, int)); /* Rcv CI */+static void mplscp_up __P((fsm *)); /* We're UP */+static void mplscp_down __P((fsm *)); /* We're DOWN */+static void mplscp_finished __P((fsm *)); /* Don't need lower layer */++fsm mplscp_fsm[NUM_PPP]; /* MPLSCP fsm structure */++static fsm_callbacks mplscp_callbacks = { /* MPLSCP callback routines */+ mplscp_resetci, /* Reset our Configuration Information */+ mplscp_cilen, /* Length of our Configuration Information */+ mplscp_addci, /* Add our Configuration Information */+ mplscp_ackci, /* ACK our Configuration Information */+ mplscp_nakci, /* NAK our Configuration Information */+ mplscp_rejci, /* Reject our Configuration Information */+ mplscp_reqci, /* Request peer's Configuration Information */+ mplscp_up, /* Called when fsm reaches OPENED state */+ mplscp_down, /* Called when fsm leaves OPENED state */+ NULL, /* Called when we want the lower layer up */+ mplscp_finished, /* Called when we want the lower layer down */+ NULL, /* Called when Protocol-Reject received */+ NULL, /* Retransmission is necessary */+ NULL, /* Called to handle protocol-specific codes */+ "MPLSCP" /* String name of protocol */+};++static option_t mplscp_option_list[] = {+ { "mpls", o_bool, &mplscp_protent.enabled_flag,+ "Enable MPLSCP (and MPLS)", 1 },+ { NULL } };++/*+ * Protocol entry points from main code.+ */++static void mplscp_init __P((int));+static void mplscp_open __P((int));+static void mplscp_close __P((int, char *));+static void mplscp_lowerup __P((int));+static void mplscp_lowerdown __P((int));+static void mplscp_input __P((int, u_char *, int));+static void mplscp_protrej __P((int));+static int mplscp_printpkt __P((u_char *, int,+ void (*) __P((void *, char *, ...)), void *));++struct protent mplscp_protent = {+ PPP_MPLSCP,+ mplscp_init,+ mplscp_input,+ mplscp_protrej,+ mplscp_lowerup,+ mplscp_lowerdown,+ mplscp_open,+ mplscp_close,+ mplscp_printpkt,+ NULL,+ 0, /* MPLS not enabled by default */+ "MPLSCP",+ "MPLS",+ mplscp_option_list,+ NULL,+ NULL,+ NULL+};++/*+ * mplscp_init - Initialize MPLSCP.+ */+static void+mplscp_init(int unit) {++ fsm *f = &mplscp_fsm[unit];+ + f->unit = unit;+ f->protocol = PPP_MPLSCP;+ f->callbacks = &mplscp_callbacks; + fsm_init(&mplscp_fsm[unit]); + +}++/*+ * mplscp_open - MPLSCP is allowed to come up.+ */+static void+mplscp_open(int unit) {+ + fsm_open(&mplscp_fsm[unit]);++}++/*+ * mplscp_close - Take MPLSCP down.+ */+static void+mplscp_close(int unit, char *reason) {++ fsm_close(&mplscp_fsm[unit], reason);++}++/*+ * mplscp_lowerup - The lower layer is up.+ */+static void+mplscp_lowerup(int unit) {++ fsm_lowerup(&mplscp_fsm[unit]);+}++/*+ * mplscp_lowerdown - The lower layer is down.+ */+static void+mplscp_lowerdown(int unit) {+ + fsm_lowerdown(&mplscp_fsm[unit]);+}++/*+ * mplscp_input - Input MPLSCP packet.+ */+static void+mplscp_input(int unit, u_char *p, int len) {++ fsm_input(&mplscp_fsm[unit], p, len);+}++/*+ * mplscp_protrej - A Protocol-Reject was received for MPLSCP.+ * Pretend the lower layer went down, so we shut up.+ */+static void+mplscp_protrej(int unit) {++ fsm_lowerdown(&mplscp_fsm[unit]);+}++/*+ * mplscp_resetci - Reset our CI.+ * Called by fsm_sconfreq, Send Configure Request.+ */+static void+mplscp_resetci(fsm *f) {++ return;+}++/*+ * mplscp_cilen - Return length of our CI.+ * Called by fsm_sconfreq, Send Configure Request.+ */+static int+mplscp_cilen(fsm *f) {++ return 0;+}++/*+ * mplscp_addci - Add our desired CIs to a packet.+ * Called by fsm_sconfreq, Send Configure Request.+ */+static void+mplscp_addci(fsm *f, u_char *ucp, int *lenp) {++}++/*+ * ipcp_ackci - Ack our CIs.+ * Called by fsm_rconfack, Receive Configure ACK.+ *+ * Returns:+ * 0 - Ack was bad.+ * 1 - Ack was good.+ */+static int+mplscp_ackci(fsm *f, u_char *p, int len) {+ + return 1;++}++/*+ * mplscp_nakci - Peer has sent a NAK for some of our CIs.+ * This should not modify any state if the Nak is bad+ * or if MPLSCP is in the OPENED state.+ * Calback from fsm_rconfnakrej - Receive Configure-Nak or Configure-Reject.+ *+ * Returns:+ * 0 - Nak was bad.+ * 1 - Nak was good.+ */+static int+mplscp_nakci(fsm *f, u_char *p, int len) {++ return 1;+}++/*+ * MPLSVP_rejci - Reject some of our CIs.+ * Callback from fsm_rconfnakrej.+ */+static int+mplscp_rejci(fsm *f, u_char *p, int len) {++ return 1;++}++/*+ * mplscp_reqci - Check the peer's requested CIs and send appropriate response.+ * Callback from fsm_rconfreq, Receive Configure Request+ *+ * Returns: CONFACK, CONFNAK or CONFREJ and input packet modified+ * appropriately. If reject_if_disagree is non-zero, doesn't return+ * CONFNAK; returns CONFREJ if it can't return CONFACK.+ */+static int+mplscp_reqci(fsm *f, u_char *inp, int *len, int reject_if_disagree) {+ + + int rc = CONFACK; /* Final packet return code */+ + PUTCHAR(CONFACK,inp);++ return rc;++}++static void+mplscp_up(fsm *f) {++ sifnpmode(f->unit, PPP_MPLS_UC, NPMODE_PASS);+ /* sifnpmode(f->unit, PPP_MPLS_MC, NPMODE_PASS);*/+ + np_up(f->unit, PPP_MPLS_UC);+ /* np_up(f->unit, PPP_MPLS_MC);*/+ /* ipcp_is_up = 1;*/++ +#if 1+ printf("MPLSCP is OPENED\n");+#endif++}++static void+mplscp_down(fsm *f) {+ + sifnpmode(f->unit, PPP_MPLS_UC, NPMODE_DROP);+ /* sifnpmode(f->unit, PPP_MPLS_MC, NPMODE_DROP);*/++ sifdown(f->unit); + +#if 1+ printf("MPLSCP is CLOSED\n");+#endif+ ++}++static void +mplscp_finished(fsm *f) {+ + np_finished(f->unit, PPP_MPLS_UC);+ /* np_finished(f->unit, PPP_MPLS_MC);*/++}++/*+ * mpls_printpkt - print the contents of an MPLSCP packet.+ */+static char *mplscp_codenames[] = {+ "ConfReq", "ConfAck", "ConfNak", "ConfRej",+ "TermReq", "TermAck", "CodeRej"+};++static int+mplscp_printpkt(u_char *p, int plen, + void (*printer) __P((void *, char *, ...)),+ void *arg) {+ + int code, id, len, olen;+ u_char *pstart, *optend;++ if (plen < HEADERLEN)+ return 0;+ pstart = p;+ GETCHAR(code, p);+ GETCHAR(id, p);+ GETSHORT(len, p);+ if (len < HEADERLEN || len > plen)+ return 0;++ if (code >= 1 && code <= sizeof(mplscp_codenames) / sizeof(char *))+ printer(arg, " %s", mplscp_codenames[code-1]);+ else+ printer(arg, " code=0x%x", code);+ printer(arg, " id=0x%x", id);+ len -= HEADERLEN;+ switch (code) {+ case CONFREQ:+ case CONFACK:+ case CONFNAK:+ case CONFREJ:+ /* print option list */+ while (len >= 2) {+ GETCHAR(code, p);+ GETCHAR(olen, p);+ p -= 2;+ if (olen < 2 || olen > len) {+ break;+ }+ printer(arg, " <");+ len -= olen;+ optend = p + olen;+ while (p < optend) {+ GETCHAR(code, p);+ printer(arg, " %.2x", code);+ }+ printer(arg, ">");+ }+ break;++ case TERMACK:+ case TERMREQ:+ if (len > 0 && *p >= ' ' && *p < 0x7f) {+ printer(arg, " ");+ print_string((char *)p, len, printer, arg);+ p += len;+ len = 0;+ }+ break;+ }++ /* print the rest of the bytes in the packet */+ for (; len > 0; --len) {+ GETCHAR(code, p);+ printer(arg, " %.2x", code);+ }++ return p - pstart;++}diff -uNr ppp/pppd/mplscp.h ppp-mpls/pppd/mplscp.h--- ppp/pppd/mplscp.h 1969-12-31 18:00:00.000000000 -0600+++ ppp-mpls/pppd/mplscp.h 2004-07-13 22:46:26.000000000 -0500@@ -0,0 +1,8 @@++/* MPLSCP - Serge.Krier@advalvas.be (C) 2001 */++#define PPP_MPLSCP 0x8281+#define PPP_MPLS_UC 0x0281+#define PPP_MPLS_MC 0x0283++extern struct protent mplscp_protent;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -