]> git.proxmox.com Git - mirror_frr.git/blob - tests/zebra/test_lm_plugin.c
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / tests / zebra / test_lm_plugin.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * Label Manager tests.
4 * Copyright (C) 2020 Volta Networks
5 * Patrick Ruddy
6 */
7
8
9 #include <zebra.h>
10 #include "zebra/zapi_msg.h"
11 #include "zebra/label_manager.h"
12
13 /* shim out unused functions/variables to allow the lablemanager to compile*/
14 DEFINE_KOOH(zserv_client_close, (struct zserv * client), (client));
15 unsigned long zebra_debug_packet = 0;
16 struct zserv *zserv_find_client_session(uint8_t proto, unsigned short instance,
17 uint32_t session_id)
18 {
19 return NULL;
20 }
21
22 int zsend_label_manager_connect_response(struct zserv *client, vrf_id_t vrf_id,
23 unsigned short result)
24 {
25 return 0;
26 }
27
28 int zsend_assign_label_chunk_response(struct zserv *client, vrf_id_t vrf_id,
29 struct label_manager_chunk *lmc)
30 {
31 return 0;
32 }
33
34
35 static int test_client_connect(struct zserv *client, vrf_id_t vrf_id)
36 {
37 return 0;
38 }
39
40 static int test_client_disconnect(struct zserv *client)
41 {
42 return 0;
43 }
44
45 /* external test hook functions */
46 static int lm_get_chunk_pi(struct label_manager_chunk **lmc,
47 struct zserv *client, uint8_t keep, uint32_t size,
48 uint32_t base, vrf_id_t vrf_id)
49 {
50 if (base == 0)
51 *lmc = create_label_chunk(10, 55, 0, 1, 50, 50 + size);
52 else
53 *lmc = assign_label_chunk(10, 55, 0, 1, size, base);
54
55 return 0;
56 }
57
58 static int lm_release_chunk_pi(struct zserv *client, uint32_t start,
59 uint32_t end)
60 {
61 return release_label_chunk(client->proto, client->instance,
62 client->session_id, start, end);
63 }
64
65
66 /* use external allocations */
67 static void lp_plugin_init(void)
68 {
69 /* register our own hooks */
70 hook_register(lm_client_connect, test_client_connect);
71 hook_register(lm_client_disconnect, test_client_disconnect);
72 hook_register(lm_get_chunk, lm_get_chunk_pi);
73 hook_register(lm_release_chunk, lm_release_chunk_pi);
74 }
75
76 static void lp_plugin_cleanup(void)
77 {
78 /* register our own hooks */
79 hook_unregister(lm_client_connect, test_client_connect);
80 hook_unregister(lm_client_disconnect, test_client_disconnect);
81 hook_unregister(lm_get_chunk, lm_get_chunk_pi);
82 hook_unregister(lm_release_chunk, lm_release_chunk_pi);
83 }
84
85
86 /* tests */
87
88 static void test_lp_plugin(void)
89 {
90 struct label_manager_chunk *lmc;
91
92 lmc = assign_label_chunk(10, 55, 0, 1, 50, 0);
93 fprintf(stdout,
94 "chunk: start %u end %u proto %u instance %u session %u keep %s\n",
95 lmc->start, lmc->end, lmc->proto, lmc->instance,
96 lmc->session_id, lmc->keep ? "yes" : "no");
97 delete_label_chunk(lmc);
98
99 lmc = assign_label_chunk(10, 55, 0, 1, 50, 100);
100 fprintf(stdout,
101 "chunk: start %u end %u proto %u instance %u session %u keep %s\n",
102 lmc->start, lmc->end, lmc->proto, lmc->instance,
103 lmc->session_id, lmc->keep ? "yes" : "no");
104 release_label_chunk(10, 55, 0, lmc->start, lmc->end);
105 }
106
107 int main(int argc, char **argv)
108 {
109 /* set up label manager and release it's hooks */
110 label_manager_init();
111 lm_hooks_unregister();
112
113 /* test plugin */
114 lp_plugin_init();
115 test_lp_plugin();
116 lp_plugin_cleanup();
117
118 /* this keeps the compiler happy */
119 hook_call(zserv_client_close, NULL);
120 return 0;
121 }