tree 2ade0de7288c4dd3fc68232708346881fd1a59fa
parent 9da9a61e2f8afb61aa31c17fb810169290bf96ee
author Udaya Shankara KS <shankara.k.s.u@gmail.com> 1455207149 +0530
committer Paul Jakma <paul@quagga.net> 1469015912 +0100

zebra: Enable fpm module to connect to remote fpm server

FPM aims to provide cross platform mechanism to support the scenario
where the router has forwarding path distinct fromt the kernel.Commonly
Hardware based fast path.Hence it is non-configurable paramter.This
limits us to use funcationality to update FIB information to remote
hosts, like SDN controller.

This implementation provides the CLI to configure remote hosts and port
information of remote fpm controller.Otherwise default fpm server will
be localhost and default fpm port will be well know port 2620.

* zebra_fpm.c: added fpm_server paramter to zfpm_global_t handler.
    Implemented CLI for configuring the fpm server and no fpm
    command to revert back to default configuration.

* zserv.c: Install zebra node to write fpm configuration info
   on console/config file.

Further documentation supplied:
-------------------------------

               ZEBRA : CLI CONFIGURATION FOR FPM MODULE
         ========================================================

1. INTRODUCTION
================================
   1.1 scope

     This memo discusses the configuration option for zebra to update
     FIB information to local and remote modules.
     This will also helps to address the issue associated with CORD project.
     https://jira.onosproject.org/browse/CORD-411

2. REFERENCE
================================
  Quagga version 99.24+ ( main branch committed on 29-sep-2015)

3. PROBLEM DESCRIPTION
================================

    Once FPM is enabled, Quagga periodically tries to initiate fpm
connection to localhost:2620.  These values are non configurable in
existing implementation.  There is no CLI available to configure
"host:port".  hence limits us to use it for hardware based fast path
modules only.

4. PROPOSED CHANGES
================================
Following changes are done to the quagga code
   a) Added new CLI to configure "host address : port".
      The CLI format
      <conf t>
           $ fpm connection ip <ipv4 address> port <tcp port num>

      and no fpm command to revert back to default
      <conf t>
           $ no fpm connection ip <ipv4 address> port <tcp port num>

   b) Allowed values are ipv4 address and tcp port range <1-65535>

   c) FPM initialization code has been enhanced to pick the "host
      address : port" values from zebra.conf.  if not found then
      default values as localhost:2620 will be used.  and updated the
      information on to config file on write config command

5. FILES MODIFIED
================================
  1) fpm/fpm.h :
     a) Added MACRO to represent network order loopback ip

  2) zebra/zebra_fpm.h :

     a) introduced fpm_server variable in zfpm_glob_t handler to hold
        the remote fpm server address

     b) Hooked 'fpm_remote_ip_cmd' and 'no_fpm_remote_ip_cmd' at CONFIG
        node to configure remote fpm detail and to revert back to
        default respectively

  3) zebra/zserv.c :
     a) Hooked 'config_write_fpm' callback function, at ZEBRA_NODE to
        display the fpm connection details on console on entering
        command

         $ show running_config
        and to write to configuration file on entering command
         $ write config

6. TESTING DETAILS
================================

   6.1. default behavior

          In default configuration FPM will attempt to connect to
          localhost:2620

   6.2. update fpm info
        a) Using CLI command user can configure fpm host:port details
           and can be able to write to config file(zebra.conf) using
           write config command.  this parameters has no
           dependency/impact on other parameters of config file

        b) show running-config/write config will display the fpm
           information if configured.  and will not display any
           information related to fpm for default configuration

        c) these configured information will be stored to config file.
           only on write config command.

   6.3 loading from config file
        a) zebra attempts to connect to fpm server if fpm parameter
           found in config file.else connects to default parameters.

        b) if fpm connection drops, fpm will periodically attempts to
           connect to remote server.

        c) if fpm connections already established. then newly
           configured fpm parameters will not disconnect the existing
           connection.  new connection to the different fpm server will
           happen only after existing connection closes by either of
           the end.
