The two new variables "arp_requested" and "expiration_date" in the mbuf structure have been added after the variable-sized "m_dat_" array. The variables have to be added before the m_dat_ array instead. Without this patch, the expiration_date gets clobbered by code that accesses the m_dat_ array. I experienced this problem with the code in slirp/tftp.c: The tftp_send_data() function created a new packet with the m_get() function (which fills-in a default expiration_date value). Then the TFTP code cleared the data section of the packet, which accidentially also cleared the expiration_date. This zeroed expiration_date then finally causes the packet to be discarded during if_start(), so that TFTP packets were not transmitted anymore. [Jan: added comment as suggested by Fabien ] CC: Fabien Chouteau <chouteau@adacore.com> Signed-off-by: Thomas Huth <thuth@linux.vnet.ibm.com> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> |
||
---|---|---|
.. | ||
arp_table.c | ||
bootp.c | ||
bootp.h | ||
cksum.c | ||
COPYRIGHT | ||
debug.h | ||
if.c | ||
if.h | ||
ip.h | ||
ip_icmp.c | ||
ip_icmp.h | ||
ip_input.c | ||
ip_output.c | ||
libslirp.h | ||
main.h | ||
mbuf.c | ||
mbuf.h | ||
misc.c | ||
misc.h | ||
sbuf.c | ||
sbuf.h | ||
slirp.c | ||
slirp.h | ||
slirp_config.h | ||
socket.c | ||
socket.h | ||
tcp.h | ||
tcp_input.c | ||
tcp_output.c | ||
tcp_subr.c | ||
tcp_timer.c | ||
tcp_timer.h | ||
tcp_var.h | ||
tcpip.h | ||
tftp.c | ||
tftp.h | ||
udp.c | ||
udp.h |