icmpcode.c revision 145511
1/*	$NetBSD$	*/
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
20char	*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 */
29int icmpcode(str)
30char *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}
50