aboutsummaryrefslogtreecommitdiff
path: root/src/vpn/packet.c
diff options
context:
space:
mode:
authorPhilipp Tölke <toelke@in.tum.de>2010-06-28 12:37:38 +0000
committerPhilipp Tölke <toelke@in.tum.de>2010-06-28 12:37:38 +0000
commit947e2bd0312aacc2e1eb57b56c094386208c3931 (patch)
tree0c0a868f786101e3726fc3daeed57a12de10491a /src/vpn/packet.c
parent9da3a783a66c1d1bf57cd838625c95e5ba083c62 (diff)
downloadgnunet-947e2bd0312aacc2e1eb57b56c094386208c3931.tar.gz
gnunet-947e2bd0312aacc2e1eb57b56c094386208c3931.zip
vpn: pull the pretty-printer out of the packet-file
Diffstat (limited to 'src/vpn/packet.c')
-rw-r--r--src/vpn/packet.c138
1 files changed, 2 insertions, 136 deletions
diff --git a/src/vpn/packet.c b/src/vpn/packet.c
index 9a895224a..8125cbb0f 100644
--- a/src/vpn/packet.c
+++ b/src/vpn/packet.c
@@ -1,6 +1,5 @@
1#include <errno.h> 1#include <errno.h>
2#include <stdlib.h> 2#include <stdlib.h>
3#include <stdio.h>
4#include <string.h> 3#include <string.h>
5#include <unistd.h> 4#include <unistd.h>
6#include <sys/uio.h> 5#include <sys/uio.h>
@@ -10,32 +9,10 @@
10#include "debug.h" 9#include "debug.h"
11#include "packet.h" 10#include "packet.h"
12 11
13static long payload(struct ip6_pkt* pkt) { 12long payload(struct ip6_pkt* pkt) {
14 return (pkt->paylgth[0] << 8) + pkt->paylgth[1]; 13 return (pkt->hdr.paylgth[0] << 8) + pkt->hdr.paylgth[1];
15} 14}
16 15
17static char* pretty = /*{{{*/
18/* 0 1 2 3 4 5 6
19 0123456789012345678901234567890123456789012345678901234567890123456789 */
20"IPv6-Paket from xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx \n" //60
21" to xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx \n" //120
22" flow 0xXXX ( ) \n" //180
23" length 0xXX ( ) \n" //240
24" nexthdr 0xXX ( \n" //300
25" hoplmt 0xXX ( ) \n" //360
26"first 128 bytes of payload: \n" //420
27/* 0 1 2 3 4 5 6
28 0123456789012345678901234567890123456789012345678901234567890123456789 */
29"XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX | ................ \n" //490
30"XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX | ................ \n" //560
31"XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX | ................ \n" //630
32"XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX | ................ \n" //700
33"XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX | ................ \n" //770
34"XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX | ................ \n" //840
35"XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX | ................ \n" //910
36"XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX | ................ \n";//980
37/*}}}*/
38
39void send_pkt(int fd, struct ip6_pkt* pkt) {{{ 16void send_pkt(int fd, struct ip6_pkt* pkt) {{{
40 int sz = payload(pkt); 17 int sz = payload(pkt);
41 int w = 0; 18 int w = 0;
@@ -148,114 +125,3 @@ struct ip6_pkt* parse_ip6(struct pkt_tun* pkt) {{{
148 125
149 return pkt6; 126 return pkt6;
150}}} 127}}}
151
152static void pp_ip6adr(unsigned char* adr, char* dest) {{{
153 char tmp[3];
154
155 sprintf(tmp, "%02X", adr[0]);
156 memcpy(dest+0, tmp, 2);
157 sprintf(tmp, "%02X", adr[1]);
158 memcpy(dest+2, tmp, 2);
159
160 sprintf(tmp, "%02X", adr[2]);
161 memcpy(dest+5, tmp, 2);
162 sprintf(tmp, "%02X", adr[3]);
163 memcpy(dest+7, tmp, 2);
164
165 sprintf(tmp, "%02X", adr[4]);
166 memcpy(dest+10, tmp, 2);
167 sprintf(tmp, "%02X", adr[5]);
168 memcpy(dest+12, tmp, 2);
169
170 sprintf(tmp, "%02X", adr[6]);
171 memcpy(dest+15, tmp, 2);
172 sprintf(tmp, "%02X", adr[7]);
173 memcpy(dest+17, tmp, 2);
174
175 sprintf(tmp, "%02X", adr[8]);
176 memcpy(dest+20, tmp, 2);
177 sprintf(tmp, "%02X", adr[9]);
178 memcpy(dest+22, tmp, 2);
179
180 sprintf(tmp, "%02X", adr[10]);
181 memcpy(dest+25, tmp, 2);
182 sprintf(tmp, "%02X", adr[11]);
183 memcpy(dest+27, tmp, 2);
184
185 sprintf(tmp, "%02X", adr[12]);
186 memcpy(dest+30, tmp, 2);
187 sprintf(tmp, "%02X", adr[13]);
188 memcpy(dest+32, tmp, 2);
189
190 sprintf(tmp, "%02X", adr[14]);
191 memcpy(dest+35, tmp, 2);
192 sprintf(tmp, "%02X", adr[15]);
193 memcpy(dest+37, tmp, 2);
194}}}
195
196void pp_hexdump(unsigned char* data, char* dest, int max) {{{
197 char tmp[3];
198 char tmp2[2];
199 int off = 0;
200 int to = max > 16 ? 16 : max;
201 for (int i = 0; i < to; i++) {
202 if (i == 8) off = 1;
203 sprintf(tmp, "%02x", data[i]);
204 memcpy(dest+(3*i)+off, tmp, 2);
205 if (isprint(data[i])) {
206 sprintf(tmp2, "%c", data[i]);
207 memcpy(dest+51+i, tmp2, 1);
208 }
209 }
210}}}
211
212void pp_write_header(char* dest, struct ip6_pkt* pkt) {
213 switch (pkt->nxthdr) {
214 case 0x3a:
215 memcpy(dest, "ICMPv6)", 7);
216 break;
217 default:
218 memcpy(dest, "unknown)", 8);
219 break;
220 }
221}
222
223void pkt_printf(struct ip6_pkt* pkt) {
224 char* buf = (char*)malloc(strlen(pretty)+1);
225 char tmp[9];
226
227 memcpy(buf, pretty, strlen(pretty)+1);
228
229 pp_ip6adr(pkt->sadr, buf+16);
230 pp_ip6adr(pkt->dadr, buf+76);
231
232 int flow = (pkt->flowlbl[0] << 16) + (pkt->flowlbl[1] << 8) + (pkt->flowlbl[2]);
233 sprintf(tmp, "%03x", flow);
234 memcpy(buf+138, tmp, 3);
235 sprintf(tmp, "%-8d", flow);
236 memcpy(buf+143, tmp, 8);
237
238 int length = (pkt->paylgth[0] << 8) + (pkt->paylgth[1]);
239 sprintf(tmp, "%02x", length);
240 memcpy(buf+198, tmp, 2);
241 sprintf(tmp, "%-3d", length);
242 memcpy(buf+203, tmp, 3);
243
244 sprintf(tmp, "%02x", pkt->nxthdr);
245 memcpy(buf+258, tmp, 2);
246 pp_write_header(buf+263, pkt);
247
248 sprintf(tmp, "%02x", pkt->hoplmt);
249 memcpy(buf+318, tmp, 2);
250 sprintf(tmp, "%-3d", pkt->hoplmt);
251 memcpy(buf+323, tmp, 3);
252
253 int size = payload(pkt);
254 for(int i = 0; i < 8; i++) {
255 if (16*i > size) break;
256 pp_hexdump(pkt->data + (16*i), buf + 420 + (i*70), size - 16*i);
257 }
258
259 printf(buf);
260 free(buf);
261}