<div dir="auto">Hi Mayank,<br>
<br>
Thanks for your response. Actually, I understand that FPM is only unidirectionnal.<br>
Doing the reverse FPM would consist in having a kind of FPM server on zebra side.<br>
<br>
Actually, by using that fpm server, i think zebra would be able to receive routing entries from other systems. In other words, the dataplane would be distributed, while the controlplane would be centralised.<div dir="auto"><br></div><div dir="auto">Philippe</div><div dir="auto"><br></div><div dir="auto"><br></div></div><br>
<br>
<br>
<br>
<br>
On Thu, Sep 20, 2018 at 3:16 PM, Mayank Tiwari <<a href="mailto:mike.tiwari@gmail.com" target="_blank" rel="noreferrer">mike.tiwari@gmail.com</a>> wrote:<br>
> Hi Philippe,<br>
><br>
> Thanks for your response. We have got inputs from Donald for it.<br>
><br>
> The FPM module is working successfully in FRR after I activated this<br>
> module while starting zebra. This FPM connection takes care of publishing<br>
> the routes from FRR to the router on the other side which has FPM connection<br>
> with FRR.<br>
><br>
> We have an additional requirement where the router on the other side of the<br>
> FPM connection has to publish the routes to FRR. We use the term "Reverse<br>
> FPM" for this scenario. Please let us know if there is any existing module<br>
> in FRR code which takes care of this scenario and if we need to load any<br>
> other module to enable it. If not, then is there any patch for FRR which can<br>
> take care of this scenario.<br>
><br>
><br>
> Thanks and Regards,<br>
><br>
> Mayank<br>
><br>
><br>
> On Thu, Sep 20, 2018 at 7:48 AM, Philippe Guibert<br>
> <<a href="mailto:philippe.guibert@6wind.com" target="_blank" rel="noreferrer">philippe.guibert@6wind.com</a>> wrote:<br>
>><br>
>> Hi Tiwari,<br>
>><br>
>> Sorry for late response.<br>
>> Did you solve your issue ? FPM is hosted as a module. Shared libraries<br>
>> are used to host that module.<br>
>> In FRR code, hook.h API is used for that.<br>
>> FPM is an optional module that can be compiled with --enable-fpm option.<br>
>> I think you should run zebra with option -M fpm.<br>
>><br>
>> Hoping it can help,<br>
>> Thanks,<br>
>> Philippe<br>
>><br>
>><br>
>><br>
>> On Tue, Aug 7, 2018 at 8:37 PM, Tiwari, Mayank (Contractor)<br>
>> <<a href="mailto:Mayank_Tiwari@comcast.com" target="_blank" rel="noreferrer">Mayank_Tiwari@comcast.com</a>> wrote:<br>
>> > Hi,<br>
>> ><br>
>> ><br>
>> ><br>
>> > We are using quagga in our solution for FPM connection and Reverse FPM<br>
>> > connection with ONOS. In order to support BFD feature I need to upgrade<br>
>> > from<br>
>> > quagga to FRR. For that I was patching the changes present in quagga to<br>
>> > FRR.<br>
>> > During that patching process the following patch is causing compilation<br>
>> > issue:<br>
>> ><br>
>> ><br>
>> ><br>
>> > diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c<br>
>> ><br>
>> > index 43d76a6..03c4a6b 100644<br>
>> ><br>
>> > --- a/zebra/zebra_vty.c<br>
>> ><br>
>> > +++ b/zebra/zebra_vty.c<br>
>> ><br>
>> > @@ -20,6 +20,7 @@<br>
>> ><br>
>> ><br>
>> ><br>
>> > #include <zebra.h><br>
>> ><br>
>> ><br>
>> ><br>
>> > +#include "zebra_fpm.h"<br>
>> ><br>
>> > #include "memory.h"<br>
>> ><br>
>> > #include "zebra_memory.h"<br>
>> ><br>
>> > #include "if.h"<br>
>> ><br>
>> ><br>
>> ><br>
>> > +<br>
>> ><br>
>> > +/* function to write the fpm config info */<br>
>> ><br>
>> > +static int config_write_fpm (struct vty *vty)<br>
>> ><br>
>> > +{<br>
>> ><br>
>> > + return fpm_remote_srv_write (vty);<br>
>> ><br>
>> > +}<br>
>> ><br>
>> > +<br>
>> ><br>
>> > +/* Zebra node */<br>
>> ><br>
>> > +static struct cmd_node zebra_node =<br>
>> ><br>
>> > +{<br>
>> ><br>
>> > + ZEBRA_NODE,<br>
>> ><br>
>> > + "",<br>
>> ><br>
>> > + 1<br>
>> ><br>
>> > +};<br>
>> ><br>
>> ><br>
>> ><br>
>> > /* Route VTY. */<br>
>> ><br>
>> > void zebra_vty_init(void)<br>
>> ><br>
>> > {<br>
>> ><br>
>> > /* Install configuration write function. */<br>
>> ><br>
>> > install_node(&table_node, config_write_table);<br>
>> ><br>
>> > install_node(&forwarding_node, config_write_forwarding);<br>
>> ><br>
>> > + install_node (&zebra_node, config_write_fpm);<br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> > install_element(VIEW_NODE, &show_ip_forwarding_cmd);<br>
>> ><br>
>> > install_element(CONFIG_NODE, &ip_forwarding_cmd);<br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> > diff --git a/zebra/zebra_fpm.h b/zebra/zebra_fpm.h<br>
>> ><br>
>> > new file mode 100644<br>
>> ><br>
>> > index 0000000..9291ffa<br>
>> ><br>
>> > --- /dev/null<br>
>> ><br>
>> > +++ b/zebra/zebra_fpm.h<br>
>> ><br>
>> > @@ -0,0 +1,35 @@<br>
>> ><br>
>> > +/*<br>
>> ><br>
>> > + * Router ID for zebra daemon.<br>
>> ><br>
>> > + *<br>
>> ><br>
>> > + * Copyright (C) 2004 James R. Leu<br>
>> ><br>
>> > + *<br>
>> ><br>
>> > + * This file is part of Quagga routing suite.<br>
>> ><br>
>> > + *<br>
>> ><br>
>> > + * Quagga is free software; you can redistribute it and/or modify it<br>
>> ><br>
>> > + * under the terms of the GNU General Public License as published by<br>
>> > the<br>
>> ><br>
>> > + * Free Software Foundation; either version 2, or (at your option) any<br>
>> ><br>
>> > + * later version.<br>
>> ><br>
>> > + *<br>
>> ><br>
>> > + * Quagga is distributed in the hope that it will be useful, but<br>
>> ><br>
>> > + * WITHOUT ANY WARRANTY; without even the implied warranty of<br>
>> ><br>
>> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU<br>
>> ><br>
>> > + * General Public License for more details.<br>
>> ><br>
>> > + *<br>
>> ><br>
>> > + * You should have received a copy of the GNU General Public License<br>
>> > along<br>
>> ><br>
>> > + * with this program; see the file COPYING; if not, write to the Free<br>
>> > Software<br>
>> ><br>
>> > + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301<br>
>> > USA<br>
>> ><br>
>> > + */<br>
>> ><br>
>> > +<br>
>> ><br>
>> > +#ifndef _ZEBRA_VTY_H_<br>
>> ><br>
>> > +#define _ZEBRA_VTY_H_<br>
>> ><br>
>> > +<br>
>> ><br>
>> > +#include <zebra.h><br>
>> ><br>
>> > +#include "memory.h"<br>
>> ><br>
>> > +#include "prefix.h"<br>
>> ><br>
>> > +#include "zclient.h"<br>
>> ><br>
>> > +#include "if.h"<br>
>> ><br>
>> > +<br>
>> ><br>
>> > +<br>
>> ><br>
>> > +static int fpm_remote_srv_write (struct vty *vty );<br>
>> ><br>
>> > +<br>
>> ><br>
>> > +#endif<br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> > The function 'fpm_remote_srv_write' is already defined in zebra_fpm.c<br>
>> > file<br>
>> > which I need to use zebra_vty.c file. I have created a header with name<br>
>> > zebra_fpm.h and declared that function there and later included this<br>
>> > header<br>
>> > in zebra_vty.c. The compilation of zebra_vty.c fails as it is not able<br>
>> > to<br>
>> > find 'fpm_remote_srv_write' function<br>
>> ><br>
>> ><br>
>> ><br>
>> > This is the compilation error:<br>
>> ><br>
>> ><br>
>> ><br>
>> > CCLD zebra/<a href="http://zebra_irdp.la" rel="noreferrer noreferrer" target="_blank">zebra_irdp.la</a><br>
>> ><br>
>> > CC zebra/zebra_fpm.lo<br>
>> ><br>
>> > CC zebra/zebra_fpm_netlink.lo<br>
>> ><br>
>> > …..<br>
>> ><br>
>> > …..<br>
>> ><br>
>> ><br>
>> ><br>
>> > CC zebra/zebra_vty.o<br>
>> ><br>
>> > In file included from zebra/zebra_vty.c:23:0:<br>
>> ><br>
>> > zebra/zebra_fpm.h:33:12: warning: 'fpm_remote_srv_write' used but never<br>
>> > defined<br>
>> ><br>
>> > static int fpm_remote_srv_write (struct vty *vty );<br>
>> ><br>
>> > ^<br>
>> ><br>
>> > CC zebra/zebra_vxlan.o<br>
>> ><br>
>> > CC zebra/zserv.o<br>
>> ><br>
>> > CC zebra/zebra_netns_id.o<br>
>> ><br>
>> > CC zebra/zebra_netns_notify.o<br>
>> ><br>
>> > CC zebra/table_manager.o<br>
>> ><br>
>> > CC zebra/zapi_msg.o<br>
>> ><br>
>> > CCLD zebra/zebra<br>
>> ><br>
>> > zebra/zebra_vty.o: In function `config_write_fpm':<br>
>> ><br>
>> > /frr/zebra/zebra_vty.c:3697: undefined reference to<br>
>> > `fpm_remote_srv_write'<br>
>> ><br>
>> > collect2: error: ld returned 1 exit status<br>
>> ><br>
>> > make[2]: *** [zebra/zebra] Error 1<br>
>> ><br>
>> > Makefile:3246: recipe for target 'zebra/zebra' failed<br>
>> ><br>
>> > make[2]: Leaving directory '/frr'<br>
>> ><br>
>> > Makefile:4421: recipe for target 'all-recursive' failed<br>
>> ><br>
>> > make[1]: Leaving directory '/frr'<br>
>> ><br>
>> > make[1]: *** [all-recursive] Error 1<br>
>> ><br>
>> > make: *** [all] Error 2<br>
>> ><br>
>> ><br>
>> ><br>
>> > I have observed that zebra_fpm.c is compiled as zebra_fpm.lo instead<br>
>> > of<br>
>> > zebra_fpm.o. I am not sure if that can cause this issue. Please suggest<br>
>> > what<br>
>> > I am missing here and what approach I need to take to fix this issue.<br>
>> ><br>
>> ><br>
>> ><br>
>> > Thanks and Regards,<br>
>> ><br>
>> > Mayank<br>
>> ><br>
>> ><br>
>> > _______________________________________________<br>
>> > dev mailing list<br>
>> > <a href="mailto:dev@lists.frrouting.org" target="_blank" rel="noreferrer">dev@lists.frrouting.org</a><br>
>> > <a href="https://lists.frrouting.org/listinfo/dev" rel="noreferrer noreferrer" target="_blank">https://lists.frrouting.org/listinfo/dev</a><br>
>> ><br>
>><br>
>> _______________________________________________<br>
>> dev mailing list<br>
>> <a href="mailto:dev@lists.frrouting.org" target="_blank" rel="noreferrer">dev@lists.frrouting.org</a><br>
>> <a href="https://lists.frrouting.org/listinfo/dev" rel="noreferrer noreferrer" target="_blank">https://lists.frrouting.org/listinfo/dev</a><br>
><br>
><br>
<br>