240 |
struct icmp_diag { |
struct icmp_diag { |
241 |
int type; |
int type; |
242 |
char *text; |
char *text; |
243 |
void (*fun) (struct ip *, icmphdr_t *, void *data); |
void (*fun) (icmphdr_t *, void *data); |
244 |
void *data; |
void *data; |
245 |
}; |
}; |
246 |
|
|
317 |
} |
} |
318 |
|
|
319 |
void |
void |
320 |
print_ip_data (struct ip *ip, icmphdr_t *icmp, void *data) |
print_ip_data (icmphdr_t *icmp, void *data) |
321 |
{ |
{ |
322 |
int hlen; |
int hlen; |
323 |
u_char *cp; |
u_char *cp; |
324 |
|
struct ip *ip = &icmp->icmp_ip; |
325 |
|
|
326 |
print_ip_header (ip); |
print_ip_header (ip); |
327 |
|
|
328 |
hlen = ip->ip_hl << 2; |
hlen = ip->ip_hl << 2; |
338 |
} |
} |
339 |
|
|
340 |
static void |
static void |
341 |
print_icmp (struct ip *ip, icmphdr_t *icmp, void *data) |
print_icmp (icmphdr_t *icmp, void *data) |
342 |
{ |
{ |
343 |
print_icmp_code (icmp->icmp_code, data); |
print_icmp_code (icmp->icmp_code, data); |
344 |
print_ip_data (ip, icmp, NULL); |
print_ip_data (icmp, NULL); |
345 |
} |
} |
346 |
|
|
347 |
static void |
static void |
348 |
print_parameterprob (struct ip *ip, icmphdr_t *icmp, void *data) |
print_parameterprob (icmphdr_t *icmp, void *data) |
349 |
{ |
{ |
350 |
printf ("Parameter problem: IP address = %s\n", |
printf ("Parameter problem: IP address = %s\n", |
351 |
inet_ntoa (icmp->icmp_gwaddr)); |
inet_ntoa (icmp->icmp_gwaddr)); |
352 |
print_ip_data (ip, icmp, data); |
print_ip_data (icmp, data); |
353 |
} |
} |
354 |
|
|
355 |
struct icmp_diag icmp_diag[] = { |
struct icmp_diag icmp_diag[] = { |
396 |
if (p->text) |
if (p->text) |
397 |
printf ("%s\n", p->text); |
printf ("%s\n", p->text); |
398 |
if (p->fun) |
if (p->fun) |
399 |
p->fun (ip, icmp, p->data); |
p->fun (icmp, p->data); |
400 |
return; |
return; |
401 |
} |
} |
402 |
} |
} |