source: libpacketdump/eth_2048.c @ 503a58c

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

Change the IP header definition

  • Property mode set to 100644
File size: 1.7 KB
RevLine 
[ace188a]1#include <sys/types.h>
2#include <sys/socket.h>
[950d54a]3#include <netinet/in.h>
4#include <stdio.h>
5#include "libpacketdump.h"
[4e65f42]6#ifndef WIN32
7        #include <netinet/in_systm.h>
8#endif
[950d54a]9#include <arpa/inet.h>
[010fafb]10#include <netdb.h>
[950d54a]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
[4f55f69]23void decode(int link_type,char *packet,unsigned len)
[950d54a]24{
[4e65f42]25        libtrace_ip_t *ip = (libtrace_ip_t*)packet;
[950d54a]26        if (len>=1) {
[4e65f42]27                printf(" IP: Header Len %i",ip->ip_hl*4);
28                printf(" Ver %i",ip->ip_v);
[950d54a]29        }
[7d952cb]30        //DISPLAY(ip_tos," TOS %02x")
31        DISPLAY_EXP(ip_tos," DSCP %02x",ip->ip_tos >> 2)
32        DISPLAY_EXP(ip_tos," ECN %x",ip->ip_tos & 0x2)
[4e65f42]33        DISPLAYS(ip_len," Total Length %i")
[950d54a]34        printf("\n IP:");
[c72ce62]35        DISPLAYS(ip_id," Id %u");
[4e65f42]36       
37        if ((unsigned int)len >= ((char *)&ip->ip_ttl - (char *)ip - 2)) {
[049e277]38                printf(" Fragoff %i", ntohs(ip->ip_off) & 0x1FFF);
39                if (ntohs(ip->ip_off) & 0x2000) printf(" MORE_FRAG");
40                if (ntohs(ip->ip_off) & 0x4000) printf(" DONT_FRAG");
41                if (ntohs(ip->ip_off) & 0x8000) printf(" RESV_FRAG");
[4e65f42]42        }
[950d54a]43        //printf("\n IP:");
[fc2078d]44        DISPLAY(ip_ttl,"\n IP: TTL %i");
[4e65f42]45        if ((unsigned int)len>=((char*)&ip->ip_p-(char*)ip+sizeof(ip->ip_p))) {
46                struct protoent *ent=getprotobynumber(ip->ip_p);
[010fafb]47                if (ent) {
[4e65f42]48                        printf(" Proto %i (%s)",ip->ip_p,ent->p_name);
[010fafb]49                }
50                else {
[4e65f42]51                        printf(" Proto %i",ip->ip_p);
[010fafb]52                }
53        } else {
54                printf("\n");
55                return;
56        }
[4e65f42]57        DISPLAYS(ip_sum," Checksum %i\n");
58        DISPLAYIP(ip_src," IP: Source %s ");
59        DISPLAYIP(ip_dst,"Destination %s\n");
60        decode_next(packet+sizeof(*ip),len-sizeof(*ip),"ip",ip->ip_p);
[950d54a]61        return;
62}
Note: See TracBrowser for help on using the repository browser.