opengnsys_ipxe/src/net
Michael Brown 188789eb3c [tcp] Send TCP keepalives on idle established connections
In some circumstances, intermediate devices may lose state in a way
that temporarily prevents the successful delivery of packets from a
TCP peer.  For example, a firewall may drop a NAT forwarding table
entry.

Since iPXE spends most of its time downloading files (and hence purely
receiving data, sending only TCP ACKs), this can easily happen in a
situation in which there is no reason for iPXE's TCP stack to generate
any retransmissions.  The temporary loss of connectivity can therefore
effectively become permanent.

Work around this problem by sending TCP keepalives after a period of
inactivity on an established connection.

TCP keepalives usually send a single garbage byte in sequence number
space that has already been ACKed by the peer.  Since we do not need
to elicit a response from the peer, we instead send pure ACKs (with no
garbage data) in order to keep the transmit code path simple.

Originally-implemented-by: Ladi Prosek <lprosek@redhat.com>
Debugged-by: Ladi Prosek <lprosek@redhat.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2016-06-13 09:58:32 +01:00
..
80211 [netdevice] Allow network devices to disclaim IRQ support at runtime 2015-07-28 15:14:40 +01:00
infiniband [xsigo] Add support for Xsigo virtual Ethernet (XVE) EoIB devices 2016-03-09 08:46:24 +00:00
oncrpc [nfs] Rewrite NFS URI handling 2014-05-18 21:53:39 +01:00
tcp [http] Accept headers with no whitespace following the colon 2016-06-09 12:27:04 +01:00
udp [slam] Avoid potential division by zero 2016-01-27 23:27:47 +00:00
aoe.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 16:35:29 +00:00
arp.c [arp] Validate length of ARP packet 2016-03-12 01:24:03 +00:00
dhcpopts.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:50:42 +00:00
dhcppkt.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
eapol.c [legal] Update FSF mailing address in GPL licence texts 2012-07-20 19:55:45 +01:00
eth_slow.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 16:35:29 +00:00
ethernet.c [ethernet] Make LACP support configurable at build time 2016-04-18 10:08:46 +01:00
fakedhcp.c [pxe] Populate ciaddr in fake PXE Boot Server ACK packet 2015-09-01 21:24:02 +01:00
fc.c [build] Fix the REQUIRE_SYMBOL mechanism 2015-03-05 00:59:38 +00:00
fcels.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
fcns.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
fcoe.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
fcp.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
fragment.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
icmp.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
icmpv4.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
icmpv6.c [ipv6] Disambiguate received ICMPv6 errors 2015-05-11 12:45:14 +01:00
infiniband.c [infiniband] Make IPoIB support configurable at build time 2016-03-09 08:43:40 +00:00
iobpad.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
ipv4.c [tcpip] Avoid generating positive zero for transmitted UDP checksums 2015-09-10 14:46:54 +01:00
ipv6.c [tcpip] Avoid generating positive zero for transmitted UDP checksums 2015-09-10 14:46:54 +01:00
ndp.c [ipv6] Do not set sin6_scope_id on source address 2014-05-23 14:11:17 +01:00
neighbour.c [neighbour] Return success when deferring a packet 2015-05-20 15:29:36 +01:00
netdev_settings.c [netdevice] Return ENOENT for an unknown bus type 2016-03-29 20:59:30 +01:00
netdevice.c [netdevice] Fix failure path in register_netdev() 2016-05-23 14:17:47 +01:00
nullnet.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
pccrc.c [peerdist] Include trimmed range within content information block 2015-07-28 15:22:26 +01:00
pccrd.c [peerdist] Add support for constructing and decoding discovery messages 2015-07-28 16:09:14 +01:00
peerblk.c [peerdist] Avoid NULL pointer dereference for plaintext blocks 2015-09-29 01:24:36 +01:00
peerdisc.c [peerdist] Add segment discovery mechanism 2015-08-17 13:24:39 +01:00
peerdist.c [peerdist] Add support for PeerDist (aka BranchCache) HTTP content encoding 2015-08-17 13:24:40 +01:00
peermux.c [peerdist] Add block download multiplexer 2015-08-17 13:24:39 +01:00
ping.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
rarp.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
retry.c [retry] Colourise debug output 2015-03-05 11:25:54 +00:00
rndis.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
socket.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
stp.c [stp] Fix incorrectly disambiguated errors 2016-01-14 12:39:35 +00:00
tcp.c [tcp] Send TCP keepalives on idle established connections 2016-06-13 09:58:32 +01:00
tcpip.c [tcpip] Allow supported address families to be detected at runtime 2015-09-01 21:04:45 +01:00
tls.c [tls] Avoid potential out-of-bound reads in length fields 2016-03-11 16:09:40 +00:00
udp.c [tcpip] Avoid generating positive zero for transmitted UDP checksums 2015-09-10 14:46:54 +01:00
validator.c [crypto] Allow cross-certificate source to be configured at build time 2016-03-24 19:25:03 +00:00
vlan.c [netdevice] Allow network devices to disclaim IRQ support at runtime 2015-07-28 15:14:40 +01:00