source: libpacketdump/eth_2048.c @ fc2078d

4.0.1-hotfixescachetimestampsdevelopdpdk-ndagetsilivegetfragoffhelplibtrace4ndag_formatpfringrc-4.0.1rc-4.0.2rc-4.0.3rc-4.0.4ringdecrementfixringperformanceringtimestampfixes
Last change on this file since fc2078d was fc2078d, checked in by Perry Lorier <perry@…>, 15 years ago

Tidy up IP printer

  • Property mode set to 100644
File size: 1.5 KB
Line 
1#include <sys/types.h>
2#include <sys/socket.h>
3#include <netinet/in.h>
4#include <stdio.h>
5#include "libpacketdump.h"
6#ifndef WIN32
7        #include <netinet/in_systm.h>
8#endif
9#include <arpa/inet.h>
10#include <netdb.h>
11
12#define DISPLAY_EXP(x,fmt,exp) \
13        if ((unsigned int)len>=((char*)&ip->x-(char*)ip+sizeof(ip->x))) \
14                printf(fmt,exp); \
15        else \
16                return;
17
18#define DISPLAY(x,fmt) DISPLAY_EXP(x,fmt,ip->x)
19
20#define DISPLAYS(x,fmt) DISPLAY_EXP(x,fmt,htons(ip->x))
21#define DISPLAYIP(x,fmt) DISPLAY_EXP(x,fmt,inet_ntoa(*(struct in_addr*)&ip->x))
22
23void decode(int link_type,char *packet,int len)
24{
25        libtrace_ip_t *ip = (libtrace_ip_t*)packet;
26        if (len>=1) {
27                printf(" IP: Header Len %i",ip->ip_hl*4);
28                printf(" Ver %i",ip->ip_v);
29        }
30        DISPLAY(ip_tos," TOS %02x")
31        DISPLAYS(ip_len," Total Length %i")
32        printf("\n IP:");
33        DISPLAY(ip_id," Id %u");
34       
35        if ((unsigned int)len >= ((char *)&ip->ip_ttl - (char *)ip - 2)) {
36                printf(" Fragoff %i", ip->ip_off);
37                if (ip->ip_mf) printf(" MORE_FRAG");
38                if (ip->ip_df) printf(" DONT_FRAG");
39                if (ip->ip_rf) printf(" RESV_FRAG");
40        }
41        //printf("\n IP:");
42        DISPLAY(ip_ttl,"\n IP: TTL %i");
43        if ((unsigned int)len>=((char*)&ip->ip_p-(char*)ip+sizeof(ip->ip_p))) {
44                struct protoent *ent=getprotobynumber(ip->ip_p);
45                if (ent) {
46                        printf(" Proto %i (%s)",ip->ip_p,ent->p_name);
47                }
48                else {
49                        printf(" Proto %i",ip->ip_p);
50                }
51        } else {
52                printf("\n");
53                return;
54        }
55        DISPLAYS(ip_sum," Checksum %i\n");
56        DISPLAYIP(ip_src," IP: Source %s ");
57        DISPLAYIP(ip_dst,"Destination %s\n");
58        decode_next(packet+sizeof(*ip),len-sizeof(*ip),"ip",ip->ip_p);
59        return;
60}
Note: See TracBrowser for help on using the repository browser.