From b772066ffd066d59d9ebce092f6665150723d2ad Mon Sep 17 00:00:00 2001 From: Pravin B Shelar Date: Wed, 26 Nov 2014 11:27:05 -0800 Subject: [PATCH] route-table: Remove Unregister. Since dpif registering for routing table at initialization there is no need to unregister it. Following patch removes support for turning routing table notifications on and off. Due to this change OVS always listens for these notifications. Reported-by: YAMAMOTO Takashi Signed-off-by: Pravin B Shelar Acked-by: YAMAMOTO Takashi --- lib/dpif.c | 2 +- lib/netdev-vport.c | 1 - lib/route-table-bsd.c | 16 ++--------- lib/route-table-stub.c | 7 +---- lib/route-table.c | 55 ++++++++---------------------------- lib/route-table.h | 3 +- ofproto/ofproto-dpif-sflow.c | 2 -- 7 files changed, 16 insertions(+), 70 deletions(-) diff --git a/lib/dpif.c b/lib/dpif.c index e39d7cde8..49432f299 100644 --- a/lib/dpif.c +++ b/lib/dpif.c @@ -120,7 +120,7 @@ dp_initialize(void) dpctl_unixctl_register(); tnl_port_map_init(); tnl_arp_cache_init(); - route_table_register(); + route_table_init(); for (i = 0; i < ARRAY_SIZE(base_dpif_classes); i++) { dp_register_provider(base_dpif_classes[i]); diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c index 3825a0921..e6b97fa44 100644 --- a/lib/netdev-vport.c +++ b/lib/netdev-vport.c @@ -262,7 +262,6 @@ netdev_vport_destruct(struct netdev *netdev_) { struct netdev_vport *netdev = netdev_vport_cast(netdev_); - route_table_unregister(); free(netdev->peer); ovs_mutex_destroy(&netdev->mutex); } diff --git a/lib/route-table-bsd.c b/lib/route-table-bsd.c index 979393168..b28ab33b8 100644 --- a/lib/route-table-bsd.c +++ b/lib/route-table-bsd.c @@ -33,7 +33,6 @@ #include "util.h" static int pid; -static unsigned int register_count = 0; bool ovs_router_lookup(ovs_be32 ip, char name[], ovs_be32 *gw) @@ -116,20 +115,9 @@ route_table_get_change_seq(void) } void -route_table_register(void) +route_table_init(void) { - if (!register_count) - { - pid = getpid(); - } - - register_count++; -} - -void -route_table_unregister(void) -{ - register_count--; + pid = getpid(); } void diff --git a/lib/route-table-stub.c b/lib/route-table-stub.c index f91c6c76d..afbd79d5d 100644 --- a/lib/route-table-stub.c +++ b/lib/route-table-stub.c @@ -38,12 +38,7 @@ route_table_get_change_seq(void) } void -route_table_register(void) -{ -} - -void -route_table_unregister(void) +route_table_init(void) { } diff --git a/lib/route-table.c b/lib/route-table.c index 63a9bd363..a1bc887c3 100644 --- a/lib/route-table.c +++ b/lib/route-table.c @@ -61,7 +61,6 @@ static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); * 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; @@ -76,7 +75,6 @@ static void route_table_change(const struct route_table_msg *, void *); 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 @@ -88,49 +86,24 @@ route_table_get_change_seq(void) /* 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); } @@ -300,12 +273,6 @@ name_table_init(void) 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, diff --git a/lib/route-table.h b/lib/route-table.h index 709dfb04f..5dac29e5f 100644 --- a/lib/route-table.h +++ b/lib/route-table.h @@ -26,8 +26,7 @@ #include "openvswitch/types.h" uint64_t route_table_get_change_seq(void); -void route_table_register(void); -void route_table_unregister(void); +void route_table_init(void); void route_table_run(void); void route_table_wait(void); diff --git a/ofproto/ofproto-dpif-sflow.c b/ofproto/ofproto-dpif-sflow.c index 60b65a349..35667ca79 100644 --- a/ofproto/ofproto-dpif-sflow.c +++ b/ofproto/ofproto-dpif-sflow.c @@ -390,7 +390,6 @@ dpif_sflow_create(void) ds->next_tick = time_now() + 1; hmap_init(&ds->ports); ds->probability = 0; - route_table_register(); ovs_refcount_init(&ds->ref_cnt); return ds; @@ -425,7 +424,6 @@ dpif_sflow_unref(struct dpif_sflow *ds) OVS_EXCLUDED(mutex) 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); -- 2.20.1