<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Hi,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">  We are using quagga in our solution for FPM connection and Reverse FPM connection with ONOS. In order to support BFD feature I need to upgrade from quagga to FRR. For that I was patching the changes present in quagga to FRR. During that
 patching process the following patch is causing compilation issue:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c<o:p></o:p></p>
<p class="MsoNormal">index 43d76a6..03c4a6b 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/zebra/zebra_vty.c<o:p></o:p></p>
<p class="MsoNormal">+++ b/zebra/zebra_vty.c<o:p></o:p></p>
<p class="MsoNormal">@@ -20,6 +20,7 @@<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#include <zebra.h><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="background:silver;mso-highlight:silver">+#include "zebra_fpm.h"</span><o:p></o:p></p>
<p class="MsoNormal">#include "memory.h"<o:p></o:p></p>
<p class="MsoNormal">#include "zebra_memory.h"<o:p></o:p></p>
<p class="MsoNormal">#include "if.h"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="background:silver;mso-highlight:silver">+<o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:silver;mso-highlight:silver">+/* function to write the fpm config info */<o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:silver;mso-highlight:silver">+static int config_write_fpm (struct vty *vty)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:silver;mso-highlight:silver">+{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:silver;mso-highlight:silver">+  return fpm_remote_srv_write (vty);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:silver;mso-highlight:silver">+}</span><o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+/* Zebra node  */<o:p></o:p></p>
<p class="MsoNormal">+static struct cmd_node zebra_node =<o:p></o:p></p>
<p class="MsoNormal">+{<o:p></o:p></p>
<p class="MsoNormal">+  ZEBRA_NODE,<o:p></o:p></p>
<p class="MsoNormal">+  "",<o:p></o:p></p>
<p class="MsoNormal">+  1<o:p></o:p></p>
<p class="MsoNormal">+};<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">/* Route VTY.  */<o:p></o:p></p>
<p class="MsoNormal">void zebra_vty_init(void)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">        /* Install configuration write function. */<o:p></o:p></p>
<p class="MsoNormal">        install_node(&table_node, config_write_table);<o:p></o:p></p>
<p class="MsoNormal">        install_node(&forwarding_node, config_write_forwarding);<o:p></o:p></p>
<p class="MsoNormal"><span style="background:silver;mso-highlight:silver">+    install_node (&zebra_node, config_write_fpm);</span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        install_element(VIEW_NODE, &show_ip_forwarding_cmd);<o:p></o:p></p>
<p class="MsoNormal">        install_element(CONFIG_NODE, &ip_forwarding_cmd);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">diff --git a/zebra/zebra_fpm.h b/zebra/zebra_fpm.h<o:p></o:p></p>
<p class="MsoNormal">new file mode 100644<o:p></o:p></p>
<p class="MsoNormal">index 0000000..9291ffa<o:p></o:p></p>
<p class="MsoNormal">--- /dev/null<o:p></o:p></p>
<p class="MsoNormal">+++ b/zebra/zebra_fpm.h<o:p></o:p></p>
<p class="MsoNormal">@@ -0,0 +1,35 @@<o:p></o:p></p>
<p class="MsoNormal">+/*<o:p></o:p></p>
<p class="MsoNormal">+ * Router ID for zebra daemon.<o:p></o:p></p>
<p class="MsoNormal">+ *<o:p></o:p></p>
<p class="MsoNormal">+ * Copyright (C) 2004 James R. Leu<o:p></o:p></p>
<p class="MsoNormal">+ *<o:p></o:p></p>
<p class="MsoNormal">+ * This file is part of Quagga routing suite.<o:p></o:p></p>
<p class="MsoNormal">+ *<o:p></o:p></p>
<p class="MsoNormal">+ * Quagga is free software; you can redistribute it and/or modify it<o:p></o:p></p>
<p class="MsoNormal">+ * under the terms of the GNU General Public License as published by the<o:p></o:p></p>
<p class="MsoNormal">+ * Free Software Foundation; either version 2, or (at your option) any<o:p></o:p></p>
<p class="MsoNormal">+ * later version.<o:p></o:p></p>
<p class="MsoNormal">+ *<o:p></o:p></p>
<p class="MsoNormal">+ * Quagga is distributed in the hope that it will be useful, but<o:p></o:p></p>
<p class="MsoNormal">+ * WITHOUT ANY WARRANTY; without even the implied warranty of<o:p></o:p></p>
<p class="MsoNormal">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<o:p></o:p></p>
<p class="MsoNormal">+ * General Public License for more details.<o:p></o:p></p>
<p class="MsoNormal">+ *<o:p></o:p></p>
<p class="MsoNormal">+ * You should have received a copy of the GNU General Public License along<o:p></o:p></p>
<p class="MsoNormal">+ * with this program; see the file COPYING; if not, write to the Free Software<o:p></o:p></p>
<p class="MsoNormal">+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA<o:p></o:p></p>
<p class="MsoNormal">+ */<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+#ifndef _ZEBRA_VTY_H_<o:p></o:p></p>
<p class="MsoNormal">+#define _ZEBRA_VTY_H_<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+#include <zebra.h><o:p></o:p></p>
<p class="MsoNormal">+#include "memory.h"<o:p></o:p></p>
<p class="MsoNormal">+#include "prefix.h"<o:p></o:p></p>
<p class="MsoNormal">+#include "zclient.h"<o:p></o:p></p>
<p class="MsoNormal">+#include "if.h"<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal"><span style="background:silver;mso-highlight:silver">+static int fpm_remote_srv_write (struct vty *vty );</span><o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+#endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><br>
The function 'fpm_remote_srv_write'  is already defined in zebra_fpm.c file which I need to use zebra_vty.c file. I have created a header with name zebra_fpm.h and declared that function there and later included this header in zebra_vty.c. The compilation of
 zebra_vty.c fails as it is not able to find  'fpm_remote_srv_write' function<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">This is the compilation error:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">  CCLD     zebra/zebra_irdp.la<o:p></o:p></p>
