Skip to content

Commit 9849926

Browse files
committed
Display built-in services as part of show service classes command
1 parent 1789bae commit 9849926

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

builtin_service_manager.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,30 @@ bool builtin_service_manager_is_class_exists(const char* service_cl
4848
return (NULL != service_var);
4949
}
5050

51+
builtin_service_t* builtin_service_manager_get_class(const char* service_class)
52+
{
53+
uint32_t key = crc32(0, service_class, strlen(service_class));
54+
variant_t* retVal = variant_hash_get(builtin_service_table, key);
55+
56+
return (NULL == retVal)? NULL : (builtin_service_t*)variant_get_ptr(retVal);
57+
}
58+
59+
void builtin_service_manager_for_each_class(void (*visitor)(builtin_service_t*, void*), void* arg)
60+
{
61+
variant_hash_for_each_value(builtin_service_table, builtin_service_t*, visitor, arg)
62+
}
63+
64+
void builtin_service_manager_for_each_method(const char* service_class, void (*visitor)(service_method_t*, void*), void* arg)
65+
{
66+
builtin_service_t* service = builtin_service_manager_get_class(service_class);
67+
68+
if(NULL != service)
69+
{
70+
stack_for_each(service->service_methods, method_variant)
71+
{
72+
service_method_t* method = (service_method_t*)variant_get_ptr(method_variant);
73+
visitor(method, arg);
74+
}
75+
}
76+
}
77+

builtin_service_manager.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,7 @@
33
void builtin_service_manager_init();
44
service_method_t* builtin_service_manager_get_method(const char* service_class, const char* method_name);
55
bool builtin_service_manager_is_class_exists(const char* service_class);
6+
builtin_service_t* builtin_service_manager_get_class(const char* service_class);
7+
void builtin_service_manager_for_each_class(void (*visitor)(builtin_service_t*, void*), void* arg);
8+
void builtin_service_manager_for_each_method(const char* service_class, void (*visitor)(service_method_t*, void*), void* arg);
69

cli_service.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "cli_service.h"
22
#include "service_manager.h"
3+
#include "builtin_service_manager.h"
34
#include "vty.h"
45

56
cli_node_t* service_node;
@@ -13,6 +14,8 @@ bool cmd_show_service_methods(vty_t* vty, variant_stack_t* params);
1314
bool cmd_show_service_config(vty_t* vty, variant_stack_t* params);
1415

1516
void show_service_helper(service_t* service, void* arg);
17+
void show_builtin_service_helper(builtin_service_t* service, void* arg);
18+
1619
void show_service_method_helper(service_method_t* method, void* arg);
1720
void show_service_config_helper(service_t* service, void* arg);
1821

@@ -67,12 +70,15 @@ bool cmd_list_service_classes(vty_t* vty, variant_stack_t* params)
6770
{
6871
vty_write(vty, "%-20s%s\n", "Name", "Description");
6972
service_manager_for_each_class(show_service_helper, vty);
73+
builtin_service_manager_for_each_class(show_builtin_service_helper, vty);
7074
}
7175

7276
bool cmd_show_service_methods(vty_t* vty, variant_stack_t* params)
7377
{
7478
vty_write(vty, "%-20s%s\n", "Name", "Description");
79+
7580
service_manager_for_each_method(variant_get_string(stack_peek_at(params, 3)), show_service_method_helper, vty);
81+
builtin_service_manager_for_each_method(variant_get_string(stack_peek_at(params, 3)), show_service_method_helper, vty);
7682
}
7783

7884
bool cmd_show_service_config(vty_t* vty, variant_stack_t* params)
@@ -87,6 +93,13 @@ void show_service_helper(service_t* service, void* arg)
8793
vty_write(vty, "%-20s%s\n", service->service_name, service->description);
8894
}
8995

96+
void show_builtin_service_helper(builtin_service_t* service, void* arg)
97+
{
98+
vty_t* vty = (vty_t*)arg;
99+
100+
vty_write(vty, "%-20s%s\n", service->service_name, service->description);
101+
}
102+
90103
void show_service_method_helper(service_method_t* method, void* arg)
91104
{
92105
vty_t* vty = (vty_t*)arg;

0 commit comments

Comments
 (0)