[ovs-dev] [PATCH 2/5] ovs-router: non-Linux support

Pravin Shelar pshelar at nicira.com
Mon Dec 8 18:38:21 UTC 2014


On Wed, Dec 3, 2014 at 2:31 AM, YAMAMOTO Takashi <yamamoto at valinux.co.jp> wrote:
> Refactor ovs-router so that it can work with non-Linux platforms
> at least in some extent, using the existing route-table code as
> a fallback.  Known restriction: for such platforms, "ovs/router/show"
> command does not show "Cached" kernel routes.
>
> Signed-off-by: YAMAMOTO Takashi <yamamoto at valinux.co.jp>

LGTM
Acked-by: Pravin B Shelar <pshelar at nicira.com>

> ---
>  README-native-tunneling.md |  2 --
>  lib/automake.mk            |  3 +--
>  lib/ovs-router-linux.h     | 40 ----------------------------------------
>  lib/ovs-router.c           |  4 ++--
>  lib/ovs-router.h           |  3 +++
>  lib/route-table-bsd.c      |  8 ++------
>  lib/route-table-stub.c     | 11 ++++-------
>  lib/route-table.c          | 10 +++++++++-
>  lib/route-table.h          |  1 +
>  tests/tunnel-push-pop.at   |  4 ----
>  10 files changed, 22 insertions(+), 64 deletions(-)
>  delete mode 100644 lib/ovs-router-linux.h
>
> diff --git a/README-native-tunneling.md b/README-native-tunneling.md
> index 7666dcc..0ffd82b 100644
> --- a/README-native-tunneling.md
> +++ b/README-native-tunneling.md
> @@ -51,8 +51,6 @@ There are following commands that shows internal tables:
>  Tunneling related commands:
>  ===========================
>  Tunnel routing table:
> -    These commands are only available on Linux platform.
> -
>      To Add route:
>         ovs-appctl ovs/route/add <IP address>/<prefix length> <output-bridge-name> <gw>
>      To see all routes configured:
> diff --git a/lib/automake.mk b/lib/automake.mk
> index 0b2d823..a98f7cc 100644
> --- a/lib/automake.mk
> +++ b/lib/automake.mk
> @@ -163,6 +163,7 @@ lib_libopenvswitch_la_SOURCES = \
>         lib/ovs-rcu.c \
>         lib/ovs-rcu.h \
>         lib/ovs-router.h \
> +       lib/ovs-router.c \
>         lib/ovs-thread.c \
>         lib/ovs-thread.h \
>         lib/ovsdb-data.c \
> @@ -331,8 +332,6 @@ lib_libopenvswitch_la_SOURCES += \
>         lib/netlink-socket.h \
>         lib/ovs-numa.c \
>         lib/ovs-numa.h \
> -       lib/ovs-router.c \
> -       lib/ovs-router-linux.h \
>         lib/rtnetlink-link.c \
>         lib/rtnetlink-link.h \
>         lib/route-table.c \
> diff --git a/lib/ovs-router-linux.h b/lib/ovs-router-linux.h
> deleted file mode 100644
> index f60f403..0000000
> --- a/lib/ovs-router-linux.h
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -/*
> - * Copyright (c) 2014 Nicira, Inc.
> - *
> - * Licensed under the Apache License, Version 2.0 (the "License");
> - * you may not use this file except in compliance with the License.
> - * You may obtain a copy of the License at:
> - *
> - *     http://www.apache.org/licenses/LICENSE-2.0
> - *
> - * Unless required by applicable law or agreed to in writing, software
> - * distributed under the License is distributed on an "AS IS" BASIS,
> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> - * See the License for the specific language governing permissions and
> - * limitations under the License.
> - */
> -
> -#ifndef OVS_TNL_ROUTER_LINUX_H
> -#define OVS_TNL_ROUTER_LINUX_H 1
> -
> -#include <stddef.h>
> -#include <stdint.h>
> -#include <net/if.h>
> -
> -#include "packets.h"
> -#include "timeval.h"
> -#include "unixctl.h"
> -#include "util.h"
> -
> -#ifdef  __cplusplus
> -extern "C" {
> -#endif
> -
> -void ovs_router_insert(ovs_be32 ip_dst, uint8_t plen, const char output_bridge[],
> -                       ovs_be32 gw);
> -void ovs_router_flush(void);
> -#ifdef  __cplusplus
> -}
> -#endif
> -
> -#endif
> diff --git a/lib/ovs-router.c b/lib/ovs-router.c
> index e4f8a08..b095f68 100644
> --- a/lib/ovs-router.c
> +++ b/lib/ovs-router.c
> @@ -35,8 +35,8 @@
>  #include "packets.h"
>  #include "seq.h"
>  #include "ovs-router.h"
> -#include "ovs-router-linux.h"
>  #include "ovs-thread.h"
> +#include "route-table.h"
>  #include "unixctl.h"
>  #include "util.h"
>
> @@ -76,7 +76,7 @@ ovs_router_lookup(ovs_be32 ip_dst, char output_bridge[], ovs_be32 *gw)
>          *gw = p->gw;
>          return true;
>      }
> -    return false;
> +    return route_table_fallback_lookup(ip_dst, output_bridge, gw);
>  }
>
>  static void
> diff --git a/lib/ovs-router.h b/lib/ovs-router.h
> index b0042cc..cc0ebc2 100644
> --- a/lib/ovs-router.h
> +++ b/lib/ovs-router.h
> @@ -25,6 +25,9 @@ extern "C" {
>
>  bool ovs_router_lookup(ovs_be32 ip_dst, char out_dev[], ovs_be32 *gw);
>  void ovs_router_init(void);
> +void ovs_router_insert(ovs_be32 ip_dst, uint8_t plen,
> +                       const char output_bridge[], ovs_be32 gw);
> +void ovs_router_flush(void);
>  #ifdef  __cplusplus
>  }
>  #endif
> diff --git a/lib/route-table-bsd.c b/lib/route-table-bsd.c
> index 6d5fe5c..09f9894 100644
> --- a/lib/route-table-bsd.c
> +++ b/lib/route-table-bsd.c
> @@ -33,7 +33,7 @@
>  #include "util.h"
>
>  bool
> -ovs_router_lookup(ovs_be32 ip, char name[], ovs_be32 *gw)
> +route_table_fallback_lookup(ovs_be32 ip, char name[], ovs_be32 *gw)
>  {
>      struct {
>          struct rt_msghdr rtm;
> @@ -116,6 +116,7 @@ route_table_get_change_seq(void)
>  void
>  route_table_init(void)
>  {
> +    ovs_router_init();
>  }
>
>  void
> @@ -127,8 +128,3 @@ void
>  route_table_wait(void)
>  {
>  }
> -
> -void
> -ovs_router_init(void)
> -{
> -}
> diff --git a/lib/route-table-stub.c b/lib/route-table-stub.c
> index afbd79d..70b1a3d 100644
> --- a/lib/route-table-stub.c
> +++ b/lib/route-table-stub.c
> @@ -19,18 +19,14 @@
>  #include "route-table.h"
>
>  bool
> -ovs_router_lookup(ovs_be32 ip_dst OVS_UNUSED, char output_bridge[] OVS_UNUSED,
> -                  ovs_be32 *gw)
> +route_table_fallback_lookup(ovs_be32 ip_dst OVS_UNUSED,
> +                            char output_bridge[] OVS_UNUSED,
> +                            ovs_be32 *gw)
>  {
>      *gw = 0;
>      return false;
>  }
>
> -void
> -ovs_router_init(void)
> -{
> -}
> -
>  uint64_t
>  route_table_get_change_seq(void)
>  {
> @@ -40,6 +36,7 @@ route_table_get_change_seq(void)
>  void
>  route_table_init(void)
>  {
> +    ovs_router_init();
>  }
>
>  void
> diff --git a/lib/route-table.c b/lib/route-table.c
> index a1bc887..2c3f64c 100644
> --- a/lib/route-table.c
> +++ b/lib/route-table.c
> @@ -30,7 +30,6 @@
>  #include "netlink-socket.h"
>  #include "ofpbuf.h"
>  #include "ovs-router.h"
> -#include "ovs-router-linux.h"
>  #include "rtnetlink-link.h"
>  #include "vlog.h"
>
> @@ -264,6 +263,15 @@ route_map_clear(void)
>      ovs_router_flush();
>  }
>
> +bool
> +route_table_fallback_lookup(ovs_be32 ip_dst OVS_UNUSED,
> +                            char output_bridge[] OVS_UNUSED,
> +                            ovs_be32 *gw)
> +{
> +    *gw = 0;
> +    return false;
> +}
> +
>
>  /* name_table . */
>
> diff --git a/lib/route-table.h b/lib/route-table.h
> index 5dac29e..54d77f4 100644
> --- a/lib/route-table.h
> +++ b/lib/route-table.h
> @@ -29,5 +29,6 @@ uint64_t route_table_get_change_seq(void);
>  void route_table_init(void);
>  void route_table_run(void);
>  void route_table_wait(void);
> +bool route_table_fallback_lookup(ovs_be32, char [], ovs_be32 *);
>
>  #endif /* route-table.h */
> diff --git a/tests/tunnel-push-pop.at b/tests/tunnel-push-pop.at
> index f9ea4c0..f1fac7f 100644
> --- a/tests/tunnel-push-pop.at
> +++ b/tests/tunnel-push-pop.at
> @@ -2,10 +2,6 @@ AT_BANNER([tunnel_push_pop])
>
>  AT_SETUP([tunnel_push_pop - action])
>
> -dnl ovs router is commands are only supported on Linux for now.
> -AT_SKIP_IF([test "$IS_WIN32" = "yes"])
> -AT_SKIP_IF([test "$IS_BSD" = "yes"])
> -
>  OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1])
>  AT_CHECK([ovs-vsctl add-br int-br -- set bridge int-br datapath_type=dummy], [0])
>  AT_CHECK([ovs-vsctl add-port int-br t2 -- set Interface t2 type=vxlan \
> --
> 1.9.4
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev



More information about the dev mailing list