XINU
hexdump.c
Go to the documentation of this file.
1 /* hexdump.c - hexdump */
2 
3 #include <xinu.h>
4 
5 /*------------------------------------------------------------------------
6  * hexdump - dump an Ethernet/IP/UDP packet in hexadecimal
7  *------------------------------------------------------------------------
8  */
9 void hexdump (
10  char *p, int32 len /* ptr to packet and length of */
11  /* payload (IP datagram) */
12  )
13 {
14  int32 i; /* counts bytes */
15  int32 word; /* counts 32 bits words */
16 
17  for (i=0; i<6; i++) {
18  kprintf("%02x", 0xff & *p++);
19  }
20  kprintf(" ");
21 
22  for (i=0; i<6; i++) {
23  kprintf("%02x", 0xff & *p++);
24  }
25  kprintf(" ");
26 
27  for (i=0; i<2; i++) {
28  kprintf("%02x", 0xff & *p++);
29  }
30  kprintf("\t\tEnd Ethernet header\n");
31 
32  for (word=0,i=0; i<len; i++) {
33  if ((i % 4) == 0) {
34  word++;
35  if (word == 6) {
36  kprintf("\tHV TOS LENGTH ID FRAG TTL PRO CKSUM IP_SRC IP_DST\n");
37  } else if (word==8) {
38  kprintf("\t\t\t\tSRC_PRT DEST-PORT LENGTH CKSUM\n");
39  word = 17;
40  } else if ((word % 16) ==0) {
41  kprintf("\n");
42  } else if (i != 0) {
43  kprintf(" ");
44  }
45  }
46  kprintf("%02x", 0xff & *p++);
47  }
48  kprintf("\n");
49  return;
50 }
51 /*------------------------------------------------------------------------
52  * hexadump - dump an Ethernet/ARP packet in hexadecimal
53  *------------------------------------------------------------------------
54  */
55 void hexadump (
56  char *p, int32 len /* ptr to packet and length of */
57  /* payload (IP datagram) */
58  )
59 {
60  int32 i; /* counts bytes */
61 
62  for (i=0; i<6; i++) {
63  kprintf("%02x", 0xff & *p++);
64  }
65  kprintf(" ");
66 
67  for (i=0; i<6; i++) {
68  kprintf("%02x", 0xff & *p++);
69  }
70  kprintf(" ");
71 
72  for (i=0; i<2; i++) {
73  kprintf("%02x", 0xff & *p++);
74  }
75  kprintf("\t\tEnd Ethernet header\n");
76 
77 
78  for (i=0; i<2; i++) {
79  kprintf("%02x", 0xff & *p++);
80  }
81  kprintf(" ");
82 
83  for (i=0; i<2; i++) {
84  kprintf("%02x", 0xff & *p++);
85  }
86  kprintf(" ");
87  kprintf("%02x ", 0xff & *p++);
88  kprintf("%02x ", 0xff & *p++);
89 
90  for (i=0; i<2; i++) {
91  kprintf("%02x", 0xff & *p++);
92  }
93  kprintf(" ");
94 
95  kprintf("\tHTYP PTYP HLEN PLEN OP\n");
96 
97 
98 
99  for (i=0; i<6; i++) {
100  kprintf("%02x", 0xff & *p++);
101  }
102  kprintf(" ");
103 
104  for (i=0; i<2; i++) {
105  kprintf("%02x", 0xff & *p++);
106  }
107  kprintf(" ");
108 
109  for (i=0; i<6; i++) {
110  kprintf("%02x", 0xff & *p++);
111  }
112  kprintf(" ");
113 
114  for (i=0; i<2; i++) {
115  kprintf("%02x", 0xff & *p++);
116  }
117  kprintf("\tSHA SPA THA TPA\n");
118  return;
119 }
syscall kprintf(char *fmt,...)
ポーリングI/Oを使用して、フォーマットされた文字列をコンソールに出力する。
Definition: kprintf.c:98
void hexadump(char *p, int32 len)
Definition: hexdump.c:55
void hexdump(char *p, int32 len)
Definition: hexdump.c:9
全てのシステムヘッダファイルをインクルードする。
int int32
符号あり32ビット整数(int)
Definition: kernel.h:11