vppinfra: refactor clib_timebase_t
Add a clib_time_t * argument to clib_timebase_init(...), to encourage client code to share the vlib_main_t's clib_time_t object. Display the current day / date in GMT via the "show time" debug CLI. Fix the test framework so it processes the new "show time" output format. Type: refactor Signed-off-by: Dave Barach <dave@barachs.net> Change-Id: I5e52d57eb164b7cdb6355362d520df6928491711
This commit is contained in:

committed by
Florin Coras

parent
7a91b0e264
commit
197180031b
@ -1743,7 +1743,8 @@ http_static_server_main_init (vlib_main_t * vm)
|
||||
hsm->first_index = hsm->last_index = ~0;
|
||||
|
||||
clib_timebase_init (&hsm->timebase, 0 /* GMT */ ,
|
||||
CLIB_TIMEBASE_DAYLIGHT_NONE);
|
||||
CLIB_TIMEBASE_DAYLIGHT_NONE,
|
||||
&vm->clib_time /* share the system clock */ );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -50,7 +50,8 @@ feature_init (mactime_main_t * mm)
|
||||
mm->lookup_table_num_buckets,
|
||||
mm->lookup_table_memory_size);
|
||||
clib_timebase_init (&mm->timebase, mm->timezone_offset,
|
||||
CLIB_TIMEBASE_DAYLIGHT_USA);
|
||||
CLIB_TIMEBASE_DAYLIGHT_USA,
|
||||
&(mm->vlib_main->clib_time));
|
||||
mm->allow_counters.name = "allow";
|
||||
mm->allow_counters.stat_segment_name = "/mactime/allow";
|
||||
mm->drop_counters.name = "drop";
|
||||
|
@ -480,7 +480,8 @@ main (int argc, char **argv)
|
||||
clib_time_init (&mm->clib_time);
|
||||
mm->timezone_offset = -5.0;
|
||||
clib_timebase_init (&mm->timebase, mm->timezone_offset,
|
||||
CLIB_TIMEBASE_DAYLIGHT_USA);
|
||||
CLIB_TIMEBASE_DAYLIGHT_USA,
|
||||
0 /* allocate a clib_time_t */ );
|
||||
|
||||
vec_add1 (mm->pattern1, (u8 *) "^/mactime/allow");
|
||||
vec_add1 (mm->pattern2, (u8 *) "^/mactime/drop");
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
import unittest
|
||||
|
||||
from framework import VppTestCase, VppTestRunner, running_extended_tests
|
||||
from framework import VppTestCase, VppTestRunner, running_gcov_tests
|
||||
from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath
|
||||
|
||||
|
||||
@ -31,7 +31,7 @@ class TestMactime(VppTestCase):
|
||||
self.logger.critical(error)
|
||||
self.assertNotIn('FAILED', error)
|
||||
|
||||
@unittest.skipUnless(running_extended_tests, "part of extended tests")
|
||||
@unittest.skipUnless(running_gcov_tests, "part of code coverage tests")
|
||||
def test_mactime_unittest(self):
|
||||
""" Mactime Plugin Code Coverage Test """
|
||||
cmds = ["loopback create",
|
||||
|
@ -18,6 +18,7 @@
|
||||
static int
|
||||
test_time_range_main (unformat_input_t * input)
|
||||
{
|
||||
vlib_main_t *vm = vlib_get_main ();
|
||||
clib_timebase_t _tb, *tb = &_tb;
|
||||
clib_timebase_component_t _c, *cp = &_c;
|
||||
clib_timebase_range_t *rp = 0;
|
||||
@ -30,7 +31,8 @@ test_time_range_main (unformat_input_t * input)
|
||||
f64 timezone_offset;
|
||||
|
||||
/* Init time base */
|
||||
clib_timebase_init (tb, -5 /* EST */ , CLIB_TIMEBASE_DAYLIGHT_USA);
|
||||
clib_timebase_init (tb, -5 /* EST */ , CLIB_TIMEBASE_DAYLIGHT_USA,
|
||||
&vm->clib_time);
|
||||
|
||||
/* Set up summer time cache */
|
||||
now = clib_timebase_now (tb);
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include <signal.h>
|
||||
#include <math.h>
|
||||
#include <vppinfra/format.h>
|
||||
#include <vppinfra/time_range.h>
|
||||
#include <vppinfra/linux/sysfs.h>
|
||||
#include <vlib/vlib.h>
|
||||
|
||||
@ -1890,10 +1891,16 @@ show_clock_command_fn (vlib_main_t * vm,
|
||||
{
|
||||
int i;
|
||||
int verbose = 0;
|
||||
clib_timebase_t _tb, *tb = &_tb;
|
||||
|
||||
(void) unformat (input, "verbose %=", &verbose, 1);
|
||||
|
||||
vlib_cli_output (vm, "%U", format_clib_time, &vm->clib_time, verbose);
|
||||
clib_timebase_init (tb, 0 /* GMT */ , CLIB_TIMEBASE_DAYLIGHT_NONE,
|
||||
&vm->clib_time);
|
||||
|
||||
vlib_cli_output (vm, "%U, %U GMT", format_clib_time, &vm->clib_time,
|
||||
verbose, format_clib_timebase_time,
|
||||
clib_timebase_now (tb));
|
||||
|
||||
if (vec_len (vlib_mains) == 1)
|
||||
return 0;
|
||||
|
@ -30,7 +30,8 @@ test_time_range_main (unformat_input_t * input)
|
||||
f64 timezone_offset;
|
||||
|
||||
/* Init time base */
|
||||
clib_timebase_init (tb, -5 /* EST */ , CLIB_TIMEBASE_DAYLIGHT_USA);
|
||||
clib_timebase_init (tb, -5 /* EST */ , CLIB_TIMEBASE_DAYLIGHT_USA,
|
||||
0 /* allocate a clib_time_t */ );
|
||||
|
||||
/* Set up summer time cache */
|
||||
now = clib_timebase_now (tb);
|
||||
@ -142,6 +143,7 @@ test_time_range_main (unformat_input_t * input)
|
||||
}
|
||||
|
||||
unformat_free (input2);
|
||||
clib_mem_free (tb->clib_time);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -17,12 +17,20 @@
|
||||
|
||||
void
|
||||
clib_timebase_init (clib_timebase_t * tb, i32 timezone_offset_in_hours,
|
||||
clib_timebase_daylight_time_t daylight_type)
|
||||
clib_timebase_daylight_time_t daylight_type,
|
||||
clib_time_t * clib_time)
|
||||
{
|
||||
clib_memset (tb, 0, sizeof (*tb));
|
||||
|
||||
clib_time_init (&tb->clib_time);
|
||||
tb->time_zero = unix_time_now ();
|
||||
if (clib_time == 0)
|
||||
{
|
||||
tb->clib_time = clib_mem_alloc_aligned
|
||||
(sizeof (*clib_time), CLIB_CACHE_LINE_BYTES);
|
||||
memset (tb->clib_time, 0, sizeof (*clib_time));
|
||||
clib_time_init (tb->clib_time);
|
||||
}
|
||||
else
|
||||
tb->clib_time = clib_time;
|
||||
|
||||
tb->timezone_offset = ((f64) (timezone_offset_in_hours)) * 3600.0;
|
||||
tb->daylight_time_type = daylight_type;
|
||||
|
@ -28,12 +28,7 @@ typedef enum
|
||||
typedef struct
|
||||
{
|
||||
/* provides f64 seconds since clib_time_init was called */
|
||||
clib_time_t clib_time;
|
||||
/*
|
||||
* time in f64 seconds since Thursday 1 Jan 1970 00:00:00 UTC
|
||||
* when clib_time_init was called
|
||||
*/
|
||||
f64 time_zero;
|
||||
clib_time_t *clib_time;
|
||||
f64 timezone_offset;
|
||||
f64 summer_offset;
|
||||
clib_timebase_daylight_time_t daylight_time_type;
|
||||
@ -57,7 +52,8 @@ typedef struct
|
||||
} clib_timebase_range_t;
|
||||
|
||||
void clib_timebase_init (clib_timebase_t * tb, i32 timezone_offset_in_hours,
|
||||
clib_timebase_daylight_time_t daylight_type);
|
||||
clib_timebase_daylight_time_t daylight_type,
|
||||
clib_time_t * clib_time);
|
||||
|
||||
void clib_timebase_time_to_components (f64 now,
|
||||
clib_timebase_component_t * cp);
|
||||
@ -93,7 +89,7 @@ clib_timebase_now (clib_timebase_t * tb)
|
||||
{
|
||||
f64 now;
|
||||
|
||||
now = tb->time_zero + clib_time_now (&tb->clib_time);
|
||||
now = tb->clib_time->init_reference_time + clib_time_now (tb->clib_time);
|
||||
now += tb->timezone_offset;
|
||||
now += clib_timebase_summer_offset_fastpath (tb, now);
|
||||
|
||||
|
@ -758,7 +758,12 @@ class VppTestCase(unittest.TestCase):
|
||||
|
||||
@classmethod
|
||||
def get_vpp_time(cls):
|
||||
return float(cls.vapi.cli('show clock').replace("Time now ", ""))
|
||||
# processes e.g. "Time now 2.190522, Wed, 11 Mar 2020 17:29:54 GMT"
|
||||
# returns float("2.190522")
|
||||
timestr = cls.vapi.cli('show clock')
|
||||
head, sep, tail = timestr.partition(',')
|
||||
head, sep, tail = head.partition('Time now')
|
||||
return float(tail)
|
||||
|
||||
@classmethod
|
||||
def sleep_on_vpp_time(cls, sec):
|
||||
|
Reference in New Issue
Block a user