| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> |
| <head> |
| <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> |
| <meta http-equiv="X-UA-Compatible" content="IE=11"/> |
| <meta name="generator" content="Doxygen 1.12.0"/> |
| <meta name="viewport" content="width=device-width, initial-scale=1"/> |
| <title>lwIP: src/core/tcp_out.c File Reference</title> |
| <link href="tabs.css" rel="stylesheet" type="text/css"/> |
| <script type="text/javascript" src="jquery.js"></script> |
| <script type="text/javascript" src="dynsections.js"></script> |
| <script type="text/javascript" src="clipboard.js"></script> |
| <link href="navtree.css" rel="stylesheet" type="text/css"/> |
| <script type="text/javascript" src="navtreedata.js"></script> |
| <script type="text/javascript" src="navtree.js"></script> |
| <script type="text/javascript" src="resize.js"></script> |
| <script type="text/javascript" src="cookie.js"></script> |
| <link href="search/search.css" rel="stylesheet" type="text/css"/> |
| <script type="text/javascript" src="search/searchdata.js"></script> |
| <script type="text/javascript" src="search/search.js"></script> |
| <link href="doxygen.css" rel="stylesheet" type="text/css" /> |
| </head> |
| <body> |
| <div id="top"><!-- do not remove this div, it is closed by doxygen! --> |
| <div id="titlearea"> |
| <table cellspacing="0" cellpadding="0"> |
| <tbody> |
| <tr id="projectrow"> |
| <td id="projectalign"> |
| <div id="projectname">lwIP<span id="projectnumber"> 2.1.3</span> |
| </div> |
| <div id="projectbrief">Lightweight IP stack</div> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| <!-- end header part --> |
| <!-- Generated by Doxygen 1.12.0 --> |
| <script type="text/javascript"> |
| /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ |
| var searchBox = new SearchBox("searchBox", "search/",'.html'); |
| /* @license-end */ |
| </script> |
| <script type="text/javascript"> |
| /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ |
| $(function() { codefold.init(0); }); |
| /* @license-end */ |
| </script> |
| <script type="text/javascript" src="menudata.js"></script> |
| <script type="text/javascript" src="menu.js"></script> |
| <script type="text/javascript"> |
| /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ |
| $(function() { |
| initMenu('',true,false,'search.php','Search',true); |
| $(function() { init_search(); }); |
| }); |
| /* @license-end */ |
| </script> |
| <div id="main-nav"></div> |
| </div><!-- top --> |
| <div id="side-nav" class="ui-resizable side-nav-resizable"> |
| <div id="nav-tree"> |
| <div id="nav-tree-contents"> |
| <div id="nav-sync" class="sync"></div> |
| </div> |
| </div> |
| <div id="splitbar" style="-moz-user-select:none;" |
| class="ui-resizable-handle"> |
| </div> |
| </div> |
| <script type="text/javascript"> |
| /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ |
| $(function(){initNavTree('tcp__out_8c.html',''); initResizable(true); }); |
| /* @license-end */ |
| </script> |
| <div id="doc-content"> |
| <!-- window showing the filter options --> |
| <div id="MSearchSelectWindow" |
| onmouseover="return searchBox.OnSearchSelectShow()" |
| onmouseout="return searchBox.OnSearchSelectHide()" |
| onkeydown="return searchBox.OnSearchSelectKey(event)"> |
| </div> |
| |
| <!-- iframe showing the search results (closed by default) --> |
| <div id="MSearchResultsWindow"> |
| <div id="MSearchResults"> |
| <div class="SRPage"> |
| <div id="SRIndex"> |
| <div id="SRResults"></div> |
| <div class="SRStatus" id="Loading">Loading...</div> |
| <div class="SRStatus" id="Searching">Searching...</div> |
| <div class="SRStatus" id="NoMatches">No Matches</div> |
| </div> |
| </div> |
| </div> |
| </div> |
| |
| <div class="header"> |
| <div class="summary"> |
| <a href="#define-members">Macros</a> | |
| <a href="#func-members">Functions</a> </div> |
| <div class="headertitle"><div class="title">tcp_out.c File Reference</div></div> |
| </div><!--header--> |
| <div class="contents"> |
| <div class="textblock"><code>#include "<a class="el" href="opt_8h.html">lwip/opt.h</a>"</code><br /> |
| <code>#include "<a class="el" href="tcp__priv_8h.html">lwip/priv/tcp_priv.h</a>"</code><br /> |
| <code>#include "<a class="el" href="def_8h.html">lwip/def.h</a>"</code><br /> |
| <code>#include "<a class="el" href="mem_8h.html">lwip/mem.h</a>"</code><br /> |
| <code>#include "<a class="el" href="memp_8h.html">lwip/memp.h</a>"</code><br /> |
| <code>#include "<a class="el" href="ip__addr_8h.html">lwip/ip_addr.h</a>"</code><br /> |
| <code>#include "<a class="el" href="netif_8h.html">lwip/netif.h</a>"</code><br /> |
| <code>#include "<a class="el" href="inet__chksum_8h.html">lwip/inet_chksum.h</a>"</code><br /> |
| <code>#include "<a class="el" href="stats_8h.html">lwip/stats.h</a>"</code><br /> |
| <code>#include "<a class="el" href="ip6_8h.html">lwip/ip6.h</a>"</code><br /> |
| <code>#include "<a class="el" href="ip6__addr_8h.html">lwip/ip6_addr.h</a>"</code><br /> |
| <code>#include <string.h></code><br /> |
| <code>#include "path/to/my/lwip_hooks.h"</code><br /> |
| </div><table class="memberdecls"> |
| <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> |
| Macros</h2></td></tr> |
| <tr class="memitem:a25d7e9081baa5c84f2ebd34b0eb4169b" id="r_a25d7e9081baa5c84f2ebd34b0eb4169b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="#a25d7e9081baa5c84f2ebd34b0eb4169b">TCP_CHECKSUM_ON_COPY_SANITY_CHECK</a>   0</td></tr> |
| <tr class="separator:a25d7e9081baa5c84f2ebd34b0eb4169b"><td class="memSeparator" colspan="2"> </td></tr> |
| <tr class="memitem:aa2ef22d2384225a1b5fee187411cc129" id="r_aa2ef22d2384225a1b5fee187411cc129"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="#aa2ef22d2384225a1b5fee187411cc129">TCP_OVERSIZE_CALC_LENGTH</a>(length)</td></tr> |
| <tr class="separator:aa2ef22d2384225a1b5fee187411cc129"><td class="memSeparator" colspan="2"> </td></tr> |
| </table><table class="memberdecls"> |
| <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> |
| Functions</h2></td></tr> |
| <tr class="memitem:ga6b2aa0efbf10e254930332b7c89cd8c5" id="r_ga6b2aa0efbf10e254930332b7c89cd8c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__tcp__raw.html#ga6b2aa0efbf10e254930332b7c89cd8c5">tcp_write</a> (struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *pcb, const void *arg, u16_t len, u8_t apiflags)</td></tr> |
| <tr class="separator:ga6b2aa0efbf10e254930332b7c89cd8c5"><td class="memSeparator" colspan="2"> </td></tr> |
| <tr class="memitem:ac930859c4e4ad9fcf6bb25ef5e91bcd5" id="r_ac930859c4e4ad9fcf6bb25ef5e91bcd5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ac930859c4e4ad9fcf6bb25ef5e91bcd5">tcp_split_unsent_seg</a> (struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *pcb, u16_t split)</td></tr> |
| <tr class="separator:ac930859c4e4ad9fcf6bb25ef5e91bcd5"><td class="memSeparator" colspan="2"> </td></tr> |
| <tr class="memitem:af40ba9d645a8910436c3d7cf13dba342" id="r_af40ba9d645a8910436c3d7cf13dba342"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#af40ba9d645a8910436c3d7cf13dba342">tcp_send_fin</a> (struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *pcb)</td></tr> |
| <tr class="separator:af40ba9d645a8910436c3d7cf13dba342"><td class="memSeparator" colspan="2"> </td></tr> |
| <tr class="memitem:aa7d5d552647d567095876aab202bfd1a" id="r_aa7d5d552647d567095876aab202bfd1a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#aa7d5d552647d567095876aab202bfd1a">tcp_enqueue_flags</a> (struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *pcb, u8_t flags)</td></tr> |
| <tr class="separator:aa7d5d552647d567095876aab202bfd1a"><td class="memSeparator" colspan="2"> </td></tr> |
| <tr class="memitem:ga0cbcc6d628f644a530daf629fa3e5f7f" id="r_ga0cbcc6d628f644a530daf629fa3e5f7f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__tcp__raw.html#ga0cbcc6d628f644a530daf629fa3e5f7f">tcp_output</a> (struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *pcb)</td></tr> |
| <tr class="separator:ga0cbcc6d628f644a530daf629fa3e5f7f"><td class="memSeparator" colspan="2"> </td></tr> |
| <tr class="memitem:a1f318930bd6d49074343cc79c5166f39" id="r_a1f318930bd6d49074343cc79c5166f39"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#a1f318930bd6d49074343cc79c5166f39">tcp_rexmit_rto_prepare</a> (struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *pcb)</td></tr> |
| <tr class="separator:a1f318930bd6d49074343cc79c5166f39"><td class="memSeparator" colspan="2"> </td></tr> |
| <tr class="memitem:a9ef9dc094e21bdf0779aed25ab0b08d4" id="r_a9ef9dc094e21bdf0779aed25ab0b08d4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#a9ef9dc094e21bdf0779aed25ab0b08d4">tcp_rexmit_rto_commit</a> (struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *pcb)</td></tr> |
| <tr class="separator:a9ef9dc094e21bdf0779aed25ab0b08d4"><td class="memSeparator" colspan="2"> </td></tr> |
| <tr class="memitem:ab5ef9c8ab4629eb721987ae316b9f30f" id="r_ab5ef9c8ab4629eb721987ae316b9f30f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#ab5ef9c8ab4629eb721987ae316b9f30f">tcp_rexmit_rto</a> (struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *pcb)</td></tr> |
| <tr class="separator:ab5ef9c8ab4629eb721987ae316b9f30f"><td class="memSeparator" colspan="2"> </td></tr> |
| <tr class="memitem:af75fefe4fe509845be156d6e424eb6f1" id="r_af75fefe4fe509845be156d6e424eb6f1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#af75fefe4fe509845be156d6e424eb6f1">tcp_rexmit</a> (struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *pcb)</td></tr> |
| <tr class="separator:af75fefe4fe509845be156d6e424eb6f1"><td class="memSeparator" colspan="2"> </td></tr> |
| <tr class="memitem:adb6ee7b4d59f125cc8bfac3bb5ca3937" id="r_adb6ee7b4d59f125cc8bfac3bb5ca3937"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#adb6ee7b4d59f125cc8bfac3bb5ca3937">tcp_rexmit_fast</a> (struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *pcb)</td></tr> |
| <tr class="separator:adb6ee7b4d59f125cc8bfac3bb5ca3937"><td class="memSeparator" colspan="2"> </td></tr> |
| <tr class="memitem:aa90f8051c9633d3017c588245cdc4014" id="r_aa90f8051c9633d3017c588245cdc4014"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#aa90f8051c9633d3017c588245cdc4014">tcp_rst</a> (const struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *pcb, u32_t seqno, u32_t ackno, const <a class="el" href="group__ipaddr.html#ga335a8c9df66319e88a1a529047ce0a1e">ip_addr_t</a> *local_ip, const <a class="el" href="group__ipaddr.html#ga335a8c9df66319e88a1a529047ce0a1e">ip_addr_t</a> *remote_ip, u16_t local_port, u16_t remote_port)</td></tr> |
| <tr class="separator:aa90f8051c9633d3017c588245cdc4014"><td class="memSeparator" colspan="2"> </td></tr> |
| <tr class="memitem:aefde3e34b2cc8df9654986484c44a996" id="r_aefde3e34b2cc8df9654986484c44a996"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#aefde3e34b2cc8df9654986484c44a996">tcp_send_empty_ack</a> (struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *pcb)</td></tr> |
| <tr class="separator:aefde3e34b2cc8df9654986484c44a996"><td class="memSeparator" colspan="2"> </td></tr> |
| <tr class="memitem:a0d8bb5fc8522515aa35d305774cc5332" id="r_a0d8bb5fc8522515aa35d305774cc5332"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#a0d8bb5fc8522515aa35d305774cc5332">tcp_keepalive</a> (struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *pcb)</td></tr> |
| <tr class="separator:a0d8bb5fc8522515aa35d305774cc5332"><td class="memSeparator" colspan="2"> </td></tr> |
| <tr class="memitem:a6c20490aa45c771c38ce8ad3031cbdf6" id="r_a6c20490aa45c771c38ce8ad3031cbdf6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#a6c20490aa45c771c38ce8ad3031cbdf6">tcp_zero_window_probe</a> (struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *pcb)</td></tr> |
| <tr class="separator:a6c20490aa45c771c38ce8ad3031cbdf6"><td class="memSeparator" colspan="2"> </td></tr> |
| </table> |
| <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> |
| <div class="textblock"><p>Transmission Control Protocol, outgoing traffic</p> |
| <p>The output functions of TCP.</p> |
| <p>There are two distinct ways for TCP segments to get sent:</p><ul> |
| <li>queued data: these are segments transferring data or segments containing SYN or FIN (which both count as one sequence number). They are created as struct <a class="el" href="group__pbuf.html">Packet buffers (PBUF)</a> together with a struct tcp_seg and enqueue to the unsent list of the pcb. They are sent by tcp_output:<ul> |
| <li><a class="el" href="group__tcp__raw.html#ga6b2aa0efbf10e254930332b7c89cd8c5">tcp_write</a> : creates data segments</li> |
| <li><a class="el" href="#ac930859c4e4ad9fcf6bb25ef5e91bcd5">tcp_split_unsent_seg</a> : splits a data segment</li> |
| <li><a class="el" href="#aa7d5d552647d567095876aab202bfd1a">tcp_enqueue_flags</a> : creates SYN-only or FIN-only segments</li> |
| <li><a class="el" href="group__tcp__raw.html#ga0cbcc6d628f644a530daf629fa3e5f7f">tcp_output</a> / tcp_output_segment : finalize the tcp header (e.g. sequence numbers, options, checksum) and output to IP</li> |
| <li>the various tcp_rexmit functions shuffle around segments between the unsent an unacked lists to retransmit them</li> |
| <li>tcp_create_segment and tcp_pbuf_prealloc allocate pbuf and segment for these functions</li> |
| </ul> |
| </li> |
| <li>direct send: these segments don't contain data but control the connection behaviour. They are created as pbuf only and sent directly without enqueueing them:<ul> |
| <li><a class="el" href="#aefde3e34b2cc8df9654986484c44a996">tcp_send_empty_ack</a> sends an ACK-only segment</li> |
| <li><a class="el" href="#aa90f8051c9633d3017c588245cdc4014">tcp_rst</a> sends a RST segment</li> |
| <li><a class="el" href="#a0d8bb5fc8522515aa35d305774cc5332">tcp_keepalive</a> sends a keepalive segment</li> |
| <li><a class="el" href="#a6c20490aa45c771c38ce8ad3031cbdf6">tcp_zero_window_probe</a> sends a window probe segment</li> |
| <li>tcp_output_alloc_header allocates a header-only pbuf for these functions </li> |
| </ul> |
| </li> |
| </ul> |
| </div><h2 class="groupheader">Macro Definition Documentation</h2> |
| <a id="a25d7e9081baa5c84f2ebd34b0eb4169b" name="a25d7e9081baa5c84f2ebd34b0eb4169b"></a> |
| <h2 class="memtitle"><span class="permalink"><a href="#a25d7e9081baa5c84f2ebd34b0eb4169b">◆ </a></span>TCP_CHECKSUM_ON_COPY_SANITY_CHECK</h2> |
| |
| <div class="memitem"> |
| <div class="memproto"> |
| <table class="memname"> |
| <tr> |
| <td class="memname">#define TCP_CHECKSUM_ON_COPY_SANITY_CHECK   0</td> |
| </tr> |
| </table> |
| </div><div class="memdoc"> |
| <p>Define this to 1 for an extra check that the output checksum is valid (usefule when the checksum is generated by the application, not the stack) </p> |
| |
| </div> |
| </div> |
| <a id="aa2ef22d2384225a1b5fee187411cc129" name="aa2ef22d2384225a1b5fee187411cc129"></a> |
| <h2 class="memtitle"><span class="permalink"><a href="#aa2ef22d2384225a1b5fee187411cc129">◆ </a></span>TCP_OVERSIZE_CALC_LENGTH</h2> |
| |
| <div class="memitem"> |
| <div class="memproto"> |
| <table class="memname"> |
| <tr> |
| <td class="memname">#define TCP_OVERSIZE_CALC_LENGTH</td> |
| <td>(</td> |
| <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>length</em></span></td><td>)</td> |
| <td></td> |
| </tr> |
| </table> |
| </div><div class="memdoc"> |
| <b>Value:</b><div class="fragment"><div class="line">((length) + <a class="code hl_define" href="group__lwip__opts__tcp.html#ga5648e2580bb55c0efdfbebcf3bad1eef">TCP_OVERSIZE</a>)</div> |
| <div class="ttc" id="agroup__lwip__opts__tcp_html_ga5648e2580bb55c0efdfbebcf3bad1eef"><div class="ttname"><a href="group__lwip__opts__tcp.html#ga5648e2580bb55c0efdfbebcf3bad1eef">TCP_OVERSIZE</a></div><div class="ttdeci">#define TCP_OVERSIZE</div><div class="ttdef"><b>Definition</b> opt.h:1420</div></div> |
| </div><!-- fragment --><p>The size of segment pbufs created when TCP_OVERSIZE is enabled </p> |
| |
| </div> |
| </div> |
| <h2 class="groupheader">Function Documentation</h2> |
| <a id="aa7d5d552647d567095876aab202bfd1a" name="aa7d5d552647d567095876aab202bfd1a"></a> |
| <h2 class="memtitle"><span class="permalink"><a href="#aa7d5d552647d567095876aab202bfd1a">◆ </a></span>tcp_enqueue_flags()</h2> |
| |
| <div class="memitem"> |
| <div class="memproto"> |
| <table class="memname"> |
| <tr> |
| <td class="memname"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> tcp_enqueue_flags </td> |
| <td>(</td> |
| <td class="paramtype">struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *</td> <td class="paramname"><span class="paramname"><em>pcb</em></span>, </td> |
| </tr> |
| <tr> |
| <td class="paramkey"></td> |
| <td></td> |
| <td class="paramtype">u8_t</td> <td class="paramname"><span class="paramname"><em>flags</em></span> )</td> |
| </tr> |
| </table> |
| </div><div class="memdoc"> |
| <p>Enqueue SYN or FIN for transmission.</p> |
| <p>Called by <a class="el" href="group__tcp__raw.html#ga9a31deea4cadacd39f9485f37cfdd012">tcp_connect</a>, tcp_listen_input, and <a class="el" href="group__tcp__raw.html#ga87093e137fcc53ea82a134a3f5b33623">tcp_close</a> (via <a class="el" href="#af40ba9d645a8910436c3d7cf13dba342">tcp_send_fin</a>)</p> |
| <dl class="params"><dt>Parameters</dt><dd> |
| <table class="params"> |
| <tr><td class="paramname">pcb</td><td>Protocol control block for the TCP connection. </td></tr> |
| <tr><td class="paramname">flags</td><td>TCP header flags to set in the outgoing segment. </td></tr> |
| </table> |
| </dd> |
| </dl> |
| |
| </div> |
| </div> |
| <a id="a0d8bb5fc8522515aa35d305774cc5332" name="a0d8bb5fc8522515aa35d305774cc5332"></a> |
| <h2 class="memtitle"><span class="permalink"><a href="#a0d8bb5fc8522515aa35d305774cc5332">◆ </a></span>tcp_keepalive()</h2> |
| |
| <div class="memitem"> |
| <div class="memproto"> |
| <table class="memname"> |
| <tr> |
| <td class="memname"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> tcp_keepalive </td> |
| <td>(</td> |
| <td class="paramtype">struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *</td> <td class="paramname"><span class="paramname"><em>pcb</em></span></td><td>)</td> |
| <td></td> |
| </tr> |
| </table> |
| </div><div class="memdoc"> |
| <p>Send keepalive packets to keep a connection active although no data is sent over it.</p> |
| <p>Called by <a class="el" href="tcp_8c.html#a421fb42ef919018e14ae413adfee9905">tcp_slowtmr()</a></p> |
| <dl class="params"><dt>Parameters</dt><dd> |
| <table class="params"> |
| <tr><td class="paramname">pcb</td><td>the <a class="el" href="structtcp__pcb.html">tcp_pcb</a> for which to send a keepalive packet </td></tr> |
| </table> |
| </dd> |
| </dl> |
| |
| </div> |
| </div> |
| <a id="af75fefe4fe509845be156d6e424eb6f1" name="af75fefe4fe509845be156d6e424eb6f1"></a> |
| <h2 class="memtitle"><span class="permalink"><a href="#af75fefe4fe509845be156d6e424eb6f1">◆ </a></span>tcp_rexmit()</h2> |
| |
| <div class="memitem"> |
| <div class="memproto"> |
| <table class="memname"> |
| <tr> |
| <td class="memname"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> tcp_rexmit </td> |
| <td>(</td> |
| <td class="paramtype">struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *</td> <td class="paramname"><span class="paramname"><em>pcb</em></span></td><td>)</td> |
| <td></td> |
| </tr> |
| </table> |
| </div><div class="memdoc"> |
| <p>Requeue the first unacked segment for retransmission</p> |
| <p>Called by tcp_receive() for fast retransmit.</p> |
| <dl class="params"><dt>Parameters</dt><dd> |
| <table class="params"> |
| <tr><td class="paramname">pcb</td><td>the <a class="el" href="structtcp__pcb.html">tcp_pcb</a> for which to retransmit the first unacked segment </td></tr> |
| </table> |
| </dd> |
| </dl> |
| |
| </div> |
| </div> |
| <a id="adb6ee7b4d59f125cc8bfac3bb5ca3937" name="adb6ee7b4d59f125cc8bfac3bb5ca3937"></a> |
| <h2 class="memtitle"><span class="permalink"><a href="#adb6ee7b4d59f125cc8bfac3bb5ca3937">◆ </a></span>tcp_rexmit_fast()</h2> |
| |
| <div class="memitem"> |
| <div class="memproto"> |
| <table class="memname"> |
| <tr> |
| <td class="memname">void tcp_rexmit_fast </td> |
| <td>(</td> |
| <td class="paramtype">struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *</td> <td class="paramname"><span class="paramname"><em>pcb</em></span></td><td>)</td> |
| <td></td> |
| </tr> |
| </table> |
| </div><div class="memdoc"> |
| <p>Handle retransmission after three dupacks received</p> |
| <dl class="params"><dt>Parameters</dt><dd> |
| <table class="params"> |
| <tr><td class="paramname">pcb</td><td>the <a class="el" href="structtcp__pcb.html">tcp_pcb</a> for which to retransmit the first unacked segment </td></tr> |
| </table> |
| </dd> |
| </dl> |
| |
| </div> |
| </div> |
| <a id="ab5ef9c8ab4629eb721987ae316b9f30f" name="ab5ef9c8ab4629eb721987ae316b9f30f"></a> |
| <h2 class="memtitle"><span class="permalink"><a href="#ab5ef9c8ab4629eb721987ae316b9f30f">◆ </a></span>tcp_rexmit_rto()</h2> |
| |
| <div class="memitem"> |
| <div class="memproto"> |
| <table class="memname"> |
| <tr> |
| <td class="memname">void tcp_rexmit_rto </td> |
| <td>(</td> |
| <td class="paramtype">struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *</td> <td class="paramname"><span class="paramname"><em>pcb</em></span></td><td>)</td> |
| <td></td> |
| </tr> |
| </table> |
| </div><div class="memdoc"> |
| <p>Requeue all unacked segments for retransmission</p> |
| <p>Called by tcp_process() only, <a class="el" href="tcp_8c.html#a421fb42ef919018e14ae413adfee9905">tcp_slowtmr()</a> needs to do some things between "prepare" and "commit".</p> |
| <dl class="params"><dt>Parameters</dt><dd> |
| <table class="params"> |
| <tr><td class="paramname">pcb</td><td>the <a class="el" href="structtcp__pcb.html">tcp_pcb</a> for which to re-enqueue all unacked segments </td></tr> |
| </table> |
| </dd> |
| </dl> |
| |
| </div> |
| </div> |
| <a id="a9ef9dc094e21bdf0779aed25ab0b08d4" name="a9ef9dc094e21bdf0779aed25ab0b08d4"></a> |
| <h2 class="memtitle"><span class="permalink"><a href="#a9ef9dc094e21bdf0779aed25ab0b08d4">◆ </a></span>tcp_rexmit_rto_commit()</h2> |
| |
| <div class="memitem"> |
| <div class="memproto"> |
| <table class="memname"> |
| <tr> |
| <td class="memname">void tcp_rexmit_rto_commit </td> |
| <td>(</td> |
| <td class="paramtype">struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *</td> <td class="paramname"><span class="paramname"><em>pcb</em></span></td><td>)</td> |
| <td></td> |
| </tr> |
| </table> |
| </div><div class="memdoc"> |
| <p>Requeue all unacked segments for retransmission</p> |
| <p>Called by <a class="el" href="tcp_8c.html#a421fb42ef919018e14ae413adfee9905">tcp_slowtmr()</a> for slow retransmission.</p> |
| <dl class="params"><dt>Parameters</dt><dd> |
| <table class="params"> |
| <tr><td class="paramname">pcb</td><td>the <a class="el" href="structtcp__pcb.html">tcp_pcb</a> for which to re-enqueue all unacked segments </td></tr> |
| </table> |
| </dd> |
| </dl> |
| |
| </div> |
| </div> |
| <a id="a1f318930bd6d49074343cc79c5166f39" name="a1f318930bd6d49074343cc79c5166f39"></a> |
| <h2 class="memtitle"><span class="permalink"><a href="#a1f318930bd6d49074343cc79c5166f39">◆ </a></span>tcp_rexmit_rto_prepare()</h2> |
| |
| <div class="memitem"> |
| <div class="memproto"> |
| <table class="memname"> |
| <tr> |
| <td class="memname"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> tcp_rexmit_rto_prepare </td> |
| <td>(</td> |
| <td class="paramtype">struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *</td> <td class="paramname"><span class="paramname"><em>pcb</em></span></td><td>)</td> |
| <td></td> |
| </tr> |
| </table> |
| </div><div class="memdoc"> |
| <p>Requeue all unacked segments for retransmission</p> |
| <p>Called by <a class="el" href="tcp_8c.html#a421fb42ef919018e14ae413adfee9905">tcp_slowtmr()</a> for slow retransmission.</p> |
| <dl class="params"><dt>Parameters</dt><dd> |
| <table class="params"> |
| <tr><td class="paramname">pcb</td><td>the <a class="el" href="structtcp__pcb.html">tcp_pcb</a> for which to re-enqueue all unacked segments </td></tr> |
| </table> |
| </dd> |
| </dl> |
| |
| </div> |
| </div> |
| <a id="aa90f8051c9633d3017c588245cdc4014" name="aa90f8051c9633d3017c588245cdc4014"></a> |
| <h2 class="memtitle"><span class="permalink"><a href="#aa90f8051c9633d3017c588245cdc4014">◆ </a></span>tcp_rst()</h2> |
| |
| <div class="memitem"> |
| <div class="memproto"> |
| <table class="memname"> |
| <tr> |
| <td class="memname">void tcp_rst </td> |
| <td>(</td> |
| <td class="paramtype">const struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *</td> <td class="paramname"><span class="paramname"><em>pcb</em></span>, </td> |
| </tr> |
| <tr> |
| <td class="paramkey"></td> |
| <td></td> |
| <td class="paramtype">u32_t</td> <td class="paramname"><span class="paramname"><em>seqno</em></span>, </td> |
| </tr> |
| <tr> |
| <td class="paramkey"></td> |
| <td></td> |
| <td class="paramtype">u32_t</td> <td class="paramname"><span class="paramname"><em>ackno</em></span>, </td> |
| </tr> |
| <tr> |
| <td class="paramkey"></td> |
| <td></td> |
| <td class="paramtype">const <a class="el" href="group__ipaddr.html#ga335a8c9df66319e88a1a529047ce0a1e">ip_addr_t</a> *</td> <td class="paramname"><span class="paramname"><em>local_ip</em></span>, </td> |
| </tr> |
| <tr> |
| <td class="paramkey"></td> |
| <td></td> |
| <td class="paramtype">const <a class="el" href="group__ipaddr.html#ga335a8c9df66319e88a1a529047ce0a1e">ip_addr_t</a> *</td> <td class="paramname"><span class="paramname"><em>remote_ip</em></span>, </td> |
| </tr> |
| <tr> |
| <td class="paramkey"></td> |
| <td></td> |
| <td class="paramtype">u16_t</td> <td class="paramname"><span class="paramname"><em>local_port</em></span>, </td> |
| </tr> |
| <tr> |
| <td class="paramkey"></td> |
| <td></td> |
| <td class="paramtype">u16_t</td> <td class="paramname"><span class="paramname"><em>remote_port</em></span> )</td> |
| </tr> |
| </table> |
| </div><div class="memdoc"> |
| <p>Send a TCP RESET packet (empty segment with RST flag set) either to abort a connection or to show that there is no matching local connection for a received segment.</p> |
| <p>Called by <a class="el" href="group__tcp__raw.html#ga468c2260ddb01582e966ddcf3c25ce61">tcp_abort()</a> (to abort a local connection), <a class="el" href="tcp__in_8c.html#ae70c3c99d9dd6b07f7e11f7ba5eedcb5">tcp_input()</a> (if no matching local pcb was found), tcp_listen_input() (if incoming segment has ACK flag set) and tcp_process() (received segment in the wrong state)</p> |
| <p>Since a RST segment is in most cases not sent for an active connection, <a class="el" href="#aa90f8051c9633d3017c588245cdc4014">tcp_rst()</a> has a number of arguments that are taken from a <a class="el" href="structtcp__pcb.html">tcp_pcb</a> for most other segment output functions.</p> |
| <dl class="params"><dt>Parameters</dt><dd> |
| <table class="params"> |
| <tr><td class="paramname">pcb</td><td>TCP pcb (may be NULL if no pcb is available) </td></tr> |
| <tr><td class="paramname">seqno</td><td>the sequence number to use for the outgoing segment </td></tr> |
| <tr><td class="paramname">ackno</td><td>the acknowledge number to use for the outgoing segment </td></tr> |
| <tr><td class="paramname">local_ip</td><td>the local IP address to send the segment from </td></tr> |
| <tr><td class="paramname">remote_ip</td><td>the remote IP address to send the segment to </td></tr> |
| <tr><td class="paramname">local_port</td><td>the local TCP port to send the segment from </td></tr> |
| <tr><td class="paramname">remote_port</td><td>the remote TCP port to send the segment to </td></tr> |
| </table> |
| </dd> |
| </dl> |
| |
| </div> |
| </div> |
| <a id="aefde3e34b2cc8df9654986484c44a996" name="aefde3e34b2cc8df9654986484c44a996"></a> |
| <h2 class="memtitle"><span class="permalink"><a href="#aefde3e34b2cc8df9654986484c44a996">◆ </a></span>tcp_send_empty_ack()</h2> |
| |
| <div class="memitem"> |
| <div class="memproto"> |
| <table class="memname"> |
| <tr> |
| <td class="memname"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> tcp_send_empty_ack </td> |
| <td>(</td> |
| <td class="paramtype">struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *</td> <td class="paramname"><span class="paramname"><em>pcb</em></span></td><td>)</td> |
| <td></td> |
| </tr> |
| </table> |
| </div><div class="memdoc"> |
| <p>Send an ACK without data.</p> |
| <dl class="params"><dt>Parameters</dt><dd> |
| <table class="params"> |
| <tr><td class="paramname">pcb</td><td>Protocol control block for the TCP connection to send the ACK </td></tr> |
| </table> |
| </dd> |
| </dl> |
| |
| </div> |
| </div> |
| <a id="af40ba9d645a8910436c3d7cf13dba342" name="af40ba9d645a8910436c3d7cf13dba342"></a> |
| <h2 class="memtitle"><span class="permalink"><a href="#af40ba9d645a8910436c3d7cf13dba342">◆ </a></span>tcp_send_fin()</h2> |
| |
| <div class="memitem"> |
| <div class="memproto"> |
| <table class="memname"> |
| <tr> |
| <td class="memname"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> tcp_send_fin </td> |
| <td>(</td> |
| <td class="paramtype">struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *</td> <td class="paramname"><span class="paramname"><em>pcb</em></span></td><td>)</td> |
| <td></td> |
| </tr> |
| </table> |
| </div><div class="memdoc"> |
| <p>Called by <a class="el" href="group__tcp__raw.html#ga87093e137fcc53ea82a134a3f5b33623">tcp_close()</a> to send a segment including FIN flag but not data. This FIN may be added to an existing segment or a new, otherwise empty segment is enqueued.</p> |
| <dl class="params"><dt>Parameters</dt><dd> |
| <table class="params"> |
| <tr><td class="paramname">pcb</td><td>the <a class="el" href="structtcp__pcb.html">tcp_pcb</a> over which to send a segment </td></tr> |
| </table> |
| </dd> |
| </dl> |
| <dl class="section return"><dt>Returns</dt><dd>ERR_OK if sent, another err_t otherwise </dd></dl> |
| |
| </div> |
| </div> |
| <a id="ac930859c4e4ad9fcf6bb25ef5e91bcd5" name="ac930859c4e4ad9fcf6bb25ef5e91bcd5"></a> |
| <h2 class="memtitle"><span class="permalink"><a href="#ac930859c4e4ad9fcf6bb25ef5e91bcd5">◆ </a></span>tcp_split_unsent_seg()</h2> |
| |
| <div class="memitem"> |
| <div class="memproto"> |
| <table class="memname"> |
| <tr> |
| <td class="memname"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> tcp_split_unsent_seg </td> |
| <td>(</td> |
| <td class="paramtype">struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *</td> <td class="paramname"><span class="paramname"><em>pcb</em></span>, </td> |
| </tr> |
| <tr> |
| <td class="paramkey"></td> |
| <td></td> |
| <td class="paramtype">u16_t</td> <td class="paramname"><span class="paramname"><em>split</em></span> )</td> |
| </tr> |
| </table> |
| </div><div class="memdoc"> |
| <p>Split segment on the head of the unsent queue. If return is not ERR_OK, existing head remains intact</p> |
| <p>The split is accomplished by creating a new TCP segment and pbuf which holds the remainder payload after the split. The original pbuf is trimmed to new length. This allows splitting of read-only pbufs</p> |
| <dl class="params"><dt>Parameters</dt><dd> |
| <table class="params"> |
| <tr><td class="paramname">pcb</td><td>the <a class="el" href="structtcp__pcb.html">tcp_pcb</a> for which to split the unsent head </td></tr> |
| <tr><td class="paramname">split</td><td>the amount of payload to remain in the head </td></tr> |
| </table> |
| </dd> |
| </dl> |
| |
| </div> |
| </div> |
| <a id="a6c20490aa45c771c38ce8ad3031cbdf6" name="a6c20490aa45c771c38ce8ad3031cbdf6"></a> |
| <h2 class="memtitle"><span class="permalink"><a href="#a6c20490aa45c771c38ce8ad3031cbdf6">◆ </a></span>tcp_zero_window_probe()</h2> |
| |
| <div class="memitem"> |
| <div class="memproto"> |
| <table class="memname"> |
| <tr> |
| <td class="memname"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> tcp_zero_window_probe </td> |
| <td>(</td> |
| <td class="paramtype">struct <a class="el" href="structtcp__pcb.html">tcp_pcb</a> *</td> <td class="paramname"><span class="paramname"><em>pcb</em></span></td><td>)</td> |
| <td></td> |
| </tr> |
| </table> |
| </div><div class="memdoc"> |
| <p>Send persist timer zero-window probes to keep a connection active when a window update is lost.</p> |
| <p>Called by <a class="el" href="tcp_8c.html#a421fb42ef919018e14ae413adfee9905">tcp_slowtmr()</a></p> |
| <dl class="params"><dt>Parameters</dt><dd> |
| <table class="params"> |
| <tr><td class="paramname">pcb</td><td>the <a class="el" href="structtcp__pcb.html">tcp_pcb</a> for which to send a zero-window probe packet </td></tr> |
| </table> |
| </dd> |
| </dl> |
| |
| </div> |
| </div> |
| </div><!-- contents --> |
| </div><!-- doc-content --> |
| <!-- start footer part --> |
| <div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> |
| <ul> |
| <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li><li class="navelem"><a class="el" href="tcp__out_8c.html">tcp_out.c</a></li> |
| <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 </li> |
| </ul> |
| </div> |
| </body> |
| </html> |