<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Bug Reports: RTCS NAT server in MQX 4.1.1 in MQX Software Solutions</title>
    <link>https://community.nxp.com/t5/MQX-Software-Solutions/Bug-Reports-RTCS-NAT-server-in-MQX-4-1-1/m-p/355135#M11570</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I have been working on getting the NAT server going on 4.1.1. I have had it going in 4.0.2, so I wasn't expecting any drama, but I have come across a few issues:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1)&amp;nbsp; In alggen.c the "#if RTCSCFG_ENABLE_NAT" is before rtcs.h is included (which includes user_config.h) so defining RTCSCFG_ENABLE_NAT in the user config doesn't cause this file to be compiled.&lt;/P&gt;&lt;P&gt;Fix:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14164368601485726" jivemacro_uid="_14164368601485726"&gt;
&lt;P&gt;@@ -26,5 +26,8 @@&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END************************************************************************/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;+#include &amp;lt;rtcs.h&amp;gt;&lt;/P&gt;
&lt;P&gt;+#include &amp;lt;rtcs_prv.h&amp;gt;&lt;/P&gt;
&lt;P&gt;+&lt;/P&gt;
&lt;P&gt;#if RTCSCFG_ENABLE_NAT&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;@@ -29,6 +32,4 @@&lt;/P&gt;
&lt;P&gt;#if RTCSCFG_ENABLE_NAT&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;-#include &amp;lt;rtcs.h&amp;gt;&lt;/P&gt;
&lt;P&gt;-#include &amp;lt;rtcs_prv.h&amp;gt;&lt;/P&gt;
&lt;P&gt;#include &amp;lt;fio.h&amp;gt;&lt;/P&gt;
&lt;P&gt;#include &amp;lt;tftp.h&amp;gt;&lt;/P&gt;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The same problem is present in natftp.c, Fix:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14164369394463600" jivemacro_uid="_14164369394463600"&gt;
&lt;P&gt;@@ -25,5 +25,8 @@&lt;/P&gt;
&lt;P&gt; *&lt;/P&gt;
&lt;P&gt; *&lt;/P&gt;
&lt;P&gt; *END************************************************************************/&lt;/P&gt;
&lt;P&gt;+#include &amp;lt;rtcs.h&amp;gt;&lt;/P&gt;
&lt;P&gt;+#include &amp;lt;rtcs_prv.h&amp;gt;&lt;/P&gt;
&lt;P&gt;+&lt;/P&gt;
&lt;P&gt; #if RTCSCFG_ENABLE_NAT&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;@@ -28,7 +31,5 @@&lt;/P&gt;
&lt;P&gt; #if RTCSCFG_ENABLE_NAT&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;-#include &amp;lt;rtcs.h&amp;gt;&lt;/P&gt;
&lt;P&gt;-#include &amp;lt;rtcs_prv.h&amp;gt;&lt;/P&gt;
&lt;P&gt; #include &amp;lt;fio.h&amp;gt;&lt;/P&gt;
&lt;P&gt; #include &amp;lt;tftp.h&amp;gt;&lt;/P&gt;
&lt;P&gt; #include &amp;lt;ctype.h&amp;gt;&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;and in nattftp.c, fix:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14164369770533486" jivemacro_uid="_14164369770533486"&gt;
&lt;P&gt;@@ -25,6 +25,8 @@&lt;/P&gt;
&lt;P&gt; *&lt;/P&gt;
&lt;P&gt; *&lt;/P&gt;
&lt;P&gt; *END************************************************************************/&lt;/P&gt;
&lt;P&gt;+#include &amp;lt;rtcs.h&amp;gt;&lt;/P&gt;
&lt;P&gt;+#include &amp;lt;rtcs_prv.h&amp;gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt; #if RTCSCFG_ENABLE_NAT&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;@@ -28,5 +30,4 @@&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt; #if RTCSCFG_ENABLE_NAT&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;-#include &amp;lt;rtcs.h&amp;gt;&lt;/P&gt;
&lt;P&gt; #include &amp;lt;fio.h&amp;gt;&lt;/P&gt;
&lt;P&gt;@@ -32,4 +33,3 @@&lt;/P&gt;
&lt;P&gt; #include &amp;lt;fio.h&amp;gt;&lt;/P&gt;
&lt;P&gt;-#include &amp;lt;rtcs_prv.h&amp;gt;&lt;/P&gt;
&lt;P&gt; #include &amp;lt;tftp.h&amp;gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;@@ -34,6 +34,5 @@&lt;/P&gt;
&lt;P&gt; #include &amp;lt;tftp.h&amp;gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;-&lt;/P&gt;
&lt;P&gt; #include "nat.h"&lt;/P&gt;
&lt;P&gt; #include "nat_prv.h"&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;2) In nat_prv.h the function pointer typedefs were still using "pointer" type (which is no longer present in MQX 4.1.1)&lt;/P&gt;&lt;P&gt;Fix:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14164368601143572" jivemacro_uid="_14164368601143572"&gt;
&lt;P&gt;@@ -427,7 +427,7 @@&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;typedef void (_CODE_PTR_ NAT_ALG_FREE_FUNC)&lt;/P&gt;
&lt;P&gt;(&lt;/P&gt;
&lt;P&gt;-&amp;nbsp;&amp;nbsp; pointer&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; void *&lt;/P&gt;
&lt;P&gt;);&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;extern NAT_ALG_FREE_FUNC NAT_alg_free_func_table[];&lt;/P&gt;
&lt;P&gt;@@ -444,7 +444,7 @@&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;extern uint32_t NAT_ALG_tftp&lt;/P&gt;
&lt;P&gt;(&lt;/P&gt;
&lt;P&gt;-&amp;nbsp;&amp;nbsp; pointer&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; void *&lt;/P&gt;
&lt;P&gt;);&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;extern uint32_t NAT_ALG_tftp_apply&lt;/P&gt;
&lt;P&gt;@@ -462,7 +462,7 @@&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;extern uint32_t NAT_ALG_ftp&lt;/P&gt;
&lt;P&gt;(&lt;/P&gt;
&lt;P&gt;-&amp;nbsp;&amp;nbsp; pointer&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; void *&lt;/P&gt;
&lt;P&gt;);&lt;/P&gt;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;3) In nat_apply.c I believe a bug has been introduced with the type changes.&lt;/P&gt;&lt;P&gt;Line 510 reads:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro _jivemacro_uid_14164368600895116 jive_macro_code" jivemacro_uid="_14164368600895116"&gt;
&lt;P&gt;unsigned char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *embedded_checksum_ptr = NULL, port_ptr, replacement_ptr;&lt;/P&gt;

