]> git.proxmox.com Git - mirror_frr.git/blame - tests/zebra/test_lm_plugin.c
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / tests / zebra / test_lm_plugin.c
CommitLineData
acddc0ed 1// SPDX-License-Identifier: GPL-2.0-or-later
cdb2af42
PR
2/*
3 * Label Manager tests.
4 * Copyright (C) 2020 Volta Networks
5 * Patrick Ruddy
cdb2af42
PR
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*/
14DEFINE_KOOH(zserv_client_close, (struct zserv * client), (client));
15unsigned long zebra_debug_packet = 0;
16struct zserv *zserv_find_client_session(uint8_t proto, unsigned short instance,
17 uint32_t session_id)
18{
19 return NULL;
20}
21
22int zsend_label_manager_connect_response(struct zserv *client, vrf_id_t vrf_id,
23 unsigned short result)
24{
25 return 0;
26}
27
28int 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
35static int test_client_connect(struct zserv *client, vrf_id_t vrf_id)
36{
37 return 0;
38}
39
40static int test_client_disconnect(struct zserv *client)
41{
42 return 0;
43}
44
45/* external test hook functions */
46static 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
58static 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 */
9b8a1ad4 67static void lp_plugin_init(void)
cdb2af42
PR
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
9b8a1ad4 76static void lp_plugin_cleanup(void)
cdb2af42
PR
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
9b8a1ad4 88static void test_lp_plugin(void)
cdb2af42
PR
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
107int 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}