heinbali01 wrote on Wednesday, January 27, 2016:
I assume that two separate interfaces (and TCP stacks) are necessary.
No I would prefer to handle all IP traffic from within a single IP-task and a single stack.
Until now one would bind a socket to a port number, it was assumed that all sockets were bound to the (single) IP-address.
In the extended version you’ll bind to a couple (address + port number). The stack will select the most appropriate network driver to send out the message.
My understanding is that the interfaces (links) are concurrent
and therefore would have their own stacks.
Yes that would be a possibility. We’ll keep this in mind, make sure that the stack uses a minimum of static/global variables.
In addition, there is requirement for a FTP and HTTP server
The FreeRTOS+TCP FTP server is quite complete. The HTTP server is less developed. Both servers run from a single task. That task blocks in a call to FreeRTOS_select()
. As soon as any of its sockets needs attention, the task will unblock and do its work.
a solid-state FAT disk contained in DDR memory controlled by the Zynq.
Uh? Either DDR SDRAM memory or a solid state disk.
The SDRAM is perfect for creating a fas RAM disk.
…and have two links via the two GEM resources of the Zynq.
Maybe you can provide a simple roadmap to an approach, please.
Not sure if I understand your question.
The FTP and HTTP servers will bind their server socket to the special IP address 0.0.0.0
(INADDR_ANY
). Therefore they will accept connections from any of the network interfaces (GEM-1, GEM-2, WiFi if you like):
This configuration will be possible:
GEM-1 10.0.0.110
GEM-2 192.168.1.1 192.168.1.12
WiFi 192.168.4.1
Loop-back 127.x.x.x
Maybe it is clearer now why I prefer a single instance of the stack: servers like FTP/HTTP stand somewhere in between the interfaces and IP addresses.
Regards.