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