&lt;/PRE&gt;&lt;P&gt;so, embedded_checksum_ptr is a pointer, but the other two are not.&lt;/P&gt;&lt;P&gt;Fix:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14164368600738244" jivemacro_uid="_14164368600738244"&gt;
&lt;P&gt;@@ -507,7 +507,9 @@&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NAT_CFG_STRUCT_PTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nat_cfg_ptr = RTCS_getcfg(NAT);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IP_HEADER_PTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; embedded_ip_header_ptr;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TRANSPORT_UNION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; transport, embedded_transport;&lt;/P&gt;
&lt;P&gt;-&amp;nbsp;&amp;nbsp; unsigned char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *embedded_checksum_ptr = NULL, port_ptr, replacement_ptr;&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; unsigned char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *embedded_checksum_ptr = NULL;&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; unsigned char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *port_ptr;&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; unsigned char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *replacement_ptr;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _ip_address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new_ip, old_ip;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; icmpicmp = FALSE;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; checksum, embedded_checksum, data_len, new_port, old_port;&lt;/P&gt;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;4) Probably not causing an issue, but in dnat.c the source and destination port variables are not initialised, leading to a warning.&lt;/P&gt;&lt;P&gt;Fix:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="_jivemacro_uid_14164368600527764 jive_text_macro jive_macro_code" jivemacro_uid="_14164368600527764"&gt;
&lt;P&gt;@@ -57,7 +57,8 @@&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _ip_address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; source_ip = mqx_ntohl(ip_header_ptr-&amp;gt;SOURCE);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _ip_address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; target_ip = mqx_ntohl(ip_header_ptr-&amp;gt;DEST);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ip_protocol;&lt;/P&gt;
&lt;P&gt;-&amp;nbsp;&amp;nbsp; uint16_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; source_port, destination_port; /* source port and destination port */&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; uint16_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; source_port = 0;&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; uint16_t&amp;nbsp;&amp;nbsp; destination_port = 0; /* source port and destination port */&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; transport.PTR = TRANSPORT_PTR(ip_header_ptr);&lt;/P&gt;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;5) Similar niggle - in natdata.c I get a warning that key is not initialised - Fix was to initialise to zero.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;6) And again, in natevent.c I get a warning that tmp_nat_event_ptr is not initialised. Fix was to initialise to null.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;7) This one is a bit odd - there is a function call in sh_nat.c, in Shell_natinfo, to a function called status, but there isn't any function by that name.&lt;/P&gt;&lt;P&gt;I would guess, given the context, that we want to check the NAT server is up and running, but there doesn't seem to be an API to indicate this.&lt;/P&gt;&lt;P&gt;The closest I can come up with is to call NAT_networks - if there is no NAT config it returns null, so my fix was to add the following function:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14164368600275434" jivemacro_uid="_14164368600275434"&gt;
&lt;P&gt;static bool status() {&lt;/P&gt;
&lt;P&gt;&amp;nbsp; return NAT_networks() != NULL;&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Chris&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 19 Nov 2014 22:23:49 GMT</pubDate>
    <dc:creator>chrissolomon</dc:creator>
    <dc:date>2014-11-19T22:23:49Z</dc:date>
    <item>
      <title>Bug Reports: RTCS NAT server in MQX 4.1.1</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Bug-Reports-RTCS-NAT-server-in-MQX-4-1-1/m-p/355135#M11570</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I have been working on getting the NAT server going on 4.1.1. I have had it going in 4.0.2, so I wasn't expecting any drama, but I have come across a few issues:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1)&amp;nbsp; In alggen.c the "#if RTCSCFG_ENABLE_NAT" is before rtcs.h is included (which includes user_config.h) so defining RTCSCFG_ENABLE_NAT in the user config doesn't cause this file to be compiled.&lt;/P&gt;&lt;P&gt;Fix:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14164368601485726" jivemacro_uid="_14164368601485726"&gt;
&lt;P&gt;@@ -26,5 +26,8 @@&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END************************************************************************/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;+#include &amp;lt;rtcs.h&amp;gt;&lt;/P&gt;
&lt;P&gt;+#include &amp;lt;rtcs_prv.h&amp;gt;&lt;/P&gt;
&lt;P&gt;+&lt;/P&gt;
&lt;P&gt;#if RTCSCFG_ENABLE_NAT&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;@@ -29,6 +32,4 @@&lt;/P&gt;
&lt;P&gt;#if RTCSCFG_ENABLE_NAT&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;-#include &amp;lt;rtcs.h&amp;gt;&lt;/P&gt;
&lt;P&gt;-#include &amp;lt;rtcs_prv.h&amp;gt;&lt;/P&gt;
&lt;P&gt;#include &amp;lt;fio.h&amp;gt;&lt;/P&gt;
&lt;P&gt;#include &amp;lt;tftp.h&amp;gt;&lt;/P&gt;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The same problem is present in natftp.c, Fix:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14164369394463600" jivemacro_uid="_14164369394463600"&gt;
&lt;P&gt;@@ -25,5 +25,8 @@&lt;/P&gt;
&lt;P&gt; *&lt;/P&gt;
&lt;P&gt; *&lt;/P&gt;
&lt;P&gt; *END************************************************************************/&lt;/P&gt;
&lt;P&gt;+#include &amp;lt;rtcs.h&amp;gt;&lt;/P&gt;
&lt;P&gt;+#include &amp;lt;rtcs_prv.h&amp;gt;&lt;/P&gt;
&lt;P&gt;+&lt;/P&gt;
&lt;P&gt; #if RTCSCFG_ENABLE_NAT&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;@@ -28,7 +31,5 @@&lt;/P&gt;
&lt;P&gt; #if RTCSCFG_ENABLE_NAT&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;-#include &amp;lt;rtcs.h&amp;gt;&lt;/P&gt;
&lt;P&gt;-#include &amp;lt;rtcs_prv.h&amp;gt;&lt;/P&gt;
&lt;P&gt; #include &amp;lt;fio.h&amp;gt;&lt;/P&gt;
&lt;P&gt; #include &amp;lt;tftp.h&amp;gt;&lt;/P&gt;
&lt;P&gt; #include &amp;lt;ctype.h&amp;gt;&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;and in nattftp.c, fix:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14164369770533486" jivemacro_uid="_14164369770533486"&gt;
&lt;P&gt;@@ -25,6 +25,8 @@&lt;/P&gt;
&lt;P&gt; *&lt;/P&gt;
&lt;P&gt; *&lt;/P&gt;
&lt;P&gt; *END************************************************************************/&lt;/P&gt;
&lt;P&gt;+#include &amp;lt;rtcs.h&amp;gt;&lt;/P&gt;
&lt;P&gt;+#include &amp;lt;rtcs_prv.h&amp;gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt; #if RTCSCFG_ENABLE_NAT&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;@@ -28,5 +30,4 @@&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt; #if RTCSCFG_ENABLE_NAT&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;-#include &amp;lt;rtcs.h&amp;gt;&lt;/P&gt;
&lt;P&gt; #include &amp;lt;fio.h&amp;gt;&lt;/P&gt;
&lt;P&gt;@@ -32,4 +33,3 @@&lt;/P&gt;
&lt;P&gt; #include &amp;lt;fio.h&amp;gt;&lt;/P&gt;
&lt;P&gt;-#include &amp;lt;rtcs_prv.h&amp;gt;&lt;/P&gt;
&lt;P&gt; #include &amp;lt;tftp.h&amp;gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;@@ -34,6 +34,5 @@&lt;/P&gt;
&lt;P&gt; #include &amp;lt;tftp.h&amp;gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;-&lt;/P&gt;
&lt;P&gt; #include "nat.h"&lt;/P&gt;
&lt;P&gt; #include "nat_prv.h"&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;2) In nat_prv.h the function pointer typedefs were still using "pointer" type (which is no longer present in MQX 4.1.1)&lt;/P&gt;&lt;P&gt;Fix:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14164368601143572" jivemacro_uid="_14164368601143572"&gt;
&lt;P&gt;@@ -427,7 +427,7 @@&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;typedef void (_CODE_PTR_ NAT_ALG_FREE_FUNC)&lt;/P&gt;
&lt;P&gt;(&lt;/P&gt;
&lt;P&gt;-&amp;nbsp;&amp;nbsp; pointer&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; void *&lt;/P&gt;
&lt;P&gt;);&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;extern NAT_ALG_FREE_FUNC NAT_alg_free_func_table[];&lt;/P&gt;
&lt;P&gt;@@ -444,7 +444,7 @@&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;extern uint32_t NAT_ALG_tftp&lt;/P&gt;
&lt;P&gt;(&lt;/P&gt;
&lt;P&gt;-&amp;nbsp;&amp;nbsp; pointer&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; void *&lt;/P&gt;
&lt;P&gt;);&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;extern uint32_t NAT_ALG_tftp_apply&lt;/P&gt;
&lt;P&gt;@@ -462,7 +462,7 @@&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;extern uint32_t NAT_ALG_ftp&lt;/P&gt;
&lt;P&gt;(&lt;/P&gt;
&lt;P&gt;-&amp;nbsp;&amp;nbsp; pointer&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; void *&lt;/P&gt;
&lt;P&gt;);&lt;/P&gt;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;3) In nat_apply.c I believe a bug has been introduced with the type changes.&lt;/P&gt;&lt;P&gt;Line 510 reads:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro _jivemacro_uid_14164368600895116 jive_macro_code" jivemacro_uid="_14164368600895116"&gt;
&lt;P&gt;unsigned char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *embedded_checksum_ptr = NULL, port_ptr, replacement_ptr;&lt;/P&gt;

