/* specification: RFC 2637 */
-#ifdef HAVE_CONFIG_H
#include <config.h>
-#endif
#include "netdissect-stdinc.h"
#define PPTP_CTRL_MSG_TYPE_WEN 14
#define PPTP_CTRL_MSG_TYPE_SLI 15
-#define PPTP_FRAMING_CAP_ASYNC_MASK 0x00000001 /* Aynchronous */
+#define PPTP_FRAMING_CAP_ASYNC_MASK 0x00000001 /* Asynchronous */
#define PPTP_FRAMING_CAP_SYNC_MASK 0x00000002 /* Synchronous */
#define PPTP_BEARER_CAP_ANALOG_MASK 0x00000001 /* Analog */
/* Attribute-specific print out functions */
/******************************************/
-/* In these attribute-specific print-out functions, it't not necessary
- to do ND_TCHECK because they are already checked in the caller of
- these functions. */
-
static void
pptp_bearer_cap_print(netdissect_options *ndo,
const nd_uint32_t bearer_cap)
pptp_hostname_print(netdissect_options *ndo,
const u_char *hostname)
{
- ND_PRINT(" HOSTNAME(%.64s)", hostname);
+ ND_PRINT(" HOSTNAME(");
+ nd_printjnp(ndo, hostname, 64);
+ ND_PRINT(")");
}
static void
pptp_subaddr_print(netdissect_options *ndo,
const u_char *subaddr)
{
- ND_PRINT(" SUB_ADDR(%.64s)", subaddr);
+ ND_PRINT(" SUB_ADDR(");
+ nd_printjnp(ndo, subaddr, 64);
+ ND_PRINT(")");
}
static void
pptp_vendor_print(netdissect_options *ndo,
const u_char *vendor)
{
- ND_PRINT(" VENDOR(%.64s)", vendor);
+ ND_PRINT(" VENDOR(");
+ nd_printjnp(ndo, vendor, 64);
+ ND_PRINT(")");
}
/************************************/
{
const struct pptp_msg_sccrq *ptr = (const struct pptp_msg_sccrq *)dat;
- ND_TCHECK_2(ptr->proto_ver);
pptp_proto_ver_print(ndo, ptr->proto_ver);
- ND_TCHECK_2(ptr->reserved1);
PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
- ND_TCHECK_4(ptr->framing_cap);
pptp_framing_cap_print(ndo, ptr->framing_cap);
- ND_TCHECK_4(ptr->bearer_cap);
pptp_bearer_cap_print(ndo, ptr->bearer_cap);
- ND_TCHECK_2(ptr->max_channel);
pptp_max_channel_print(ndo, ptr->max_channel);
- ND_TCHECK_2(ptr->firm_rev);
pptp_firm_rev_print(ndo, ptr->firm_rev);
- ND_TCHECK_SIZE(&ptr->hostname);
- pptp_hostname_print(ndo, &ptr->hostname[0]);
- ND_TCHECK_SIZE(&ptr->vendor);
- pptp_vendor_print(ndo, &ptr->vendor[0]);
-
- return;
-
-trunc:
- nd_print_trunc(ndo);
+ pptp_hostname_print(ndo, ptr->hostname);
+ pptp_vendor_print(ndo, ptr->vendor);
}
static void
{
const struct pptp_msg_sccrp *ptr = (const struct pptp_msg_sccrp *)dat;
- ND_TCHECK_2(ptr->proto_ver);
pptp_proto_ver_print(ndo, ptr->proto_ver);
- ND_TCHECK_1(ptr->result_code);
pptp_result_code_print(ndo, ptr->result_code, PPTP_CTRL_MSG_TYPE_SCCRP);
- ND_TCHECK_1(ptr->err_code);
pptp_err_code_print(ndo, ptr->err_code);
- ND_TCHECK_4(ptr->framing_cap);
pptp_framing_cap_print(ndo, ptr->framing_cap);
- ND_TCHECK_4(ptr->bearer_cap);
pptp_bearer_cap_print(ndo, ptr->bearer_cap);
- ND_TCHECK_2(ptr->max_channel);
pptp_max_channel_print(ndo, ptr->max_channel);
- ND_TCHECK_2(ptr->firm_rev);
pptp_firm_rev_print(ndo, ptr->firm_rev);
- ND_TCHECK_SIZE(&ptr->hostname);
- pptp_hostname_print(ndo, &ptr->hostname[0]);
- ND_TCHECK_SIZE(&ptr->vendor);
- pptp_vendor_print(ndo, &ptr->vendor[0]);
-
- return;
-
-trunc:
- nd_print_trunc(ndo);
+ pptp_hostname_print(ndo, ptr->hostname);
+ pptp_vendor_print(ndo, ptr->vendor);
}
static void
}
}
ND_PRINT(")");
- ND_TCHECK_1(ptr->reserved1);
PRINT_RESERVED_IF_NOT_ZERO_1(ptr->reserved1);
- ND_TCHECK_2(ptr->reserved2);
PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved2);
-
- return;
-
-trunc:
- nd_print_trunc(ndo);
}
static void
{
const struct pptp_msg_stopccrp *ptr = (const struct pptp_msg_stopccrp *)dat;
- ND_TCHECK_1(ptr->result_code);
pptp_result_code_print(ndo, ptr->result_code, PPTP_CTRL_MSG_TYPE_StopCCRP);
- ND_TCHECK_1(ptr->err_code);
pptp_err_code_print(ndo, ptr->err_code);
- ND_TCHECK_2(ptr->reserved1);
PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
-
- return;
-
-trunc:
- nd_print_trunc(ndo);
}
static void
{
const struct pptp_msg_echorq *ptr = (const struct pptp_msg_echorq *)dat;
- ND_TCHECK_4(ptr->id);
pptp_id_print(ndo, ptr->id);
-
- return;
-
-trunc:
- nd_print_trunc(ndo);
}
static void
{
const struct pptp_msg_echorp *ptr = (const struct pptp_msg_echorp *)dat;
- ND_TCHECK_4(ptr->id);
pptp_id_print(ndo, ptr->id);
- ND_TCHECK_1(ptr->result_code);
pptp_result_code_print(ndo, ptr->result_code, PPTP_CTRL_MSG_TYPE_ECHORP);
- ND_TCHECK_1(ptr->err_code);
pptp_err_code_print(ndo, ptr->err_code);
- ND_TCHECK_2(ptr->reserved1);
PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
-
- return;
-
-trunc:
- nd_print_trunc(ndo);
}
static void
{
const struct pptp_msg_ocrq *ptr = (const struct pptp_msg_ocrq *)dat;
- ND_TCHECK_2(ptr->call_id);
pptp_call_id_print(ndo, ptr->call_id);
- ND_TCHECK_2(ptr->call_ser);
pptp_call_ser_print(ndo, ptr->call_ser);
ND_PRINT(" MIN_BPS(%u)", GET_BE_U_4(ptr->min_bps));
ND_PRINT(" MAX_BPS(%u)", GET_BE_U_4(ptr->max_bps));
- ND_TCHECK_4(ptr->bearer_type);
pptp_bearer_type_print(ndo, ptr->bearer_type);
- ND_TCHECK_4(ptr->framing_type);
pptp_framing_type_print(ndo, ptr->framing_type);
- ND_TCHECK_2(ptr->recv_winsiz);
pptp_recv_winsiz_print(ndo, ptr->recv_winsiz);
- ND_TCHECK_2(ptr->pkt_proc_delay);
pptp_pkt_proc_delay_print(ndo, ptr->pkt_proc_delay);
ND_PRINT(" PHONE_NO_LEN(%u)", GET_BE_U_2(ptr->phone_no_len));
- ND_TCHECK_2(ptr->reserved1);
PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
- ND_TCHECK_SIZE(&ptr->phone_no);
- ND_PRINT(" PHONE_NO(%.64s)", ptr->phone_no);
- ND_TCHECK_SIZE(&ptr->subaddr);
- pptp_subaddr_print(ndo, &ptr->subaddr[0]);
-
- return;
-
-trunc:
- nd_print_trunc(ndo);
+ ND_PRINT(" PHONE_NO(");
+ nd_printjnp(ndo, ptr->phone_no,
+ ND_MIN(64, GET_BE_U_2(ptr->phone_no_len)));
+ ND_PRINT(")");
+ pptp_subaddr_print(ndo, ptr->subaddr);
}
static void
{
const struct pptp_msg_ocrp *ptr = (const struct pptp_msg_ocrp *)dat;
- ND_TCHECK_2(ptr->call_id);
pptp_call_id_print(ndo, ptr->call_id);
- ND_TCHECK_2(ptr->peer_call_id);
pptp_peer_call_id_print(ndo, ptr->peer_call_id);
- ND_TCHECK_1(ptr->result_code);
pptp_result_code_print(ndo, ptr->result_code, PPTP_CTRL_MSG_TYPE_OCRP);
- ND_TCHECK_1(ptr->err_code);
pptp_err_code_print(ndo, ptr->err_code);
- ND_TCHECK_2(ptr->cause_code);
pptp_cause_code_print(ndo, ptr->cause_code);
- ND_TCHECK_4(ptr->conn_speed);
pptp_conn_speed_print(ndo, ptr->conn_speed);
- ND_TCHECK_2(ptr->recv_winsiz);
pptp_recv_winsiz_print(ndo, ptr->recv_winsiz);
- ND_TCHECK_2(ptr->pkt_proc_delay);
pptp_pkt_proc_delay_print(ndo, ptr->pkt_proc_delay);
- ND_TCHECK_4(ptr->phy_chan_id);
pptp_phy_chan_id_print(ndo, ptr->phy_chan_id);
-
- return;
-
-trunc:
- nd_print_trunc(ndo);
}
static void
{
const struct pptp_msg_icrq *ptr = (const struct pptp_msg_icrq *)dat;
- ND_TCHECK_2(ptr->call_id);
pptp_call_id_print(ndo, ptr->call_id);
- ND_TCHECK_2(ptr->call_ser);
pptp_call_ser_print(ndo, ptr->call_ser);
- ND_TCHECK_4(ptr->bearer_type);
pptp_bearer_type_print(ndo, ptr->bearer_type);
- ND_TCHECK_4(ptr->phy_chan_id);
pptp_phy_chan_id_print(ndo, ptr->phy_chan_id);
ND_PRINT(" DIALED_NO_LEN(%u)", GET_BE_U_2(ptr->dialed_no_len));
ND_PRINT(" DIALING_NO_LEN(%u)", GET_BE_U_2(ptr->dialing_no_len));
- ND_TCHECK_SIZE(&ptr->dialed_no);
- ND_PRINT(" DIALED_NO(%.64s)", ptr->dialed_no);
- ND_TCHECK_SIZE(&ptr->dialing_no);
- ND_PRINT(" DIALING_NO(%.64s)", ptr->dialing_no);
- ND_TCHECK_SIZE(&ptr->subaddr);
- pptp_subaddr_print(ndo, &ptr->subaddr[0]);
-
- return;
-
-trunc:
- nd_print_trunc(ndo);
+ ND_PRINT(" DIALED_NO(");
+ nd_printjnp(ndo, ptr->dialed_no,
+ ND_MIN(64, GET_BE_U_2(ptr->dialed_no_len)));
+ ND_PRINT(")");
+ ND_PRINT(" DIALING_NO(");
+ nd_printjnp(ndo, ptr->dialing_no,
+ ND_MIN(64, GET_BE_U_2(ptr->dialing_no_len)));
+ ND_PRINT(")");
+ pptp_subaddr_print(ndo, ptr->subaddr);
}
static void
{
const struct pptp_msg_icrp *ptr = (const struct pptp_msg_icrp *)dat;
- ND_TCHECK_2(ptr->call_id);
pptp_call_id_print(ndo, ptr->call_id);
- ND_TCHECK_2(ptr->peer_call_id);
pptp_peer_call_id_print(ndo, ptr->peer_call_id);
- ND_TCHECK_1(ptr->result_code);
pptp_result_code_print(ndo, ptr->result_code, PPTP_CTRL_MSG_TYPE_ICRP);
- ND_TCHECK_1(ptr->err_code);
pptp_err_code_print(ndo, ptr->err_code);
- ND_TCHECK_2(ptr->recv_winsiz);
pptp_recv_winsiz_print(ndo, ptr->recv_winsiz);
- ND_TCHECK_2(ptr->pkt_proc_delay);
pptp_pkt_proc_delay_print(ndo, ptr->pkt_proc_delay);
- ND_TCHECK_2(ptr->reserved1);
PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
-
- return;
-
-trunc:
- nd_print_trunc(ndo);
}
static void
{
const struct pptp_msg_iccn *ptr = (const struct pptp_msg_iccn *)dat;
- ND_TCHECK_2(ptr->peer_call_id);
pptp_peer_call_id_print(ndo, ptr->peer_call_id);
- ND_TCHECK_2(ptr->reserved1);
PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
- ND_TCHECK_4(ptr->conn_speed);
pptp_conn_speed_print(ndo, ptr->conn_speed);
- ND_TCHECK_2(ptr->recv_winsiz);
pptp_recv_winsiz_print(ndo, ptr->recv_winsiz);
- ND_TCHECK_2(ptr->pkt_proc_delay);
pptp_pkt_proc_delay_print(ndo, ptr->pkt_proc_delay);
- ND_TCHECK_4(ptr->framing_type);
pptp_framing_type_print(ndo, ptr->framing_type);
-
- return;
-
-trunc:
- nd_print_trunc(ndo);
}
static void
{
const struct pptp_msg_ccrq *ptr = (const struct pptp_msg_ccrq *)dat;
- ND_TCHECK_2(ptr->call_id);
pptp_call_id_print(ndo, ptr->call_id);
- ND_TCHECK_2(ptr->reserved1);
PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
-
- return;
-
-trunc:
- nd_print_trunc(ndo);
}
static void
{
const struct pptp_msg_cdn *ptr = (const struct pptp_msg_cdn *)dat;
- ND_TCHECK_2(ptr->call_id);
pptp_call_id_print(ndo, ptr->call_id);
- ND_TCHECK_1(ptr->result_code);
pptp_result_code_print(ndo, ptr->result_code, PPTP_CTRL_MSG_TYPE_CDN);
- ND_TCHECK_1(ptr->err_code);
pptp_err_code_print(ndo, ptr->err_code);
- ND_TCHECK_2(ptr->cause_code);
pptp_cause_code_print(ndo, ptr->cause_code);
- ND_TCHECK_2(ptr->reserved1);
PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
- ND_TCHECK_SIZE(&ptr->call_stats);
- ND_PRINT(" CALL_STATS(%.128s)", ptr->call_stats);
-
- return;
-
-trunc:
- nd_print_trunc(ndo);
+ ND_PRINT(" CALL_STATS(");
+ nd_printjnp(ndo, ptr->call_stats, 128);
+ ND_PRINT(")");
}
static void
{
const struct pptp_msg_wen *ptr = (const struct pptp_msg_wen *)dat;
- ND_TCHECK_2(ptr->peer_call_id);
pptp_peer_call_id_print(ndo, ptr->peer_call_id);
- ND_TCHECK_2(ptr->reserved1);
PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
ND_PRINT(" CRC_ERR(%u)", GET_BE_U_4(ptr->crc_err));
ND_PRINT(" FRAMING_ERR(%u)", GET_BE_U_4(ptr->framing_err));
ND_PRINT(" BUFFER_OVERRUN(%u)", GET_BE_U_4(ptr->buffer_overrun));
ND_PRINT(" TIMEOUT_ERR(%u)", GET_BE_U_4(ptr->timeout_err));
ND_PRINT(" ALIGN_ERR(%u)", GET_BE_U_4(ptr->align_err));
-
- return;
-
-trunc:
- nd_print_trunc(ndo);
}
static void
{
const struct pptp_msg_sli *ptr = (const struct pptp_msg_sli *)dat;
- ND_TCHECK_2(ptr->peer_call_id);
pptp_peer_call_id_print(ndo, ptr->peer_call_id);
- ND_TCHECK_2(ptr->reserved1);
PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
ND_PRINT(" SEND_ACCM(0x%08x)", GET_BE_U_4(ptr->send_accm));
ND_PRINT(" RECV_ACCM(0x%08x)", GET_BE_U_4(ptr->recv_accm));
-
- return;
-
-trunc:
- nd_print_trunc(ndo);
}
void
uint16_t ctrl_msg_type;
ndo->ndo_protocol = "pptp";
- ND_PRINT(": pptp");
+ ND_PRINT(": ");
+ nd_print_protocol(ndo);
hdr = (const struct pptp_hdr *)dat;
} else {
ND_PRINT(" UNKNOWN_CTRL_MSGTYPE(%u)", ctrl_msg_type);
}
- ND_TCHECK_2(hdr->reserved0);
PRINT_RESERVED_IF_NOT_ZERO_2(hdr->reserved0);
dat += 12;
/* do nothing */
break;
}
-
- return;
-
-trunc:
- nd_print_trunc(ndo);
}