xref: /freebsd/sbin/ipf/libipf/printaddr.c (revision 1d386b48)
1 /*
2  * Copyright (C) 2012 by Darren Reed.
3  *
4  * See the IPFILTER.LICENCE file for details on licencing.
5  *
6  * $Id$
7  */
8 
9 #include "ipf.h"
10 
11 void
12 printaddr(int family, int type, char *base, int ifidx, u_32_t *addr,
13 	u_32_t *mask)
14 {
15 	char *suffix;
16 
17 	switch (type)
18 	{
19 	case FRI_BROADCAST :
20 		suffix = "bcast";
21 		break;
22 
23 	case FRI_DYNAMIC :
24 		PRINTF("%s", base + ifidx);
25 		printmask(family, mask);
26 		suffix = NULL;
27 		break;
28 
29 	case FRI_NETWORK :
30 		suffix = "net";
31 		break;
32 
33 	case FRI_NETMASKED :
34 		suffix = "netmasked";
35 		break;
36 
37 	case FRI_PEERADDR :
38 		suffix = "peer";
39 		break;
40 
41 	case FRI_LOOKUP :
42 		suffix = NULL;
43 		printlookup(base, (i6addr_t *)addr, (i6addr_t *)mask);
44 		break;
45 
46 	case FRI_NONE :
47 	case FRI_NORMAL :
48 		printhostmask(family, addr, mask);
49 		suffix = NULL;
50 		break;
51 	case FRI_RANGE :
52 		printhost(family, addr);
53 		putchar('-');
54 		printhost(family, mask);
55 		suffix = NULL;
56 		break;
57 	case FRI_SPLIT :
58 		printhost(family, addr);
59 		putchar(',');
60 		printhost(family, mask);
61 		suffix = NULL;
62 		break;
63 	default :
64 		PRINTF("<%d>", type);
65 		printmask(family, mask);
66 		suffix = NULL;
67 		break;
68 	}
69 
70 	if (suffix != NULL) {
71 		PRINTF("%s/%s", base + ifidx, suffix);
72 	}
73 }
74