printproto.c revision 255332
1153877Sguido/*
2255332Scy * Copyright (C) 2012 by Darren Reed.
3153877Sguido *
4153877Sguido * See the IPFILTER.LICENCE file for details on licencing.
5153877Sguido */
6153877Sguido
7153877Sguido#include "ipf.h"
8153877Sguido
9153877Sguido
10153877Sguido#if !defined(lint)
11255332Scystatic const char rcsid[] = "@(#)$Id$";
12153877Sguido#endif
13153877Sguido
14153877Sguido
15255332Scyvoid
16255332Scyprintproto(pr, p, np)
17255332Scy	struct protoent *pr;
18255332Scy	int p;
19255332Scy	ipnat_t *np;
20153877Sguido{
21153877Sguido	if (np != NULL) {
22153877Sguido		if ((np->in_flags & IPN_TCPUDP) == IPN_TCPUDP)
23255332Scy			PRINTF("tcp/udp");
24153877Sguido		else if (np->in_flags & IPN_TCP)
25255332Scy			PRINTF("tcp");
26153877Sguido		else if (np->in_flags & IPN_UDP)
27255332Scy			PRINTF("udp");
28153877Sguido		else if (np->in_flags & IPN_ICMPQUERY)
29255332Scy			PRINTF("icmp");
30153877Sguido#ifdef _AIX51
31153877Sguido		/*
32153877Sguido		 * To make up for "ip = 252" and "hopopt = 0" in /etc/protocols
33255332Scy		 * The IANA has doubled up on the definition of 0 - it is now
34255332Scy		 * also used for IPv6 hop-opts, so we can no longer rely on
35255332Scy		 * /etc/protocols providing the correct name->number mapping.
36153877Sguido		 */
37153877Sguido#endif
38255332Scy		else if (np->in_pr[0] == 0)
39255332Scy			PRINTF("ip");
40153877Sguido		else if (pr != NULL)
41255332Scy			PRINTF("%s", pr->p_name);
42153877Sguido		else
43255332Scy			PRINTF("%d", np->in_pr[0]);
44153877Sguido	} else {
45153877Sguido#ifdef _AIX51
46153877Sguido		if (p == 0)
47255332Scy			PRINTF("ip");
48153877Sguido		else
49153877Sguido#endif
50153877Sguido		if (pr != NULL)
51255332Scy			PRINTF("%s", pr->p_name);
52153877Sguido		else
53255332Scy			PRINTF("%d", p);
54153877Sguido	}
55153877Sguido}
56