feature(routes): Add rtable update
[ric-plt/lib/rmr.git] / src / common / include / rmr_agnostic.h
index a23cff7..418ebbc 100644 (file)
@@ -168,6 +168,8 @@ typedef struct {
        round robin messags across the list.
 */
 typedef struct {
+       uint64_t key;                   // key used to reinsert this entry into a new symtab
+       int     refs;                           // number of symtabs which reference the entry
        int mtype;                              // the message type for this list
        int     nrrgroups;                      // number of rr groups to send to
        rrgroup_t**     rrgroups;       // one or more set of endpoints to round robin messages to
@@ -178,6 +180,7 @@ typedef struct {
 */
 typedef struct {
        void*   hash;                   // hash table.
+       int             updates;                // counter of update records received
 } route_table_t;
 
 /*
@@ -230,14 +233,16 @@ static int ie_test( void* r, int i_factor, long inserts );
 
 
 // ----- route table generic static things ---------
+static inline uint64_t build_rt_key( int32_t sub_id, int32_t mtype );
 static void collect_things( void* st, void* entry, char const* name, void* thing, void* vthing_list );
 static void del_rte( void* st, void* entry, char const* name, void* thing, void* data );
 static char* uta_fib( char* fname );
 static route_table_t* uta_rt_init( );
 static route_table_t* uta_rt_clone( route_table_t* srt );
+static route_table_t* uta_rt_clone_all( route_table_t* srt );
 static void uta_rt_drop( route_table_t* rt );
 static endpoint_t*  uta_add_ep( route_table_t* rt, rtable_ent_t* rte, char* ep_name, int group  );
-static rtable_ent_t* uta_add_rte( route_table_t* rt, int mtype, int nrrgroups );
+static rtable_ent_t* uta_add_rte( route_table_t* rt, uint64_t key, int nrrgroups );
 static endpoint_t* uta_get_ep( route_table_t* rt, char const* ep_name );
 static void read_static_rt( uta_ctx_t* ctx, int vlevel );
 static void parse_rt_rec( uta_ctx_t* ctx, char* buf, int vlevel );