/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2001-2002 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/sysmacros.h>
#include <net/ppp_defs.h>
#include <net/ppp-comp.h>
#include <netinet/if_ether.h>
#include "snoop.h"
#include "snoop_ppp.h"
/*
* Many strings below are initialized with "Unknown".
*/
/*
* Each known PPP protocol has an associated ppp_protoinfo_t in this array.
* Even if we can't decode the protocol (interpret_proto() == NULL),
* interpret_ppp() will at least print the protocol's name. There is no
* dependency on the ordering of the entries in this array. They have been
* ordered such that the most commonly used protocols are near the front.
* The array is delimited by a last entry of protocol of type
* PPP_PROTO_UNKNOWN.
*/
"Link Quality Report" },
"Link Control Protocol" },
"IP Control Protocol" },
"IPv6 Control Protocol" },
"Compression Control Protocol" },
"Per-Link Compression Control Protocol" },
"Encryption Control Protocol" },
"Per-Link Encryption Control Protocol" },
"Challenge Handshake Authentication Protocl" },
"Password Authentication Protocol" },
};
NULL },
{ OPT_LCP_SSNHF, "Multilink-Short-Sequence-Number-Header-Format",
2, NULL },
{ 0, unknown_string, 0, NULL }
};
{ 0, unknown_string, 0, NULL }
};
{ 0, unknown_string, 0, NULL }
};
NULL },
{ 0, unknown_string, 0, NULL }
};
{ 0, unknown_string, 0, NULL }
};
{ 0, unknown_string, 0, NULL }
};
static char *cp_codearray[] = {
"(Vendor Specific)",
"(Configure-Request)",
"(Configure-Ack)",
"(Configure-Nak)",
"(Configure-Reject)",
"(Terminate-Request)",
"(Terminate-Ack)",
"(Code-Reject)",
"(Protocol-Reject)",
"(Echo-Request)",
"(Echo-Reply)",
"(Discard-Request)",
"(Identification)",
"(Time-Remaining)",
"(Reset-Request)",
"(Reset-Ack)"
};
static char *pap_codearray[] = {
"(Unknown)",
"(Authenticate-Request)",
"(Authenticate-Ack)",
"(Authenticate-Nak)"
};
static char *chap_codearray[] = {
"(Unknown)",
"(Challenge)",
"(Response)",
"(Success)",
"(Failure)"
};
int
{
if (len < 2)
return (len);
(void) sprintf(get_sum_line(),
} else { /* F_DTAIL */
show_space();
show_space();
}
}
return (len);
}
/*
* interpret_ppp_cp() - Interpret PPP control protocols. It is convenient
* to do some of the decoding of these protocols in a common function since
* they share packet formats. This function expects to receive data
* starting with the code field.
*/
static int
{
char *codestr;
return (len);
if (code <= MAX_CPCODE)
else
codestr = "";
(void) sprintf(get_sum_line(),
} else { /* (flags & F_DTAIL) */
show_space();
show_space();
if (len == 0)
return (len);
switch (code) {
case CODE_VENDOR: {
char *ouistr;
return (len);
magicnum);
oui >>= 8;
show_space();
break;
}
case CODE_CONFREQ:
case CODE_CONFACK:
case CODE_CONFNAK:
case CODE_CONFREJ:
/*
* The above all contain protocol specific
* configuration options. Parse these options.
*/
break;
case CODE_TERMREQ:
case CODE_TERMACK:
/*
* The arbitrary data in these two packet types
* is almost always plain text. Print it as such.
*/
show_space();
break;
case CODE_CODEREJ:
/*
* What follows is the rejected control protocol
* packet, starting with the code field.
* Conveniently, we can call interpret_ppp_cp() to
* decode this.
*/
prot_nest_prefix = "";
break;
case CODE_PROTREJ:
/*
* We don't print the rejected-protocol field
* explicitely. Instead, we cheat and pretend that
* the rejected-protocol field is actually the
* protocol field in the included PPP packet. This
* way, we can invoke interpret_ppp() and have it
* treat the included packet normally.
*/
prot_nest_prefix = "";
break;
case CODE_ECHOREQ:
case CODE_ECHOREP:
case CODE_DISCREQ:
case CODE_IDENT:
case CODE_TIMEREMAIN: {
break;
magicnum);
/*
* Unless this is an identification or
* time-remaining packet, arbitrary data follows
* the magic number field. The user can take a
* look at the hex dump for enlightenment.
*/
if (code == CODE_TIMEREMAIN) {
break;
message_label = "Message = %.*s";
"Seconds Remaining = %d", timeremaining);
}
if (len == 0)
break;
}
show_space();
break;
}
/*
* Reset-Request and Reset-Ack contain arbitrary data which
* the user can sift through using the -x option.
*/
case CODE_RESETREQ:
case CODE_RESETACK:
default:
break;
}
}
return (len);
}
/*
* interpret_cp_options() decodes control protocol configuration options.
* Since each control protocol has a different set of options whose type
* numbers overlap, the protoinfo parameter is used to get a handle on
* which option set to use for decoding.
*/
static int
{
case PPP_LCP:
break;
case PPP_IPCP:
break;
case PPP_IPV6CP:
break;
case PPP_CCP:
break;
case PPP_ECP:
break;
case PPP_MUXCP:
break;
default:
return (len);
break;
}
if (len >= 2) {
show_space();
}
while (len >= 2) {
/*
* Don't continue if there isn't enough data to
* contain this option, or if this type of option
* should contain more data than the length field
* claims there is.
*/
"Warning: Incomplete Option");
show_space();
break;
}
}
show_space();
}
return (len);
}
static int
{
char *codestr;
int lengthleft;
return (len);
if (code <= MAX_CHAPCODE)
else
codestr = "";
(void) sprintf(get_sum_line(),
} else { /* (flags & F_DTAIL) */
show_space();
show_space();
return (len);
switch (code) {
case CODE_CHALLENGE:
case CODE_RESPONSE: {
if (lengthleft < sizeof (value_size))
break;
lengthleft -= sizeof (value_size);
if (lengthleft < sizeof (peername_size))
break;
break;
}
case CODE_SUCCESS:
case CODE_FAILURE: {
break;
}
default:
break;
}
}
show_space();
return (len);
}
static int
{
char *codestr;
int lengthleft;
return (len);
if (code <= MAX_PAPCODE)
else
codestr = "";
(void) sprintf(get_sum_line(),
} else { /* (flags & F_DTAIL) */
show_space();
show_space();
return (len);
switch (code) {
case CODE_AUTHREQ: {
if (lengthleft < sizeof (fieldlen))
break;
fieldlen);
lengthleft -= sizeof (fieldlen);
if (lengthleft < fieldlen)
break;
lengthleft -= fieldlen;
if (lengthleft < sizeof (fieldlen))
break;
fieldlen);
lengthleft -= sizeof (fieldlen);
if (lengthleft < fieldlen)
break;
break;
}
case CODE_AUTHACK:
case CODE_AUTHNAK: {
if (lengthleft < sizeof (msglen))
break;
msglen);
lengthleft -= sizeof (msglen);
if (lengthleft < msglen)
break;
break;
}
default:
break;
}
}
show_space();
return (len);
}
static int
{
return (len);
} else { /* (flags & F_DTAIL) */
show_space();
show_space();
}
return (len);
}
static ppp_protoinfo_t *
{
}
return (protoinfo_ptr);
}
static cp_optinfo_t *
{
optinfo_ptr++;
}
return (optinfo_ptr);
}
/*
* Below are the functions which parse control protocol configuration
* options. The first argument to these functions (optdata) points to the
* first byte of the option after the length field. The second argument
* (size) is the number of bytes in the option after the length field
* (length - 2).
*/
/*
* The format of the Vendor-Specific option (rfc2153) is:
*
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | OUI
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* ... | Kind | Value(s) ...
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
*/
/*ARGSUSED1*/
static void
{
char *ouistr;
oui >>= 8;
}
/*
* The format of the MRU option (rfc1661) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | Maximum-Receive-Unit |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
}
/*
* The format of the accm option (rfc1662) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | ACCM
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* ACCM (cont) |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
}
/*
* The format of the Authentication-Protocol option (rfc1661) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | Authentication-Protocol |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Data ...
* +-+-+-+-+
*
* For PAP (rfc1334), there is no data. For CHAP (rfc1994), there is one
* byte of data representing the algorithm.
*/
static void
{
switch (proto) {
case PPP_CHAP: {
char *algostr;
return;
switch (algo) {
case 5:
algostr = "CHAP with MD5";
break;
case 128:
algostr = "MS-CHAP";
break;
case 129:
algostr = "MS-CHAP-2";
break;
default:
break;
}
algostr);
break;
}
default:
break;
}
}
/*
* The format of the Quality Protocol option (rfc1661) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | Quality-Protocol |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Data ...
* +-+-+-+-+
*
* For LQR, the data consists of a 4 byte reporting period.
*/
static void
{
switch (proto) {
case PPP_LQR: {
return;
break;
}
default:
break;
}
}
/*
* The format of the Magic Number option (rfc1661) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | Magic-Number
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* Magic-Number (cont) |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
}
/*
* The format of the FCS-Alternatives option (rfc1570) is:
*
* 0 1 2
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | Options |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
}
/*
* The format of the Self-Describing-Padding option (rfc1570) is:
*
* 0 1 2
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | Maximum |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
}
/*
* The format of the Numbered-Mode option (rfc1663) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | Window | Address...
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
}
/*
* The format of the Callback option (rfc1570) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | Operation | Message ...
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
static void
{
char *opstr;
switch (operation) {
case 0:
opstr = "User Authentication";
break;
case 1:
opstr = "Dialing String";
break;
case 2:
opstr = "Location Identifier";
break;
case 3:
opstr = "E.164 Number";
break;
case 4:
opstr = "X.500 Distinguished Name";
break;
case 6:
opstr = "CBCP Negotiation";
break;
default:
break;
}
}
}
/*
* The format of the Multilink-MRRU option (rfc1990) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type = 17 | Length = 4 | Max-Receive-Reconstructed-Unit|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
}
/*
* The format of the Endpoint Discriminator option (rfc1990) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type = 19 | Length | Class | Address ...
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
static void
{
char *classstr;
char *addr;
switch (class) {
case 0:
classstr = "Null Class";
break;
case 1:
classstr = "Locally Assigned Address";
break;
case 2:
classstr = "IPv4 Address";
break;
case 3:
classstr = "IEE 802.1 Global MAC Address";
break;
case 4:
classstr = "PPP Magic-Number Block";
break;
case 5:
classstr = "Public Switched Network Directory Number";
break;
default:
break;
}
classstr);
if (addrlen == 0)
return;
switch (class) {
case 2: {
break;
NULL) {
}
break;
}
case 3: {
char *addrstr;
if (addrlen != sizeof (struct ether_addr))
break;
}
break;
}
case 5: {
/*
* For this case, the address is supposed to be a plain
* text telephone number.
*/
addr);
}
default:
break;
}
}
/*
* The DCE identifier option has the following format (from rfc1976):
*
* 0 1 2
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | Mode |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
char *modestr;
switch (mode) {
case 1:
modestr = "No Additional Negotiation";
break;
case 2:
modestr = "Full PPP Negotiation and State Machine";
break;
default:
break;
}
}
/*
* The format of the Link Discriminator option (rfc2125) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | Link Discriminator |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
}
/*
* The format of the Internationalization option (rfc2484) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | MIBenum
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* MIBenum (cont) | Language-Tag...
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
static void
{
if (taglen > 0) {
optdata);
}
}
/*
* The format of the obsolete IP-Addresses option (rfc1172) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | Source-IP-Address
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* Source-IP-Address (cont) | Destination-IP-Address
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* Destination-IP-Address (cont) |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
addrstr);
}
addrstr);
}
}
/*
* The format of the IP-Compression-Protocol option (rfc1332) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | IP-Compression-Protocol |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Data ...
* +-+-+-+-+
*
*
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Max-Slot-Id | Comp-Slot-Id |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*
* For IPHC (rfc2509), data consists of:
*
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | TCP_SPACE | NON_TCP_SPACE |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | F_MAX_PERIOD | F_MAX_TIME |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | MAX_HEADER | suboptions...
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
static void
{
switch (proto) {
case PPP_VJC_COMP: {
sizeof (compslotid))
break;
break;
}
case PPP_FULLHDR: {
sizeof (non_tcp_space) + sizeof (f_max_period) +
sizeof (f_max_time) + sizeof (max_header))
break;
}
default:
break;
}
}
/*
* The format of the IP-Address option (rfc1332) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | IP-Address
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* IP-Address (cont) |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
}
}
/*
* The format of the Mobile-IPv4 option (rfc2290) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | Mobile Node's ...
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* ... Home Address |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
"Mobile Node's Home Address = %s", addrstr);
}
}
/*
* The format of the Interface-Identifier option (rfc2472) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | Interface-Identifier (MS Bytes)
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* Interface-Identifier (cont)
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* Interface-Identifier (LS Bytes) |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
}
}
/*
* The format of the IPv6-Compression-Protocol option (rfc2472) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | IPv6-Compression-Protocol |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Data ...
* +-+-+-+-+
*/
static void
{
switch (proto) {
case PPP_FULLHDR: {
sizeof (non_tcp_space) + sizeof (f_max_period) +
sizeof (f_max_time) + sizeof (max_header))
return;
}
default:
break;
}
}
/*
* The format of the Proprietary Compression OUI option (rfc1962) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | OUI ...
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* OUI | Subtype | Values...
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
*/
/*ARGSUSED1*/
static void
{
char *ouistr;
oui >>= 8;
}
/*
* The format of the Stac LZS configuration option (rfc1974) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | History Count |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Check Mode |
* +-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
cmode &= 0x07;
}
/*
* The format of MPPC configuration option (rfc2118) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | Supported Bits |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Supported Bits |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
}
/*
* The format of the Gandalf FZA configuration option (rfc1993) is:
*
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | History | Version ...
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
history);
}
/*
* The format of the BSD Compress configuration option (rfc1977) is:
*
* 0 1 2
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | Vers| Dict |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
codesize &= 0x1f;
}
/*
* The format of the LZS-DCP configuration option (rfc1967) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | History Count |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Check Mode | Process Mode |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
char *modestr;
/* check mode */
switch (mode) {
case 0:
modestr = "None";
break;
case 1:
modestr = "LCB";
break;
case 2:
modestr = "Sequence Number";
break;
case 3:
modestr = "Sequence Number + LCB (default)";
break;
default:
break;
}
/* process mode */
switch (mode) {
case 0:
modestr = "None (default)";
break;
case 1:
modestr = "Process-Uncompressed";
break;
default:
break;
}
}
/*
* The format of the Magnalink configuration option (rfc1975) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length |FE |P| History | # Contexts |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
history &= 0x1f;
}
/*
* The format of the Deflate configuration option (rfc1979) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length |Window | Method| MBZ |Chk|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
method &= 0x0f;
chk &= 0x03;
}
/*
* The format of the Proprietary Encryption OUI option (rfc1968) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type | Length | OUI ...
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* OUI | Subtype | Values...
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
*/
/*ARGSUSED1*/
static void
{
char *ouistr;
oui >>= 8;
}
/*
* The format of the DESE, DESE-bis, and 3DESE configuration options
* (rfc1969, rfc2419, and rfc2420) are:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type = 3 | Length | Initial Nonce ...
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
"Initial Nonce = 0x%02x%02x%02x%02x%02x%02x%02x%02x",
}
/*
* The format of the PPPMux Default Protocol Id option
* (draft-ietf-pppext-pppmux-02.txt) is:
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Type = 1 | Length = 4 | Default PID |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/*ARGSUSED1*/
static void
{
}