Source File include/rp.h

    1    | /***************************************
    2    |   $Revision: 1.6 $
    3    |
    4    |   Radix tree (rx).  rx_global.h - header file with definition of
    5    |                                   global vars for radix
    6    |
    7    |   Status: NOT REVUED, TESTED, INCOMPLETE
    8    |
    9    |   Design and implementation by: Marek Bukowy
    10   |
    11   |   ******************/ /******************
    12   |   Copyright (c) 1999                              RIPE NCC
    13   |
    14   |   All Rights Reserved
    15   |
    16   |   Permission to use, copy, modify, and distribute this software and its
    17   |   documentation for any purpose and without fee is hereby granted,
    18   |   provided that the above copyright notice appear in all copies and that
    19   |   both that copyright notice and this permission notice appear in
    20   |   supporting documentation, and that the name of the author not be
    21   |   used in advertising or publicity pertaining to distribution of the
    22   |   software without specific, written prior permission.
    23   |
    24   |   THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    25   |   ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
    26   |   AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
    27   |   DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
    28   |   AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    29   |   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    30   |   ***************************************/
    31   |
    32   | #ifndef RP_H
    33   | #define RP_H
    34   |
    35   | #include <stddef.h>  /* definition of NULL */
    36   | #include <glib.h>
    37   | /*#include <DF_attribute_enum.def> / * attribute codes */
    38   |
    39   | #include <defs.h>
    40   |
    41   | #include <iproutines.h>
    42   | #include <erroutines.h>
    43   | #include <rxroutines.h>
    44   | #include <mysql_driver.h>
    45   |
    46   |
    47   | #include "ca_defs.h"
    48   |
    49   |
    50   | typedef struct {
    51   |   rx_fam_t   fam;
    52   |   ip_space_t space;
    53   |   union {
    54   |     ip_prefix_t rt;
    55   |     ip_range_t  in;
    56   |   } u;
    57   | } rp_uni_t;
    58   |
    59   |
    60   |
    61   | typedef ca_dbSource_t *  rp_regid_t;
    62   | typedef A_Type_t  rp_attr_t;
    63   |
    64   |
    65   | typedef struct {
    66   |   rp_attr_t  type;
    67   |   rp_uni_t   uni;
    68   |   sql_key_t  key;
    69   |   union {
    70   |       char *origin;
    71   |       char *domain;
    72   |   } d;
    73   | } rp_upd_pack_t;
    74   |
    75   | #ifdef RP_IMPL
    76   | #define EXTDEF(a,b) a = b;
    77   | #else
    78   | #define EXTDEF(a,b) extern a;
    79   | #endif
    80   |
    81   | EXTDEF (GList *rx_forest, NULL)		/* linked list of trees */
    82   |
    83   |
    84   | typedef struct {
    85   |   rp_regid_t      reg_id;	/*+ registry id +*/
    86   |   rp_attr_t       attr;         /*+ extra tree attribute (within the same reg/spc/fam), allows
    87   | 				  using the same tree type for different object trees +*/
    88   |
    89   |   rx_tree_t       *tree;        /*+ tree +*/
    90   | } rp_tentry_t;
    91   |
    92   | er_ret_t RP_asc_load(char *filename, int maxobj,
    93   | 		     int operation, rp_regid_t reg_id);
    94   | er_ret_t
    95   | RP_tree_get ( rx_tree_t **treeptr, /*+ answer goes here, please +*/
    96   | 	      rp_regid_t reg_id,   /*+ id of the registry +*/
    97   | 	      ip_space_t spc_id,   /*+ type of space (ipv4/ipv6) +*/
    98   | 	      rp_attr_t  attr    /*+ extra tree id (within the same reg/spc/fam +*/
    99   | 	      );
    100  | er_ret_t
    101  | RP_tree_add (
    102  | 	     rp_regid_t reg_id,    /*+ id of the registry +*/
    103  | 	     rp_attr_t  attr,      /*+ extra tree id (within the same registry/space/family +*/
    104  | 	     char      *prefixstr, /*+ prefix the tree will cover (string) +*/
    105  | 	     rx_mem_mt   mem_mode, /* memory only, memory+sql, sql only +*/
    106  | 	     rx_subtree_mt subtrees	/*+ one of NONE, AUTO, HAND +*/
    107  | 	     );
    108  | er_ret_t RP_init_trees( rp_regid_t reg_id );
    109  |
    110  |
    111  | er_ret_t
    112  | RP_asc_search (
    113  |                rx_srch_mt search_mode,
    114  |                int par_a,
    115  |                int par_b,
    116  |                char *key,          /*+ search term: (string) prefix/range/IP +*/
    117  |                rp_regid_t   reg_id,
    118  | 	       rp_attr_t  attr,    /*+ extra tree id (within the same reg/spc/fam +*/
    119  |                GList **anslist,    /*+ answers go here, please +*/
    120  |                int    max_count    /*+ max # of answers. RX_ALLANS == unlimited +*/
    121  |                );
    122  | er_ret_t
    123  | RP_uni_node ( rx_oper_mt mode,       /*+ MODE={cre|mod|del} +*/
    124  | 	      rp_uni_t   *uni,       /*+ unified argument structure +*/
    125  | 	      rp_attr_t  attr,       /*+ additional tree attribute +*/
    126  | 	      rp_regid_t reg_id,     /*+ id of the registry +*/
    127  | 	      void *data,            /*+ pointer to the payload +*/
    128  | 	      int   datalen,         /*+ length of the payload +*/
    129  | 	      sql_key_t key          /*+ the key to the SQL full-text +*/
    130  | 	      );
    131  | er_ret_t
    132  | RP_asc_node( rx_oper_mt mode,       /*+ MODE={cre|mod|del} +*/
    133  | 	       char *rangstr,         /*+ string prefix/range/IP/inaddr +*/
    134  | 	       rp_attr_t  attr,       /*+ additional tree attribute +*/
    135  | 	       rp_regid_t reg_id,     /*+ id of the registry +*/
    136  | 	       void *data,            /*+ pointer to the payload +*/
    137  | 	       int   datalen,         /*+ length of the payload +*/
    138  | 	       sql_key_t key          /*+ the key to the SQL full-text +*/
    139  |               );
    140  |
    141  | rx_fam_t RP_attr2fam( rp_attr_t type );
    142  | int RP_attr2spc(rp_attr_t type, ip_space_t space);
    143  | er_ret_t
    144  | RP_asc2uni(char       *astr,       /*+ string prefix/range/IP/inaddr +*/
    145  | 	   rp_attr_t  attr,
    146  | 	   rp_uni_t   *uni);        /* destination pointer */
    147  | er_ret_t
    148  | RP_asc2pack(rp_upd_pack_t *pack, rp_attr_t type, char *string);
    149  |
    150  |
    151  | void RP_pack_set_orig( rp_attr_t  attr,rp_upd_pack_t *pack, char *origin);
    152  | void RP_pack_set_pref4(rp_attr_t  attr,char *avalue, rp_upd_pack_t *pack,
    153  | 		       unsigned *prefix, unsigned *prefix_length);
    154  | void RP_pack_set_revd( rp_attr_t  attr,char *avalue, rp_upd_pack_t *pack);
    155  | void RP_pack_set_pref6(rp_attr_t  attr,char *avalue, rp_upd_pack_t *pack,
    156  | 		       ip_v6word_t *high, ip_v6word_t *low, unsigned *prefix_length);
    157  | void RP_pack_set_rang( rp_attr_t  attr,char *avalue, rp_upd_pack_t *pack,
    158  | 		      unsigned *begin_in, unsigned *end_in);
    159  |
    160  | er_ret_t
    161  | RP_pack_update(rx_oper_mt   mode,
    162  | 	       rp_upd_pack_t *pack,
    163  | 	       rp_regid_t    reg_id);     /*+ id of the registry +*/
    164  |
    165  |
    166  | er_ret_t
    167  | RP_pack_node(rx_oper_mt   mode,
    168  | 	     rp_upd_pack_t *pack,
    169  | 	     rp_regid_t    reg_id);
    170  | er_ret_t
    171  | RP_pack_node_l(rx_oper_mt    mode,
    172  | 	       rp_upd_pack_t *pack,
    173  | 	       rx_tree_t     *mytree);
    174  |
    175  | void rp_make_short(rp_upd_pack_t *pack, char **ptr, int *len);
    176  |
    177  | er_ret_t RP_sql_load_reg(rp_regid_t reg_id);
    178  | er_ret_t RP_asc_load(char *filename, int maxobj, int operation,
    179  | 	    rp_regid_t reg_id);
    180  | int RP_attr2spc(rp_attr_t type, ip_space_t space);
    181  | #undef EXTDEF
    182  | #endif /* RP_H */