Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.sbin/pppd/pppd New pppd, post 2.3.9 directly from the re...



details:   https://anonhg.NetBSD.org/src/rev/93d2efe6c09c
branches:  trunk
changeset: 475732:93d2efe6c09c
user:      christos <christos%NetBSD.org@localhost>
date:      Tue Aug 24 20:25:43 1999 +0000

description:
New pppd, post 2.3.9 directly from the repository.

diffstat:

 usr.sbin/pppd/pppd/eui64.c  |    40 +
 usr.sbin/pppd/pppd/eui64.h  |    68 ++
 usr.sbin/pppd/pppd/ipv6cp.c |  1364 +++++++++++++++++++++++++++++++++++++++++++
 usr.sbin/pppd/pppd/ipv6cp.h |    58 +
 usr.sbin/pppd/pppd/utils.c  |   876 +++++++++++++++++++++++++++
 5 files changed, 2406 insertions(+), 0 deletions(-)

diffs (truncated from 2426 to 300 lines):

diff -r 18256191418a -r 93d2efe6c09c usr.sbin/pppd/pppd/eui64.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.sbin/pppd/pppd/eui64.c        Tue Aug 24 20:25:43 1999 +0000
@@ -0,0 +1,40 @@
+/*
+ * eui64.c - EUI64 routines for IPv6CP.
+ *
+ * (c) 1999 Tommi Komulainen <Tommi.Komulainen%iki.fi@localhost>
+ *
+ * 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.
+ *
+ * $Id: eui64.c,v 1.1.1.1 1999/08/24 20:25:44 christos Exp $
+ */
+
+#define RCSID  "$Id: eui64.c,v 1.1.1.1 1999/08/24 20:25:44 christos Exp $"
+
+#include "pppd.h"
+
+static const char rcsid[] = RCSID;
+
+/*
+ * eui64_ntoa - Make an ascii representation of an interface identifier
+ */
+char *
+eui64_ntoa(e)
+    eui64_t e;
+{
+    static char buf[32];
+
+    snprintf(buf, 32, "%02x%02x:%02x%02x:%02x%02x:%02x%02x",
+            e.e8[0], e.e8[1], e.e8[2], e.e8[3], 
+            e.e8[4], e.e8[5], e.e8[6], e.e8[7]);
+    return buf;
+}
diff -r 18256191418a -r 93d2efe6c09c usr.sbin/pppd/pppd/eui64.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.sbin/pppd/pppd/eui64.h        Tue Aug 24 20:25:43 1999 +0000
@@ -0,0 +1,68 @@
+/*
+ * eui64.h - EUI64 routines for IPv6CP.
+ *
+ * (c) 1999 Tommi Komulainen <Tommi.Komulainen%iki.fi@localhost>
+ *
+ * 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.
+ *
+ * $Id: eui64.h,v 1.1.1.1 1999/08/24 20:25:44 christos Exp $
+ */
+
+/*
+ * TODO:
+ *
+ * Maybe this should be done by processing struct in6_addr directly...
+ */
+typedef union
+{
+    u_int8_t e8[8];
+    u_int16_t e16[4];
+    u_int32_t e32[2];
+} eui64_t;
+
+#define eui64_iszero(e)                (((e).e32[0] | (e).e32[1]) == 0)
+#define eui64_equals(e, o)     (((e).e32[0] == (o).e32[0]) && \
+                               ((e).e32[1] == (o).e32[1]))
+#define eui64_zero(e)          (e).e32[0] = (e).e32[1] = 0;
+
+#define eui64_copy(s, d)       memcpy(&(d), &(s), sizeof(eui64_t))
+
+#define eui64_magic(e)         do {                    \
+                               (e).e32[0] = magic();   \
+                               (e).e32[1] = magic();   \
+                               (e).e8[0] &= ~2;        \
+                               } while (0)
+#define eui64_magic_nz(x)      do {                            \
+                               eui64_magic(x);                 \
+                               } while (eui64_iszero(x))
+#define eui64_magic_ne(x, y)   do {                            \
+                               eui64_magic(x);                 \
+                               } while (eui64_equals(x, y))
+
+#define eui64_get(ll, cp)      do {                            \
+                               eui64_copy((*cp), (ll));        \
+                               (cp) += sizeof(eui64_t);        \
+                               } while (0)
+
+#define eui64_put(ll, cp)      do {                            \
+                               eui64_copy((ll), (*cp));        \
+                               (cp) += sizeof(eui64_t);        \
+                               } while (0)
+
+#define eui64_set32(e, l)      do {                    \
+                               (e).e32[0] = 0;         \
+                               (e).e32[1] = htonl(l);  \
+                               } while (0)
+#define eui64_setlo32(e, l)    eui64_set32(e, l)
+
+char *eui64_ntoa __P((eui64_t));       /* Returns ascii representation of id */
diff -r 18256191418a -r 93d2efe6c09c usr.sbin/pppd/pppd/ipv6cp.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.sbin/pppd/pppd/ipv6cp.c       Tue Aug 24 20:25:43 1999 +0000
@@ -0,0 +1,1364 @@
+/*
+ * ipv6cp.c - PPP IPV6 Control Protocol.
+ *
+ * Derived from :
+ *
+ *
+ * ipcp.c - PPP IP Control Protocol.
+ *
+ * Copyright (c) 1989 Carnegie Mellon University.
+ * All rights reserved.
+ *
+ * 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.
+ *
+ * $Id: ipv6cp.c,v 1.1.1.1 1999/08/24 20:25:43 christos Exp $ 
+ *
+ *
+ * Original version by Inria (www.inria.fr)
+ * Modified to match RFC2472 by Tommi Komulainen <Tommi.Komulainen%iki.fi@localhost>
+ */
+
+#define RCSID  "$Id: ipv6cp.c,v 1.1.1.1 1999/08/24 20:25:43 christos Exp $"
+
+/*
+ * TODO: 
+ *
+ * Better defines for selecting the ordering of
+ *   interface up / set address. (currently checks for __linux__,
+ *   since SVR4 && (SNI || __USLC__) didn't work properly)
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.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 "ipcp.h"
+#include "ipv6cp.h"
+#include "magic.h"
+#include "pathnames.h"
+
+static const char rcsid[] = RCSID;
+
+/* global vars */
+ipv6cp_options ipv6cp_wantoptions[NUM_PPP];     /* Options that we want to request */
+ipv6cp_options ipv6cp_gotoptions[NUM_PPP];     /* Options that peer ack'd */
+ipv6cp_options ipv6cp_allowoptions[NUM_PPP];   /* Options we allow peer to request */
+ipv6cp_options ipv6cp_hisoptions[NUM_PPP];     /* Options that we ack'd */
+int no_ifaceid_neg = 0;
+
+/* local vars */
+static int ipv6cp_is_up;
+
+/*
+ * Callbacks for fsm code.  (CI = Configuration Information)
+ */
+static void ipv6cp_resetci __P((fsm *));       /* Reset our CI */
+static int  ipv6cp_cilen __P((fsm *));         /* Return length of our CI */
+static void ipv6cp_addci __P((fsm *, u_char *, int *)); /* Add our CI */
+static int  ipv6cp_ackci __P((fsm *, u_char *, int));  /* Peer ack'd our CI */
+static int  ipv6cp_nakci __P((fsm *, u_char *, int));  /* Peer nak'd our CI */
+static int  ipv6cp_rejci __P((fsm *, u_char *, int));  /* Peer rej'd our CI */
+static int  ipv6cp_reqci __P((fsm *, u_char *, int *, int)); /* Rcv CI */
+static void ipv6cp_up __P((fsm *));            /* We're UP */
+static void ipv6cp_down __P((fsm *));          /* We're DOWN */
+static void ipv6cp_finished __P((fsm *));      /* Don't need lower layer */
+
+fsm ipv6cp_fsm[NUM_PPP];               /* IPV6CP fsm structure */
+
+static fsm_callbacks ipv6cp_callbacks = { /* IPV6CP callback routines */
+    ipv6cp_resetci,            /* Reset our Configuration Information */
+    ipv6cp_cilen,              /* Length of our Configuration Information */
+    ipv6cp_addci,              /* Add our Configuration Information */
+    ipv6cp_ackci,              /* ACK our Configuration Information */
+    ipv6cp_nakci,              /* NAK our Configuration Information */
+    ipv6cp_rejci,              /* Reject our Configuration Information */
+    ipv6cp_reqci,              /* Request peer's Configuration Information */
+    ipv6cp_up,                 /* Called when fsm reaches OPENED state */
+    ipv6cp_down,               /* Called when fsm leaves OPENED state */
+    NULL,                      /* Called when we want the lower layer up */
+    ipv6cp_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 */
+    "IPV6CP"                   /* String name of protocol */
+};
+
+/*
+ * Command-line options.
+ */
+static int setifaceid __P((char *arg));
+
+static option_t ipv6cp_option_list[] = {
+    { "ipv6", o_special, setifaceid,
+      "Set interface identifiers for IPV6" },
+    { "noipv6", o_bool, &ipv6cp_protent.enabled_flag,
+      "Disable IPv6 and IPv6CP" },
+    { "-ipv6", o_bool, &ipv6cp_protent.enabled_flag,
+      "Disable IPv6 and IPv6CP" },
+
+    { "ipv6cp-accept-local", o_bool, &ipv6cp_allowoptions[0].accept_local,
+      "Accept peer's interface identifier for us", 1 },
+    { "ipv6cp-use-ipaddr", o_bool, &ipv6cp_allowoptions[0].use_ip,
+      "Use (default) IPv4 address as interface identifier", 0 },
+
+    { "ipv6cp-restart", o_int, &ipv6cp_fsm[0].timeouttime,
+      "Set timeout for IPv6CP" },
+    { "ipv6cp-max-terminate", o_int, &ipv6cp_fsm[0].maxtermtransmits,
+      "Set max #xmits for term-reqs" },
+    { "ipv6cp-max-configure", o_int, &ipv6cp_fsm[0].maxconfreqtransmits,
+      "Set max #xmits for conf-reqs" },
+    { "ipv6cp-max-failure", o_int, &ipv6cp_fsm[0].maxnakloops,
+      "Set max #conf-naks for IPv6CP" },
+
+   { NULL }
+};
+
+
+/*
+ * Protocol entry points from main code.
+ */
+static void ipv6cp_init __P((int));
+static void ipv6cp_open __P((int));
+static void ipv6cp_close __P((int, char *));
+static void ipv6cp_lowerup __P((int));
+static void ipv6cp_lowerdown __P((int));
+static void ipv6cp_input __P((int, u_char *, int));
+static void ipv6cp_protrej __P((int));
+static int  ipv6cp_printpkt __P((u_char *, int,
+                              void (*) __P((void *, char *, ...)), void *));
+static void ipv6_check_options __P((void));
+static int  ipv6_demand_conf __P((int));
+static int  ipv6_active_pkt __P((u_char *, int));
+
+struct protent ipv6cp_protent = {
+    PPP_IPV6CP,
+    ipv6cp_init,
+    ipv6cp_input,
+    ipv6cp_protrej,
+    ipv6cp_lowerup,
+    ipv6cp_lowerdown,
+    ipv6cp_open,
+    ipv6cp_close,
+    ipv6cp_printpkt,
+    NULL,
+    0,
+    "IPV6CP",
+    "IPV6",
+    ipv6cp_option_list,
+    ipv6_check_options,
+    ipv6_demand_conf,
+    ipv6_active_pkt
+};
+
+static void ipv6cp_clear_addrs __P((int));
+static void ipv6cp_script __P((char *));
+static void ipv6cp_script_done __P((void *));
+
+/*
+ * Lengths of configuration options.
+ */
+#define CILEN_VOID     2
+#define CILEN_COMPRESS 4       /* length for RFC2023 compress opt. */
+#define CILEN_IFACEID   10     /* RFC2472, interface identifier    */



Home | Main Index | Thread Index | Old Index