📄 tcpip stack version.txt
字号:
correct.
6. Fixed a memory corruption/UDP packet loss problem when handling incoming UDP
packets. Previously, StackTask() would incorrectly continue processing more
packets if it came upon a UDP packet. Thanks go to I馻ki Esparza on the Microchip
Ethernet forum for identifying this issue.
7. Fixed the SMTPClient.ROMPointers.Server flag having an inverted meaning.
Previously, the SMTP client module would treat the SMTPClient.Server pointer as a
ROM pointer if this bit was cleared. In most cases, this would cause the SMTP
client to return an error code of 0x8000 when the SMTPClient.SMTPServer address
pointer was set.
8. Fixed the DHCP Server module from incorrectly parsing received packets which had a
DHCP_PARAM_REQUEST_IP_ADDRESS option followed by more options. Previously due to
the length miscalculation, the parser would enter a random state, depending on the
packet's contents. Thanks go to I馻ki Esparza on the Microchip Ethernet forum for
identifying this issue.
9. Fixed potential incorrect results when UDPIsGetReady() was called and a previous
application did not call UDPDiscard() on an RX packet. Now, StackTsk() calls
UDPDiscard() as appropriate to let it know when it's old RX data is being thrown
away. This fixes a potential bug in the DHCP Server module and makes the UDP API
more robust. Thanks go to I馻ki Esparza on the Microchip Ethernet forum for
identifying the potential DHCP server issue.
10.Fixed a potential ARP bug where the Gateway's MAC address would be returned for an
IP address on the local subnet. This unusual case would occur when two application
tasks were using the ARP module at the same time and the second application was
trying to resolve an IP address off of our subnet. Thanks go to I馻ki Esparza on
the Microchip Ethernet forum for pointing this issue out.
11.Fixed an PIC18F97J60 family MAC layer bug where MACGetArray() might not correctly
increment the Ethernet read pointer if a NULL pointer was given for the
destination. The C compiler might have optimized the function so that it would
increment the read pointer one less than it was supposed to.
12.The TCP module now acknowledges TCP Keep-Alive packets which will help prevent
connection loss if the remote node fills up our RX FIFO and then our window-update
packet gets lost on the network/Internet. In stack version 4.02, a zero-window
probe would have been required to restore the communications.
13.Fixed a TCP RX FIFO corruption issue that would occur in (uncommon) circumstances
when too many out-of-order segments arrived such that a second "hole" would have
been required to accommodate the data. Thanks go to I馻ki Esparza and his eagle
eyes on the Microchip Ethernet forum for finding this corner case bug.
14.Inline assembly in the ETH97J60.c file has been modified to accommodate the C18
Extended mode and C18 Auto default storage class. Previously, the Ethernet module
would transmit garbage packets when using the C18 parameter stack.
15.Fixed potential buffer overflow in NBNS.c's NBNSGetName() function where an
unexpected string length retrieved from the packet could cause random memory
corruption.
16.Fixed some potential PIC18F97J60 family Ethernet module transmit lockup conditions
that occur on some networks. Previously blocking while() loops would wait
indefinitely for the ECON1<TXRTS> bit to become clear by hardware, which the
hardware might never have done.
17.In MainDemo.c, a call to DelayMs() was being made using a value of 100ms. This was
too long for the underlying Delay1KTCYx() C18 function and would result in a
shorter than expected delay when compiled with C18. This has been fixed with a
loop. Thanks go to Andy123 on the Microchip Ethernet forum for pointing this
problem out.
18.Fixed a potential C18 memory overlaying problem in the TickUpdate() function.
Previously, the local variable used in this function might have been overlayed on
other memory, resulting in random memory corruption as the ISR occurred.
19.The demo AJAX web pages in the TCPIP Demo App\WebPages folder now correctly display
and self-refresh in Firefox 2. Previously, it would work in Firefox 1.5 and
Microsoft Internet Explorer, but not Firefox 2. Thanks go to "gohsthb" on the
Microchip Ethernet forum for identifying this correction.
20.Rewrote the GenericTCPServer.c example to not use an application RAM FIFO for
buffering. Since the TCP module implements its own FIFOing, the application has
limited need for its own FIFO too. This fixes a previous bug where the
GenericTCPServer was not checking the number of incoming bytes with the remaining
size available of the App FIFO. This would have previously resulted in a buffer
overflow, corrupting the RX data if too much arrived all at once.
21.Fixed a potential MPFS classic inline ASM30 assembly code problem where web pages
stored in internal Flash and C30 with optimizations enabled could result in data
corruption.
22.Fixed a UDPPut() tracking problem that would result in extra bytes being appended
to the end of a packet if the UDPSetTxBuffer() function was used. This previously
caused the SNMP module to send some junk data at the end of its packets.
23.Fixed a potential TCP problem where transmitted FIN packets might not get
retransmitted properly if the remote node never acknowledged the data that was
transmitted just before the FIN was sent.
24.Fixed a NetBIOS Name Service bug where the response packet would sometimes get sent
to an incorrect address. It now consistently responds to the unicast MAC/IP
address of the NBNS query packet.
25.Added padding to all transmitted DHCP messages to make the minimum UDP payload at
least 300 bytes. This fixes compatibility with some older BOOTP relay devices
which discard smaller packets. Thanks go to Dave Collier on the Microchip Ethernet
forum for pointing this problem out.
26.Substantially shrunk the number of retransmission attempts made in the
TCP_SYN_RECEIVED state. This improves recovery time when attacked by a SYN flood
Denial of Service event. The recovery time is now 7 seconds (3 total packets)
instead of 31 seconds (6 total packets)
27.Fixed the possibility of the NetBIOS Name Service module giving out the board's
static IP address before a DHCP lease could be obtained. NBNS requests are now
only serviced when originating from nodes on the same subnet.
28.Fixed storage of MPFS classic in internal program memory when using the HI-TECH
PICC-18 compiler.
29.Substantially revised TCP.c, fixing many TCP bugs and possibly adding new ones.
Thanks go to Michael Rubinstein for finding several of these TCP problems.
30.The DNS client module will now time out and return failure if the DNS server cannot
be ARPed or does not respond to the DNS query. Each timeout is set to 1 second and
3 total ARP and 3 total DNS query attempts are possible. Previously, it would
retry indefinitely, causing the calling application to deadlock.
Known Problems:
1. Telnet server module does not implement a lot of Telnet functions. As a
result, it will likely not display correctly or work at all with some Telnet
clients. The server was tested with the Microsoft telnet.exe utility which
is provided with Microsoft Windows.
2. TFTPc module has not been tested with this version.
3. If the DHCP client and DHCP server are used at the same time and you connect
two similar boards to each other (ex: two PICDEM.net 2 boards connected via
a crossover cable), a race condition can occur where both nodes will disable
their DHCP server and neither board will get a successful DHCP lease. If
this unlikely scenario occurs, as a work around, simply reset one of the
boards to reenable it's DHCP server.
4. HI-TECH PICC-18 projects may not compile when targeting the external
ENC28J60 chip on the PICDEM.net 2 development board (instead of the
internal Ethernet controller). This problem only applies when a
PIC18F97J60 family part is the target. I.e. it compiles correctly for the
HPC_EXPLORER + Ethernet PICtail.
5. HI-TECH PICC-18 projects will not correctly set the processor configuration fuses
through code using the __CONFIG() macro. Ensure that the configuration fuses are
manually set correctly via the MPLAB IDE Configuration Bits dialog. This problem
has been observed with compiler version 9.50PL3.
Testing and Performance Notes:
1. Make sure to use MPLAB IDE 7.62 or higher with this version. Versions below 7.61
will not work. Version 7.62 has cool new features like C auto-word complete and
function parameter tooltips that can be enabled (disabled by default).
2. Testing was done using MPLAB C18 version 3.12, MPLAB C30 version 3.01, and HI-TECH
PICC-18 version 9.50PL3. Make sure to upgrade your tools to at least these
versions.
********
v4.02 10 April 2007
********
IMPORTANT NOTE: You must use MPLAB 7.41 or higher to successfully open the
MPLAB projects.
IMPORTANT NOTE2:If an external serial EEPROM memory is used to store AppConfig,
it's contents will be invalidated the first time you run this
version, restoring the AppConfig defaults. The AppConfig
structure has been optimized.
IMPORTANT NOTE3:If an external serial EEPROM memory for MPFS, you will need to
recreate the MPFS image and program your EEPROM. A 32 bit
addressing format is now used.
Changes:
1. Implemented TCP RX packet order correction logic. The stack can now accept
TCP frames that arrive out-of-order without requiring the remote node to go
through a retransmit cycle. This dramatically improves RX performance when
communicating over the Internet.
2. UDPOpen() now can handle a NULL pointer for remoteNode. In this case, the
broadcast IP/MAC addresses will be used for the remoteNode (destination
address of outbound packets).
3. Recreated MPLAB projects for the HI-TECH PICC-18 compiler. These were
temporarily absent from 4.00RC. This project works with the PIC18F97J60
with internal Ethernet module, assuming the correct compiler version is
present.
4. Moved all the headers around. Most of them are in
"Microchip Solutions\Microchip\Include\TCPIP Stack" now. This change was
made to again be more compatible with other (future) Microchip software
libraries.
5. New UDPPut() behavior. Now, if space in the Ethernet TX buffer runs out,
the packet will not automatically be transmitted. You must call UDPFlush()
to cause the packet to be transmitted.
6. Added UDPGetArray(), UDPPutArray(), UDPPutROMArray(), UDPPutString() and
UDPPutROMString() user API functions. These functions perform substantially
better than calling UDPPut() successively and allow greater application
programming flexibility.
7. Changed TCPPutString() and TCPPutROMString() APIs to now return an updated
string pointer instead of a count of bytes successfully placed in the TX
buffer.
8. Added UDPPerformanceTest.c. By default this module causes UDP packets
containing 1024 bytes of application data to be broadcasted on UDP port
12345. Use a packet sniffer, such as Wireshark (http://www.wireshark.com/)
to capture and derive stack overhead/UDP TX performance characteristics with
this module. Note that this test uses the UDPPutROMArray() function.
Applications which use successive calls to UDPPut() will be slower. To
enable this module, #define STACK_USE_UDP_PERFORMANCE_TEST in TCPIPConfig.h.
9. Added TCPPerformanceTest.c. By default this module listens on TCP port
12345. When a remote client connects, this server module will being
transmitting the maximum possible amount of application data that it can,
given your TCP TX FIFO size. Use a packet sniffer, such as Wireshark
(http://www.wireshark.com/) to capture and derive stack overhead/TCP TX
performance characteristics with this module. Any TCP client can be used,
including readily available utilities such as the telnet.exe utility
available on Microsoft Windows XP. To use it to connect to the test module,
run: "telnet.exe xxx.xxx.xxx.xxx 12345" where xxx.xxx.xxx.xxx is the board's
IP address. Note that this test uses the TCPPutROMArray() function.
Applications which use successive calls to TCPPut() will be slower. To
enable this module, #define STACK_USE_TCP_PERFORMANCE_TEST in TCPIPConfig.h.
10.Added Reboot.c module. By default, this module listens on UDP port 30304.
If the application byte 0x00 arrives on this port, the PIC will reset. This
is primarily useful for remote Bootloader entry.
#define STACK_USE_REBOOT_SERVER in TCPIPConfig.h to enable this module.
Note that since no encrypted challenge/response algorithm is currently
implemented, this module is a Denial of Service vulnerability, so it should
not be enabled unless there is a specific need for it.
11.Made the TickUpdate() ISR routine execute in the low priority ISR instead of
the default high priority ISR. The Microchip TCP/IP stack does not need any
interrupts except this low priority timer.
12.Renamed STACK_USE_DHCP macro to STACK_USE_DHCP_CLIENT
13.Added STACK_USE_MPFS macro.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -