1 /* 2 * Copyright (C) 1993-2005 by Darren Reed. 3 * See the IPFILTER.LICENCE file for details on licencing. 4 * 5 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 6 * Use is subject to license terms. 7 */ 8 9 #pragma ident "%Z%%M% %I% %E% SMI" 10 11 #ifndef __IP_LOOKUP_H__ 12 #define __IP_LOOKUP_H__ 13 14 #if defined(__STDC__) || defined(__GNUC__) || defined(_AIX51) 15 # define SIOCLOOKUPADDTABLE _IOWR('r', 60, struct iplookupop) 16 # define SIOCLOOKUPDELTABLE _IOWR('r', 61, struct iplookupop) 17 # define SIOCLOOKUPSTAT _IOWR('r', 64, struct iplookupop) 18 # define SIOCLOOKUPSTATW _IOW('r', 64, struct iplookupop) 19 # define SIOCLOOKUPFLUSH _IOWR('r', 65, struct iplookupflush) 20 # define SIOCLOOKUPADDNODE _IOWR('r', 67, struct iplookupop) 21 # define SIOCLOOKUPADDNODEW _IOW('r', 67, struct iplookupop) 22 # define SIOCLOOKUPDELNODE _IOWR('r', 68, struct iplookupop) 23 # define SIOCLOOKUPDELNODEW _IOW('r', 68, struct iplookupop) 24 #else 25 # define SIOCLOOKUPADDTABLE _IOWR(r, 60, struct iplookupop) 26 # define SIOCLOOKUPDELTABLE _IOWR(r, 61, struct iplookupop) 27 # define SIOCLOOKUPSTAT _IOWR(r, 64, struct iplookupop) 28 # define SIOCLOOKUPSTATW _IOW(r, 64, struct iplookupop) 29 # define SIOCLOOKUPFLUSH _IOWR(r, 65, struct iplookupflush) 30 # define SIOCLOOKUPADDNODE _IOWR(r, 67, struct iplookupop) 31 # define SIOCLOOKUPADDNODEW _IOW(r, 67, struct iplookupop) 32 # define SIOCLOOKUPDELNODE _IOWR(r, 68, struct iplookupop) 33 # define SIOCLOOKUPDELNODEW _IOW(r, 68, struct iplookupop) 34 #endif 35 36 typedef struct iplookupop { 37 int iplo_type; /* IPLT_* */ 38 int iplo_unit; /* IPL_LOG* */ 39 u_int iplo_arg; 40 char iplo_name[FR_GROUPLEN]; 41 size_t iplo_size; /* sizeof struct at iplo_struct */ 42 void *iplo_struct; 43 } iplookupop_t; 44 45 typedef struct iplookupflush { 46 int iplf_type; /* IPLT_* */ 47 int iplf_unit; /* IPL_LOG* */ 48 u_int iplf_arg; 49 size_t iplf_count; 50 char iplf_name[FR_GROUPLEN]; 51 } iplookupflush_t; 52 53 typedef struct iplookuplink { 54 int ipll_type; /* IPLT_* */ 55 int ipll_unit; /* IPL_LOG* */ 56 u_int ipll_num; 57 char ipll_group[FR_GROUPLEN]; 58 } iplookuplink_t; 59 60 #define IPLT_ALL -1 61 #define IPLT_NONE 0 62 #define IPLT_POOL 1 63 #define IPLT_HASH 2 64 65 #define IPLT_ANON 0x80000000 66 67 68 typedef union { 69 struct iplookupiterkey { 70 char ilik_ival; 71 u_char ilik_type; /* IPLT_* */ 72 u_char ilik_otype; 73 char ilik_unit; /* IPL_LOG* */ 74 } ilik_unstr; 75 u_32_t ilik_key; 76 } iplookupiterkey_t; 77 78 typedef struct ipflookupiter { 79 void *ili_data; 80 iplookupiterkey_t ili_lkey; 81 char ili_name[FR_GROUPLEN]; 82 } ipflookupiter_t; 83 84 #define ili_key ili_lkey.ilik_key 85 #define ili_ival ili_lkey.ilik_unstr.ilik_ival 86 #define ili_unit ili_lkey.ilik_unstr.ilik_unit 87 #define ili_type ili_lkey.ilik_unstr.ilik_type 88 #define ili_otype ili_lkey.ilik_unstr.ilik_otype 89 90 #define IPFLOOKUPITER_LIST 0 91 #define IPFLOOKUPITER_NODE 1 92 93 94 extern int ip_lookup_init __P((ipf_stack_t *)); 95 extern int ip_lookup_ioctl __P((caddr_t, ioctlcmd_t, int, int, void *, ipf_stack_t *)); 96 extern void ip_lookup_unload __P((ipf_stack_t *)); 97 extern void ip_lookup_deref __P((int, void *, ipf_stack_t *)); 98 extern int ip_lookup_iterate __P((void *, int, void *, ipf_stack_t *)); 99 extern void ip_lookup_iterderef __P((u_32_t, void *, ipf_stack_t *)); 100 101 #endif /* __IP_LOOKUP_H__ */ 102