X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Frmr%2Fcommon%2Finclude%2Frmr_agnostic.h;h=31e2c4da7b279c495541ff18e394000ae70a127e;hb=ce1c741c01e8387cb095dac5e36a4d8ad91d006d;hp=419145b1b5a9198266430898d2069ca10a124b13;hpb=fcea3951d44de0cc55d33c5e114487abe79d3406;p=ric-plt%2Flib%2Frmr.git diff --git a/src/rmr/common/include/rmr_agnostic.h b/src/rmr/common/include/rmr_agnostic.h index 419145b..31e2c4d 100644 --- a/src/rmr/common/include/rmr_agnostic.h +++ b/src/rmr/common/include/rmr_agnostic.h @@ -30,6 +30,7 @@ #define _rmr_agnostic_h #include // needed to support some structs +#include typedef struct endpoint endpoint_t; // place holder for structs defined in nano/nng private.h typedef struct uta_ctx uta_ctx_t; @@ -224,9 +225,13 @@ typedef struct { The route table. */ typedef struct { - void* hash; // hash table. + int error; // set if there was a problem building the table + void* hash; // hash table for msg type and meid. + void* ephash; // hash for endpoint references int updates; // counter of update records received int mupdates; // counter of meid update records received + int ref_count; // num threads currently using + pthread_mutex_t* gate; // lock allowing update to ref counter } route_table_t; /* @@ -253,6 +258,10 @@ typedef struct { #define RING_NONE 0 // no options #define RING_RLOCK 0x01 // create/destroy the read lock on the ring #define RING_WLOCK 0x02 // create/destroy the write lockk on the ring +#define RING_FRLOCK 0x04 // read locking with no wait if locked option + + // flag values +#define RING_FL_FLOCK 0x01 // fast read lock (don't wait if locked when reading) typedef struct ring { uint16_t head; // index of the head of the ring (insert point) @@ -260,6 +269,7 @@ typedef struct ring { uint16_t nelements; // number of elements in the ring void** data; // the ring data (pointers to blobs of stuff) int pfd; // event fd for the ring for epoll + int flags; // RING_FL_* constants pthread_mutex_t* rgate; // read lock if used pthread_mutex_t* wgate; // write lock if used } ring_t; @@ -309,16 +319,18 @@ static void collect_things( void* st, void* entry, char const* name, void* thing static void del_rte( void* st, void* entry, char const* name, void* thing, void* data ); static endpoint_t* get_meid_owner( route_table_t *rt, char const* meid ); static char* uta_fib( char const* 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 route_table_t* uta_rt_init( uta_ctx_t* ctx ); +static route_table_t* uta_rt_clone( uta_ctx_t* ctx, route_table_t* srt, route_table_t* drt, int all ); static void uta_rt_drop( route_table_t* rt ); +static inline route_table_t* get_rt( uta_ctx_t* ctx ); 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, 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 route_table_t* prep_new_rt( uta_ctx_t* ctx, int all ); static void parse_rt_rec( uta_ctx_t* ctx, uta_ctx_t* pctx, char* buf, int vlevel, rmr_mbuf_t* mbuf ); static rmr_mbuf_t* realloc_msg( rmr_mbuf_t* msg, int size ); +static void release_rt( uta_ctx_t* ctx, route_table_t* rt ); static void* rtc( void* vctx ); static endpoint_t* rt_ensure_ep( route_table_t* rt, char const* ep_name );