/*
*
* Copyright (c) 2007-2016 The University of Waikato, Hamilton, New Zealand.
* All rights reserved.
*
* This file is part of libtrace.
*
* This code has been developed by the University of Waikato WAND
* research group. For further information please see http://www.wand.net.nz/
*
* libtrace is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* libtrace is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
*
*/
/* Decoder for PPP with HDLC frames */
#include
#include
#include
#include
#include
#include "libtrace.h"
#include "libpacketdump.h"
typedef struct libtrace_hdlc_t {
uint8_t address; /** Always 0xff */
uint8_t control; /** Always 0x03 */
uint16_t protocol;
} libtrace_hdlc_t;
DLLEXPORT void decode(int link_type UNUSED,const char *packet,unsigned len)
{
libtrace_hdlc_t *frame = (libtrace_hdlc_t *)packet;
printf(" PPP:");
if (len >= 1)
printf(" Address: 0x%02x", frame->address);
else {
printf("[|Truncated]\n");
return;
}
if (len >= 2)
printf(" Control: 0x%02x", frame->control);
else {
printf("[|Truncated]\n");
return;
}
if (len >= 4) {
printf(" Protocol: 0x%04x\n", ntohs(frame->protocol));
/* PPP protocols do not match ethertypes, so we have to
* convert
*
* XXX develop decoders for PPP protocols so this can be
* done generically
*/
if (ntohs(frame->protocol) == 0x0021) {
decode_next(packet + 4, len - 4, "eth", 0x0800);
}
}
else {
printf("[|Truncated]\n");
return;
}
return;
}