]>
git.proxmox.com Git - mirror_frr.git/blob - tests/zebra/test_lm_plugin.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * Copyright (C) 2020 Volta Networks
10 #include "zebra/zapi_msg.h"
11 #include "zebra/label_manager.h"
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
,
22 int zsend_label_manager_connect_response(struct zserv
*client
, vrf_id_t vrf_id
,
23 unsigned short result
)
28 int zsend_assign_label_chunk_response(struct zserv
*client
, vrf_id_t vrf_id
,
29 struct label_manager_chunk
*lmc
)
35 static int test_client_connect(struct zserv
*client
, vrf_id_t vrf_id
)
40 static int test_client_disconnect(struct zserv
*client
)
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
)
51 *lmc
= create_label_chunk(10, 55, 0, 1, 50, 50 + size
);
53 *lmc
= assign_label_chunk(10, 55, 0, 1, size
, base
);
58 static int lm_release_chunk_pi(struct zserv
*client
, uint32_t start
,
61 return release_label_chunk(client
->proto
, client
->instance
,
62 client
->session_id
, start
, end
);
66 /* use external allocations */
67 static void lp_plugin_init(void)
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
);
76 static void lp_plugin_cleanup(void)
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
);
88 static void test_lp_plugin(void)
90 struct label_manager_chunk
*lmc
;
92 lmc
= assign_label_chunk(10, 55, 0, 1, 50, 0);
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
);
99 lmc
= assign_label_chunk(10, 55, 0, 1, 50, 100);
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
);
107 int main(int argc
, char **argv
)
109 /* set up label manager and release it's hooks */
110 label_manager_init();
111 lm_hooks_unregister();
118 /* this keeps the compiler happy */
119 hook_call(zserv_client_close
, NULL
);