* every time route_table_reset() is called. */
static uint64_t rt_change_seq;
-static unsigned int register_count = 0;
static struct nln *nln = NULL;
static struct route_table_msg rtmsg;
static struct nln_notifier *route_notifier = NULL;
static void route_map_clear(void);
static void name_table_init(void);
-static void name_table_uninit(void);
static void name_table_change(const struct rtnetlink_link_change *, void *);
uint64_t
/* Users of the route_table module should register themselves with this
* function before making any other route_table function calls. */
void
-route_table_register(void)
+route_table_init(void)
OVS_EXCLUDED(route_table_mutex)
{
ovs_mutex_lock(&route_table_mutex);
- if (!register_count) {
- ovs_assert(!nln);
- ovs_assert(!route_notifier);
+ ovs_assert(!nln);
+ ovs_assert(!route_notifier);
- ovs_router_init();
- nln = nln_create(NETLINK_ROUTE, RTNLGRP_IPV4_ROUTE,
- (nln_parse_func *) route_table_parse, &rtmsg);
+ ovs_router_init();
+ nln = nln_create(NETLINK_ROUTE, RTNLGRP_IPV4_ROUTE,
+ (nln_parse_func *) route_table_parse, &rtmsg);
- route_notifier =
- nln_notifier_create(nln, (nln_notify_func *) route_table_change,
- NULL);
+ route_notifier =
+ nln_notifier_create(nln, (nln_notify_func *) route_table_change,
+ NULL);
- route_table_reset();
- name_table_init();
- }
-
- register_count++;
- ovs_mutex_unlock(&route_table_mutex);
-}
-
-/* Users of the route_table module should unregister themselves with this
- * function when they will no longer be making any more route_table fuction
- * calls. */
-void
-route_table_unregister(void)
- OVS_EXCLUDED(route_table_mutex)
-{
- ovs_mutex_lock(&route_table_mutex);
- register_count--;
+ route_table_reset();
+ name_table_init();
- if (!register_count) {
- nln_notifier_destroy(route_notifier);
- route_notifier = NULL;
- nln_destroy(nln);
- nln = NULL;
-
- route_map_clear();
- name_table_uninit();
- }
ovs_mutex_unlock(&route_table_mutex);
}
name_notifier = rtnetlink_link_notifier_create(name_table_change, NULL);
}
-static void
-name_table_uninit(void)
-{
- rtnetlink_link_notifier_destroy(name_notifier);
- name_notifier = NULL;
-}
static void
name_table_change(const struct rtnetlink_link_change *change OVS_UNUSED,
ds->next_tick = time_now() + 1;
hmap_init(&ds->ports);
ds->probability = 0;
- route_table_register();
ovs_refcount_init(&ds->ref_cnt);
return ds;
if (ds && ovs_refcount_unref_relaxed(&ds->ref_cnt) == 1) {
struct dpif_sflow_port *dsp, *next;
- route_table_unregister();
dpif_sflow_clear(ds);
HMAP_FOR_EACH_SAFE (dsp, next, hmap_node, &ds->ports) {
dpif_sflow_del_port__(ds, dsp);