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