1*f3ac6781SToomas Soome /*
2*f3ac6781SToomas Soome * Copyright (C) 1993-2001 by Darren Reed.
3*f3ac6781SToomas Soome *
4*f3ac6781SToomas Soome * See the IPFILTER.LICENCE file for details on licencing.
5*f3ac6781SToomas Soome *
6*f3ac6781SToomas Soome * $Id: icmpcode.c,v 1.7.2.1 2004/12/09 19:41:20 darrenr Exp $
7*f3ac6781SToomas Soome */
8*f3ac6781SToomas Soome
9*f3ac6781SToomas Soome #include <ctype.h>
10*f3ac6781SToomas Soome
11*f3ac6781SToomas Soome #include "ipf.h"
12*f3ac6781SToomas Soome
13*f3ac6781SToomas Soome #ifndef MIN
14*f3ac6781SToomas Soome # define MIN(a,b) ((a) > (b) ? (b) : (a))
15*f3ac6781SToomas Soome #endif
16*f3ac6781SToomas Soome
17*f3ac6781SToomas Soome
18*f3ac6781SToomas Soome char *icmpcodes[MAX_ICMPCODE + 1] = {
19*f3ac6781SToomas Soome "net-unr", "host-unr", "proto-unr", "port-unr", "needfrag", "srcfail",
20*f3ac6781SToomas Soome "net-unk", "host-unk", "isolate", "net-prohib", "host-prohib",
21*f3ac6781SToomas Soome "net-tos", "host-tos", "filter-prohib", "host-preced", "preced-cutoff",
22*f3ac6781SToomas Soome NULL };
23*f3ac6781SToomas Soome
24*f3ac6781SToomas Soome /*
25*f3ac6781SToomas Soome * Return the number for the associated ICMP unreachable code.
26*f3ac6781SToomas Soome */
icmpcode(str)27*f3ac6781SToomas Soome int icmpcode(str)
28*f3ac6781SToomas Soome char *str;
29*f3ac6781SToomas Soome {
30*f3ac6781SToomas Soome char *s;
31*f3ac6781SToomas Soome int i, len;
32*f3ac6781SToomas Soome
33*f3ac6781SToomas Soome if ((s = strrchr(str, ')')))
34*f3ac6781SToomas Soome *s = '\0';
35*f3ac6781SToomas Soome if (ISDIGIT(*str)) {
36*f3ac6781SToomas Soome if (!ratoi(str, &i, 0, 255))
37*f3ac6781SToomas Soome return -1;
38*f3ac6781SToomas Soome else
39*f3ac6781SToomas Soome return i;
40*f3ac6781SToomas Soome }
41*f3ac6781SToomas Soome len = strlen(str);
42*f3ac6781SToomas Soome for (i = 0; icmpcodes[i]; i++)
43*f3ac6781SToomas Soome if (!strncasecmp(str, icmpcodes[i], MIN(len,
44*f3ac6781SToomas Soome strlen(icmpcodes[i])) ))
45*f3ac6781SToomas Soome return i;
46*f3ac6781SToomas Soome return -1;
47*f3ac6781SToomas Soome }
48