icmpcode.c revision 145519
1/* $FreeBSD: head/contrib/ipfilter/lib/icmpcode.c 145519 2005-04-25 18:20:15Z darrenr $ */ 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