1ab25eeb5Syz /*
2ab25eeb5Syz  * Copyright (C) 1993-2005  by Darren Reed.
3ab25eeb5Syz  * See the IPFILTER.LICENCE file for details on licencing.
4*f4b3ec61Sdh  *
5*f4b3ec61Sdh  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
6*f4b3ec61Sdh  * Use is subject to license terms.
7*f4b3ec61Sdh  */
8*f4b3ec61Sdh 
9*f4b3ec61Sdh #pragma ident	"%Z%%M%	%I%	%E% SMI"
107c478bd9Sstevel@tonic-gate 
117c478bd9Sstevel@tonic-gate #ifndef __IP_LOOKUP_H__
127c478bd9Sstevel@tonic-gate #define __IP_LOOKUP_H__
137c478bd9Sstevel@tonic-gate 
14ab25eeb5Syz #if defined(__STDC__) || defined(__GNUC__) || defined(_AIX51)
157c478bd9Sstevel@tonic-gate # define	SIOCLOOKUPADDTABLE	_IOWR('r', 60, struct iplookupop)
167c478bd9Sstevel@tonic-gate # define	SIOCLOOKUPDELTABLE	_IOWR('r', 61, struct iplookupop)
17ab25eeb5Syz # define	SIOCLOOKUPSTAT		_IOWR('r', 64, struct iplookupop)
18ab25eeb5Syz # define	SIOCLOOKUPSTATW		_IOW('r', 64, struct iplookupop)
197c478bd9Sstevel@tonic-gate # define	SIOCLOOKUPFLUSH		_IOWR('r', 65, struct iplookupflush)
20ab25eeb5Syz # define	SIOCLOOKUPADDNODE	_IOWR('r', 67, struct iplookupop)
21ab25eeb5Syz # define	SIOCLOOKUPADDNODEW	_IOW('r', 67, struct iplookupop)
22ab25eeb5Syz # define	SIOCLOOKUPDELNODE	_IOWR('r', 68, struct iplookupop)
23ab25eeb5Syz # define	SIOCLOOKUPDELNODEW	_IOW('r', 68, struct iplookupop)
247c478bd9Sstevel@tonic-gate #else
257c478bd9Sstevel@tonic-gate # define	SIOCLOOKUPADDTABLE	_IOWR(r, 60, struct iplookupop)
267c478bd9Sstevel@tonic-gate # define	SIOCLOOKUPDELTABLE	_IOWR(r, 61, struct iplookupop)
27ab25eeb5Syz # define	SIOCLOOKUPSTAT		_IOWR(r, 64, struct iplookupop)
28ab25eeb5Syz # define	SIOCLOOKUPSTATW		_IOW(r, 64, struct iplookupop)
297c478bd9Sstevel@tonic-gate # define	SIOCLOOKUPFLUSH		_IOWR(r, 65, struct iplookupflush)
30ab25eeb5Syz # define	SIOCLOOKUPADDNODE	_IOWR(r, 67, struct iplookupop)
31ab25eeb5Syz # define	SIOCLOOKUPADDNODEW	_IOW(r, 67, struct iplookupop)
32ab25eeb5Syz # define	SIOCLOOKUPDELNODE	_IOWR(r, 68, struct iplookupop)
33ab25eeb5Syz # define	SIOCLOOKUPDELNODEW	_IOW(r, 68, struct iplookupop)
347c478bd9Sstevel@tonic-gate #endif
357c478bd9Sstevel@tonic-gate 
367c478bd9Sstevel@tonic-gate typedef	struct	iplookupop	{
377c478bd9Sstevel@tonic-gate 	int	iplo_type;	/* IPLT_* */
387c478bd9Sstevel@tonic-gate 	int	iplo_unit;	/* IPL_LOG* */
397c478bd9Sstevel@tonic-gate 	u_int	iplo_arg;
407c478bd9Sstevel@tonic-gate 	char	iplo_name[FR_GROUPLEN];
417c478bd9Sstevel@tonic-gate 	size_t	iplo_size;	/* sizeof struct at iplo_struct */
427c478bd9Sstevel@tonic-gate 	void	*iplo_struct;
437c478bd9Sstevel@tonic-gate } iplookupop_t;
447c478bd9Sstevel@tonic-gate 
457c478bd9Sstevel@tonic-gate typedef	struct	iplookupflush	{
467c478bd9Sstevel@tonic-gate 	int	iplf_type;	/* IPLT_* */
477c478bd9Sstevel@tonic-gate 	int	iplf_unit;	/* IPL_LOG* */
487c478bd9Sstevel@tonic-gate 	u_int	iplf_arg;
497c478bd9Sstevel@tonic-gate 	size_t	iplf_count;
507c478bd9Sstevel@tonic-gate 	char	iplf_name[FR_GROUPLEN];
517c478bd9Sstevel@tonic-gate } iplookupflush_t;
527c478bd9Sstevel@tonic-gate 
537c478bd9Sstevel@tonic-gate typedef	struct	iplookuplink	{
547c478bd9Sstevel@tonic-gate 	int	ipll_type;	/* IPLT_* */
557c478bd9Sstevel@tonic-gate 	int	ipll_unit;	/* IPL_LOG* */
567c478bd9Sstevel@tonic-gate 	u_int	ipll_num;
577c478bd9Sstevel@tonic-gate 	char	ipll_group[FR_GROUPLEN];
587c478bd9Sstevel@tonic-gate } iplookuplink_t;
597c478bd9Sstevel@tonic-gate 
607c478bd9Sstevel@tonic-gate #define	IPLT_ALL	-1
617c478bd9Sstevel@tonic-gate #define	IPLT_NONE	0
627c478bd9Sstevel@tonic-gate #define	IPLT_POOL	1
637c478bd9Sstevel@tonic-gate #define	IPLT_HASH	2
647c478bd9Sstevel@tonic-gate 
657c478bd9Sstevel@tonic-gate #define	IPLT_ANON	0x80000000
667c478bd9Sstevel@tonic-gate 
67*f4b3ec61Sdh 
68*f4b3ec61Sdh typedef	union	{
69*f4b3ec61Sdh 	struct	iplookupiterkey {
70*f4b3ec61Sdh 		char	ilik_ival;
71*f4b3ec61Sdh 		u_char	ilik_type;	/* IPLT_* */
72*f4b3ec61Sdh 		u_char	ilik_otype;
73*f4b3ec61Sdh 		char	ilik_unit;	/* IPL_LOG* */
74*f4b3ec61Sdh 	} ilik_unstr;
75*f4b3ec61Sdh 	u_32_t	ilik_key;
76*f4b3ec61Sdh } iplookupiterkey_t;
77*f4b3ec61Sdh 
78*f4b3ec61Sdh typedef	struct	ipflookupiter	{
79*f4b3ec61Sdh 	void			*ili_data;
80*f4b3ec61Sdh 	iplookupiterkey_t	ili_lkey;
81*f4b3ec61Sdh 	char			ili_name[FR_GROUPLEN];
82*f4b3ec61Sdh } ipflookupiter_t;
83*f4b3ec61Sdh 
84*f4b3ec61Sdh #define	ili_key		ili_lkey.ilik_key
85*f4b3ec61Sdh #define	ili_ival	ili_lkey.ilik_unstr.ilik_ival
86*f4b3ec61Sdh #define	ili_unit	ili_lkey.ilik_unstr.ilik_unit
87*f4b3ec61Sdh #define	ili_type	ili_lkey.ilik_unstr.ilik_type
88*f4b3ec61Sdh #define	ili_otype	ili_lkey.ilik_unstr.ilik_otype
89*f4b3ec61Sdh 
90*f4b3ec61Sdh #define	IPFLOOKUPITER_LIST	0
91*f4b3ec61Sdh #define	IPFLOOKUPITER_NODE	1
92*f4b3ec61Sdh 
93*f4b3ec61Sdh 
94*f4b3ec61Sdh extern int ip_lookup_init __P((ipf_stack_t *));
95*f4b3ec61Sdh extern int ip_lookup_ioctl __P((caddr_t, ioctlcmd_t, int, int, void *, ipf_stack_t *));
96*f4b3ec61Sdh extern void ip_lookup_unload __P((ipf_stack_t *));
97*f4b3ec61Sdh extern void ip_lookup_deref __P((int, void *, ipf_stack_t *));
98*f4b3ec61Sdh extern int ip_lookup_iterate __P((void *, int, void *, ipf_stack_t *));
99*f4b3ec61Sdh extern void ip_lookup_iterderef __P((u_32_t, void *, ipf_stack_t  *));
1007c478bd9Sstevel@tonic-gate 
1017c478bd9Sstevel@tonic-gate #endif /* __IP_LOOKUP_H__ */
102