&lt;/PRE&gt;&lt;P&gt;so, embedded_checksum_ptr is a pointer, but the other two are not.&lt;/P&gt;&lt;P&gt;Fix:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14164368600738244" jivemacro_uid="_14164368600738244"&gt;
&lt;P&gt;@@ -507,7 +507,9 @@&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NAT_CFG_STRUCT_PTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nat_cfg_ptr = RTCS_getcfg(NAT);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IP_HEADER_PTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; embedded_ip_header_ptr;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TRANSPORT_UNION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; transport, embedded_transport;&lt;/P&gt;
&lt;P&gt;-&amp;nbsp;&amp;nbsp; unsigned char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *embedded_checksum_ptr = NULL, port_ptr, replacement_ptr;&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; unsigned char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *embedded_checksum_ptr = NULL;&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; unsigned char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *port_ptr;&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; unsigned char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *replacement_ptr;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _ip_address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new_ip, old_ip;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; icmpicmp = FALSE;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; checksum, embedded_checksum, data_len, new_port, old_port;&lt;/P&gt;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;4) Probably not causing an issue, but in dnat.c the source and destination port variables are not initialised, leading to a warning.&lt;/P&gt;&lt;P&gt;Fix:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="_jivemacro_uid_14164368600527764 jive_text_macro jive_macro_code" jivemacro_uid="_14164368600527764"&gt;
&lt;P&gt;@@ -57,7 +57,8 @@&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _ip_address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; source_ip = mqx_ntohl(ip_header_ptr-&amp;gt;SOURCE);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _ip_address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; target_ip = mqx_ntohl(ip_header_ptr-&amp;gt;DEST);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ip_protocol;&lt;/P&gt;
&lt;P&gt;-&amp;nbsp;&amp;nbsp; uint16_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; source_port, destination_port; /* source port and destination port */&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; uint16_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; source_port = 0;&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; uint16_t&amp;nbsp;&amp;nbsp; destination_port = 0; /* source port and destination port */&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; transport.PTR = TRANSPORT_PTR(ip_header_ptr);&lt;/P&gt;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;5) Similar niggle - in natdata.c I get a warning that key is not initialised - Fix was to initialise to zero.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;6) And again, in natevent.c I get a warning that tmp_nat_event_ptr is not initialised. Fix was to initialise to null.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;7) This one is a bit odd - there is a function call in sh_nat.c, in Shell_natinfo, to a function called status, but there isn't any function by that name.&lt;/P&gt;&lt;P&gt;I would guess, given the context, that we want to check the NAT server is up and running, but there doesn't seem to be an API to indicate this.&lt;/P&gt;&lt;P&gt;The closest I can come up with is to call NAT_networks - if there is no NAT config it returns null, so my fix was to add the following function:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14164368600275434" jivemacro_uid="_14164368600275434"&gt;
&lt;P&gt;static bool status() {&lt;/P&gt;
&lt;P&gt;&amp;nbsp; return NAT_networks() != NULL;&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Chris&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 19 Nov 2014 22:23:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Bug-Reports-RTCS-NAT-server-in-MQX-4-1-1/m-p/355135#M11570</guid>
      <dc:creator>chrissolomon</dc:creator>
      <dc:date>2014-11-19T22:23:49Z</dc:date>
    </item>
    <item>
      <title>Re: Bug Reports: RTCS NAT server in MQX 4.1.1</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Bug-Reports-RTCS-NAT-server-in-MQX-4-1-1/m-p/355136#M11571</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;And another: In natftp the type change has led to another pointer not being a pointer (like 3 above) -&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_1416968216005489" jivemacro_uid="_1416968216005489"&gt;
&lt;P&gt;@@ -278,7 +278,8 @@&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NAT_CFG_STRUCT_PTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nat_cfg_ptr = RTCS_getcfg(NAT);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NAT_SESSION_STRUCT_PTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nat_session_ptr = *((NAT_SESSION_STRUCT_PTR *)session_ptr_ptr);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NAT_SESSION_STRUCT_PTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nat_data_session_ptr;&lt;/P&gt;
&lt;P&gt;-&amp;nbsp;&amp;nbsp; unsigned char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *orig_pcb_data_ptr = (void *)RTCSPCB_DATA(*pcb_ptr_ptr), new_pcb_data_ptr;&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; unsigned char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *orig_pcb_data_ptr = (void *)RTCSPCB_DATA(*pcb_ptr_ptr);&lt;/P&gt;
&lt;P&gt;+&amp;nbsp;&amp;nbsp; unsigned char&amp;nbsp; *new_pcb_data_ptr;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IP_HEADER_PTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ip_header_ptr = (IP_HEADER_PTR)(void *)orig_pcb_data_ptr;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TRANSPORT_UNION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; transport;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NAT_SESSION_FTP_STRUCT_PTR ftp_session_ptr;&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is why I was always taught not to declare more than one variable per line, it can catch you out when pointers are involved.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Nov 2014 02:18:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Bug-Reports-RTCS-NAT-server-in-MQX-4-1-1/m-p/355136#M11571</guid>
      <dc:creator>chrissolomon</dc:creator>
      <dc:date>2014-11-26T02:18:55Z</dc:date>
    </item>
  </channel>
</rss>

