198524Sfenner/* 298524Sfenner * Copyright (c) 1991, 1993, 1994, 1995, 1996, 1997 398524Sfenner * The Regents of the University of California. All rights reserved. 498524Sfenner * 598524Sfenner * Redistribution and use in source and binary forms, with or without 698524Sfenner * modification, are permitted provided that: (1) source code distributions 798524Sfenner * retain the above copyright notice and this paragraph in its entirety, (2) 898524Sfenner * distributions including binary code include the above copyright notice and 998524Sfenner * this paragraph in its entirety in the documentation or other materials 1098524Sfenner * provided with the distribution, and (3) all advertising materials mentioning 1198524Sfenner * features or use of this software display the following acknowledgement: 1298524Sfenner * ``This product includes software developed by the University of California, 1398524Sfenner * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 1498524Sfenner * the University nor the names of its contributors may be used to endorse 1598524Sfenner * or promote products derived from this software without specific prior 1698524Sfenner * written permission. 1798524Sfenner * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 1898524Sfenner * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 1998524Sfenner * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 2098524Sfenner * 2198524Sfenner * PPTP support contributed by Motonori Shindo (mshindo@mshindo.net) 2298524Sfenner */ 2398524Sfenner 2498524Sfenner 2598524Sfenner#ifndef lint 26127668Sbmsstatic const char rcsid[] _U_ = 27190207Srpaulo "@(#) $Header: /tcpdump/master/tcpdump/print-pptp.c,v 1.12 2006-06-23 02:03:09 hannes Exp $"; 2898524Sfenner#endif 2998524Sfenner 3098524Sfenner#ifdef HAVE_CONFIG_H 3198524Sfenner#include "config.h" 3298524Sfenner#endif 3398524Sfenner 34127668Sbms#include <tcpdump-stdinc.h> 35127668Sbms 3698524Sfenner#include <stdio.h> 3798524Sfenner 3898524Sfenner#include "interface.h" 39127668Sbms#include "extract.h" 4098524Sfenner 4198524Sfennerstatic char tstr[] = " [|pptp]"; 4298524Sfenner 4398524Sfenner#define PPTP_MSG_TYPE_CTRL 1 /* Control Message */ 4498524Sfenner#define PPTP_MSG_TYPE_MGMT 2 /* Management Message (currently not used */ 4598524Sfenner#define PPTP_MAGIC_COOKIE 0x1a2b3c4d /* for sanity check */ 4698524Sfenner 4798524Sfenner#define PPTP_CTRL_MSG_TYPE_SCCRQ 1 4898524Sfenner#define PPTP_CTRL_MSG_TYPE_SCCRP 2 49127668Sbms#define PPTP_CTRL_MSG_TYPE_StopCCRQ 3 5098524Sfenner#define PPTP_CTRL_MSG_TYPE_StopCCRP 4 5198524Sfenner#define PPTP_CTRL_MSG_TYPE_ECHORQ 5 5298524Sfenner#define PPTP_CTRL_MSG_TYPE_ECHORP 6 5398524Sfenner#define PPTP_CTRL_MSG_TYPE_OCRQ 7 5498524Sfenner#define PPTP_CTRL_MSG_TYPE_OCRP 8 5598524Sfenner#define PPTP_CTRL_MSG_TYPE_ICRQ 9 5698524Sfenner#define PPTP_CTRL_MSG_TYPE_ICRP 10 5798524Sfenner#define PPTP_CTRL_MSG_TYPE_ICCN 11 5898524Sfenner#define PPTP_CTRL_MSG_TYPE_CCRQ 12 5998524Sfenner#define PPTP_CTRL_MSG_TYPE_CDN 13 6098524Sfenner#define PPTP_CTRL_MSG_TYPE_WEN 14 6198524Sfenner#define PPTP_CTRL_MSG_TYPE_SLI 15 6298524Sfenner 6398524Sfenner#define PPTP_FRAMING_CAP_ASYNC_MASK 0x00000001 /* Aynchronous */ 6498524Sfenner#define PPTP_FRAMING_CAP_SYNC_MASK 0x00000002 /* Synchronous */ 6598524Sfenner 6698524Sfenner#define PPTP_BEARER_CAP_ANALOG_MASK 0x00000001 /* Analog */ 6798524Sfenner#define PPTP_BEARER_CAP_DIGITAL_MASK 0x00000002 /* Digital */ 6898524Sfenner 69127668Sbmsstatic const char *pptp_message_type_string[] = { 7098524Sfenner "NOT_DEFINED", /* 0 Not defined in the RFC2637 */ 7198524Sfenner "SCCRQ", /* 1 Start-Control-Connection-Request */ 7298524Sfenner "SCCRP", /* 2 Start-Control-Connection-Reply */ 7398524Sfenner "StopCCRQ", /* 3 Stop-Control-Connection-Request */ 7498524Sfenner "StopCCRP", /* 4 Stop-Control-Connection-Reply */ 7598524Sfenner "ECHORQ", /* 5 Echo Request */ 7698524Sfenner "ECHORP", /* 6 Echo Reply */ 7798524Sfenner 7898524Sfenner "OCRQ", /* 7 Outgoing-Call-Request */ 7998524Sfenner "OCRP", /* 8 Outgoing-Call-Reply */ 8098524Sfenner "ICRQ", /* 9 Incoming-Call-Request */ 8198524Sfenner "ICRP", /* 10 Incoming-Call-Reply */ 8298524Sfenner "ICCN", /* 11 Incoming-Call-Connected */ 8398524Sfenner "CCRQ", /* 12 Call-Clear-Request */ 8498524Sfenner "CDN", /* 13 Call-Disconnect-Notify */ 8598524Sfenner 8698524Sfenner "WEN", /* 14 WAN-Error-Notify */ 8798524Sfenner 8898524Sfenner "SLI" /* 15 Set-Link-Info */ 8998524Sfenner#define PPTP_MAX_MSGTYPE_INDEX 16 9098524Sfenner}; 9198524Sfenner 9298524Sfenner/* common for all PPTP control messages */ 9398524Sfennerstruct pptp_hdr { 9498524Sfenner u_int16_t length; 9598524Sfenner u_int16_t msg_type; 9698524Sfenner u_int32_t magic_cookie; 9798524Sfenner u_int16_t ctrl_msg_type; 9898524Sfenner u_int16_t reserved0; 9998524Sfenner}; 10098524Sfenner 10198524Sfennerstruct pptp_msg_sccrq { 10298524Sfenner u_int16_t proto_ver; 10398524Sfenner u_int16_t reserved1; 10498524Sfenner u_int32_t framing_cap; 10598524Sfenner u_int32_t bearer_cap; 10698524Sfenner u_int16_t max_channel; 10798524Sfenner u_int16_t firm_rev; 10898524Sfenner u_char hostname[64]; 10998524Sfenner u_char vendor[64]; 11098524Sfenner}; 11198524Sfenner 11298524Sfennerstruct pptp_msg_sccrp { 11398524Sfenner u_int16_t proto_ver; 11498524Sfenner u_int8_t result_code; 11598524Sfenner u_int8_t err_code; 11698524Sfenner u_int32_t framing_cap; 11798524Sfenner u_int32_t bearer_cap; 11898524Sfenner u_int16_t max_channel; 11998524Sfenner u_int16_t firm_rev; 12098524Sfenner u_char hostname[64]; 12198524Sfenner u_char vendor[64]; 12298524Sfenner}; 12398524Sfenner 12498524Sfennerstruct pptp_msg_stopccrq { 12598524Sfenner u_int8_t reason; 12698524Sfenner u_int8_t reserved1; 12798524Sfenner u_int16_t reserved2; 12898524Sfenner}; 12998524Sfenner 13098524Sfennerstruct pptp_msg_stopccrp { 13198524Sfenner u_int8_t result_code; 13298524Sfenner u_int8_t err_code; 13398524Sfenner u_int16_t reserved1; 13498524Sfenner}; 13598524Sfenner 13698524Sfennerstruct pptp_msg_echorq { 13798524Sfenner u_int32_t id; 13898524Sfenner}; 13998524Sfenner 14098524Sfennerstruct pptp_msg_echorp { 14198524Sfenner u_int32_t id; 14298524Sfenner u_int8_t result_code; 14398524Sfenner u_int8_t err_code; 14498524Sfenner u_int16_t reserved1; 14598524Sfenner}; 14698524Sfenner 14798524Sfennerstruct pptp_msg_ocrq { 14898524Sfenner u_int16_t call_id; 14998524Sfenner u_int16_t call_ser; 15098524Sfenner u_int32_t min_bps; 15198524Sfenner u_int32_t max_bps; 15298524Sfenner u_int32_t bearer_type; 15398524Sfenner u_int32_t framing_type; 15498524Sfenner u_int16_t recv_winsiz; 15598524Sfenner u_int16_t pkt_proc_delay; 15698524Sfenner u_int16_t phone_no_len; 15798524Sfenner u_int16_t reserved1; 15898524Sfenner u_char phone_no[64]; 15998524Sfenner u_char subaddr[64]; 16098524Sfenner}; 16198524Sfenner 16298524Sfennerstruct pptp_msg_ocrp { 16398524Sfenner u_int16_t call_id; 16498524Sfenner u_int16_t peer_call_id; 16598524Sfenner u_int8_t result_code; 16698524Sfenner u_int8_t err_code; 16798524Sfenner u_int16_t cause_code; 16898524Sfenner u_int32_t conn_speed; 16998524Sfenner u_int16_t recv_winsiz; 17098524Sfenner u_int16_t pkt_proc_delay; 17198524Sfenner u_int32_t phy_chan_id; 17298524Sfenner}; 17398524Sfenner 17498524Sfennerstruct pptp_msg_icrq { 17598524Sfenner u_int16_t call_id; 17698524Sfenner u_int16_t call_ser; 17798524Sfenner u_int32_t bearer_type; 17898524Sfenner u_int32_t phy_chan_id; 179127668Sbms u_int16_t dialed_no_len; 180127668Sbms u_int16_t dialing_no_len; 18198524Sfenner u_char dialed_no[64]; /* DNIS */ 18298524Sfenner u_char dialing_no[64]; /* CLID */ 18398524Sfenner u_char subaddr[64]; 18498524Sfenner}; 18598524Sfenner 18698524Sfennerstruct pptp_msg_icrp { 18798524Sfenner u_int16_t call_id; 18898524Sfenner u_int16_t peer_call_id; 18998524Sfenner u_int8_t result_code; 19098524Sfenner u_int8_t err_code; 19198524Sfenner u_int16_t recv_winsiz; 19298524Sfenner u_int16_t pkt_proc_delay; 19398524Sfenner u_int16_t reserved1; 19498524Sfenner}; 19598524Sfenner 19698524Sfennerstruct pptp_msg_iccn { 19798524Sfenner u_int16_t peer_call_id; 19898524Sfenner u_int16_t reserved1; 19998524Sfenner u_int32_t conn_speed; 20098524Sfenner u_int16_t recv_winsiz; 20198524Sfenner u_int16_t pkt_proc_delay; 20298524Sfenner u_int32_t framing_type; 20398524Sfenner}; 20498524Sfenner 20598524Sfennerstruct pptp_msg_ccrq { 20698524Sfenner u_int16_t call_id; 20798524Sfenner u_int16_t reserved1; 20898524Sfenner}; 20998524Sfenner 21098524Sfennerstruct pptp_msg_cdn { 21198524Sfenner u_int16_t call_id; 21298524Sfenner u_int8_t result_code; 21398524Sfenner u_int8_t err_code; 21498524Sfenner u_int16_t cause_code; 21598524Sfenner u_int16_t reserved1; 21698524Sfenner u_char call_stats[128]; 21798524Sfenner}; 21898524Sfenner 21998524Sfennerstruct pptp_msg_wen { 22098524Sfenner u_int16_t peer_call_id; 22198524Sfenner u_int16_t reserved1; 22298524Sfenner u_int32_t crc_err; 22398524Sfenner u_int32_t framing_err; 22498524Sfenner u_int32_t hardware_overrun; 22598524Sfenner u_int32_t buffer_overrun; 22698524Sfenner u_int32_t timeout_err; 22798524Sfenner u_int32_t align_err; 22898524Sfenner}; 22998524Sfenner 23098524Sfennerstruct pptp_msg_sli { 23198524Sfenner u_int16_t peer_call_id; 23298524Sfenner u_int16_t reserved1; 23398524Sfenner u_int32_t send_accm; 23498524Sfenner u_int32_t recv_accm; 23598524Sfenner}; 23698524Sfenner 23798524Sfenner/* attributes that appear more than once in above messages: 23898524Sfenner 239127668Sbms Number of 24098524Sfenner occurence attributes 24198524Sfenner -------------------------------------- 24298524Sfenner 2 u_int32_t bearer_cap; 24398524Sfenner 2 u_int32_t bearer_type; 24498524Sfenner 6 u_int16_t call_id; 24598524Sfenner 2 u_int16_t call_ser; 24698524Sfenner 2 u_int16_t cause_code; 24798524Sfenner 2 u_int32_t conn_speed; 24898524Sfenner 6 u_int8_t err_code; 24998524Sfenner 2 u_int16_t firm_rev; 25098524Sfenner 2 u_int32_t framing_cap; 25198524Sfenner 2 u_int32_t framing_type; 25298524Sfenner 2 u_char hostname[64]; 25398524Sfenner 2 u_int32_t id; 25498524Sfenner 2 u_int16_t max_channel; 25598524Sfenner 5 u_int16_t peer_call_id; 25698524Sfenner 2 u_int32_t phy_chan_id; 25798524Sfenner 4 u_int16_t pkt_proc_delay; 25898524Sfenner 2 u_int16_t proto_ver; 25998524Sfenner 4 u_int16_t recv_winsiz; 26098524Sfenner 2 u_int8_t reserved1; 26198524Sfenner 9 u_int16_t reserved1; 26298524Sfenner 6 u_int8_t result_code; 26398524Sfenner 2 u_char subaddr[64]; 26498524Sfenner 2 u_char vendor[64]; 26598524Sfenner 266127668Sbms so I will prepare print out functions for these attributes (except for 26798524Sfenner reserved*). 26898524Sfenner*/ 26998524Sfenner 27098524Sfenner/******************************************/ 27198524Sfenner/* Attribute-specific print out functions */ 27298524Sfenner/******************************************/ 27398524Sfenner 27498524Sfenner/* In these attribute-specific print-out functions, it't not necessary 27598524Sfenner to do TCHECK because they are already checked in the caller of 27698524Sfenner these functions. */ 27798524Sfenner 27898524Sfennerstatic void 27998524Sfennerpptp_bearer_cap_print(const u_int32_t *bearer_cap) 28098524Sfenner{ 28198524Sfenner printf(" BEARER_CAP("); 282127668Sbms if (EXTRACT_32BITS(bearer_cap) & PPTP_BEARER_CAP_DIGITAL_MASK) { 28398524Sfenner printf("D"); 28498524Sfenner } 285127668Sbms if (EXTRACT_32BITS(bearer_cap) & PPTP_BEARER_CAP_ANALOG_MASK) { 28698524Sfenner printf("A"); 28798524Sfenner } 28898524Sfenner printf(")"); 28998524Sfenner} 29098524Sfenner 29198524Sfennerstatic void 29298524Sfennerpptp_bearer_type_print(const u_int32_t *bearer_type) 29398524Sfenner{ 29498524Sfenner printf(" BEARER_TYPE("); 295127668Sbms switch (EXTRACT_32BITS(bearer_type)) { 29698524Sfenner case 1: 29798524Sfenner printf("A"); /* Analog */ 29898524Sfenner break; 29998524Sfenner case 2: 30098524Sfenner printf("D"); /* Digital */ 30198524Sfenner break; 302127668Sbms case 3: 30398524Sfenner printf("Any"); 30498524Sfenner break; 30598524Sfenner default: 30698524Sfenner printf("?"); 30798524Sfenner break; 30898524Sfenner } 30998524Sfenner printf(")"); 31098524Sfenner} 31198524Sfenner 31298524Sfennerstatic void 31398524Sfennerpptp_call_id_print(const u_int16_t *call_id) 31498524Sfenner{ 315127668Sbms printf(" CALL_ID(%u)", EXTRACT_16BITS(call_id)); 31698524Sfenner} 31798524Sfenner 31898524Sfennerstatic void 31998524Sfennerpptp_call_ser_print(const u_int16_t *call_ser) 32098524Sfenner{ 321127668Sbms printf(" CALL_SER_NUM(%u)", EXTRACT_16BITS(call_ser)); 32298524Sfenner} 32398524Sfenner 32498524Sfennerstatic void 32598524Sfennerpptp_cause_code_print(const u_int16_t *cause_code) 32698524Sfenner{ 327127668Sbms printf(" CAUSE_CODE(%u)", EXTRACT_16BITS(cause_code)); 32898524Sfenner} 32998524Sfenner 33098524Sfennerstatic void 33198524Sfennerpptp_conn_speed_print(const u_int32_t *conn_speed) 33298524Sfenner{ 333127668Sbms printf(" CONN_SPEED(%u)", EXTRACT_32BITS(conn_speed)); 33498524Sfenner} 33598524Sfenner 33698524Sfennerstatic void 33798524Sfennerpptp_err_code_print(const u_int8_t *err_code) 33898524Sfenner{ 33998524Sfenner printf(" ERR_CODE(%u", *err_code); 34098524Sfenner if (vflag) { 34198524Sfenner switch (*err_code) { 34298524Sfenner case 0: 34398524Sfenner printf(":None"); 34498524Sfenner break; 34598524Sfenner case 1: 34698524Sfenner printf(":Not-Connected"); 34798524Sfenner break; 34898524Sfenner case 2: 34998524Sfenner printf(":Bad-Format"); 35098524Sfenner break; 35198524Sfenner case 3: 35298524Sfenner printf(":Bad-Valude"); 35398524Sfenner break; 35498524Sfenner case 4: 35598524Sfenner printf(":No-Resource"); 35698524Sfenner break; 35798524Sfenner case 5: 35898524Sfenner printf(":Bad-Call-ID"); 35998524Sfenner break; 36098524Sfenner case 6: 36198524Sfenner printf(":PAC-Error"); 36298524Sfenner break; 36398524Sfenner default: 36498524Sfenner printf(":?"); 36598524Sfenner break; 36698524Sfenner } 36798524Sfenner } 36898524Sfenner printf(")"); 36998524Sfenner} 37098524Sfenner 37198524Sfennerstatic void 37298524Sfennerpptp_firm_rev_print(const u_int16_t *firm_rev) 37398524Sfenner{ 374127668Sbms printf(" FIRM_REV(%u)", EXTRACT_16BITS(firm_rev)); 37598524Sfenner} 37698524Sfenner 37798524Sfennerstatic void 37898524Sfennerpptp_framing_cap_print(const u_int32_t *framing_cap) 37998524Sfenner{ 38098524Sfenner printf(" FRAME_CAP("); 381127668Sbms if (EXTRACT_32BITS(framing_cap) & PPTP_FRAMING_CAP_ASYNC_MASK) { 38298524Sfenner printf("A"); /* Async */ 38398524Sfenner } 384127668Sbms if (EXTRACT_32BITS(framing_cap) & PPTP_FRAMING_CAP_SYNC_MASK) { 38598524Sfenner printf("S"); /* Sync */ 38698524Sfenner } 38798524Sfenner printf(")"); 38898524Sfenner} 38998524Sfenner 39098524Sfennerstatic void 39198524Sfennerpptp_framing_type_print(const u_int32_t *framing_type) 39298524Sfenner{ 39398524Sfenner printf(" FRAME_TYPE("); 394127668Sbms switch (EXTRACT_32BITS(framing_type)) { 39598524Sfenner case 1: 39698524Sfenner printf("A"); /* Async */ 39798524Sfenner break; 39898524Sfenner case 2: 39998524Sfenner printf("S"); /* Sync */ 40098524Sfenner break; 40198524Sfenner case 3: 40298524Sfenner printf("E"); /* Either */ 40398524Sfenner break; 40498524Sfenner default: 40598524Sfenner printf("?"); 40698524Sfenner break; 40798524Sfenner } 40898524Sfenner printf(")"); 40998524Sfenner} 41098524Sfenner 41198524Sfennerstatic void 41298524Sfennerpptp_hostname_print(const u_char *hostname) 41398524Sfenner{ 41498524Sfenner printf(" HOSTNAME(%.64s)", hostname); 41598524Sfenner} 41698524Sfenner 41798524Sfennerstatic void 41898524Sfennerpptp_id_print(const u_int32_t *id) 41998524Sfenner{ 420127668Sbms printf(" ID(%u)", EXTRACT_32BITS(id)); 42198524Sfenner} 42298524Sfenner 42398524Sfennerstatic void 42498524Sfennerpptp_max_channel_print(const u_int16_t *max_channel) 42598524Sfenner{ 426127668Sbms printf(" MAX_CHAN(%u)", EXTRACT_16BITS(max_channel)); 42798524Sfenner} 42898524Sfenner 42998524Sfennerstatic void 43098524Sfennerpptp_peer_call_id_print(const u_int16_t *peer_call_id) 43198524Sfenner{ 432127668Sbms printf(" PEER_CALL_ID(%u)", EXTRACT_16BITS(peer_call_id)); 43398524Sfenner} 43498524Sfenner 43598524Sfennerstatic void 43698524Sfennerpptp_phy_chan_id_print(const u_int32_t *phy_chan_id) 43798524Sfenner{ 438127668Sbms printf(" PHY_CHAN_ID(%u)", EXTRACT_32BITS(phy_chan_id)); 43998524Sfenner} 44098524Sfenner 44198524Sfennerstatic void 44298524Sfennerpptp_pkt_proc_delay_print(const u_int16_t *pkt_proc_delay) 44398524Sfenner{ 444127668Sbms printf(" PROC_DELAY(%u)", EXTRACT_16BITS(pkt_proc_delay)); 44598524Sfenner} 44698524Sfenner 44798524Sfennerstatic void 44898524Sfennerpptp_proto_ver_print(const u_int16_t *proto_ver) 44998524Sfenner{ 45098524Sfenner printf(" PROTO_VER(%u.%u)", /* Version.Revision */ 451127668Sbms EXTRACT_16BITS(proto_ver) >> 8, 452127668Sbms EXTRACT_16BITS(proto_ver) & 0xff); 45398524Sfenner} 45498524Sfenner 45598524Sfennerstatic void 45698524Sfennerpptp_recv_winsiz_print(const u_int16_t *recv_winsiz) 45798524Sfenner{ 458127668Sbms printf(" RECV_WIN(%u)", EXTRACT_16BITS(recv_winsiz)); 45998524Sfenner} 46098524Sfenner 46198524Sfennerstatic void 46298524Sfennerpptp_result_code_print(const u_int8_t *result_code, int ctrl_msg_type) 46398524Sfenner{ 46498524Sfenner printf(" RESULT_CODE(%u", *result_code); 46598524Sfenner if (vflag) { 46698524Sfenner switch (ctrl_msg_type) { 46798524Sfenner case PPTP_CTRL_MSG_TYPE_SCCRP: 46898524Sfenner switch (*result_code) { 46998524Sfenner case 1: 47098524Sfenner printf(":Successful channel establishment"); 47198524Sfenner break; 47298524Sfenner case 2: 47398524Sfenner printf(":General error"); 47498524Sfenner break; 47598524Sfenner case 3: 47698524Sfenner printf(":Command channel already exists"); 47798524Sfenner break; 47898524Sfenner case 4: 47998524Sfenner printf(":Requester is not authorized to establish a command channel"); 48098524Sfenner break; 48198524Sfenner case 5: 48298524Sfenner printf(":The protocol version of the requester is not supported"); 48398524Sfenner break; 48498524Sfenner default: 48598524Sfenner printf(":?"); 48698524Sfenner break; 48798524Sfenner } 48898524Sfenner break; 48998524Sfenner case PPTP_CTRL_MSG_TYPE_StopCCRP: 49098524Sfenner case PPTP_CTRL_MSG_TYPE_ECHORP: 49198524Sfenner switch (*result_code) { 49298524Sfenner case 1: 49398524Sfenner printf(":OK"); 49498524Sfenner break; 49598524Sfenner case 2: 49698524Sfenner printf(":General Error"); 49798524Sfenner break; 49898524Sfenner default: 49998524Sfenner printf(":?"); 50098524Sfenner break; 50198524Sfenner } 50298524Sfenner break; 50398524Sfenner case PPTP_CTRL_MSG_TYPE_OCRP: 50498524Sfenner switch (*result_code) { 50598524Sfenner case 1: 50698524Sfenner printf(":Connected"); 50798524Sfenner break; 50898524Sfenner case 2: 50998524Sfenner printf(":General Error"); 51098524Sfenner break; 51198524Sfenner case 3: 51298524Sfenner printf(":No Carrier"); 51398524Sfenner break; 51498524Sfenner case 4: 51598524Sfenner printf(":Busy"); 51698524Sfenner break; 51798524Sfenner case 5: 51898524Sfenner printf(":No Dial Tone"); 51998524Sfenner break; 52098524Sfenner case 6: 52198524Sfenner printf(":Time-out"); 52298524Sfenner break; 52398524Sfenner case 7: 52498524Sfenner printf(":Do Not Accept"); 52598524Sfenner break; 52698524Sfenner default: 52798524Sfenner printf(":?"); 52898524Sfenner break; 52998524Sfenner } 53098524Sfenner break; 53198524Sfenner case PPTP_CTRL_MSG_TYPE_ICRP: 53298524Sfenner switch (*result_code) { 53398524Sfenner case 1: 53498524Sfenner printf(":Connect"); 53598524Sfenner break; 53698524Sfenner case 2: 53798524Sfenner printf(":General Error"); 53898524Sfenner break; 53998524Sfenner case 3: 54098524Sfenner printf(":Do Not Accept"); 54198524Sfenner break; 54298524Sfenner default: 54398524Sfenner printf(":?"); 54498524Sfenner break; 54598524Sfenner } 54698524Sfenner break; 54798524Sfenner case PPTP_CTRL_MSG_TYPE_CDN: 54898524Sfenner switch (*result_code) { 54998524Sfenner case 1: 55098524Sfenner printf(":Lost Carrier"); 55198524Sfenner break; 55298524Sfenner case 2: 55398524Sfenner printf(":General Error"); 55498524Sfenner break; 55598524Sfenner case 3: 55698524Sfenner printf(":Admin Shutdown"); 55798524Sfenner break; 55898524Sfenner case 4: 55998524Sfenner printf(":Request"); 56098524Sfenner default: 56198524Sfenner printf(":?"); 56298524Sfenner break; 56398524Sfenner break; 56498524Sfenner } 56598524Sfenner default: 56698524Sfenner /* assertion error */ 56798524Sfenner break; 56898524Sfenner } 56998524Sfenner } 57098524Sfenner printf(")"); 57198524Sfenner} 57298524Sfenner 57398524Sfennerstatic void 57498524Sfennerpptp_subaddr_print(const u_char *subaddr) 57598524Sfenner{ 57698524Sfenner printf(" SUB_ADDR(%.64s)", subaddr); 57798524Sfenner} 57898524Sfenner 57998524Sfennerstatic void 58098524Sfennerpptp_vendor_print(const u_char *vendor) 58198524Sfenner{ 58298524Sfenner printf(" VENDOR(%.64s)", vendor); 58398524Sfenner} 58498524Sfenner 58598524Sfenner/************************************/ 58698524Sfenner/* PPTP message print out functions */ 58798524Sfenner/************************************/ 58898524Sfennerstatic void 58998524Sfennerpptp_sccrq_print(const u_char *dat) 59098524Sfenner{ 59198524Sfenner struct pptp_msg_sccrq *ptr = (struct pptp_msg_sccrq *)dat; 59298524Sfenner 59398524Sfenner TCHECK(ptr->proto_ver); 59498524Sfenner pptp_proto_ver_print(&ptr->proto_ver); 59598524Sfenner TCHECK(ptr->reserved1); 59698524Sfenner TCHECK(ptr->framing_cap); 59798524Sfenner pptp_framing_cap_print(&ptr->framing_cap); 59898524Sfenner TCHECK(ptr->bearer_cap); 59998524Sfenner pptp_bearer_cap_print(&ptr->bearer_cap); 60098524Sfenner TCHECK(ptr->max_channel); 60198524Sfenner pptp_max_channel_print(&ptr->max_channel); 60298524Sfenner TCHECK(ptr->firm_rev); 60398524Sfenner pptp_firm_rev_print(&ptr->firm_rev); 60498524Sfenner TCHECK(ptr->hostname); 60598524Sfenner pptp_hostname_print(&ptr->hostname[0]); 60698524Sfenner TCHECK(ptr->vendor); 60798524Sfenner pptp_vendor_print(&ptr->vendor[0]); 60898524Sfenner 60998524Sfenner return; 61098524Sfenner 61198524Sfennertrunc: 61298524Sfenner printf("%s", tstr); 61398524Sfenner} 61498524Sfenner 61598524Sfennerstatic void 61698524Sfennerpptp_sccrp_print(const u_char *dat) 61798524Sfenner{ 61898524Sfenner struct pptp_msg_sccrp *ptr = (struct pptp_msg_sccrp *)dat; 61998524Sfenner 62098524Sfenner TCHECK(ptr->proto_ver); 62198524Sfenner pptp_proto_ver_print(&ptr->proto_ver); 62298524Sfenner TCHECK(ptr->result_code); 62398524Sfenner pptp_result_code_print(&ptr->result_code, PPTP_CTRL_MSG_TYPE_SCCRP); 62498524Sfenner TCHECK(ptr->err_code); 62598524Sfenner pptp_err_code_print(&ptr->err_code); 62698524Sfenner TCHECK(ptr->framing_cap); 62798524Sfenner pptp_framing_cap_print(&ptr->framing_cap); 62898524Sfenner TCHECK(ptr->bearer_cap); 62998524Sfenner pptp_bearer_cap_print(&ptr->bearer_cap); 63098524Sfenner TCHECK(ptr->max_channel); 63198524Sfenner pptp_max_channel_print(&ptr->max_channel); 63298524Sfenner TCHECK(ptr->firm_rev); 63398524Sfenner pptp_firm_rev_print(&ptr->firm_rev); 63498524Sfenner TCHECK(ptr->hostname); 63598524Sfenner pptp_hostname_print(&ptr->hostname[0]); 63698524Sfenner TCHECK(ptr->vendor); 63798524Sfenner pptp_vendor_print(&ptr->vendor[0]); 63898524Sfenner 63998524Sfenner return; 64098524Sfenner 64198524Sfennertrunc: 64298524Sfenner printf("%s", tstr); 64398524Sfenner} 64498524Sfenner 64598524Sfennerstatic void 64698524Sfennerpptp_stopccrq_print(const u_char *dat) 64798524Sfenner{ 64898524Sfenner struct pptp_msg_stopccrq *ptr = (struct pptp_msg_stopccrq *)dat; 64998524Sfenner 65098524Sfenner TCHECK(ptr->reason); 65198524Sfenner printf(" REASON(%u", ptr->reason); 65298524Sfenner if (vflag) { 65398524Sfenner switch (ptr->reason) { 65498524Sfenner case 1: 65598524Sfenner printf(":None"); 65698524Sfenner break; 65798524Sfenner case 2: 65898524Sfenner printf(":Stop-Protocol"); 65998524Sfenner break; 66098524Sfenner case 3: 66198524Sfenner printf(":Stop-Local-Shutdown"); 66298524Sfenner break; 66398524Sfenner default: 66498524Sfenner printf(":?"); 66598524Sfenner break; 66698524Sfenner } 66798524Sfenner } 66898524Sfenner printf(")"); 66998524Sfenner TCHECK(ptr->reserved1); 67098524Sfenner TCHECK(ptr->reserved2); 67198524Sfenner 67298524Sfenner return; 67398524Sfenner 67498524Sfennertrunc: 67598524Sfenner printf("%s", tstr); 67698524Sfenner} 67798524Sfenner 67898524Sfennerstatic void 67998524Sfennerpptp_stopccrp_print(const u_char *dat) 68098524Sfenner{ 68198524Sfenner struct pptp_msg_stopccrp *ptr = (struct pptp_msg_stopccrp *)dat; 68298524Sfenner 68398524Sfenner TCHECK(ptr->result_code); 68498524Sfenner pptp_result_code_print(&ptr->result_code, PPTP_CTRL_MSG_TYPE_StopCCRP); 68598524Sfenner TCHECK(ptr->err_code); 68698524Sfenner pptp_err_code_print(&ptr->err_code); 68798524Sfenner TCHECK(ptr->reserved1); 68898524Sfenner 68998524Sfenner return; 69098524Sfenner 69198524Sfennertrunc: 69298524Sfenner printf("%s", tstr); 69398524Sfenner} 69498524Sfenner 69598524Sfennerstatic void 69698524Sfennerpptp_echorq_print(const u_char *dat) 69798524Sfenner{ 69898524Sfenner struct pptp_msg_echorq *ptr = (struct pptp_msg_echorq *)dat; 69998524Sfenner 70098524Sfenner TCHECK(ptr->id); 70198524Sfenner pptp_id_print(&ptr->id); 702127668Sbms 70398524Sfenner return; 70498524Sfenner 70598524Sfennertrunc: 70698524Sfenner printf("%s", tstr); 70798524Sfenner} 70898524Sfenner 70998524Sfennerstatic void 71098524Sfennerpptp_echorp_print(const u_char *dat) 71198524Sfenner{ 71298524Sfenner struct pptp_msg_echorp *ptr = (struct pptp_msg_echorp *)dat; 71398524Sfenner 71498524Sfenner TCHECK(ptr->id); 71598524Sfenner pptp_id_print(&ptr->id); 71698524Sfenner TCHECK(ptr->result_code); 71798524Sfenner pptp_result_code_print(&ptr->result_code, PPTP_CTRL_MSG_TYPE_ECHORP); 71898524Sfenner TCHECK(ptr->err_code); 71998524Sfenner pptp_err_code_print(&ptr->err_code); 72098524Sfenner TCHECK(ptr->reserved1); 721127668Sbms 72298524Sfenner return; 72398524Sfenner 72498524Sfennertrunc: 72598524Sfenner printf("%s", tstr); 72698524Sfenner} 72798524Sfenner 72898524Sfennerstatic void 72998524Sfennerpptp_ocrq_print(const u_char *dat) 73098524Sfenner{ 73198524Sfenner struct pptp_msg_ocrq *ptr = (struct pptp_msg_ocrq *)dat; 73298524Sfenner 73398524Sfenner TCHECK(ptr->call_id); 73498524Sfenner pptp_call_id_print(&ptr->call_id); 73598524Sfenner TCHECK(ptr->call_ser); 73698524Sfenner pptp_call_ser_print(&ptr->call_ser); 73798524Sfenner TCHECK(ptr->min_bps); 738127668Sbms printf(" MIN_BPS(%u)", EXTRACT_32BITS(&ptr->min_bps)); 73998524Sfenner TCHECK(ptr->max_bps); 740127668Sbms printf(" MAX_BPS(%u)", EXTRACT_32BITS(&ptr->max_bps)); 74198524Sfenner TCHECK(ptr->bearer_type); 74298524Sfenner pptp_bearer_type_print(&ptr->bearer_type); 74398524Sfenner TCHECK(ptr->framing_type); 74498524Sfenner pptp_framing_type_print(&ptr->framing_type); 74598524Sfenner TCHECK(ptr->recv_winsiz); 74698524Sfenner pptp_recv_winsiz_print(&ptr->recv_winsiz); 74798524Sfenner TCHECK(ptr->pkt_proc_delay); 74898524Sfenner pptp_pkt_proc_delay_print(&ptr->pkt_proc_delay); 74998524Sfenner TCHECK(ptr->phone_no_len); 750127668Sbms printf(" PHONE_NO_LEN(%u)", EXTRACT_16BITS(&ptr->phone_no_len)); 75198524Sfenner TCHECK(ptr->reserved1); 75298524Sfenner TCHECK(ptr->phone_no); 75398524Sfenner printf(" PHONE_NO(%.64s)", ptr->phone_no); 75498524Sfenner TCHECK(ptr->subaddr); 75598524Sfenner pptp_subaddr_print(&ptr->subaddr[0]); 75698524Sfenner 75798524Sfenner return; 75898524Sfenner 75998524Sfennertrunc: 76098524Sfenner printf("%s", tstr); 76198524Sfenner} 76298524Sfenner 76398524Sfennerstatic void 76498524Sfennerpptp_ocrp_print(const u_char *dat) 76598524Sfenner{ 76698524Sfenner struct pptp_msg_ocrp *ptr = (struct pptp_msg_ocrp *)dat; 76798524Sfenner 76898524Sfenner TCHECK(ptr->call_id); 76998524Sfenner pptp_call_id_print(&ptr->call_id); 77098524Sfenner TCHECK(ptr->peer_call_id); 77198524Sfenner pptp_peer_call_id_print(&ptr->peer_call_id); 77298524Sfenner TCHECK(ptr->result_code); 77398524Sfenner pptp_result_code_print(&ptr->result_code, PPTP_CTRL_MSG_TYPE_OCRP); 77498524Sfenner TCHECK(ptr->err_code); 77598524Sfenner pptp_err_code_print(&ptr->err_code); 77698524Sfenner TCHECK(ptr->cause_code); 77798524Sfenner pptp_cause_code_print(&ptr->cause_code); 77898524Sfenner TCHECK(ptr->conn_speed); 77998524Sfenner pptp_conn_speed_print(&ptr->conn_speed); 78098524Sfenner TCHECK(ptr->recv_winsiz); 78198524Sfenner pptp_recv_winsiz_print(&ptr->recv_winsiz); 78298524Sfenner TCHECK(ptr->pkt_proc_delay); 78398524Sfenner pptp_pkt_proc_delay_print(&ptr->pkt_proc_delay); 78498524Sfenner TCHECK(ptr->phy_chan_id); 78598524Sfenner pptp_phy_chan_id_print(&ptr->phy_chan_id); 78698524Sfenner 78798524Sfenner return; 78898524Sfenner 78998524Sfennertrunc: 79098524Sfenner printf("%s", tstr); 79198524Sfenner} 79298524Sfenner 79398524Sfennerstatic void 79498524Sfennerpptp_icrq_print(const u_char *dat) 79598524Sfenner{ 79698524Sfenner struct pptp_msg_icrq *ptr = (struct pptp_msg_icrq *)dat; 79798524Sfenner 79898524Sfenner TCHECK(ptr->call_id); 79998524Sfenner pptp_call_id_print(&ptr->call_id); 80098524Sfenner TCHECK(ptr->call_ser); 80198524Sfenner pptp_call_ser_print(&ptr->call_ser); 80298524Sfenner TCHECK(ptr->bearer_type); 80398524Sfenner pptp_bearer_type_print(&ptr->bearer_type); 80498524Sfenner TCHECK(ptr->phy_chan_id); 80598524Sfenner pptp_phy_chan_id_print(&ptr->phy_chan_id); 80698524Sfenner TCHECK(ptr->dialed_no_len); 807127668Sbms printf(" DIALED_NO_LEN(%u)", EXTRACT_16BITS(&ptr->dialed_no_len)); 80898524Sfenner TCHECK(ptr->dialing_no_len); 809127668Sbms printf(" DIALING_NO_LEN(%u)", EXTRACT_16BITS(&ptr->dialing_no_len)); 81098524Sfenner TCHECK(ptr->dialed_no); 81198524Sfenner printf(" DIALED_NO(%.64s)", ptr->dialed_no); 81298524Sfenner TCHECK(ptr->dialing_no); 81398524Sfenner printf(" DIALING_NO(%.64s)", ptr->dialing_no); 81498524Sfenner TCHECK(ptr->subaddr); 81598524Sfenner pptp_subaddr_print(&ptr->subaddr[0]); 81698524Sfenner 81798524Sfenner return; 81898524Sfenner 81998524Sfennertrunc: 82098524Sfenner printf("%s", tstr); 82198524Sfenner} 82298524Sfenner 82398524Sfennerstatic void 82498524Sfennerpptp_icrp_print(const u_char *dat) 82598524Sfenner{ 82698524Sfenner struct pptp_msg_icrp *ptr = (struct pptp_msg_icrp *)dat; 827127668Sbms 82898524Sfenner TCHECK(ptr->call_id); 82998524Sfenner pptp_call_id_print(&ptr->call_id); 83098524Sfenner TCHECK(ptr->peer_call_id); 83198524Sfenner pptp_peer_call_id_print(&ptr->peer_call_id); 83298524Sfenner TCHECK(ptr->result_code); 83398524Sfenner pptp_result_code_print(&ptr->result_code, PPTP_CTRL_MSG_TYPE_ICRP); 83498524Sfenner TCHECK(ptr->err_code); 83598524Sfenner pptp_err_code_print(&ptr->err_code); 83698524Sfenner TCHECK(ptr->recv_winsiz); 83798524Sfenner pptp_recv_winsiz_print(&ptr->recv_winsiz); 83898524Sfenner TCHECK(ptr->pkt_proc_delay); 83998524Sfenner pptp_pkt_proc_delay_print(&ptr->pkt_proc_delay); 84098524Sfenner TCHECK(ptr->reserved1); 84198524Sfenner 84298524Sfenner return; 84398524Sfenner 84498524Sfennertrunc: 84598524Sfenner printf("%s", tstr); 84698524Sfenner} 84798524Sfenner 84898524Sfennerstatic void 84998524Sfennerpptp_iccn_print(const u_char *dat) 85098524Sfenner{ 85198524Sfenner struct pptp_msg_iccn *ptr = (struct pptp_msg_iccn *)dat; 85298524Sfenner 85398524Sfenner TCHECK(ptr->peer_call_id); 85498524Sfenner pptp_peer_call_id_print(&ptr->peer_call_id); 85598524Sfenner TCHECK(ptr->reserved1); 85698524Sfenner TCHECK(ptr->conn_speed); 85798524Sfenner pptp_conn_speed_print(&ptr->conn_speed); 85898524Sfenner TCHECK(ptr->recv_winsiz); 85998524Sfenner pptp_recv_winsiz_print(&ptr->recv_winsiz); 86098524Sfenner TCHECK(ptr->pkt_proc_delay); 86198524Sfenner pptp_pkt_proc_delay_print(&ptr->pkt_proc_delay); 86298524Sfenner TCHECK(ptr->framing_type); 86398524Sfenner pptp_framing_type_print(&ptr->framing_type); 86498524Sfenner 86598524Sfenner return; 86698524Sfenner 86798524Sfennertrunc: 86898524Sfenner printf("%s", tstr); 86998524Sfenner} 87098524Sfenner 87198524Sfennerstatic void 87298524Sfennerpptp_ccrq_print(const u_char *dat) 87398524Sfenner{ 87498524Sfenner struct pptp_msg_ccrq *ptr = (struct pptp_msg_ccrq *)dat; 87598524Sfenner 87698524Sfenner TCHECK(ptr->call_id); 87798524Sfenner pptp_call_id_print(&ptr->call_id); 87898524Sfenner TCHECK(ptr->reserved1); 87998524Sfenner 88098524Sfenner return; 88198524Sfenner 88298524Sfennertrunc: 88398524Sfenner printf("%s", tstr); 88498524Sfenner} 88598524Sfenner 88698524Sfennerstatic void 88798524Sfennerpptp_cdn_print(const u_char *dat) 88898524Sfenner{ 88998524Sfenner struct pptp_msg_cdn *ptr = (struct pptp_msg_cdn *)dat; 89098524Sfenner 89198524Sfenner TCHECK(ptr->call_id); 89298524Sfenner pptp_call_id_print(&ptr->call_id); 89398524Sfenner TCHECK(ptr->result_code); 89498524Sfenner pptp_result_code_print(&ptr->result_code, PPTP_CTRL_MSG_TYPE_CDN); 89598524Sfenner TCHECK(ptr->err_code); 89698524Sfenner pptp_err_code_print(&ptr->err_code); 89798524Sfenner TCHECK(ptr->cause_code); 89898524Sfenner pptp_cause_code_print(&ptr->cause_code); 89998524Sfenner TCHECK(ptr->reserved1); 90098524Sfenner TCHECK(ptr->call_stats); 90198524Sfenner printf(" CALL_STATS(%.128s)", ptr->call_stats); 90298524Sfenner 90398524Sfenner return; 90498524Sfenner 90598524Sfennertrunc: 90698524Sfenner printf("%s", tstr); 90798524Sfenner} 90898524Sfenner 90998524Sfennerstatic void 91098524Sfennerpptp_wen_print(const u_char *dat) 91198524Sfenner{ 91298524Sfenner struct pptp_msg_wen *ptr = (struct pptp_msg_wen *)dat; 91398524Sfenner 91498524Sfenner TCHECK(ptr->peer_call_id); 91598524Sfenner pptp_peer_call_id_print(&ptr->peer_call_id); 91698524Sfenner TCHECK(ptr->reserved1); 91798524Sfenner TCHECK(ptr->crc_err); 918127668Sbms printf(" CRC_ERR(%u)", EXTRACT_32BITS(&ptr->crc_err)); 91998524Sfenner TCHECK(ptr->framing_err); 920127668Sbms printf(" FRAMING_ERR(%u)", EXTRACT_32BITS(&ptr->framing_err)); 92198524Sfenner TCHECK(ptr->hardware_overrun); 922127668Sbms printf(" HARDWARE_OVERRUN(%u)", EXTRACT_32BITS(&ptr->hardware_overrun)); 92398524Sfenner TCHECK(ptr->buffer_overrun); 924127668Sbms printf(" BUFFER_OVERRUN(%u)", EXTRACT_32BITS(&ptr->buffer_overrun)); 92598524Sfenner TCHECK(ptr->timeout_err); 926127668Sbms printf(" TIMEOUT_ERR(%u)", EXTRACT_32BITS(&ptr->timeout_err)); 92798524Sfenner TCHECK(ptr->align_err); 928127668Sbms printf(" ALIGN_ERR(%u)", EXTRACT_32BITS(&ptr->align_err)); 92998524Sfenner 93098524Sfenner return; 93198524Sfenner 93298524Sfennertrunc: 93398524Sfenner printf("%s", tstr); 93498524Sfenner} 93598524Sfenner 93698524Sfennerstatic void 93798524Sfennerpptp_sli_print(const u_char *dat) 93898524Sfenner{ 93998524Sfenner struct pptp_msg_sli *ptr = (struct pptp_msg_sli *)dat; 94098524Sfenner 94198524Sfenner TCHECK(ptr->peer_call_id); 94298524Sfenner pptp_peer_call_id_print(&ptr->peer_call_id); 94398524Sfenner TCHECK(ptr->reserved1); 94498524Sfenner TCHECK(ptr->send_accm); 945127668Sbms printf(" SEND_ACCM(0x%08x)", EXTRACT_32BITS(&ptr->send_accm)); 94698524Sfenner TCHECK(ptr->recv_accm); 947127668Sbms printf(" RECV_ACCM(0x%08x)", EXTRACT_32BITS(&ptr->recv_accm)); 94898524Sfenner 94998524Sfenner return; 95098524Sfenner 95198524Sfennertrunc: 95298524Sfenner printf("%s", tstr); 95398524Sfenner} 95498524Sfenner 95598524Sfennervoid 956127668Sbmspptp_print(const u_char *dat) 95798524Sfenner{ 95898524Sfenner const struct pptp_hdr *hdr; 95998524Sfenner u_int32_t mc; 96098524Sfenner u_int16_t ctrl_msg_type; 96198524Sfenner 96298524Sfenner printf(": pptp"); 96398524Sfenner 96498524Sfenner hdr = (struct pptp_hdr *)dat; 96598524Sfenner 96698524Sfenner TCHECK(hdr->length); 96798524Sfenner if (vflag) { 968127668Sbms printf(" Length=%u", EXTRACT_16BITS(&hdr->length)); 96998524Sfenner } 97098524Sfenner TCHECK(hdr->msg_type); 97198524Sfenner if (vflag) { 972127668Sbms switch(EXTRACT_16BITS(&hdr->msg_type)) { 97398524Sfenner case PPTP_MSG_TYPE_CTRL: 97498524Sfenner printf(" CTRL-MSG"); 97598524Sfenner break; 97698524Sfenner case PPTP_MSG_TYPE_MGMT: 97798524Sfenner printf(" MGMT-MSG"); 97898524Sfenner break; 97998524Sfenner default: 98098524Sfenner printf(" UNKNOWN-MSG-TYPE"); 98198524Sfenner break; 98298524Sfenner } 98398524Sfenner } 98498524Sfenner 98598524Sfenner TCHECK(hdr->magic_cookie); 986127668Sbms mc = EXTRACT_32BITS(&hdr->magic_cookie); 98798524Sfenner if (mc != PPTP_MAGIC_COOKIE) { 98898524Sfenner printf(" UNEXPECTED Magic-Cookie!!(%08x)", mc); 98998524Sfenner } 99098524Sfenner if (vflag || mc != PPTP_MAGIC_COOKIE) { 99198524Sfenner printf(" Magic-Cookie=%08x", mc); 99298524Sfenner } 99398524Sfenner TCHECK(hdr->ctrl_msg_type); 994127668Sbms ctrl_msg_type = EXTRACT_16BITS(&hdr->ctrl_msg_type); 99598524Sfenner if (ctrl_msg_type < PPTP_MAX_MSGTYPE_INDEX) { 996127668Sbms printf(" CTRL_MSGTYPE=%s", 99798524Sfenner pptp_message_type_string[ctrl_msg_type]); 99898524Sfenner } else { 99998524Sfenner printf(" UNKNOWN_CTRL_MSGTYPE(%u)", ctrl_msg_type); 100098524Sfenner } 100198524Sfenner TCHECK(hdr->reserved0); 100298524Sfenner 100398524Sfenner dat += 12; 100498524Sfenner 100598524Sfenner switch(ctrl_msg_type) { 100698524Sfenner case PPTP_CTRL_MSG_TYPE_SCCRQ: 100798524Sfenner pptp_sccrq_print(dat); 100898524Sfenner break; 100998524Sfenner case PPTP_CTRL_MSG_TYPE_SCCRP: 101098524Sfenner pptp_sccrp_print(dat); 101198524Sfenner break; 101298524Sfenner case PPTP_CTRL_MSG_TYPE_StopCCRQ: 101398524Sfenner pptp_stopccrq_print(dat); 101498524Sfenner break; 101598524Sfenner case PPTP_CTRL_MSG_TYPE_StopCCRP: 101698524Sfenner pptp_stopccrp_print(dat); 101798524Sfenner break; 101898524Sfenner case PPTP_CTRL_MSG_TYPE_ECHORQ: 101998524Sfenner pptp_echorq_print(dat); 102098524Sfenner break; 102198524Sfenner case PPTP_CTRL_MSG_TYPE_ECHORP: 102298524Sfenner pptp_echorp_print(dat); 102398524Sfenner break; 102498524Sfenner case PPTP_CTRL_MSG_TYPE_OCRQ: 102598524Sfenner pptp_ocrq_print(dat); 102698524Sfenner break; 102798524Sfenner case PPTP_CTRL_MSG_TYPE_OCRP: 102898524Sfenner pptp_ocrp_print(dat); 102998524Sfenner break; 103098524Sfenner case PPTP_CTRL_MSG_TYPE_ICRQ: 103198524Sfenner pptp_icrq_print(dat); 103298524Sfenner break; 103398524Sfenner case PPTP_CTRL_MSG_TYPE_ICRP: 103498524Sfenner pptp_icrp_print(dat); 103598524Sfenner break; 103698524Sfenner case PPTP_CTRL_MSG_TYPE_ICCN: 103798524Sfenner pptp_iccn_print(dat); 103898524Sfenner break; 103998524Sfenner case PPTP_CTRL_MSG_TYPE_CCRQ: 104098524Sfenner pptp_ccrq_print(dat); 104198524Sfenner break; 104298524Sfenner case PPTP_CTRL_MSG_TYPE_CDN: 104398524Sfenner pptp_cdn_print(dat); 104498524Sfenner break; 104598524Sfenner case PPTP_CTRL_MSG_TYPE_WEN: 104698524Sfenner pptp_wen_print(dat); 104798524Sfenner break; 104898524Sfenner case PPTP_CTRL_MSG_TYPE_SLI: 104998524Sfenner pptp_sli_print(dat); 105098524Sfenner break; 105198524Sfenner default: 105298524Sfenner /* do nothing */ 105398524Sfenner break; 105498524Sfenner } 105598524Sfenner 105698524Sfenner return; 105798524Sfenner 105898524Sfennertrunc: 105998524Sfenner printf("%s", tstr); 1060127668Sbms} 1061