ip_lookup.h revision 369186
1/* 2 * Copyright (C) 2012 by Darren Reed. 3 * 4 * See the IPFILTER.LICENCE file for details on licencing. 5 * 6 * $Id$ 7 */ 8#ifndef __IP_LOOKUP_H__ 9#define __IP_LOOKUP_H__ 10 11# define SIOCLOOKUPADDTABLE _IOWR('r', 60, struct iplookupop) 12# define SIOCLOOKUPDELTABLE _IOWR('r', 61, struct iplookupop) 13# define SIOCLOOKUPSTAT _IOWR('r', 64, struct iplookupop) 14# define SIOCLOOKUPSTATW _IOW('r', 64, struct iplookupop) 15# define SIOCLOOKUPFLUSH _IOWR('r', 65, struct iplookupflush) 16# define SIOCLOOKUPADDNODE _IOWR('r', 67, struct iplookupop) 17# define SIOCLOOKUPADDNODEW _IOW('r', 67, struct iplookupop) 18# define SIOCLOOKUPDELNODE _IOWR('r', 68, struct iplookupop) 19# define SIOCLOOKUPDELNODEW _IOW('r', 68, struct iplookupop) 20 21#define LOOKUP_POOL_MAX (IPL_LOGSIZE) 22#define LOOKUP_POOL_SZ (IPL_LOGSIZE + 1) 23 24typedef struct iplookupop { 25 int iplo_type; /* IPLT_* */ 26 int iplo_unit; /* IPL_LOG* */ 27 u_int iplo_arg; 28 char iplo_name[FR_GROUPLEN]; 29 size_t iplo_size; /* sizeof struct at iplo_struct */ 30 void *iplo_struct; 31} iplookupop_t; 32 33#define LOOKUP_ANON 0x80000000 34 35 36typedef struct iplookupflush { 37 int iplf_type; /* IPLT_* */ 38 int iplf_unit; /* IPL_LOG* */ 39 u_int iplf_arg; 40 u_int iplf_count; 41 char iplf_name[FR_GROUPLEN]; 42} iplookupflush_t; 43 44typedef struct iplookuplink { 45 int ipll_type; /* IPLT_* */ 46 int ipll_unit; /* IPL_LOG* */ 47 u_int ipll_num; 48 char ipll_group[FR_GROUPLEN]; 49} iplookuplink_t; 50 51#define IPLT_ALL -1 52#define IPLT_NONE 0 53#define IPLT_POOL 1 54#define IPLT_HASH 2 55#define IPLT_DSTLIST 3 56 57 58#define IPLT_ANON 0x80000000 59 60 61typedef union { 62 struct iplookupiterkey { 63 u_char ilik_ival; 64 u_char ilik_type; /* IPLT_* */ 65 u_char ilik_otype; 66 signed char ilik_unit; /* IPL_LOG* */ 67 } ilik_unstr; 68 u_32_t ilik_key; 69} iplookupiterkey_t; 70 71typedef struct ipflookupiter { 72 int ili_nitems; 73 iplookupiterkey_t ili_lkey; 74 char ili_name[FR_GROUPLEN]; 75 void *ili_data; 76} ipflookupiter_t; 77 78#define ili_key ili_lkey.ilik_key 79#define ili_ival ili_lkey.ilik_unstr.ilik_ival 80#define ili_unit ili_lkey.ilik_unstr.ilik_unit 81#define ili_type ili_lkey.ilik_unstr.ilik_type 82#define ili_otype ili_lkey.ilik_unstr.ilik_otype 83 84#define IPFLOOKUPITER_LIST 0 85#define IPFLOOKUPITER_NODE 1 86 87 88typedef struct ipf_lookup { 89 int ipfl_type; 90 void *(*ipfl_create) __P((ipf_main_softc_t *)); 91 void (*ipfl_destroy) __P((ipf_main_softc_t *, void *)); 92 int (*ipfl_init) __P((ipf_main_softc_t *, void *)); 93 void (*ipfl_fini) __P((ipf_main_softc_t *, void *)); 94 int (*ipfl_addr_find) __P((ipf_main_softc_t *, void *, 95 int, void *, u_int)); 96 size_t (*ipfl_flush) __P((ipf_main_softc_t *, void *, 97 iplookupflush_t *)); 98 int (*ipfl_iter_deref) __P((ipf_main_softc_t *, void *, 99 int, int, void *)); 100 int (*ipfl_iter_next) __P((ipf_main_softc_t *, void *, 101 ipftoken_t *, ipflookupiter_t *)); 102 int (*ipfl_node_add) __P((ipf_main_softc_t *, void *, 103 iplookupop_t *, int)); 104 int (*ipfl_node_del) __P((ipf_main_softc_t *, void *, 105 iplookupop_t *, int)); 106 int (*ipfl_stats_get) __P((ipf_main_softc_t *, void *, 107 iplookupop_t *)); 108 int (*ipfl_table_add) __P((ipf_main_softc_t *, void *, 109 iplookupop_t *)); 110 int (*ipfl_table_del) __P((ipf_main_softc_t *, void *, 111 iplookupop_t *)); 112 int (*ipfl_table_deref) __P((ipf_main_softc_t *, void *, void *)); 113 void *(*ipfl_table_find) __P((void *, int, char *)); 114 void *(*ipfl_select_add_ref) __P((void *, int, char *)); 115 int (*ipfl_select_node) __P((fr_info_t *, void *, u_32_t *, 116 frdest_t *)); 117 void (*ipfl_expire) __P((ipf_main_softc_t *, void *)); 118 void (*ipfl_sync) __P((ipf_main_softc_t *, void *)); 119} ipf_lookup_t; 120 121extern int ipf_lookup_init __P((void)); 122extern int ipf_lookup_ioctl __P((ipf_main_softc_t *, caddr_t, ioctlcmd_t, int, int, void *)); 123extern void ipf_lookup_main_unload __P((void)); 124extern void ipf_lookup_deref __P((ipf_main_softc_t *, int, void *)); 125extern void ipf_lookup_iterderef __P((ipf_main_softc_t *, u_32_t, void *)); 126extern void *ipf_lookup_res_name __P((ipf_main_softc_t *, int, u_int, char *, 127 lookupfunc_t *)); 128extern void *ipf_lookup_res_num __P((ipf_main_softc_t *, int, u_int, u_int, 129 lookupfunc_t *)); 130extern void ipf_lookup_soft_destroy __P((ipf_main_softc_t *, void *)); 131extern void *ipf_lookup_soft_create __P((ipf_main_softc_t *)); 132extern int ipf_lookup_soft_init __P((ipf_main_softc_t *, void *)); 133extern int ipf_lookup_soft_fini __P((ipf_main_softc_t *, void *)); 134extern void *ipf_lookup_find_htable __P((ipf_main_softc_t *, int, char *)); 135extern void ipf_lookup_expire __P((ipf_main_softc_t *)); 136extern void ipf_lookup_sync __P((ipf_main_softc_t *, void *)); 137#ifndef _KERNEL 138extern void ipf_lookup_dump __P((ipf_main_softc_t *, void *)); 139#endif 140#endif /* __IP_LOOKUP_H__ */ 141