xref: /illumos-gate/usr/src/cmd/ipf/lib/icmpcode.c (revision f3ac678143127d4c6c1793fadabb5ded04e127b6)
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