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