~ubuntu-branches/ubuntu/oneiric/ppp/oneiric

« back to all changes in this revision

Viewing changes to pppd/plugins/rp-pppoe/debug.c

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2010-11-24 18:12:47 UTC
  • mfrom: (1.2.5 upstream) (2.1.6 sid)
  • Revision ID: james.westby@ubuntu.com-20101124181247-2fopr1k0ic1t6svs
Tags: 2.4.5-4ubuntu1
* Merge with Debian; remaining changes:
  - /etc/ppp/options: default is noauth instead of auth.
  - extra/pon: Perform ppp_on_boot migration from pppoe package.
  - debian/ppp.postinst: init script migration for version before
    2.4.5~git20081126t100229-0ubuntu2.
  - debian/ppp.pppd-dns: Update LSB header.
  - Provide pppoe_on_boot file.
  - Move pppd-dns script to S45.
  - debian/patches/load_ppp_generic_if_needed: load ppp_generic kernel
    module if needed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/***********************************************************************
 
2
*
 
3
* debug.c
 
4
*
 
5
* Implementation of user-space PPPoE redirector for Linux.
 
6
*
 
7
* Functions for printing debugging information
 
8
*
 
9
* Copyright (C) 2000 by Roaring Penguin Software Inc.
 
10
*
 
11
* This program may be distributed according to the terms of the GNU
 
12
* General Public License, version 2 or (at your option) any later version.
 
13
*
 
14
***********************************************************************/
 
15
 
 
16
static char const RCSID[] =
 
17
"$Id: debug.c,v 1.2 2008/06/09 08:34:23 paulus Exp $";
 
18
 
 
19
#include "pppoe.h"
 
20
#include <sys/time.h>
 
21
#include <time.h>
 
22
#include <unistd.h>
 
23
#include <ctype.h>
 
24
 
 
25
/**********************************************************************
 
26
*%FUNCTION: dumpHex
 
27
*%ARGUMENTS:
 
28
* fp -- file to dump to
 
29
* buf -- buffer to dump
 
30
* len -- length of data
 
31
*%RETURNS:
 
32
* Nothing
 
33
*%DESCRIPTION:
 
34
* Dumps buffer to fp in an easy-to-read format
 
35
***********************************************************************/
 
36
void
 
37
dumpHex(FILE *fp, unsigned char const *buf, int len)
 
38
{
 
39
    int i;
 
40
    int base;
 
41
 
 
42
    if (!fp) return;
 
43
 
 
44
    /* do NOT dump PAP packets */
 
45
    if (len >= 2 && buf[0] == 0xC0 && buf[1] == 0x23) {
 
46
        fprintf(fp, "(PAP Authentication Frame -- Contents not dumped)\n");
 
47
        return;
 
48
    }
 
49
 
 
50
    for (base=0; base<len; base += 16) {
 
51
        for (i=base; i<base+16; i++) {
 
52
            if (i < len) {
 
53
                fprintf(fp, "%02x ", (unsigned) buf[i]);
 
54
            } else {
 
55
                fprintf(fp, "   ");
 
56
            }
 
57
        }
 
58
        fprintf(fp, "  ");
 
59
        for (i=base; i<base+16; i++) {
 
60
            if (i < len) {
 
61
                if (isprint(buf[i])) {
 
62
                    fprintf(fp, "%c", buf[i]);
 
63
                } else {
 
64
                    fprintf(fp, ".");
 
65
                }
 
66
            } else {
 
67
                break;
 
68
            }
 
69
        }
 
70
        fprintf(fp, "\n");
 
71
    }
 
72
}
 
73
 
 
74
/**********************************************************************
 
75
*%FUNCTION: dumpPacket
 
76
*%ARGUMENTS:
 
77
* fp -- file to dump to
 
78
* packet -- a PPPoE packet
 
79
* dir -- either SENT or RCVD
 
80
*%RETURNS:
 
81
* Nothing
 
82
*%DESCRIPTION:
 
83
* Dumps the PPPoE packet to fp in an easy-to-read format
 
84
***********************************************************************/
 
85
void
 
86
dumpPacket(FILE *fp, PPPoEPacket *packet, char const *dir)
 
87
{
 
88
    int len = ntohs(packet->length);
 
89
 
 
90
    /* Sheesh... printing times is a pain... */
 
91
    struct timeval tv;
 
92
    time_t now;
 
93
    int millisec;
 
94
    struct tm *lt;
 
95
    char timebuf[256];
 
96
 
 
97
    UINT16_t type = etherType(packet);
 
98
    if (!fp) return;
 
99
    gettimeofday(&tv, NULL);
 
100
    now = (time_t) tv.tv_sec;
 
101
    millisec = tv.tv_usec / 1000;
 
102
    lt = localtime(&now);
 
103
    strftime(timebuf, 256, "%H:%M:%S", lt);
 
104
    fprintf(fp, "%s.%03d %s PPPoE ", timebuf, millisec, dir);
 
105
    if (type == Eth_PPPOE_Discovery) {
 
106
        fprintf(fp, "Discovery (%x) ", (unsigned) type);
 
107
    } else if (type == Eth_PPPOE_Session) {
 
108
        fprintf(fp, "Session (%x) ", (unsigned) type);
 
109
    } else {
 
110
        fprintf(fp, "Unknown (%x) ", (unsigned) type);
 
111
    }
 
112
 
 
113
    switch(packet->code) {
 
114
    case CODE_PADI: fprintf(fp, "PADI "); break;
 
115
    case CODE_PADO: fprintf(fp, "PADO "); break;
 
116
    case CODE_PADR: fprintf(fp, "PADR "); break;
 
117
    case CODE_PADS: fprintf(fp, "PADS "); break;
 
118
    case CODE_PADT: fprintf(fp, "PADT "); break;
 
119
    case CODE_PADM: fprintf(fp, "PADM "); break;
 
120
    case CODE_PADN: fprintf(fp, "PADN "); break;
 
121
    case CODE_SESS: fprintf(fp, "SESS "); break;
 
122
    }
 
123
 
 
124
    fprintf(fp, "sess-id %d length %d\n",
 
125
            (int) ntohs(packet->session),
 
126
            len);
 
127
 
 
128
    /* Ugly... I apologize... */
 
129
    fprintf(fp,
 
130
            "SourceAddr %02x:%02x:%02x:%02x:%02x:%02x "
 
131
            "DestAddr %02x:%02x:%02x:%02x:%02x:%02x\n",
 
132
            (unsigned) packet->ethHdr.h_source[0],
 
133
            (unsigned) packet->ethHdr.h_source[1],
 
134
            (unsigned) packet->ethHdr.h_source[2],
 
135
            (unsigned) packet->ethHdr.h_source[3],
 
136
            (unsigned) packet->ethHdr.h_source[4],
 
137
            (unsigned) packet->ethHdr.h_source[5],
 
138
            (unsigned) packet->ethHdr.h_dest[0],
 
139
            (unsigned) packet->ethHdr.h_dest[1],
 
140
            (unsigned) packet->ethHdr.h_dest[2],
 
141
            (unsigned) packet->ethHdr.h_dest[3],
 
142
            (unsigned) packet->ethHdr.h_dest[4],
 
143
            (unsigned) packet->ethHdr.h_dest[5]);
 
144
    dumpHex(fp, packet->payload, ntohs(packet->length));
 
145
}