Acked-by: Jarno Rajahalme <jrajaha...@nicira.com> 

With a small nit below,

  Jarno

On Nov 19, 2014, at 10:12 PM, Pravin B Shelar <pshe...@nicira.com> wrote:

> ovs-dpctl crashed due to uninitialized router classifier. To
> fix this issue move ovs router initialization to route table
> module.
> 
> Reported-by: Madhu Challa <cha...@noironetworks.com>
> Signed-off-by: Pravin B Shelar <pshe...@nicira.com>
> ---
> v1-v2:
> Initialize route-table from dpif init.
> ---
> lib/dpif.c             |    1 +
> lib/netdev-vport.c     |    2 --
> lib/ovs-router.c       |    2 +-
> lib/ovs-router.h       |    2 +-
> lib/route-table.c      |    1 +
> ofproto/ofproto-dpif.c |    1 -
> 6 files changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/lib/dpif.c b/lib/dpif.c
> index d179d8a..844f869 100644
> --- a/lib/dpif.c
> +++ b/lib/dpif.c
> @@ -118,6 +118,7 @@ dp_initialize(void)
>         ovsthread_once_done(&once);
>         tnl_port_map_init();
>         tnl_arp_cache_init();
> +        route_table_register();

I did not check the details here, but I recall that all initialization should 
be done before ovsthread_once_done() is called, otherwise parallel threads may 
go on before the initialization is finished. So you should probably move 
ovsthread_once_done() call to be done after the route_table_register() call.

>     }
> }
> 
> diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c
> index 167212e..3825a09 100644
> --- a/lib/netdev-vport.c
> +++ b/lib/netdev-vport.c
> @@ -254,8 +254,6 @@ netdev_vport_construct(struct netdev *netdev_)
>         dev->tnl_cfg.dst_port = htons(LISP_DST_PORT);
>     }
> 
> -    route_table_register();
> -
>     return 0;
> }
> 
> diff --git a/lib/ovs-router.c b/lib/ovs-router.c
> index 6b5ba00..e4f8a08 100644
> --- a/lib/ovs-router.c
> +++ b/lib/ovs-router.c
> @@ -281,7 +281,7 @@ ovs_router_flush(void)
> 
> /* May not be called more than once. */
> void
> -ovs_router_unixctl_register(void)
> +ovs_router_init(void)
> {
>     classifier_init(&cls, NULL);
>     unixctl_command_register("ovs/route/add", "ipv4_addr/prefix_len 
> out_br_name gw", 2, 3,
> diff --git a/lib/ovs-router.h b/lib/ovs-router.h
> index 92d15c6..b0042cc 100644
> --- a/lib/ovs-router.h
> +++ b/lib/ovs-router.h
> @@ -24,7 +24,7 @@ extern "C" {
> #endif
> 
> bool ovs_router_lookup(ovs_be32 ip_dst, char out_dev[], ovs_be32 *gw);
> -void ovs_router_unixctl_register(void);
> +void ovs_router_init(void);
> #ifdef  __cplusplus
> }
> #endif
> diff --git a/lib/route-table.c b/lib/route-table.c
> index 6261954..63a9bd3 100644
> --- a/lib/route-table.c
> +++ b/lib/route-table.c
> @@ -96,6 +96,7 @@ route_table_register(void)
>         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);
> 
> diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
> index 3f8768d..c8e11c2 100644
> --- a/ofproto/ofproto-dpif.c
> +++ b/ofproto/ofproto-dpif.c
> @@ -1253,7 +1253,6 @@ construct(struct ofproto *ofproto_)
>     guarded_list_init(&ofproto->pins);
> 
>     ofproto_unixctl_init();
> -    ovs_router_unixctl_register();
> 
>     hmap_init(&ofproto->vlandev_map);
>     hmap_init(&ofproto->realdev_vid_map);
> -- 
> 1.7.1
> 
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to