<p class="MsoNormal">  <span style="background:silver;mso-highlight:silver">CC       zebra/zebra_fpm.lo</span><o:p></o:p></p>
<p class="MsoNormal">  CC       zebra/zebra_fpm_netlink.lo<o:p></o:p></p>
<p class="MsoNormal">…..<o:p></o:p></p>
<p class="MsoNormal">…..<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">  <span style="background:silver;mso-highlight:silver">CC       zebra/zebra_vty.o<o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:silver;mso-highlight:silver">In file included from zebra/zebra_vty.c:23:0:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:silver;mso-highlight:silver">zebra/zebra_fpm.h:33:12: warning: 'fpm_remote_srv_write' used but never defined<o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:silver;mso-highlight:silver">static int fpm_remote_srv_write (struct vty *vty );</span><o:p></o:p></p>
<p class="MsoNormal">            ^<o:p></o:p></p>
<p class="MsoNormal">  CC       zebra/zebra_vxlan.o<o:p></o:p></p>
<p class="MsoNormal">  CC       zebra/zserv.o<o:p></o:p></p>
<p class="MsoNormal">  CC       zebra/zebra_netns_id.o<o:p></o:p></p>
<p class="MsoNormal">  CC       zebra/zebra_netns_notify.o<o:p></o:p></p>
<p class="MsoNormal">  CC       zebra/table_manager.o<o:p></o:p></p>
<p class="MsoNormal">  CC       zebra/zapi_msg.o<o:p></o:p></p>
<p class="MsoNormal">  CCLD     zebra/zebra<o:p></o:p></p>
<p class="MsoNormal"><span style="background:silver;mso-highlight:silver">zebra/zebra_vty.o: In function `config_write_fpm':<o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:silver;mso-highlight:silver">/frr/zebra/zebra_vty.c:3697: undefined reference to `fpm_remote_srv_write'</span><o:p></o:p></p>
<p class="MsoNormal">collect2: error: ld returned 1 exit status<o:p></o:p></p>
<p class="MsoNormal">make[2]: *** [zebra/zebra] Error 1<o:p></o:p></p>
<p class="MsoNormal">Makefile:3246: recipe for target 'zebra/zebra' failed<o:p></o:p></p>
<p class="MsoNormal">make[2]: Leaving directory '/frr'<o:p></o:p></p>
<p class="MsoNormal">Makefile:4421: recipe for target 'all-recursive' failed<o:p></o:p></p>
<p class="MsoNormal">make[1]: Leaving directory '/frr'<o:p></o:p></p>
<p class="MsoNormal">make[1]: *** [all-recursive] Error 1<o:p></o:p></p>
<p class="MsoNormal">make: *** [all] Error 2<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">  I have observed that zebra_fpm.c is compiled as zebra_fpm.lo instead of zebra_fpm.o. I am not sure if that can cause this issue. Please suggest what I am missing here and what approach I need to take to fix this issue.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks and Regards,<o:p></o:p></p>
<p class="MsoNormal">Mayank<o:p></o:p></p>
</div>
</body>
</html>