RTEMS - FreeBSD TFTP test problem.

Thomas Doerfler Thomas.Doerfler at imd-systems.de
Mon Jun 30 08:24:19 UTC 2014


Hi,

if I remember correctly (and I also had a short glance into the tftp
code in "cpukit/libnetworking/lib/tftpDriver.c"), then the hostname in
the TFTP path is optional. If it is not given, the host specified in the
DHCP response is taken.

To specify a host name (or IP) in the given path, the hostname must be
followed by a ":".

So maybe you try

"cat /TFTP/192.168.10.25:/README"

instead of

"cat /TFTP/192.168.10.25/README"

?

wkr,

Thomas.

Am 30.06.2014 09:06, schrieb Thomas Kim:
> Dear Sir,
> 
> I still have a problem using TFTP.
> I am digging RTEMS network stack due to TFTP problem.
> 
> My testing environment are two cases.
> 
> 1. DHCP IP configuration using  "RTEMS_USE_BOOTP" predefine option.
>    - Access Point IP : 192.168.10.1
>    - Target Board IP : 192.168.10.22
>    - My Notebook IP : 192.168.10.25
> 
> 2. Static IP configuration.
>    - Target Board IP : 192.168.137.100
>    - My Notebook IP : 192.168.137.1
> 
> I tested two demos telnetd and tftptest in network example code.
> ------------------------------------------------------------------------
> IP config type    Telnet server         TFTP
> ------------------------------------------------------------------------
> DHCP config         Test OK           Problem 1.
> Static config          Test OK          Problem 2.
> ------------------------------------------------------------------------
> 
> I added printk() log message in network stack as like below;
> 
> < in_pcb.c >
> int
> in_pcbladdr(struct inpcb *inp, struct mbuf *nam, struct sockaddr_in
> **plocal_sin)
> {
> .....
> if (inp->inp_laddr.s_addr == INADDR_ANY) {
> register struct route *ro;
> 
> ia = (struct in_ifaddr *)0;
> /*
> * If route is known or can be allocated now,
> * our src addr is taken from the i/f, else punt.
> */
> ro = &inp->inp_route;
> #if 1 // Added by Thomas Kim
> if (ro->ro_rt != NULL)
> printk("  if_name=%s\n", ro->ro_rt->rt_ifp->if_name);
> #endif
> ....
> }
> 
> < ip_output.c >
> 
> int
> ip_output(struct mbuf *m0, struct mbuf *opt, struct route *ro, int flags,
> struct ip_moptions *imo)
> {
> .....
> if (ro->ro_rt == NULL) {dst->sin_family = AF_INET;
> dst->sin_len = sizeof(*dst);
> dst->sin_addr = ip->ip_dst;
> }
> #if 1 // Added by Thomas Kim
> printk("dst.s_addr=0x%08x\n", dst->sin_addr.s_addr);
> #endif
>   ....
> }
> 
> I attached my modified init.c source in tftpTest directory for running
> RTEMS shell.
> 
> ** Problem 1 :*
>    TFTP server program is running my notebook(IP:192.168.10.25). also,
> TFTP server folder have README file name.
>    After I enter "cat /TFTP/192.168.10.25/README
> <http://192.168.10.25/README>" on target terminal, log message is below;
>     - "if_name=lan"  ==> OK. It is ethernet interface
>     - "dst.s_addr=0xC0A80A01".  ==> Problem. It is wrong IP address.
>    It mean that target is tring to connect access point(192.168.10.1).
> 
> ** Problem 2 : *
>    TFTP server program is running my notebook(IP:192.168.137.1).
>    After I enter 'cat /TFTP/192.168.137.1/README
> <http://192.168.137.1/README>" on target terminal, log message is below;
>     - "if_name=lo"  ==> Problem. It is not ethernet interface. It is
> local loopback.
>     - "dst.s_addr=0x7F000001". ==> Problem. loopback IP is 127.0.0.1
> 
> I am guessing that there is a bug in RTEMS network stack for using TFTP.
> 
> Please advise me.
> 
> Best Regards,
> Thomas Kim
>  
> 
> 
> 2014-06-16 18:42 GMT+09:00 Thomas Kim <thomas73.kim at gmail.com
> <mailto:thomas73.kim at gmail.com>>:
> 
>     Dear Sir,
> 
>     I am sorry. 
>     At this time, I didn't use BOOTP option. therefore, I used static
>     ethernet IP configuration.
> 
>     My ethernet configuration is below;
> 
>     extern int _rtems_smsc9220_driver_attach (struct
>     rtems_bsdnet_ifconfig *config, int attach) ;
> 
>     struct rtems_bsdnet_ifconfig lan9220_ifconfig =
>     {
>     "lan0",                   /* name */
>     _rtems_smsc9220_driver_attach,/* attach funtion */
>     NULL,                        /* next interface */
>     #if defined(RTEMS_USE_BOOTP)
>     NULL,
>     NULL,
>     #else
>     "192.168.137.100",           /* ip address */
>     "255.255.255.0",             /* ip netmask */
>     #endif
>     NULL,                 /* hardware address */
>       0,                           /* ignore broadcast */
>       0,                           /* mtu */
>       0,                           /* rbuf count */
>       0,                           /* xbuf count */
>       0,                           /* port */
>       0,                           /* irno */
>       0,                           /* bpar */
>       0                            /* drv ctrl */
>     };
> 
>     struct rtems_bsdnet_config rtems_bsdnet_config = {
>       &lan9220_ifconfig,                /* Loop back interface only */
>     #if defined(RTEMS_USE_BOOTP)
>       rtems_bsdnet_do_dhcp,                /* do not use bootp */
>     #else
>       NULL,
>     #endif
>       20,                   /* Default network task priority */
>       256*1024,            /* Default mbuf capacity */
>       256*1024,            /* Default mbuf cluster capacity */
>     #if defined(RTEMS_USE_BOOTP)
>       NULL,
>       NULL,
>       NULL,
>       NULL,
>       { NULL },
>                             /* NTP server(s) */
>       { "64.4.10.33",       /* time.windows.com
>     <http://time.windows.com> (Microsoft) */
>         "210.98.16.100" },  /* time.kriss.re.kr
>     <http://time.kriss.re.kr> (KRISS) */
>     #else
>       "rtems",             /* Host name */
>       "nodomain.com <http://nodomain.com>",      /* Domain name */
>       "192.168.137.1",     /* Gateway */
>       "127.0.0.1",         /* Log host */
>       {"61.41.153.2",      /* Name server(s) */
>        "1.214.68.2" },
>                            /* NTP server(s) */
>       { "64.4.10.33",      /* time.windows.com <http://time.windows.com>
>     (Microsoft) */
>         "210.98.16.100" }, /* time.kriss.re.kr <http://time.kriss.re.kr>
>     (KRISS) */
>     #endif
>       0,                   /* sb_efficiency */
>       0,                   /* udp_tx_buf_size */
>       0,                   /* udp_rx_buf_size */
>       0,                   /* tcp_tx_buf_size */
>       0                    /* tcp_rx_buf_size */
> 
>     };
> 
>     Best Regards,
> 
> 
> 
>     2014-06-16 18:38 GMT+09:00 Thomas Kim <thomas73.kim at gmail.com
>     <mailto:thomas73.kim at gmail.com>>:
> 
>         Dear Sir,
> 
>         I have still a problem for using TFTP test code.
> 
>         As I check in rtems_tftp_open_works() function, I guess that
>         BOOTP should be enabled for running TFTP.
>         At this time, if_address, ip_netmask and hardware_address of
>         struct rtems_bsdnet_ifconfig are NULL.
> 
>         I don't know TFTP operation is related with BOOTP.
> 
>         Please advise me.
> 
>         Best Regards,
>          
> 
> 
>         2014-05-15 15:42 GMT+09:00 Thomas Kim <thomas73.kim at gmail.com
>         <mailto:thomas73.kim at gmail.com>>:
> 
>             Dear Sir,
> 
>             I am testing RTEMS FreeBSD networking using
>             network-demos-network-demos-4.10.2.
> 
>             At this time, testing code about dnstest, http  are OK.
> 
>             When I try to test tftpTest, there is below problem.
> 
>             Function flow for TFTP request is below;
>               - rtems_tftp_open()
>               - rtems_tftp_open_worker()
>               - sendto()
>               - udp_output()
>               - ip_output() ==> My problem is here !!!
> 
>             Normal case using TCP, if_output() function entry in
>             ip_output is ether_output().
>             But, abnormal case using UDP, if_output() function entry is
>             looutout().
>             It mean that UDP is tring to use loopback interface.
> 
>             I don't know the reason about this problem.
> 
>             Please could you let me know how to resolve this ?
> 
>             Best Regards.
> 
> 
> 
> 
> 
> 
> _______________________________________________
> users mailing list
> users at rtems.org
> http://lists.rtems.org/mailman/listinfo/users
> 


-- 
IMD Ingenieurbuero fuer Microcomputertechnik
Thomas Doerfler
Herbststrasse 8
D-82178 Puchheim
Germany
email: Thomas.Doerfler at imd-systems.de
PGP public key available on request



More information about the users mailing list