X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Froute-table.c;h=63a09f2e8c3cf6e4c8c0429e0a44a4fe7284e231;hb=3c7126b933c3ccb263648c59ffd010e97f2fb634;hp=c8245dfd015cbe5c87aa8ad3c579f2b3061adbad;hpb=18a237816419e6f88ab0383b43d8060914d26a9a;p=sliver-openvswitch.git diff --git a/lib/route-table.c b/lib/route-table.c index c8245dfd0..63a09f2e8 100644 --- a/lib/route-table.c +++ b/lib/route-table.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011 Nicira Networks. + * Copyright (c) 2011, 2012 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -69,8 +69,8 @@ static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); static unsigned int register_count = 0; static struct nln *nln = NULL; static struct route_table_msg rtmsg; -static struct nln_notifier route_notifier; -static struct nln_notifier name_notifier; +static struct nln_notifier *route_notifier = NULL; +static struct nln_notifier *name_notifier = NULL; static bool route_table_valid = false; static bool name_table_valid = false; @@ -162,11 +162,14 @@ route_table_register(void) { if (!register_count) { assert(!nln); + assert(!route_notifier); nln = nln_create(NETLINK_ROUTE, RTNLGRP_IPV4_ROUTE, (nln_parse_func *) route_table_parse, &rtmsg); - nln_notifier_register(nln, &route_notifier, - (nln_notify_func *) route_table_change, NULL); + + route_notifier = + nln_notifier_create(nln, (nln_notify_func *) route_table_change, + NULL); hmap_init(&route_map); route_table_reset(); @@ -185,6 +188,8 @@ route_table_unregister(void) register_count--; if (!register_count) { + nln_notifier_destroy(route_notifier); + route_notifier = NULL; nln_destroy(nln); nln = NULL; @@ -241,6 +246,7 @@ route_table_reset(void) rtmsg->rtgen_family = AF_INET; nl_dump_start(&dump, rtnl_sock, &request); + ofpbuf_uninit(&request); while (nl_dump_next(&dump, &reply)) { struct route_table_msg msg; @@ -396,14 +402,15 @@ static void name_table_init(void) { hmap_init(&name_map); - rtnetlink_link_notifier_register(&name_notifier, name_table_change, NULL); + name_notifier = rtnetlink_link_notifier_create(name_table_change, NULL); name_table_valid = false; } static void name_table_uninit(void) { - rtnetlink_link_notifier_unregister(&name_notifier); + rtnetlink_link_notifier_destroy(name_notifier); + name_notifier = NULL; name_map_clear(); hmap_destroy(&name_map); } @@ -431,6 +438,8 @@ name_table_reset(void) rtmsg->rtgen_family = AF_INET; nl_dump_start(&dump, rtnl_sock, &request); + ofpbuf_uninit(&request); + while (nl_dump_next(&dump, &reply)) { struct rtnetlink_link_change change;