1/*
2 * Copyright (C) 2012 by Darren Reed.
3 *
4 * See the IPFILTER.LICENCE file for details on licencing.
5 */
6
7#include "ipf.h"
8
9
10#if !defined(lint)
11static const char rcsid[] = "@(#)$Id$";
12#endif
13
14
15void
16printproto(pr, p, np)
17	struct protoent *pr;
18	int p;
19	ipnat_t *np;
20{
21	if (np != NULL) {
22		if ((np->in_flags & IPN_TCPUDP) == IPN_TCPUDP)
23			PRINTF("tcp/udp");
24		else if (np->in_flags & IPN_TCP)
25			PRINTF("tcp");
26		else if (np->in_flags & IPN_UDP)
27			PRINTF("udp");
28		else if (np->in_flags & IPN_ICMPQUERY)
29			PRINTF("icmp");
30#ifdef _AIX51
31		/*
32		 * To make up for "ip = 252" and "hopopt = 0" in /etc/protocols
33		 * The IANA has doubled up on the definition of 0 - it is now
34		 * also used for IPv6 hop-opts, so we can no longer rely on
35		 * /etc/protocols providing the correct name->number mapping.
36		 */
37#endif
38		else if (np->in_pr[0] == 0)
39			PRINTF("ip");
40		else if (pr != NULL)
41			PRINTF("%s", pr->p_name);
42		else
43			PRINTF("%d", np->in_pr[0]);
44	} else {
45#ifdef _AIX51
46		if (p == 0)
47			PRINTF("ip");
48		else
49#endif
50		if (pr != NULL)
51			PRINTF("%s", pr->p_name);
52		else
53			PRINTF("%d", p);
54	}
55}
56