X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Frmr%2Fcommon%2Fsrc%2Frt_generic_static.c;h=a25a4496b68b455713e6a72fe28b8f55c2a9e6d7;hb=refs%2Fchanges%2F09%2F5909%2F2;hp=9aa58f1b562d2cc46fcfc857cff4c9595b53a9fd;hpb=d07cc97b4b5493a5fc67231ee09d1c931c993161;p=ric-plt%2Flib%2Frmr.git diff --git a/src/rmr/common/src/rt_generic_static.c b/src/rmr/common/src/rt_generic_static.c index 9aa58f1..a25a449 100644 --- a/src/rmr/common/src/rt_generic_static.c +++ b/src/rmr/common/src/rt_generic_static.c @@ -852,7 +852,7 @@ static void cycle_snarfed_rt( uta_ctx_t* ctx ) { return; } - if( (snarf_fname = getenv( ENV_STASH_RT )) == NULL ) { // specific place to stash the rt not given + if( (snarf_fname = getenv( ENV_STASH_RT )) == NULL ) { // specific place to stash the rt not given if( (seed_fname = getenv( ENV_SEED_RT )) != NULL ) { // no seed, we leave in the default file memset( wfname, 0, sizeof( wfname ) ); snprintf( wfname, sizeof( wfname ) - 1, "%s.stash", seed_fname ); @@ -861,6 +861,7 @@ static void cycle_snarfed_rt( uta_ctx_t* ctx ) { } if( snarf_fname == NULL ) { + rmr_vlog( RMR_VL_DEBUG, "cycle_snarf: no file to save in" ); return; } @@ -891,7 +892,7 @@ static void cycle_snarfed_rt( uta_ctx_t* ctx ) { if( ctx->snarf_rt_fd < 0 ) { rmr_vlog( RMR_VL_WARN, "rmr_rtc: unable to open trt file: %s: %s\n", tfname, strerror( errno ) ); } else { - if( DEBUG ) rmr_vlog( RMR_VL_DEBUG, "rmr_rtc: rt snarf file opened: %s: %s\n", tfname ); + if( DEBUG ) rmr_vlog( RMR_VL_DEBUG, "rmr_rtc: rt snarf file opened: %s\n", tfname ); } } @@ -1018,6 +1019,7 @@ static void parse_rt_rec( uta_ctx_t* ctx, uta_ctx_t* pctx, char* buf, int vleve send_rt_ack( pctx, mbuf, ctx->table_id, RMR_OK, NULL ); ctx->rtable_ready = 1; // route based sends can now happen + ctx->flags |= CFL_FULLRT; // indicate we have seen a complete route table } else { if( DEBUG > 1 ) rmr_vlog_force( RMR_VL_DEBUG, "end of route table noticed, but one was not started!\n" ); ctx->new_rtable = NULL; @@ -1079,12 +1081,17 @@ static void parse_rt_rec( uta_ctx_t* ctx, uta_ctx_t* pctx, char* buf, int vleve break; case 'u': // update current table, not a total replacement + if( ! (ctx->flags & CFL_FULLRT) ) { // we cannot update until we have a full table from route generator + rmr_vlog( RMR_VL_WARN, "route table update ignored: full table not previously recevied" ); + break; + } + tokens[1] = clip( tokens[1] ); if( strcmp( tokens[1], "end" ) == 0 ) { // wrap up the table we were building if( ctx->new_rtable == NULL ) { // update table not in progress break; } - if( ctx && ctx->snarf_rt_fd >= 0 ) { + if( ctx->snarf_rt_fd >= 0 ) { cycle_snarfed_rt( ctx ); // make it available and open a new one } @@ -1158,8 +1165,13 @@ static void read_static_rt( uta_ctx_t* ctx, int vlevel ) { char* eor; // end of the record int rcount = 0; // record count for debug - if( (fname = getenv( ENV_SEED_RT )) == NULL ) { - return; + if( (fname = ctx->seed_rt_fname) == NULL ) { + if( (fname = getenv( ENV_SEED_RT )) == NULL ) { + return; + } + + ctx->seed_rt_fname = strdup( fname ); + fname = ctx->seed_rt_fname; } if( (fbuf = ensure_nlterm( uta_fib( fname ) ) ) == NULL ) { // read file into a single buffer (nil terminated string)