Module Name: src
Committed By: is
Date: Tue Apr 7 18:28:40 UTC 2020
Modified Files:
src/sys/net [is-mlppp]: if_spppsubr.c
Log Message:
Define a few more LCP options. Recognize, sanity-check and report (but
still reject for the moment) multilink PPP configuration options received.
To generate a diff of this commit:
cvs rdiff -u -r1.187 -r1.187.2.1 src/sys/net/if_spppsubr.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/net/if_spppsubr.c
diff -u src/sys/net/if_spppsubr.c:1.187 src/sys/net/if_spppsubr.c:1.187.2.1
--- src/sys/net/if_spppsubr.c:1.187 Fri Mar 6 10:26:59 2020
+++ src/sys/net/if_spppsubr.c Tue Apr 7 18:28:40 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: if_spppsubr.c,v 1.187 2020/03/06 10:26:59 knakahara Exp $ */
+/* $NetBSD: if_spppsubr.c,v 1.187.2.1 2020/04/07 18:28:40 is Exp $ */
/*
* Synchronous PPP/Cisco link level subroutines.
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_spppsubr.c,v 1.187 2020/03/06 10:26:59 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_spppsubr.c,v 1.187.2.1 2020/04/07 18:28:40 is Exp $");
#if defined(_KERNEL_OPT)
#include "opt_inet.h"
@@ -146,6 +146,13 @@ __KERNEL_RCSID(0, "$NetBSD: if_spppsubr.
#define LCP_OPT_RESERVED 6 /* reserved */
#define LCP_OPT_PROTO_COMP 7 /* protocol field compression */
#define LCP_OPT_ADDR_COMP 8 /* address/control field compression */
+#define LCP_OPT_FCS_ALTS 9 /* FCS alternatives */
+#define LCP_OPT_SELF_DESC_PAD 10 /* self-describing padding */
+#define LCP_OPT_CALL_BACK 13 /* callback */
+#define LCP_OPT_COMPOUND_FRMS 15 /* compound frames */
+#define LCP_OPT_MP_MRRU 17 /* multilink MRRU */
+#define LCP_OPT_MP_SSNHF 18 /* multilink short seq. numbers */
+#define LCP_OPT_MP_EID 19 /* multilink endpoint discriminator */
#define IPCP_OPT_ADDRESSES 1 /* both IP addresses; deprecated */
#define IPCP_OPT_COMPRESSION 2 /* IP compression protocol */
@@ -2374,6 +2381,36 @@ sppp_lcp_RCR(struct sppp *sp, struct lcp
if (debug)
addlog(" [invalid]");
break;
+ case LCP_OPT_MP_EID:
+ if (len >= l && l >= 3) {
+ if (debug)
+ addlog(" [rej]");
+ break;
+ }
+ if (debug)
+ addlog(" [invalid]");
+ break;
+ case LCP_OPT_MP_SSNHF:
+ if (len >= 2 && l == 2) {
+ if (debug)
+ addlog(" [rej]");
+ break;
+ }
+ if (debug)
+ addlog(" [invalid]");
+ break;
+ case LCP_OPT_MP_MRRU:
+ /* Multilink maximum received reconstructed unit */
+ /* should be fall through, both are same length */
+ /* for now, check, then reject anyway */
+ if (len >= 4 && l == 4) {
+ if (debug)
+ addlog(" %d [rej]", (p[2] <<8) + p[3]);
+ break;
+ }
+ if (debug)
+ addlog(" [invalid]");
+ break;
case LCP_OPT_MRU:
/* Maximum receive unit. */
if (len >= 4 && l == 4)
@@ -6016,6 +6053,12 @@ sppp_lcp_opt_name(u_char opt)
case LCP_OPT_MAGIC: return "magic";
case LCP_OPT_PROTO_COMP: return "proto-comp";
case LCP_OPT_ADDR_COMP: return "addr-comp";
+ case LCP_OPT_SELF_DESC_PAD: return "sdpad";
+ case LCP_OPT_CALL_BACK: return "callback";
+ case LCP_OPT_COMPOUND_FRMS: return "cmpd-frms";
+ case LCP_OPT_MP_MRRU: return "mrru";
+ case LCP_OPT_MP_SSNHF: return "mp-ssnhf";
+ case LCP_OPT_MP_EID: return "mp-eid";
}
snprintf(buf, sizeof(buf), "0x%x", opt);
return buf;