]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/ipfilter/lib/getproto.c
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / ipfilter / lib / getproto.c
1 /*      $FreeBSD$       */
2
3 /*
4  * Copyright (C) 2012 by Darren Reed.
5  *
6  * See the IPFILTER.LICENCE file for details on licencing.
7  *
8  * $Id$
9  */
10
11 #include "ipf.h"
12 #include <ctype.h>
13
14 int getproto(name)
15         char *name;
16 {
17         struct protoent *p;
18         char *s;
19
20         for (s = name; *s != '\0'; s++)
21                 if (!ISDIGIT(*s))
22                         break;
23         if (*s == '\0')
24                 return atoi(name);
25
26 #ifdef _AIX51
27         /*
28          * For some bogus reason, "ip" is 252 in /etc/protocols on AIX 5
29          * The IANA has doubled up on the definition of 0 - it is now also
30          * used for IPv6 hop-opts, so we can no longer rely on /etc/protocols
31          * providing the correct name->number mapping
32          */
33 #endif
34         if (!strcasecmp(name, "ip"))
35                 return 0;
36
37         p = getprotobyname(name);
38         if (p != NULL)
39                 return p->p_proto;
40         return -1;
41 }