Update repo

This commit is contained in:
2026-08-30 23:04:35 -07:00
parent 749dab5721
commit ce65a0f59a
14950 changed files with 4408250 additions and 1 deletions
@@ -0,0 +1,67 @@
//###########################################################################
//
// FILE: pinout.c
//
// TITLE: pinout for f2838x device.
//
//###########################################################################
// $TI Release: $
// $Release Date: $
//
// C2000Ware v5.04.00.00
//
// Copyright (C) 2024 Texas Instruments Incorporated - http://www.ti.com
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the
// distribution.
//
// Neither the name of Texas Instruments Incorporated nor the names of
// its contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// $
//###########################################################################
#include <stdint.h>
#include "board_drivers/pinout.h"
//*****************************************************************************
//
// Error handling function to be called when an ASSERT is violated
//
//*****************************************************************************
void __error__(const char *filename, uint32_t line)
{
//
// An ASSERT condition was evaluated as false. You can use the filename and
// line parameters to determine what went wrong.
//
__asm(" bkpt #0");
}
//*****************************************************************************
//
// Close the Doxygen group.
//! @}
//
//*****************************************************************************
@@ -0,0 +1,59 @@
//###########################################################################
//
// FILE: pinout.h
//
// TITLE: pinout for f2838x device.
//
//###########################################################################
// $TI Release: $
// $Release Date: $
//
// C2000Ware v5.04.00.00
//
// Copyright (C) 2024 Texas Instruments Incorporated - http://www.ti.com
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the
// distribution.
//
// Neither the name of Texas Instruments Incorporated nor the names of
// its contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// $
//###########################################################################
#ifndef __SET_PINOUT_H__
#define __SET_PINOUT_H__
//*****************************************************************************
//
// Board specific definitions
//
//*****************************************************************************
//
// User LEDs present on the F2838X control card.
//
#define DEVICE_GPIO_PIN_LED1 31U // GPIO number for LD2
#define DEVICE_GPIO_PIN_LED2 34U // GPIO number for LD3
#endif // __SET_PINOUT_H__
@@ -0,0 +1,58 @@
# Ethernet with lwIP
About:
This example application demonstrates the operation of the F2838x microcontroller
Ethernet controller using the lwIP TCP/IP Stack. This example sets up the Ethernet
MAC. It then configures the lwIP network stack with a static IP address of
192.168.0.4.
Protocols enabled:
ARP, ICMP, TCP/IP, HTTP
Current Capabilities:
Once programmed, the device sits in an endless loop and all the processing takes
place in the interrupt context. This example is capable of the following:
1.ICMP ping - sends ping responses to ping requests.
2.HTTP Webserver example - displays a webpage with a basic bidirectional data
transfer utility.
Note: The sender should be in the same network (192.168.0.x / 255.255.255.0).
Steps to run this example:
1. Program the c28 core with correct pinmux configuration.
2. Program the cm core with the enet_lwip example binary. Let the controller run.
It is programmed with a static IP address - 192.168.0.4.
3. On any sending device, set the IP address to something like 192.168.0.x so that
the sending device and the f2838x device are in the same network. Now, both the
device can be connected directly or even through a switch in between. Since the
f2838x device supports ARP, it will be able to respond to ICMP/HTTP requests
even through the switch.
4. For ping example:
a. Ping the f2838x device which can be typically done with standard 'ping' command
on most devices.
ping 192.168.0.4
b. The sender device should be able to see ping replies from the f2838x device's
IP address.
5. For Webserver example:
a. Open a web browser in the other device. Type 192.168.0.4 in the address bar.
b. A webpage shows up with TI logo and an interactive button. Clicking on the
button should update a number value on the webpage. Button click sends an
HTTP query to the device which sends back the value of a global counter and
then increments the value of the counter. So, the webpage value should increase
with each button click.
+Note: The webserver is currently capable of handling only the HTTP requests and not
cgi/ssi scripting.
++Note on Custom Webserver Pages/FileSystem :
1. Design your own webserver pages and store them in a folder under
{LWIP_DIR}/src/apps/http/fs. Run the makefsdata.exe program which will generate
"fsdata.c" file in the same directory which has all the files converted and stored
as C arrays.
2. Copy the contents of this file into the {LWIP_DIR}/src/apps/http/fsdata.c file.
This file is included in this enet_lwip project and hence the webserver will
get updated in the device and query to the device IP address in the network will
show the updated webpages.
For additional details on lwIP, refer to the lwIP web page at:
http://savannah.nongnu.org/projects/lwip/
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<?ccsproject version="1.0"?>
<projectOptions>
<deviceFamily value="TMS470"/>
<isTargetManual value="false"/>
</projectOptions>
@@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule configRelations="2" moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="com.ti.ccstudio.buildDefinitions.TMS470.Debug.184888370">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.ti.ccstudio.buildDefinitions.TMS470.Debug.184888370" moduleId="org.eclipse.cdt.core.settings" name="Flash">
<externalSettings/>
<extensions>
<extension id="com.ti.ccstudio.binaryparser.CoffParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="com.ti.ccstudio.errorparser.CoffErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="com.ti.ccstudio.errorparser.LinkErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="com.ti.ccstudio.errorparser.AsmErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactExtension="out" artifactName="enet_lwip_cm" buildProperties="" description="" id="com.ti.ccstudio.buildDefinitions.TMS470.Debug.184888370" name="Flash" parent="com.ti.ccstudio.buildDefinitions.TMS470.Debug">
<folderInfo id="com.ti.ccstudio.buildDefinitions.TMS470.Debug.184888370.1029368675" name="/" resourcePath="">
<toolChain id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.DebugToolchain.36723669" name="TI Build Tools" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.DebugToolchain" targetTool="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.linkerDebug.2010964716">
<option id="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS.676000411" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS" valueType="stringList">
<listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=Cortex M.TMS320F28388D"/>
<listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=little"/>
<listOptionValue builtIn="false" value="OUTPUT_FORMAT=ELF"/>
<listOptionValue builtIn="false" value="LINKER_COMMAND_FILE=2838x_flash_lnk_cm_lwip.cmd"/>
<listOptionValue builtIn="false" value="RUNTIME_SUPPORT_LIBRARY=libc.a"/>
<listOptionValue builtIn="false" value="CCS_MBS_VERSION=6.1.3"/>
<listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION.1295958247" name="Compiler version" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="20.2.6.LTS" valueType="string"/>
<targetPlatform id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.targetPlatformDebug.1885559033" name="Platform" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.targetPlatformDebug"/>
<builder buildPath="${BuildDirectory}" id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.builderDebug.1117954107" keepEnvironmentInBuildfile="false" name="GNU Make" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.builderDebug"/>
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.compilerDebug.1963955038" name="ARM Compiler" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.compilerDebug">
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.SILICON_VERSION.1799341076" name="Target processor version (--silicon_version, -mv)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.SILICON_VERSION" value="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.SILICON_VERSION.7M4" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.CODE_STATE.287607948" name="Designate code state, 16-bit (thumb) or 32-bit (--code_state)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.CODE_STATE" value="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.CODE_STATE.16" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.FLOAT_SUPPORT.1193761807" name="Specify floating point support (--float_support)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.FLOAT_SUPPORT" value="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.FLOAT_SUPPORT.none" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.ABI.1913869672" name="Application binary interface. (--abi)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.ABI" value="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.ABI.eabi" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.GEN_FUNC_SUBSECTIONS.450931546" name="Place each function in a separate subsection (--gen_func_subsections, -ms)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.GEN_FUNC_SUBSECTIONS" value="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.GEN_FUNC_SUBSECTIONS.on" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.UAL.1683806356" name="Use unified assembly language (--ual)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.UAL" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.DEFINE.1924197276" name="Pre-define NAME (--define, -D)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.DEFINE" valueType="definedSymbols">
<listOptionValue builtIn="false" value="_FLASH"/>
<listOptionValue builtIn="false" value="ccs"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.LITTLE_ENDIAN.2068919185" name="Little endian code [See 'General' page to edit] (--little_endian, -me)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.LITTLE_ENDIAN" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.OPT_LEVEL.1701259753" name="Optimization level (--opt_level, -O)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.OPT_LEVEL" value="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.OPT_LEVEL.0" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.OPT_FOR_SPEED.2135073198" name="Speed vs. size trade-offs (--opt_for_speed, -mf)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.OPT_FOR_SPEED" value="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.OPT_FOR_SPEED.0" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.INCLUDE_PATH.1722710957" name="Add dir to #include search path (--include_path, -I)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.INCLUDE_PATH" valueType="includePath">
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/include"/>
<listOptionValue builtIn="false" value="${LWIP_LOC}/src/apps/http"/>
<listOptionValue builtIn="false" value="${LWIP_LOC}/.."/>
<listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}}"/>
<listOptionValue builtIn="false" value="${CM_DRIVERLIB}"/>
<listOptionValue builtIn="false" value="${CM_DRIVERLIB}/driverlib_cm"/>
<listOptionValue builtIn="false" value="${PROJECT_LOC}/.."/>
<listOptionValue builtIn="false" value="${CM_DRIVERLIB}"/>
<listOptionValue builtIn="false" value="${LWIP_LOC}"/>
<listOptionValue builtIn="false" value="${LWIP_LOC}/src/include"/>
<listOptionValue builtIn="false" value="${LWIP_LOC}/src/apps"/>
<listOptionValue builtIn="false" value="${LWIP_LOC}/ports/C2000/include"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.DEBUGGING_MODEL.1229336766" name="Debugging model" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.DEBUGGING_MODEL" value="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.DEBUGGING_MODEL.SYMDEBUG__DWARF" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.DIAG_WARNING.1049801932" name="Treat diagnostic &lt;id&gt; as warning (--diag_warning, -pdsw)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.DIAG_WARNING" valueType="stringList">
<listOptionValue builtIn="false" value="225"/>
</option>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compiler.inputType__C_SRCS.411735571" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compiler.inputType__C_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compiler.inputType__CPP_SRCS.1821791163" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compiler.inputType__CPP_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compiler.inputType__ASM_SRCS.652581610" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compiler.inputType__ASM_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compiler.inputType__ASM2_SRCS.153649051" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compiler.inputType__ASM2_SRCS"/>
</tool>
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.linkerDebug.2010964716" name="ARM Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.linkerDebug">
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.STACK_SIZE.2126566027" name="Set C system stack size (--stack_size, -stack)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.STACK_SIZE" value="2048" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.HEAP_SIZE.158067395" name="Heap size for C/C++ dynamic memory allocation (--heap_size, -heap)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.HEAP_SIZE" value="0" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.MAP_FILE.2027049908" name="Link information (map) listed into &lt;file&gt; (--map_file, -m)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.MAP_FILE" value="&quot;enet_lwip_cm.map&quot;" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.OUTPUT_FILE.2038017615" name="Specify output file name (--output_file, -o)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.OUTPUT_FILE" value="enet_lwip_cm.out" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.LIBRARY.1032274818" name="Include library file or command file as input (--library, -l)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.LIBRARY" valueType="libs">
<listOptionValue builtIn="false" value="${CM_DRIVERLIB}/driverlib_cm/ccs/Debug/driverlib_cm.lib"/>
<listOptionValue builtIn="false" value="libc.a"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.SEARCH_PATH.17281163" name="Add &lt;dir&gt; to library search path (--search_path, -i)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.SEARCH_PATH" valueType="libPaths">
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/lib"/>
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/include"/>
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/.."/>
<listOptionValue builtIn="false" value="${PROJECT_LOC}/../../../../../../../../../driverlib/f2838x/driverlib_cm/ccs/Debug"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.XML_LINK_INFO.72795111" name="Detailed link information data-base into &lt;file&gt; (--xml_link_info, -xml_link_info)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.XML_LINK_INFO" value="&quot;enet_lwip_cm_linkInfo.xml&quot;" valueType="string"/>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exeLinker.inputType__CMD_SRCS.252273783" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exeLinker.inputType__CMD_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exeLinker.inputType__CMD2_SRCS.63239973" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exeLinker.inputType__CMD2_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exeLinker.inputType__GEN_CMDS.1020651975" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exeLinker.inputType__GEN_CMDS"/>
</tool>
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.hex.619647623" name="ARM Hex Utility" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.hex"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="enet_lwip.com.ti.ccstudio.buildDefinitions.TMS470.ProjectType.564716668" name="ARM" projectType="com.ti.ccstudio.buildDefinitions.TMS470.ProjectType"/>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
<storageModule moduleId="org.eclipse.cdt.core.language.mapping">
<project-mappings>
<content-type-mapping configuration="" content-type="org.eclipse.cdt.core.asmSource" language="com.ti.ccstudio.core.TIASMLanguage"/>
<content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cHeader" language="com.ti.ccstudio.core.TIGCCLanguage"/>
<content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cSource" language="com.ti.ccstudio.core.TIGCCLanguage"/>
<content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cxxHeader" language="com.ti.ccstudio.core.TIGPPLanguage"/>
<content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cxxSource" language="com.ti.ccstudio.core.TIGPPLanguage"/>
</project-mappings>
</storageModule>
<storageModule moduleId="scannerConfiguration"/>
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
</cproject>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="com.ti.ccstudio.debug.launchType.device.debugging">
<stringAttribute key="com.ti.ccstudio.debug.debugModel.ATTR_DEBUGGER_PROPERTIES.D:\Office\CCS_Projects\C2000_Workspace3\enet_lwip_MSP_EXP432E401Y_nortos_ccs\targetConfigs\MSP432E401Y.ccxml.Texas Instruments XDS110 USB Debug Probe/CORTEX_M4_0" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot; ?&gt;&#10;&lt;PropertyValues&gt;&#10;&#10; &lt;property id=&quot;ConnectOnStartup&quot;&gt;&#10; &lt;curValue&gt;1&lt;/curValue&gt;&#10; &lt;/property&gt;&#10;&#10; &lt;property id=&quot;EnableInstalledBreakpoint&quot;&gt;&#10; &lt;curValue&gt;1&lt;/curValue&gt;&#10; &lt;/property&gt;&#10;&#10; &lt;property id=&quot;IgnoreSoftLaunchFailures&quot;&gt;&#10; &lt;curValue&gt;0&lt;/curValue&gt;&#10; &lt;/property&gt;&#10;&#10;&lt;/PropertyValues&gt;&#10;"/>
<stringAttribute key="com.ti.ccstudio.debug.debugModel.ATTR_PROGRAM.D:\Office\CCS_Projects\C2000_Workspace3\enet_lwip_MSP_EXP432E401Y_nortos_ccs\targetConfigs\MSP432E401Y.ccxml.Texas Instruments XDS110 USB Debug Probe/CORTEX_M4_0" value="${build_artifact:enet_lwip_m3}"/>
<stringAttribute key="com.ti.ccstudio.debug.debugModel.ATTR_PROJECT.D:\Office\CCS_Projects\C2000_Workspace3\enet_lwip_MSP_EXP432E401Y_nortos_ccs\targetConfigs\MSP432E401Y.ccxml.Texas Instruments XDS110 USB Debug Probe/CORTEX_M4_0" value="enet_lwip_m3"/>
<stringAttribute key="com.ti.ccstudio.debug.debugModel.ATTR_TARGET_CONFIG" value="${target_config_active_default:enet_lwip_m3}"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/enet_lwip_m3"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="com.ti.ccstudio.debug.sourceLocator"/>
<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;sourceLookupDirector&gt;&#13;&#10;&lt;sourceContainers duplicates=&quot;false&quot;&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;default/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.default&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;cpuSpecificContainer cpuName=&amp;quot;Texas Instruments XDS110 USB Debug Probe/CORTEX_M4_0&amp;quot;&amp;gt;&amp;#13;&amp;#10;&amp;lt;childContainerEntry childMemento=&amp;quot;&amp;amp;lt;?xml version=&amp;amp;quot;1.0&amp;amp;quot; encoding=&amp;amp;quot;UTF-8&amp;amp;quot; standalone=&amp;amp;quot;no&amp;amp;quot;?&amp;amp;gt;&amp;amp;#13;&amp;amp;#10;&amp;amp;lt;project name=&amp;amp;quot;enet_lwip_m3&amp;amp;quot; referencedProjects=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&amp;amp;#13;&amp;amp;#10;&amp;quot; childType=&amp;quot;org.eclipse.debug.core.containerType.project&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&amp;lt;childContainerEntry childMemento=&amp;quot;&amp;amp;lt;?xml version=&amp;amp;quot;1.0&amp;amp;quot; encoding=&amp;amp;quot;UTF-8&amp;amp;quot; standalone=&amp;amp;quot;no&amp;amp;quot;?&amp;amp;gt;&amp;amp;#13;&amp;amp;#10;&amp;amp;lt;default/&amp;amp;gt;&amp;amp;#13;&amp;amp;#10;&amp;quot; childType=&amp;quot;org.eclipse.debug.core.containerType.default&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&amp;lt;childContainerEntry childMemento=&amp;quot;&amp;amp;lt;?xml version=&amp;amp;quot;1.0&amp;amp;quot; encoding=&amp;amp;quot;UTF-8&amp;amp;quot; standalone=&amp;amp;quot;no&amp;amp;quot;?&amp;amp;gt;&amp;amp;#13;&amp;amp;#10;&amp;amp;lt;productsSource/&amp;amp;gt;&amp;amp;#13;&amp;amp;#10;&amp;quot; childType=&amp;quot;com.ti.ccstudio.debug.containerType.products.source&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&amp;lt;childContainerEntry childMemento=&amp;quot;&amp;amp;lt;?xml version=&amp;amp;quot;1.0&amp;amp;quot; encoding=&amp;amp;quot;UTF-8&amp;amp;quot; standalone=&amp;amp;quot;no&amp;amp;quot;?&amp;amp;gt;&amp;amp;#13;&amp;amp;#10;&amp;amp;lt;deviceLibrarySource/&amp;amp;gt;&amp;amp;#13;&amp;amp;#10;&amp;quot; childType=&amp;quot;com.ti.ccstudio.debug.containerType.device.library.source&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&amp;lt;childContainerEntry childMemento=&amp;quot;&amp;amp;lt;?xml version=&amp;amp;quot;1.0&amp;amp;quot; encoding=&amp;amp;quot;UTF-8&amp;amp;quot; standalone=&amp;amp;quot;no&amp;amp;quot;?&amp;amp;gt;&amp;amp;#13;&amp;amp;#10;&amp;amp;lt;librarySource/&amp;amp;gt;&amp;amp;#13;&amp;amp;#10;&amp;quot; childType=&amp;quot;com.ti.ccstudio.debug.containerType.library.source&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&amp;lt;/cpuSpecificContainer&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;com.ti.ccstudio.debug.containerType.cpu.specific&quot;/&gt;&#13;&#10;&lt;/sourceContainers&gt;&#13;&#10;&lt;/sourceLookupDirector&gt;&#13;&#10;"/>
</launchConfiguration>
@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>enet_lwip</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.core.ccnature</nature>
<nature>com.ti.ccstudio.core.ccsNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
<linkedResources>
<link>
<name>enet_lwip.c</name>
<type>1</type>
<locationURI>PARENT-1-PROJECT_LOC/enet_lwip.c</locationURI>
</link>
<link>
<name>f2838xif.c</name>
<type>1</type>
<locationURI>LWIP_LOC/ports/C2000/netif/f2838xif.c</locationURI>
</link>
<link>
<name>fs.c</name>
<type>1</type>
<locationURI>PARENT-1-LWIP_LOC/lwip-2.1.2/src/apps/http/fs.c</locationURI>
</link>
<link>
<name>httpd.c</name>
<type>1</type>
<locationURI>PARENT-1-LWIP_LOC/lwip-2.1.2/src/apps/http/httpd.c</locationURI>
</link>
<link>
<name>lwiplib.c</name>
<type>1</type>
<locationURI>PARENT-1-LWIP_LOC/utils/lwiplib.c</locationURI>
</link>
<link>
<name>lwipopts.h</name>
<type>1</type>
<locationURI>PARENT-1-PROJECT_LOC/lwipopts.h</locationURI>
</link>
<link>
<name>pinout.c</name>
<type>1</type>
<locationURI>PARENT-1-LWIP_LOC/board_drivers/pinout.c</locationURI>
</link>
<link>
<name>startup_ccs.c</name>
<type>1</type>
<locationURI>PARENT-1-PROJECT_LOC/startup_ccs.c</locationURI>
</link>
<link>
<name>ustdlib.c</name>
<type>1</type>
<locationURI>PARENT-1-LWIP_LOC/utils/ustdlib.c</locationURI>
</link>
</linkedResources>
<variableList>
<variable>
<name>CM_DRIVERLIB</name>
<value>$%7BPARENT-9-PROJECT_LOC%7D/driverlib/f2838x</value>
</variable>
<variable>
<name>LWIP_LOC</name>
<value>$%7BPARENT-4-PROJECT_LOC%7D/lwip-2.1.2</value>
</variable>
</variableList>
</projectDescription>
@@ -0,0 +1,3 @@
eclipse.preferences.version=1
inEditor=false
onBuild=false
@@ -0,0 +1,2 @@
eclipse.preferences.version=1
org.eclipse.cdt.debug.core.toggleBreakpointModel=com.ti.ccstudio.debug.CCSBreakpointMarker
@@ -0,0 +1,10 @@
#Mon Apr 30 08:48:00 CDT 2012
com.ti.ccstudio.buildDefinitions.TMS470.Debug.184888370/internalBuilder/enabled=false
com.ti.ccstudio.buildDefinitions.TMS470.Debug.184888370/internalBuilder/ignoreErr=true
com.ti.ccstudio.buildDefinitions.TMS470.Debug.880899083/internalBuilder/enabled=false
com.ti.ccstudio.buildDefinitions.TMS470.Debug.880899083/internalBuilder/ignoreErr=true
com.ti.ccstudio.buildDefinitions.TMS470.Release.1515961266/internalBuilder/enabled=false
com.ti.ccstudio.buildDefinitions.TMS470.Release.1515961266/internalBuilder/ignoreErr=true
eclipse.preferences.version=1
environment/project=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<environment/>\r\n
environment/project/com.ti.ccstudio.buildDefinitions.TMS470.Debug.184888370=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<environment/>\r\n
@@ -0,0 +1,6 @@
eclipse.preferences.version=1
encoding//Flash/makefile=UTF-8
encoding//Flash/objects.mk=UTF-8
encoding//Flash/sources.mk=UTF-8
encoding//Flash/subdir_rules.mk=UTF-8
encoding//Flash/subdir_vars.mk=UTF-8
@@ -0,0 +1,83 @@
MEMORY
{
/* Flash sectors */
CMBANK0_RESETISR : origin = 0x00200000, length = 0x00000008 /* Boot to Flash Entry Point */
CMBANK0_SECTOR0 : origin = 0x00200008, length = 0x00003FF7
CMBANK0_SECTOR1 : origin = 0x00204000, length = 0x00004000
CMBANK0_SECTOR2 : origin = 0x00208000, length = 0x00004000
CMBANK0_SECTOR3 : origin = 0x0020C000, length = 0x00004000
CMBANK0_SECTOR4 : origin = 0x00210000, length = 0x00010000
CMBANK0_SECTOR5 : origin = 0x00220000, length = 0x00010000
CMBANK0_SECTOR6 : origin = 0x00230000, length = 0x00010000
CMBANK0_SECTOR7 : origin = 0x00240000, length = 0x00010000
CMBANK0_SECTOR8 : origin = 0x00250000, length = 0x00010000
CMBANK0_SECTOR9 : origin = 0x00260000, length = 0x00010000
CMBANK0_SECTOR10 : origin = 0x00270000, length = 0x00004000
CMBANK0_SECTOR11 : origin = 0x00274000, length = 0x00004000
CMBANK0_SECTOR12 : origin = 0x00278000, length = 0x00004000
CMBANK0_SECTOR13 : origin = 0x0027C000, length = 0x00004000
C1RAM : origin = 0x1FFFC000, length = 0x00001FFF
C0RAM : origin = 0x1FFFE000, length = 0x00001FFF
BOOT_RSVD : origin = 0x20000000, length = 0x00000800 /* Part of S0, BOOT rom will use this for stack */
SRAM : origin = 0x20000800, length = 0x0000F7FF
E0RAM : origin = 0x20010000, length = 0x00003FFF
CPU1TOCMMSGRAM0 : origin = 0x20080000, length = 0x00000800
CPU1TOCMMSGRAM1 : origin = 0x20080800, length = 0x00000800
CMTOCPU1MSGRAM0 : origin = 0x20082000, length = 0x00000800
CMTOCPU1MSGRAM1 : origin = 0x20082800, length = 0x00000800
CPU2TOCMMSGRAM0 : origin = 0x20084000, length = 0x00000800
CPU2TOCMMSGRAM1 : origin = 0x20084800, length = 0x00000800
CMTOCPU2MSGRAM0 : origin = 0x20086000, length = 0x00000800
CMTOCPU2MSGRAM1 : origin = 0x20086800, length = 0x00000800
}
SECTIONS
{
.resetisr : > CMBANK0_RESETISR
.vftable : > CMBANK0_SECTOR0 /* Application placed vector table in Flash*/
.vtable : > SRAM /* Application placed vector table in RAM*/
.text : >> CMBANK0_SECTOR4
.cinit : > CMBANK0_SECTOR0
.pinit : >> CMBANK0_SECTOR0 | CMBANK0_SECTOR1
.switch : >> CMBANK0_SECTOR0 | CMBANK0_SECTOR1
.sysmem : > SRAM
.stack : > C1RAM
.ebss : > C1RAM
.econst : >> CMBANK0_SECTOR0 | CMBANK0_SECTOR1
.esysmem : > C1RAM
.data : > SRAM
.bss : > SRAM
.const : {} LOAD = CMBANK0_SECTOR0 | CMBANK0_SECTOR1 ,
RUN = SRAM,
LOAD_START(constLoadStart),
LOAD_SIZE(constLoadSize),
LOAD_END(constLoadEnd),
RUN_START(constRunStart),
RUN_SIZE(constRunSize),
RUN_END(constRunEnd)
MSGRAM_CM_TO_CPU1 : > CMTOCPU1MSGRAM0, type=NOINIT
MSGRAM_CM_TO_CPU2 : > CMTOCPU2MSGRAM0, type=NOINIT
MSGRAM_CPU1_TO_CM : > CPU1TOCMMSGRAM0, type=NOINIT
MSGRAM_CPU2_TO_CM : > CPU2TOCMMSGRAM0, type=NOINIT
.TI.ramfunc : {} LOAD = CMBANK0_SECTOR0 | CMBANK0_SECTOR1 | CMBANK0_SECTOR4,
RUN = SRAM,
LOAD_START(RamfuncsLoadStart),
LOAD_SIZE(RamfuncsLoadSize),
LOAD_END(RamfuncsLoadEnd),
RUN_START(RamfuncsRunStart),
RUN_SIZE(RamfuncsRunSize),
RUN_END(RamfuncsRunEnd),
ALIGN(8)
}
/*
//===========================================================================
// End of file.
//===========================================================================
*/
@@ -0,0 +1,664 @@
//###########################################################################
//
// FILE: enet_lwip.c
//
// TITLE: lwIP based Ethernet Example.
//
//###########################################################################
// $TI Release: $
// $Release Date: $
//
// C2000Ware v5.04.00.00
//
// Copyright (C) 2024 Texas Instruments Incorporated - http://www.ti.com
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the
// distribution.
//
// Neither the name of Texas Instruments Incorporated nor the names of
// its contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// $
//###########################################################################
#include <string.h>
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_nvic.h"
#include "inc/hw_types.h"
#include "inc/hw_sysctl.h"
#include "inc/hw_emac.h"
#include "driverlib_cm/ethernet.h"
#include "driverlib_cm/gpio.h"
#include "driverlib_cm/interrupt.h"
#include "driverlib_cm/flash.h"
#include "driverlib_cm/sysctl.h"
#include "driverlib_cm/systick.h"
#include "utils/lwiplib.h"
#include "board_drivers/pinout.h"
#include "lwip/apps/httpd.h"
//*****************************************************************************
//
//! \addtogroup master_example_list
//! <h1>Ethernet with lwIP (enet_lwip)</h1>
//!
//! This example application demonstrates the operation of the F2838x
//! microcontroller Ethernet controller using the lwIP TCP/IP Stack. Once
//! programmed, the device sits endlessly waiting for ICMP ping requests. It
//! has a static IP address. To ping the device, the sender has to be in the
//! same network. The stack also supports ARP.
//!
//! For additional details on lwIP, refer to the lwIP web page at:
//! http://savannah.nongnu.org/projects/lwip/
//
//*****************************************************************************
// These are defined by the linker (see device linker command file)
extern uint16_t RamfuncsLoadStart;
extern uint16_t RamfuncsLoadSize;
extern uint16_t RamfuncsRunStart;
extern uint16_t RamfuncsLoadEnd;
extern uint16_t RamfuncsRunEnd;
extern uint16_t RamfuncsRunSize;
extern uint16_t constLoadStart;
extern uint16_t constLoadEnd;
extern uint16_t constLoadSize;
extern uint16_t constRunStart;
extern uint16_t constRunEnd;
extern uint16_t constRunSize;
#define DEVICE_FLASH_WAITSTATES 2
//*****************************************************************************
//
// Driver specific initialization code and macro.
//
//*****************************************************************************
#define ETHERNET_NO_OF_RX_PACKETS 2U
#define ETHERNET_MAX_PACKET_LENGTH 1538U
#define NUM_PACKET_DESC_RX_APPLICATION 8
Ethernet_Handle emac_handle;
Ethernet_InitConfig *pInitCfg;
uint32_t Ethernet_numRxCallbackCustom = 0;
uint32_t releaseTxCount = 0;
uint32_t genericISRCustomcount = 0;
uint32_t genericISRCustomRBUcount = 0;
uint32_t genericISRCustomROVcount = 0;
uint32_t genericISRCustomRIcount = 0;
uint32_t systickPeriodValue = 15000000;
Ethernet_Pkt_Desc pktDescriptorRXCustom[NUM_PACKET_DESC_RX_APPLICATION];
extern uint32_t Ethernet_numGetPacketBufferCallback;
extern Ethernet_Device Ethernet_device_struct;
uint8_t Ethernet_rxBuffer[ETHERNET_NO_OF_RX_PACKETS *
ETHERNET_MAX_PACKET_LENGTH];
extern Ethernet_Pkt_Desc*
lwIPEthernetIntHandler(Ethernet_Pkt_Desc *pPacket);
void CM_init(void)
{
//
// Disable the watchdog
//
SysCtl_disableWatchdog();
#ifdef _FLASH
//
// Copy time critical code and flash setup code to RAM. This includes the
// following functions: InitFlash();
//
// The RamfuncsLoadStart, RamfuncsLoadSize, and RamfuncsRunStart symbols
// are created by the linker. Refer to the device .cmd file.
// Html pages are also being copied from flash to ram.
//
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
memcpy(&constRunStart, &constLoadStart, (size_t)&constLoadSize);
//
// Call Flash Initialization to setup flash waitstates. This function must
// reside in RAM.
//
Flash_initModule(FLASH0CTRL_BASE, FLASH0ECC_BASE, DEVICE_FLASH_WAITSTATES);
#endif
//
// Sets the NVIC vector table offset address.
//
#ifdef _FLASH
Interrupt_setVectorTableOffset((uint32_t)vectorTableFlash);
#else
Interrupt_setVectorTableOffset((uint32_t)vectorTableRAM);
#endif
}
//*****************************************************************************
//
// HTTP Webserver related callbacks and definitions.
//
//*****************************************************************************
//
// Currently, this implemented as a pointer to function which is called when
// corresponding query is received by the HTTP webserver daemon. When more
// features are needed to be added, it should be implemented as a separate
// interface.
//
void httpLEDToggle(void);
void(*ledtoggleFuncPtr)(void) = &httpLEDToggle;
//*****************************************************************************
//
// The interrupt handler for the SysTick interrupt.
//
//*****************************************************************************
void
SysTickIntHandler(void)
{
//
// Call the lwIP timer handler.
//
lwIPTimer(systickPeriodValue);
}
//*****************************************************************************
//
// This function is a callback function called by the example to
// get a Packet Buffer. Has to return a ETHERNET_Pkt_Desc Structure.
// Rewrite this API for custom use case.
//
//*****************************************************************************
Ethernet_Pkt_Desc* Ethernet_getPacketBufferCustom(void)
{
//
// Get the next packet descriptor from the descriptor pool
//
uint32_t shortIndex = (Ethernet_numGetPacketBufferCallback + 3)
% NUM_PACKET_DESC_RX_APPLICATION;
//
// Increment the book-keeping pointer which acts as a head pointer
// to the circular array of packet descriptor pool.
//
Ethernet_numGetPacketBufferCallback++;
//
// Update buffer length information to the newly procured packet
// descriptor.
//
pktDescriptorRXCustom[shortIndex].bufferLength =
ETHERNET_MAX_PACKET_LENGTH;
//
// Update the receive buffer address in the packer descriptor.
//
pktDescriptorRXCustom[shortIndex].dataBuffer =
&Ethernet_device_struct.rxBuffer [ \
(ETHERNET_MAX_PACKET_LENGTH*Ethernet_device_struct.rxBuffIndex)];
//
// Update the receive buffer pool index.
//
Ethernet_device_struct.rxBuffIndex += 1U;
Ethernet_device_struct.rxBuffIndex = \
(Ethernet_device_struct.rxBuffIndex%ETHERNET_NO_OF_RX_PACKETS);
//
// Receive buffer is usable from Address 0
//
pktDescriptorRXCustom[shortIndex].dataOffset = 0U;
//
// Return this new descriptor to the driver.
//
return (&(pktDescriptorRXCustom[shortIndex]));
}
//*****************************************************************************
//
// This is a hook function and called by the driver when it receives a
// packet. Application is expected to replenish the buffer after consuming it.
// Has to return a ETHERNET_Pkt_Desc Structure.
// Rewrite this API for custom use case.
//
//*****************************************************************************
Ethernet_Pkt_Desc* Ethernet_receivePacketCallbackCustom(
Ethernet_Handle handleApplication,
Ethernet_Pkt_Desc *pPacket)
{
//
// Book-keeping to maintain number of callbacks received.
//
#ifdef ETHERNET_DEBUG
Ethernet_numRxCallbackCustom++;
#endif
//
// This is a placeholder for Application specific handling
// We are replenishing the buffer received with another buffer
//
return lwIPEthernetIntHandler(pPacket);
}
void Ethernet_releaseTxPacketBufferCustom(
Ethernet_Handle handleApplication,
Ethernet_Pkt_Desc *pPacket)
{
//
// Once the packet is sent, reuse the packet memory to avoid
// memory leaks. Call this interrupt handler function which will take care
// of freeing the memory used by the packet descriptor.
//
lwIPEthernetIntHandler(pPacket);
//
// Increment the book-keeping counter.
//
#ifdef ETHERNET_DEBUG
releaseTxCount++;
#endif
}
interrupt void Ethernet_genericISRCustom(void)
{
genericISRCustomcount++;
Ethernet_RxChDesc *rxChan;
Ethernet_TxChDesc *txChan;
Ethernet_HW_descriptor *descPtr;
Ethernet_HW_descriptor *tailPtr;
uint16_t i=0;
Ethernet_clearMACConfiguration(Ethernet_device_struct.baseAddresses.enet_base,ETHERNET_MAC_CONFIGURATION_RE);
Ethernet_clearMACConfiguration(Ethernet_device_struct.baseAddresses.enet_base,ETHERNET_MAC_CONFIGURATION_TE);
for(i = 0U;i < Ethernet_device_struct.initConfig.numChannels;i++)
{
Ethernet_disableRxDMAReception(
Ethernet_device_struct.baseAddresses.enet_base,
i);
}
if(((ETHERNET_DMA_CH0_STATUS_AIS |
ETHERNET_DMA_CH0_STATUS_RBU) ==
(HWREG(Ethernet_device_struct.baseAddresses.enet_base +
ETHERNET_O_DMA_CH0_STATUS) &
(uint32_t)(ETHERNET_DMA_CH0_STATUS_AIS |
ETHERNET_DMA_CH0_STATUS_RBU))) ||
(ETHERNET_MTL_Q0_INTERRUPT_CONTROL_STATUS_RXOVFIS) ==
(HWREG(Ethernet_device_struct.baseAddresses.enet_base +
ETHERNET_O_MTL_Q0_INTERRUPT_CONTROL_STATUS) &
(uint32_t)(ETHERNET_MTL_Q0_INTERRUPT_CONTROL_STATUS_RXOVFIS
)))
{
if((ETHERNET_DMA_CH0_STATUS_AIS |
ETHERNET_DMA_CH0_STATUS_RBU) ==
(HWREG(Ethernet_device_struct.baseAddresses.enet_base +
ETHERNET_O_DMA_CH0_STATUS) &
(uint32_t)(ETHERNET_DMA_CH0_STATUS_AIS |
ETHERNET_DMA_CH0_STATUS_RBU)))
{
genericISRCustomRBUcount++;
}
if((ETHERNET_MTL_Q0_INTERRUPT_CONTROL_STATUS_RXOVFIS) ==
(HWREG(Ethernet_device_struct.baseAddresses.enet_base +
ETHERNET_O_MTL_Q0_INTERRUPT_CONTROL_STATUS) &
(uint32_t)(ETHERNET_MTL_Q0_INTERRUPT_CONTROL_STATUS_RXOVFIS
)))
{
genericISRCustomROVcount++;
Ethernet_enableMTLInterrupt(Ethernet_device_struct.baseAddresses.enet_base,0,
ETHERNET_MTL_Q0_INTERRUPT_CONTROL_STATUS_RXOVFIS);
}
/*
* Clear the AIS and RBU status bit. These MUST be
* cleared together!
*/
Ethernet_clearDMAChannelInterrupt(
Ethernet_device_struct.baseAddresses.enet_base,
ETHERNET_DMA_CHANNEL_NUM_0,
ETHERNET_DMA_CH0_STATUS_AIS |
ETHERNET_DMA_CH0_STATUS_RBU);
/*
*Recover from Receive Buffer Unavailable (and hung DMA)
*
* All descriptor buffers are owned by the application, and
* in result the DMA cannot transfer incoming frames to the
* buffers (RBU condition). DMA has also entered suspend
* mode at this point, too.
*
* Drain the RX queues
*/
/* Upon RBU error, discard all previously received packets */
if(Ethernet_device_struct.initConfig.pfcbDeletePackets != NULL)
(*Ethernet_device_struct.initConfig.pfcbDeletePackets)();
rxChan =
&Ethernet_device_struct.dmaObj.rxDma[ETHERNET_DMA_CHANNEL_NUM_0];
txChan=
&Ethernet_device_struct.dmaObj.txDma[ETHERNET_DMA_CHANNEL_NUM_0];
/*
* Need to disable multiple interrupts, so protect the code to do so within
* a global disable block (to prevent getting interrupted in between)
*/
if(NULL!= Ethernet_device_struct.ptrPlatformInterruptDisable)
{
(*Ethernet_device_struct.ptrPlatformInterruptDisable)(
Ethernet_device_struct.interruptNum[
ETHERNET_RX_INTR_CH0 + rxChan->chInfo->chNum]);
(*Ethernet_device_struct.ptrPlatformInterruptDisable)(
Ethernet_device_struct.interruptNum[
ETHERNET_GENERIC_INTERRUPT]);
}
/* verify we have full capacity in the descriptor queue */
if(rxChan->descQueue.count < rxChan->descMax) {
/* The queue is not at full capacity due to OOM errors.
Try to fill it again */
Ethernet_addPacketsIntoRxQueue(rxChan);
}
Ethernet_initRxChannel(
&Ethernet_device_struct.initConfig.chInfo[ETHERNET_CH_DIR_RX][0]);
Ethernet_writeRxDescTailPointer(
Ethernet_device_struct.baseAddresses.enet_base,
0,
(&Ethernet_device_struct.rxDesc[
((uint32_t)ETHERNET_DESCRIPTORS_NUM_RX_PER_CHANNEL) *
(0 + (uint32_t)1U)]));
if(NULL!= Ethernet_device_struct.ptrPlatformInterruptEnable)
{
(*Ethernet_device_struct.ptrPlatformInterruptEnable)(
Ethernet_device_struct.interruptNum[
ETHERNET_RX_INTR_CH0 + rxChan->chInfo->chNum]);
(*Ethernet_device_struct.ptrPlatformInterruptEnable)(
Ethernet_device_struct.interruptNum[
ETHERNET_GENERIC_INTERRUPT]);
}
}
if(0U != (HWREG(Ethernet_device_struct.baseAddresses.enet_base +
ETHERNET_O_DMA_CH0_STATUS) &
(uint32_t) ETHERNET_DMA_CH0_STATUS_RI))
{
genericISRCustomRIcount++;
Ethernet_clearDMAChannelInterrupt(
Ethernet_device_struct.baseAddresses.enet_base,
ETHERNET_DMA_CHANNEL_NUM_0,
ETHERNET_DMA_CH0_STATUS_NIS | ETHERNET_DMA_CH0_STATUS_RI);
}
for(i = 0U;i < Ethernet_device_struct.initConfig.numChannels;i++)
{
Ethernet_enableRxDMAReception(
Ethernet_device_struct.baseAddresses.enet_base,
i);
}
Ethernet_setMACConfiguration(Ethernet_device_struct.baseAddresses.enet_base,ETHERNET_MAC_CONFIGURATION_RE);
Ethernet_setMACConfiguration(Ethernet_device_struct.baseAddresses.enet_base,ETHERNET_MAC_CONFIGURATION_TE);
}
void
Ethernet_init(const unsigned char *mac)
{
Ethernet_InitInterfaceConfig initInterfaceConfig;
uint32_t macLower;
uint32_t macHigher;
uint8_t *temp;
initInterfaceConfig.ssbase = EMAC_SS_BASE;
initInterfaceConfig.enet_base = EMAC_BASE;
initInterfaceConfig.phyMode = ETHERNET_SS_PHY_INTF_SEL_MII;
//
// Assign SoC specific functions for Enabling,Disabling interrupts
// and for enabling the Peripheral at system level
//
initInterfaceConfig.ptrPlatformInterruptDisable =
&Platform_disableInterrupt;
initInterfaceConfig.ptrPlatformInterruptEnable =
&Platform_enableInterrupt;
initInterfaceConfig.ptrPlatformPeripheralEnable =
&Platform_enablePeripheral;
initInterfaceConfig.ptrPlatformPeripheralReset =
&Platform_resetPeripheral;
//
// Assign the peripheral number at the SoC
//
initInterfaceConfig.peripheralNum = SYSCTL_PERIPH_CLK_ENET;
//
// Assign the default SoC specific interrupt numbers of Ethernet interrupts
//
initInterfaceConfig.interruptNum[0] = INT_EMAC;
initInterfaceConfig.interruptNum[1] = INT_EMAC_TX0;
initInterfaceConfig.interruptNum[2] = INT_EMAC_TX1;
initInterfaceConfig.interruptNum[3] = INT_EMAC_RX0;
initInterfaceConfig.interruptNum[4] = INT_EMAC_RX1;
pInitCfg = Ethernet_initInterface(initInterfaceConfig);
Ethernet_getInitConfig(pInitCfg);
pInitCfg->dmaMode.InterruptMode = ETHERNET_DMA_MODE_INTM_MODE2;
//
// Assign the callbacks for Getting packet buffer when needed
// Releasing the TxPacketBuffer on Transmit interrupt callbacks
// Receive packet callback on Receive packet completion interrupt
//
pInitCfg->pfcbRxPacket = &Ethernet_receivePacketCallbackCustom;
pInitCfg->pfcbGetPacket = &Ethernet_getPacketBuffer;
pInitCfg->pfcbFreePacket = &Ethernet_releaseTxPacketBufferCustom;
//
//Assign the Buffer to be used by the Low level driver for receiving
//Packets. This should be accessible by the Ethernet DMA
//
pInitCfg->rxBuffer = Ethernet_rxBuffer;
//
// The Application handle is not used by this application
// Hence using a dummy value of 1
//
Ethernet_getHandle((Ethernet_Handle)1, pInitCfg , &emac_handle);
//
// Disable transmit buffer unavailable and normal interrupt which
// are enabled by default in Ethernet_getHandle.
//
Ethernet_disableDmaInterrupt(Ethernet_device_struct.baseAddresses.enet_base,
0, (ETHERNET_DMA_CH0_INTERRUPT_ENABLE_TBUE |
ETHERNET_DMA_CH0_INTERRUPT_ENABLE_NIE));
//
// Enable the MTL interrupt to service the receive FIFO overflow
// condition in the Ethernet module.
//
Ethernet_enableMTLInterrupt(Ethernet_device_struct.baseAddresses.enet_base,0,
ETHERNET_MTL_Q0_INTERRUPT_CONTROL_STATUS_RXOIE);
//
// Disable the MAC Management counter interrupts as they are not used
// in this application.
//
HWREG(Ethernet_device_struct.baseAddresses.enet_base + ETHERNET_O_MMC_RX_INTERRUPT_MASK) = 0xFFFFFFFF;
HWREG(Ethernet_device_struct.baseAddresses.enet_base + ETHERNET_O_MMC_IPC_RX_INTERRUPT_MASK) = 0xFFFFFFFF;
HWREG(Ethernet_device_struct.baseAddresses.enet_base + ETHERNET_O_MMC_TX_INTERRUPT_MASK) = 0xFFFFFFFF;
//
//Do global Interrupt Enable
//
(void)Interrupt_enableInProcessor();
//
//Assign default ISRs
//
Interrupt_registerHandler(INT_EMAC_TX0, Ethernet_transmitISR);
Interrupt_registerHandler(INT_EMAC_RX0, Ethernet_receiveISR);
Interrupt_registerHandler(INT_EMAC, Ethernet_genericISRCustom);
//
//Enable the default interrupt handlers
//
Interrupt_enable(INT_EMAC_TX0);
Interrupt_enable(INT_EMAC_RX0);
Interrupt_enable(INT_EMAC);
//
// Convert the mac address string into the 32/16 split variables format
// that is required by the driver to program into hardware registers.
// Note: This step is done after the Ethernet_getHandle function because
// a dummy MAC address is programmed in that function.
//
temp = (uint8_t *)&macLower;
temp[0] = mac[0];
temp[1] = mac[1];
temp[2] = mac[2];
temp[3] = mac[3];
temp = (uint8_t *)&macHigher;
temp[0] = mac[4];
temp[1] = mac[5];
//
// Program the unicast mac address.
//
Ethernet_setMACAddr(EMAC_BASE,
0,
macHigher,
macLower,
ETHERNET_CHANNEL_0);
Ethernet_clearMACConfiguration(Ethernet_device_struct.baseAddresses.enet_base,ETHERNET_MAC_CONFIGURATION_RE);
Ethernet_setMACConfiguration(Ethernet_device_struct.baseAddresses.enet_base,ETHERNET_MAC_CONFIGURATION_RE);
}
//*****************************************************************************
//
// This example demonstrates the use of the Ethernet Controller.
//
//*****************************************************************************
int
main(void)
{
unsigned long ulUser0, ulUser1;
unsigned char pucMACArray[8];
//
// User specific IP Address Configuration.
// Current implementation works with Static IP address only.
//
unsigned long IPAddr = 0xC0A80004;
unsigned long NetMask = 0xFFFFFF00;
unsigned long GWAddr = 0x00000000;
//
// Initializing the CM. Loading the required functions to SRAM.
//
CM_init();
SYSTICK_setPeriod(systickPeriodValue);
SYSTICK_enableCounter();
SYSTICK_registerInterruptHandler(SysTickIntHandler);
SYSTICK_enableInterrupt();
//
// Enable processor interrupts.
//
Interrupt_enableInProcessor();
// Set user/company specific MAC octets
// (for this code we are using A8-63-F2-00-00-80)
// 0x00 MACOCT3 MACOCT2 MACOCT1
ulUser0 = 0x00F263A8;
// 0x00 MACOCT6 MACOCT5 MACOCT4
ulUser1 = 0x00800000;
//
// Convert the 24/24 split MAC address from NV ram into a 32/16 split MAC
// address needed to program the hardware registers, then program the MAC
// address into the Ethernet Controller registers.
//
pucMACArray[0] = ((ulUser0 >> 0) & 0xff);
pucMACArray[1] = ((ulUser0 >> 8) & 0xff);
pucMACArray[2] = ((ulUser0 >> 16) & 0xff);
pucMACArray[3] = ((ulUser1 >> 0) & 0xff);
pucMACArray[4] = ((ulUser1 >> 8) & 0xff);
pucMACArray[5] = ((ulUser1 >> 16) & 0xff);
//
// Initialize ethernet module.
//
Ethernet_init(pucMACArray);
//
// Initialze the lwIP library, using DHCP.
//
lwIPInit(0, pucMACArray, IPAddr, NetMask, GWAddr, IPADDR_USE_STATIC);
//
// Initialize the HTTP webserver daemon.
//
httpd_init();
//
// Loop forever. All the work is done in interrupt handlers.
//
while(1);
}
//*****************************************************************************
//
// Called by lwIP Library. Toggles the led when a command is received by the
// HTTP webserver.
//
//*****************************************************************************
void httpLEDToggle(void)
{
//
// Toggle the LED D1 on the control card.
//
GPIO_togglePin(DEVICE_GPIO_PIN_LED1);
}
//*****************************************************************************
//
// Called by lwIP Library. Could be used for periodic custom tasks.
//
//*****************************************************************************
void lwIPHostTimerHandler(void)
{
}
@@ -0,0 +1,416 @@
//*****************************************************************************
//
// lwipopts.h - Configuration file for lwIP
//
//*****************************************************************************
//
// NOTE: This file has been derived from the lwIP/src/include/lwip/opt.h
// header file.
//
// For additional details, refer to the original "opt.h" file, and lwIP
// documentation.
//
//*****************************************************************************
#ifndef __LWIPOPTS_H__
#define __LWIPOPTS_H__
//*****************************************************************************
//
// ---------- Stellaris / lwIP Port Options ----------
//
//*****************************************************************************
#define HOST_TMR_INTERVAL 100 // default is 0
//#define DHCP_EXPIRE_TIMER_MSECS (60 * 1000)
//#define INCLUDE_HTTPD_SSI
//#define INCLUDE_HTTPD_CGI
//#define DYNAMIC_HTTP_HEADERS
//#define INCLUDE_HTTPD_DEBUG
//*****************************************************************************
//
// ---------- Platform specific locking ----------
//
//*****************************************************************************
#define SYS_LIGHTWEIGHT_PROT 1 // default is 0
#define NO_SYS 1 // default is 0
//#define MEMCPY(dst,src,len) memcpy(dst,src,len)
//#define SMEMCPY(dst,src,len) memcpy(dst,src,len)
//*****************************************************************************
//
// ---------- Memory options ----------
//
//*****************************************************************************
//#define MEM_LIBC_MALLOC 0
#define MEM_ALIGNMENT 4 // default is 1
#define MEM_SIZE (22 * 1024) // default is 1600, was 16K
//#define MEMP_OVERFLOW_CHECK 0
//#define MEMP_SANITY_CHECK 0
//#define MEM_USE_POOLS 0
//#define MEMP_USE_CUSTOM_POOLS 0
//*****************************************************************************
//
// ---------- Internal Memory Pool Sizes ----------
//
//*****************************************************************************
#define MEMP_NUM_PBUF 24 // Default 16, was 16
//#define MEMP_NUM_RAW_PCB 4
//#define MEMP_NUM_UDP_PCB 4
#define MEMP_NUM_TCP_PCB 16 // Default 5, was 12
//#define MEMP_NUM_TCP_PCB_LISTEN 8
//#define MEMP_NUM_TCP_SEG 16
//#define MEMP_NUM_REASSDATA 5
//#define MEMP_NUM_ARP_QUEUE 30
//#define MEMP_NUM_IGMP_GROUP 8
//#define MEMP_NUM_SYS_TIMEOUT 3
//#define MEMP_NUM_NETBUF 2
//#define MEMP_NUM_NETCONN 4
//#define MEMP_NUM_TCPIP_MSG_API 8
//#define MEMP_NUM_TCPIP_MSG_INPKT 8
#define PBUF_POOL_SIZE 24 // Default 16, was 36
//*****************************************************************************
//
// ---------- ARP options ----------
//
//*****************************************************************************
#define LWIP_ARP 1
#define ARP_TABLE_SIZE 10
#define ARP_QUEUEING 1
#define ETHARP_TRUST_IP_MAC 1
//*****************************************************************************
//
// ---------- IP options ----------
//
//*****************************************************************************
//#define IP_FORWARD 0
//#define IP_OPTIONS_ALLOWED 1
#define IP_REASSEMBLY 0 // default is 1
#define IP_FRAG 0 // default is 1
//#define IP_REASS_MAXAGE 3
//#define IP_REASS_MAX_PBUFS 10
//#define IP_FRAG_USES_STATIC_BUF 1
//#define IP_FRAG_MAX_MTU 1500
//#define IP_DEFAULT_TTL 255
//*****************************************************************************
//
// ---------- ICMP options ----------
//
//*****************************************************************************
#define LWIP_ICMP 1
#define ICMP_TTL (IP_DEFAULT_TTL)
//*****************************************************************************
//
// ---------- RAW options ----------
//
//*****************************************************************************
//#define LWIP_RAW 1
//#define RAW_TTL (IP_DEFAULT_TTL)
//*****************************************************************************
//
// ---------- DHCP options ----------
//
//*****************************************************************************
#define LWIP_DHCP 0 // default is 0
//#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP))
//*****************************************************************************
//
// ---------- UPNP options ----------
//
//*****************************************************************************
//#define LWIP_UPNP 0
//*****************************************************************************
//
// ---------- PTPD options ----------
//
//*****************************************************************************
//#define LWIP_PTPD 0
//*****************************************************************************
//
// ---------- AUTOIP options ----------
//
//*****************************************************************************
#define LWIP_AUTOIP 1 // default is 0
#define LWIP_DHCP_AUTOIP_COOP ((LWIP_DHCP) && (LWIP_AUTOIP))
// default is 0
#define LWIP_DHCP_AUTOIP_COOP_TRIES 5 // default is 9
//*****************************************************************************
//
// ---------- SNMP options ----------
//
//*****************************************************************************
//#define LWIP_SNMP 0
//#define SNMP_CONCURRENT_REQUESTS 1
//#define SNMP_TRAP_DESTINATIONS 1
//#define SNMP_PRIVATE_MIB 0
//#define SNMP_SAFE_REQUESTS 1
//*****************************************************************************
//
// ---------- IGMP options ----------
//
//*****************************************************************************
//#define LWIP_IGMP 1
//*****************************************************************************
//
// ---------- DNS options -----------
//
//*****************************************************************************
//#define LWIP_DNS 0
//#define DNS_TABLE_SIZE 4
//#define DNS_MAX_NAME_LENGTH 256
//#define DNS_MAX_SERVERS 2
//#define DNS_DOES_NAME_CHECK 1
//#define DNS_USES_STATIC_BUF 1
//#define DNS_MSG_SIZE 512
//*****************************************************************************
//
// ---------- UDP options ----------
//
//*****************************************************************************
#define LWIP_UDP 0
//#define LWIP_UDPLITE 0
//#define UDP_TTL (IP_DEFAULT_TTL)
//*****************************************************************************
//
// ---------- TCP options ----------
//
//*****************************************************************************
#define LWIP_TCP 1
//#define TCP_TTL (IP_DEFAULT_TTL)
#define TCP_WND 4096 // default is 2048
//#define TCP_MAXRTX 12
//#define TCP_SYNMAXRTX 6
//#define TCP_QUEUE_OOSEQ 1
#define TCP_MSS 1500 // default is 128
//#define TCP_CALCULATE_EFF_SEND_MSS 1
#define TCP_SND_BUF (4 * TCP_MSS)
// default is 256, was 6 *
//#define TCP_SND_QUEUELEN (4 * (TCP_SND_BUF/TCP_MSS))
//#define TCP_SNDLOWAT (TCP_SND_BUF/2)
//#define TCP_LISTEN_BACKLOG 0
//#define TCP_DEFAULT_LISTEN_BACKLOG 0xff
//*****************************************************************************
//
// ---------- API options ----------
//
//*****************************************************************************
//#define LWIP_EVENT_API 0
//#define LWIP_CALLBACK_API 1
//*****************************************************************************
//
// ---------- Pbuf options ----------
//
//*****************************************************************************
#define PBUF_LINK_HLEN 16 // default is 14
#define PBUF_POOL_BUFSIZE 512
// default is LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN)
#define ETH_PAD_SIZE 0 // default is 0
//*****************************************************************************
//
// ---------- Network Interfaces options ----------
//
//*****************************************************************************
//#define LWIP_NETIF_HOSTNAME 0
//#define LWIP_NETIF_API 0
//#define LWIP_NETIF_STATUS_CALLBACK 0
//#define LWIP_NETIF_LINK_CALLBACK 0
//#define LWIP_NETIF_HWADDRHINT 0
//*****************************************************************************
//
// ---------- LOOPIF options ----------
//
//*****************************************************************************
//#define LWIP_HAVE_LOOPIF 0
//#define LWIP_LOOPIF_MULTITHREADING 1
//*****************************************************************************
//
// ---------- Thread options ----------
//
//*****************************************************************************
//#define TCPIP_THREAD_NAME "tcpip_thread"
//#define TCPIP_THREAD_STACKSIZE 0
//#define TCPIP_THREAD_PRIO 1
//#define TCPIP_MBOX_SIZE 0
//#define SLIPIF_THREAD_NAME "slipif_loop"
//#define SLIPIF_THREAD_STACKSIZE 0
//#define SLIPIF_THREAD_PRIO 1
//#define PPP_THREAD_NAME "pppMain"
//#define PPP_THREAD_STACKSIZE 0
//#define PPP_THREAD_PRIO 1
//#define DEFAULT_THREAD_NAME "lwIP"
//#define DEFAULT_THREAD_STACKSIZE 0
//#define DEFAULT_THREAD_PRIO 1
//#define DEFAULT_RAW_RECVMBOX_SIZE 0
//#define DEFAULT_UDP_RECVMBOX_SIZE 0
//#define DEFAULT_TCP_RECVMBOX_SIZE 0
//#define DEFAULT_ACCEPTMBOX_SIZE 0
//*****************************************************************************
//
// ---------- Sequential layer options ----------
//
//*****************************************************************************
//#define LWIP_TCPIP_CORE_LOCKING 0
#define LWIP_NETCONN 0 // default is 1
//*****************************************************************************
//
// ---------- Socket Options ----------
//
//*****************************************************************************
#define LWIP_SOCKET 0 // default is 1
//#define LWIP_COMPAT_SOCKETS 1
//#define LWIP_POSIX_SOCKETS_IO_NAMES 1
//#define LWIP_TCP_KEEPALIVE 0
//#define LWIP_SO_RCVTIMEO 0
//#define LWIP_SO_RCVBUF 0
//#define SO_REUSE 0
//*****************************************************************************
//
// ---------- Statistics options ----------
//
//*****************************************************************************
//#define LWIP_STATS 1
//#define LWIP_STATS_DISPLAY 0
//#define LINK_STATS 1
//#define ETHARP_STATS (LWIP_ARP)
//#define IP_STATS 1
//#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG)
//#define ICMP_STATS 1
//#define IGMP_STATS (LWIP_IGMP)
//#define UDP_STATS (LWIP_UDP)
//#define TCP_STATS (LWIP_TCP)
//#define MEM_STATS 1
//#define MEMP_STATS 1
//#define SYS_STATS 1
//*****************************************************************************
//
// ---------- PPP options ----------
//
//*****************************************************************************
//#define PPP_SUPPORT 0
//#define PPPOE_SUPPORT 0
//#define PPPOS_SUPPORT PPP_SUPPORT
#if PPP_SUPPORT
//#define NUM_PPP 1
//#define PAP_SUPPORT 0
//#define CHAP_SUPPORT 0
//#define MSCHAP_SUPPORT 0
//#define CBCP_SUPPORT 0
//#define CCP_SUPPORT 0
//#define VJ_SUPPORT 0
//#define MD5_SUPPORT 0
//#define FSM_DEFTIMEOUT 6
//#define FSM_DEFMAXTERMREQS 2
//#define FSM_DEFMAXCONFREQS 10
//#define FSM_DEFMAXNAKLOOPS 5
//#define UPAP_DEFTIMEOUT 6
//#define UPAP_DEFREQTIME 30
//#define CHAP_DEFTIMEOUT 6
//#define CHAP_DEFTRANSMITS 10
//#define LCP_ECHOINTERVAL 0
//#define LCP_MAXECHOFAILS 3
//#define PPP_MAXIDLEFLAG 100
//#define PPP_MAXMTU 1500
//#define PPP_DEFMRU 296
#endif
//*****************************************************************************
//
// ---------- checksum options ----------
//
//*****************************************************************************
//#define CHECKSUM_GEN_IP 1
//#define CHECKSUM_GEN_UDP 1
//#define CHECKSUM_GEN_TCP 1
//#define CHECKSUM_CHECK_IP 1
//#define CHECKSUM_CHECK_UDP 1
//#define CHECKSUM_CHECK_TCP 1
//*****************************************************************************
//
// ---------- Debugging options ----------
//
//*****************************************************************************
#if 0
#define U8_F "c"
#define S8_F "c"
#define X8_F "x"
#define U16_F "u"
#define S16_F "d"
#define X16_F "x"
#define U32_F "u"
#define S32_F "d"
#define X32_F "x"
extern void UARTprintf(const char *pcString, ...);
#define LWIP_DEBUG
#endif
//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF
#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF
//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_WARNING
//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SERIOUS
//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SEVERE
//#define LWIP_DBG_TYPES_ON LWIP_DBG_ON
#define LWIP_DBG_TYPES_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH)
//#define ETHARP_DEBUG LWIP_DBG_ON // default is OFF
//#define NETIF_DEBUG LWIP_DBG_ON // default is OFF
//#define PBUF_DEBUG LWIP_DBG_OFF
//#define API_LIB_DEBUG LWIP_DBG_OFF
//#define API_MSG_DEBUG LWIP_DBG_OFF
//#define SOCKETS_DEBUG LWIP_DBG_OFF
//#define ICMP_DEBUG LWIP_DBG_OFF
//#define IGMP_DEBUG LWIP_DBG_OFF
//#define INET_DEBUG LWIP_DBG_OFF
//#define IP_DEBUG LWIP_DBG_ON // default is OFF
//#define IP_REASS_DEBUG LWIP_DBG_OFF
//#define RAW_DEBUG LWIP_DBG_OFF
//#define MEM_DEBUG LWIP_DBG_OFF
//#define MEMP_DEBUG LWIP_DBG_OFF
//#define SYS_DEBUG LWIP_DBG_OFF
//#define TCP_DEBUG LWIP_DBG_OFF
//#define TCP_INPUT_DEBUG LWIP_DBG_OFF
//#define TCP_FR_DEBUG LWIP_DBG_OFF
//#define TCP_RTO_DEBUG LWIP_DBG_OFF
//#define TCP_CWND_DEBUG LWIP_DBG_OFF
//#define TCP_WND_DEBUG LWIP_DBG_OFF
//#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF
//#define TCP_RST_DEBUG LWIP_DBG_OFF
//#define TCP_QLEN_DEBUG LWIP_DBG_OFF
//#define UDP_DEBUG LWIP_DBG_ON // default is OFF
//#define TCPIP_DEBUG LWIP_DBG_OFF
//#define PPP_DEBUG LWIP_DBG_OFF
//#define SLIP_DEBUG LWIP_DBG_OFF
//#define DHCP_DEBUG LWIP_DBG_ON // default is OFF
//#define AUTOIP_DEBUG LWIP_DBG_OFF
//#define SNMP_MSG_DEBUG LWIP_DBG_OFF
//#define SNMP_MIB_DEBUG LWIP_DBG_OFF
//#define DNS_DEBUG LWIP_DBG_OFF
#endif /* __LWIPOPTS_H__ */
@@ -0,0 +1,247 @@
//###########################################################################
//
// FILE: startup_ccs.c
//
// TITLE: startup file for f2838x device.
//
//###########################################################################
// $TI Release: $
// $Release Date: $
//
// C2000Ware v5.04.00.00
//
// Copyright (C) 2024 Texas Instruments Incorporated - http://www.ti.com
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the
// distribution.
//
// Neither the name of Texas Instruments Incorporated nor the names of
// its contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// $
//###########################################################################
//*****************************************************************************
//
// Forward declaration of the default fault handlers.
//
//*****************************************************************************
void ResetISR(void);
static void NmiSR(void);
static void FaultISR(void);
static void IntDefaultHandler(void);
//*****************************************************************************
//
// External declaration for the reset handler that is to be called when the
// processor is started
//
//*****************************************************************************
extern void _c_int00(void);
//*****************************************************************************
//
// Linker variable that marks the top of the stack.
//
//*****************************************************************************
extern unsigned long __STACK_END;
//*****************************************************************************
//
// External declarations for the interrupt handlers used by the application.
//
//*****************************************************************************
extern void lwIPEthernetIntHandler(void);
extern void SysTickIntHandler(void);
extern void Ethernet_genericISRCustom(void);
//*****************************************************************************
//
// The vector table. Note that the proper constructs must be placed on this to
// ensure that it ends up at physical address 0x0000.0000 or at the start of
// the program if located at a start address other than 0.
//
//*****************************************************************************
#pragma DATA_ALIGN(vectorTableFlash, 1024)
#pragma DATA_SECTION(vectorTableFlash, ".vftable")
void (* const vectorTableFlash[])(void) =
{
(void (*)(void))((unsigned long)&__STACK_END),
/* The initial stack pointer */
ResetISR, /* The reset handler */
NmiSR, /* The NMI handler */
FaultISR, /* The hard fault handler */
IntDefaultHandler, /* The MPU fault handler */
IntDefaultHandler, /* The bus fault handler */
IntDefaultHandler, /* The usage fault handler */
0, /* Reserved */
0, /* Reserved */
0, /* Reserved */
0, /* Reserved */
IntDefaultHandler, /* SVCall handler */
IntDefaultHandler, /* Debug monitor handler */
0, /* Reserved */
IntDefaultHandler, /* The PendSV handler */
SysTickIntHandler, /* The SysTick handler */
IntDefaultHandler, /* MCANSS_0 handler */
IntDefaultHandler, /* MCANSS_1 handler */
IntDefaultHandler, /* MCANSS_WAKE_AND_TS_PLS ISR*/
IntDefaultHandler, /* MCANSS_ECC_CORR_PLS ISR */
IntDefaultHandler, /* Reserved */
IntDefaultHandler, /* ECAT ISR */
IntDefaultHandler, /* ECAT_SYNC0 ISR */
IntDefaultHandler, /* ECAT_SYNC1 ISR */
IntDefaultHandler, /* ECAT_RST ISR ISR */
IntDefaultHandler, /* CANA0 ISR */
IntDefaultHandler, /* CANA1 ISR */
IntDefaultHandler, /* CANB0 ISR */
IntDefaultHandler, /* CANB1 ISR */
Ethernet_genericISRCustom, /* EMAC ISR */
lwIPEthernetIntHandler, /* EMAC_TX0 ISR */
IntDefaultHandler, /* EMAC_TX1 ISR */
lwIPEthernetIntHandler, /* EMAC_RX0 ISR */
IntDefaultHandler, /* EMAC_RX1 ISR */
IntDefaultHandler, /* UART0 ISR */
IntDefaultHandler, /* Reserved */
IntDefaultHandler, /* SSI0 ISR */
IntDefaultHandler, /* Reserved */
IntDefaultHandler, /* I2C0 ISR */
IntDefaultHandler, /* Reserved */
IntDefaultHandler, /* USB ISR */
IntDefaultHandler, /* UDMA_SW ISR */
IntDefaultHandler, /* UDMA_ERR ISR */
IntDefaultHandler, /* Reserved */
IntDefaultHandler, /* Reserved */
IntDefaultHandler, /* CPU1TOCMIPC0 ISR */
IntDefaultHandler, /* CPU1TOCMIPC1 ISR */
IntDefaultHandler, /* CPU1TOCMIPC2 ISR */
IntDefaultHandler, /* CPU1TOCMIPC3 ISR */
IntDefaultHandler, /* CPU1TOCMIPC4 ISR */
IntDefaultHandler, /* CPU1TOCMIPC5 ISR */
IntDefaultHandler, /* CPU1TOCMIPC6 ISR */
IntDefaultHandler, /* CPU1TOCMIPC7 ISR */
IntDefaultHandler, /* CPU2TOCMIPC0 ISR */
IntDefaultHandler, /* CPU2TOCMIPC1 ISR */
IntDefaultHandler, /* CPU2TOCMIPC2 ISR */
IntDefaultHandler, /* CPU2TOCMIPC3 ISR */
IntDefaultHandler, /* CPU2TOCMIPC4 ISR */
IntDefaultHandler, /* CPU2TOCMIPC5 ISR */
IntDefaultHandler, /* CPU2TOCMIPC6 ISR */
IntDefaultHandler, /* CPU2TOCMIPC7 ISR */
IntDefaultHandler, /* FMC ISR */
IntDefaultHandler, /* FMC_CORR_ERR ISR */
IntDefaultHandler, /* AES Interrupt ISR */
IntDefaultHandler, /* TIMER0 ISR */
IntDefaultHandler, /* TIMER1 ISR */
IntDefaultHandler, /* TIMER2 ISR */
IntDefaultHandler, /* CMRAM_TESTERROR_LOG ISR */
IntDefaultHandler, /* Reserved 52 */
IntDefaultHandler, /* Reserved 53 */
IntDefaultHandler, /* Reserved 54 */
IntDefaultHandler, /* Reserved 55 */
IntDefaultHandler, /* Reserved 56 */
IntDefaultHandler, /* Reserved 57 */
IntDefaultHandler, /* Reserved 58 */
IntDefaultHandler, /* Reserved 59 */
IntDefaultHandler, /* Reserved 60 */
IntDefaultHandler, /* Reserved 61 */
IntDefaultHandler, /* Reserved 62 */
IntDefaultHandler /* Reserved 63 */
};
//*****************************************************************************
//
// This is the code that gets called when the processor first starts execution
// following a reset event. Only the absolutely necessary set is performed,
// after which the application supplied entry() routine is called. Any fancy
// actions (such as making decisions based on the reset cause register, and
// resetting the bits in that register) are left solely in the hands of the
// application.
//
//*****************************************************************************
#pragma CODE_SECTION(ResetISR, ".resetisr")
void
ResetISR(void)
{
// Jump to the CCS C Initialization Routine.
__asm(" .global _c_int00\n"
" b.w _c_int00");
}
//*****************************************************************************
//
// This is the code that gets called when the processor receives a NMI. This
// simply enters an infinite loop, preserving the system state for examination
// by a debugger.
//
//*****************************************************************************
static void
NmiSR(void)
{
//
// Enter an infinite loop.
//
while(1)
{
}
}
//*****************************************************************************
//
// This is the code that gets called when the processor receives a fault
// interrupt. This simply enters an infinite loop, preserving the system state
// for examination by a debugger.
//
//*****************************************************************************
static void
FaultISR(void)
{
//
// Enter an infinite loop.
//
while(1)
{
}
}
//*****************************************************************************
//
// This is the code that gets called when the processor receives an unexpected
// interrupt. This simply enters an infinite loop, preserving the system state
// for examination by a debugger.
//
//*****************************************************************************
static void
IntDefaultHandler(void)
{
//
// Go into an infinite loop.
//
while(1)
{
}
}
@@ -0,0 +1,16 @@
# Ethernet with lwIP
About:
This example application demonstrates the operation of the F2838x microcontroller
Ethernet controller using the lwIP TCP/IP Stack. This example sets up the Ethernet
MAC. F2838x device receives and sends data over UDP.
Test setup
F2838x Control Card connected to a PC/laptop on the Ethernet port.
PC/laptop runs the SocketTest/Packet Sender software, configured for the IP Address and port . \
Keywords START and STOP are used to send and stop receiving messages respectively
Received data is stored in buf_rx array and data to be transmitted is stored in buf_tx array on CM core of F2838x device
Examples is Interrupt based with a callback function udp_rx_callback which handles the received data from the SocketTest/Packet Sender software.
http://savannah.nongnu.org/projects/lwip/
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<?ccsproject version="1.0"?>
<projectOptions>
<deviceFamily value="TMS470"/>
<isTargetManual value="false"/>
</projectOptions>
@@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule configRelations="2" moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="com.ti.ccstudio.buildDefinitions.TMS470.Debug.184888370">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.ti.ccstudio.buildDefinitions.TMS470.Debug.184888370" moduleId="org.eclipse.cdt.core.settings" name="Flash">
<externalSettings/>
<extensions>
<extension id="com.ti.ccstudio.binaryparser.CoffParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="com.ti.ccstudio.errorparser.CoffErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="com.ti.ccstudio.errorparser.LinkErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="com.ti.ccstudio.errorparser.AsmErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactExtension="out" artifactName="enet_lwip_udp_cm" buildProperties="" description="" id="com.ti.ccstudio.buildDefinitions.TMS470.Debug.184888370" name="Flash" parent="com.ti.ccstudio.buildDefinitions.TMS470.Debug">
<folderInfo id="com.ti.ccstudio.buildDefinitions.TMS470.Debug.184888370.1029368675" name="/" resourcePath="">
<toolChain id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.DebugToolchain.36723669" name="TI Build Tools" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.DebugToolchain" targetTool="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.linkerDebug.2010964716">
<option id="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS.676000411" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS" valueType="stringList">
<listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=Cortex M.TMS320F28388D"/>
<listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=little"/>
<listOptionValue builtIn="false" value="OUTPUT_FORMAT=ELF"/>
<listOptionValue builtIn="false" value="LINKER_COMMAND_FILE=2838x_flash_lnk_cm_lwip.cmd"/>
<listOptionValue builtIn="false" value="RUNTIME_SUPPORT_LIBRARY=libc.a"/>
<listOptionValue builtIn="false" value="CCS_MBS_VERSION=6.1.3"/>
<listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION.1295958247" name="Compiler version" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="20.2.6.LTS" valueType="string"/>
<targetPlatform id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.targetPlatformDebug.1885559033" name="Platform" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.targetPlatformDebug"/>
<builder buildPath="${BuildDirectory}" id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.builderDebug.1117954107" keepEnvironmentInBuildfile="false" name="GNU Make" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.builderDebug"/>
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.compilerDebug.1963955038" name="ARM Compiler" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.compilerDebug">
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.SILICON_VERSION.1799341076" name="Target processor version (--silicon_version, -mv)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.SILICON_VERSION" value="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.SILICON_VERSION.7M4" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.CODE_STATE.287607948" name="Designate code state, 16-bit (thumb) or 32-bit (--code_state)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.CODE_STATE" value="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.CODE_STATE.16" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.FLOAT_SUPPORT.1193761807" name="Specify floating point support (--float_support)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.FLOAT_SUPPORT" value="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.FLOAT_SUPPORT.none" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.ABI.1913869672" name="Application binary interface. (--abi)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.ABI" value="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.ABI.eabi" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.GEN_FUNC_SUBSECTIONS.450931546" name="Place each function in a separate subsection (--gen_func_subsections, -ms)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.GEN_FUNC_SUBSECTIONS" value="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.GEN_FUNC_SUBSECTIONS.on" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.UAL.1683806356" name="Use unified assembly language (--ual)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.UAL" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.DEFINE.1924197276" name="Pre-define NAME (--define, -D)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.DEFINE" valueType="definedSymbols">
<listOptionValue builtIn="false" value="_FLASH"/>
<listOptionValue builtIn="false" value="ccs"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.LITTLE_ENDIAN.2068919185" name="Little endian code [See 'General' page to edit] (--little_endian, -me)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.LITTLE_ENDIAN" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.OPT_LEVEL.1701259753" name="Optimization level (--opt_level, -O)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.OPT_LEVEL" value="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.OPT_LEVEL.0" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.OPT_FOR_SPEED.2135073198" name="Speed vs. size trade-offs (--opt_for_speed, -mf)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.OPT_FOR_SPEED" value="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.OPT_FOR_SPEED.0" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.INCLUDE_PATH.1722710957" name="Add dir to #include search path (--include_path, -I)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.INCLUDE_PATH" valueType="includePath">
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/include"/>
<listOptionValue builtIn="false" value="${LWIP_LOC}/src/apps/http"/>
<listOptionValue builtIn="false" value="${LWIP_LOC}/.."/>
<listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}}"/>
<listOptionValue builtIn="false" value="${CM_DRIVERLIB}"/>
<listOptionValue builtIn="false" value="${CM_DRIVERLIB}/driverlib_cm"/>
<listOptionValue builtIn="false" value="${PROJECT_LOC}/.."/>
<listOptionValue builtIn="false" value="${CM_DRIVERLIB}"/>
<listOptionValue builtIn="false" value="${LWIP_LOC}"/>
<listOptionValue builtIn="false" value="${LWIP_LOC}/src/include"/>
<listOptionValue builtIn="false" value="${LWIP_LOC}/src/apps"/>
<listOptionValue builtIn="false" value="${LWIP_LOC}/ports/C2000/include"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.DEBUGGING_MODEL.1229336766" name="Debugging model" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.DEBUGGING_MODEL" value="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.DEBUGGING_MODEL.SYMDEBUG__DWARF" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.DIAG_WARNING.1049801932" name="Treat diagnostic &lt;id&gt; as warning (--diag_warning, -pdsw)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compilerID.DIAG_WARNING" valueType="stringList">
<listOptionValue builtIn="false" value="225"/>
</option>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compiler.inputType__C_SRCS.411735571" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compiler.inputType__C_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compiler.inputType__CPP_SRCS.1821791163" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compiler.inputType__CPP_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compiler.inputType__ASM_SRCS.652581610" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compiler.inputType__ASM_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compiler.inputType__ASM2_SRCS.153649051" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.compiler.inputType__ASM2_SRCS"/>
</tool>
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.linkerDebug.2010964716" name="ARM Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exe.linkerDebug">
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.STACK_SIZE.2126566027" name="Set C system stack size (--stack_size, -stack)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.STACK_SIZE" value="2048" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.HEAP_SIZE.158067395" name="Heap size for C/C++ dynamic memory allocation (--heap_size, -heap)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.HEAP_SIZE" value="0" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.MAP_FILE.2027049908" name="Link information (map) listed into &lt;file&gt; (--map_file, -m)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.MAP_FILE" value="&quot;enet_lwip_udp_cm.map&quot;" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.OUTPUT_FILE.2038017615" name="Specify output file name (--output_file, -o)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.OUTPUT_FILE" value="enet_lwip_udp_cm.out" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.LIBRARY.1032274818" name="Include library file or command file as input (--library, -l)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.LIBRARY" valueType="libs">
<listOptionValue builtIn="false" value="${CM_DRIVERLIB}/driverlib_cm/ccs/Debug/driverlib_cm.lib"/>
<listOptionValue builtIn="false" value="libc.a"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.SEARCH_PATH.17281163" name="Add &lt;dir&gt; to library search path (--search_path, -i)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.SEARCH_PATH" valueType="libPaths">
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/lib"/>
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/include"/>
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/.."/>
<listOptionValue builtIn="false" value="${PROJECT_LOC}/../../../../../../../../../driverlib/f2838x/driverlib_cm/ccs/Debug"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.XML_LINK_INFO.72795111" name="Detailed link information data-base into &lt;file&gt; (--xml_link_info, -xml_link_info)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.linkerID.XML_LINK_INFO" value="&quot;enet_lwip_udp_cm_linkInfo.xml&quot;" valueType="string"/>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exeLinker.inputType__CMD_SRCS.252273783" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exeLinker.inputType__CMD_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exeLinker.inputType__CMD2_SRCS.63239973" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exeLinker.inputType__CMD2_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exeLinker.inputType__GEN_CMDS.1020651975" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.exeLinker.inputType__GEN_CMDS"/>
</tool>
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_20.2.hex.619647623" name="ARM Hex Utility" superClass="com.ti.ccstudio.buildDefinitions.TMS470_20.2.hex"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="enet_lwip_udp.com.ti.ccstudio.buildDefinitions.TMS470.ProjectType.564716668" name="ARM" projectType="com.ti.ccstudio.buildDefinitions.TMS470.ProjectType"/>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
<storageModule moduleId="org.eclipse.cdt.core.language.mapping">
<project-mappings>
<content-type-mapping configuration="" content-type="org.eclipse.cdt.core.asmSource" language="com.ti.ccstudio.core.TIASMLanguage"/>
<content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cHeader" language="com.ti.ccstudio.core.TIGCCLanguage"/>
<content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cSource" language="com.ti.ccstudio.core.TIGCCLanguage"/>
<content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cxxHeader" language="com.ti.ccstudio.core.TIGPPLanguage"/>
<content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cxxSource" language="com.ti.ccstudio.core.TIGPPLanguage"/>
</project-mappings>
</storageModule>
<storageModule moduleId="scannerConfiguration"/>
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
</cproject>
@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>enet_lwip_udp</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.core.ccnature</nature>
<nature>com.ti.ccstudio.core.ccsNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
<linkedResources>
<link>
<name>enet_lwip_udp.c</name>
<type>1</type>
<locationURI>PARENT-1-PROJECT_LOC/enet_lwip_udp.c</locationURI>
</link>
<link>
<name>f2838xif.c</name>
<type>1</type>
<locationURI>PARENT-1-PROJECT_LOC/f2838xif.c</locationURI>
</link>
<link>
<name>fs.c</name>
<type>1</type>
<locationURI>PARENT-1-LWIP_LOC/lwip-2.1.2/src/apps/http/fs.c</locationURI>
</link>
<link>
<name>httpd.c</name>
<type>1</type>
<locationURI>PARENT-1-LWIP_LOC/lwip-2.1.2/src/apps/http/httpd.c</locationURI>
</link>
<link>
<name>lwiplib.c</name>
<type>1</type>
<locationURI>PARENT-1-LWIP_LOC/utils/lwiplib.c</locationURI>
</link>
<link>
<name>lwipopts.h</name>
<type>1</type>
<locationURI>PARENT-1-PROJECT_LOC/lwipopts.h</locationURI>
</link>
<link>
<name>pinout.c</name>
<type>1</type>
<locationURI>PARENT-1-LWIP_LOC/board_drivers/pinout.c</locationURI>
</link>
<link>
<name>startup_ccs.c</name>
<type>1</type>
<locationURI>PARENT-1-PROJECT_LOC/startup_ccs.c</locationURI>
</link>
<link>
<name>ustdlib.c</name>
<type>1</type>
<locationURI>PARENT-1-LWIP_LOC/utils/ustdlib.c</locationURI>
</link>
</linkedResources>
<variableList>
<variable>
<name>CM_DRIVERLIB</name>
<value>$%7BPARENT-9-PROJECT_LOC%7D/driverlib/f2838x</value>
</variable>
<variable>
<name>LWIP_LOC</name>
<value>$%7BPARENT-4-PROJECT_LOC%7D/lwip-2.1.2</value>
</variable>
</variableList>
</projectDescription>
@@ -0,0 +1,83 @@
MEMORY
{
/* Flash sectors */
CMBANK0_RESETISR : origin = 0x00200000, length = 0x00000008 /* Boot to Flash Entry Point */
CMBANK0_SECTOR0 : origin = 0x00200008, length = 0x00003FF7
CMBANK0_SECTOR1 : origin = 0x00204000, length = 0x00004000
CMBANK0_SECTOR2 : origin = 0x00208000, length = 0x00004000
CMBANK0_SECTOR3 : origin = 0x0020C000, length = 0x00004000
CMBANK0_SECTOR4 : origin = 0x00210000, length = 0x00010000
CMBANK0_SECTOR5 : origin = 0x00220000, length = 0x00010000
CMBANK0_SECTOR6 : origin = 0x00230000, length = 0x00010000
CMBANK0_SECTOR7 : origin = 0x00240000, length = 0x00010000
CMBANK0_SECTOR8 : origin = 0x00250000, length = 0x00010000
CMBANK0_SECTOR9 : origin = 0x00260000, length = 0x00010000
CMBANK0_SECTOR10 : origin = 0x00270000, length = 0x00004000
CMBANK0_SECTOR11 : origin = 0x00274000, length = 0x00004000
CMBANK0_SECTOR12 : origin = 0x00278000, length = 0x00004000
CMBANK0_SECTOR13 : origin = 0x0027C000, length = 0x00004000
C1RAM : origin = 0x1FFFC000, length = 0x00001FFF
C0RAM : origin = 0x1FFFE000, length = 0x00001FFF
BOOT_RSVD : origin = 0x20000000, length = 0x00000800 /* Part of S0, BOOT rom will use this for stack */
SRAM : origin = 0x20000800, length = 0x0000F7FF
E0RAM : origin = 0x20010000, length = 0x00003FFF
CPU1TOCMMSGRAM0 : origin = 0x20080000, length = 0x00000800
CPU1TOCMMSGRAM1 : origin = 0x20080800, length = 0x00000800
CMTOCPU1MSGRAM0 : origin = 0x20082000, length = 0x00000800
CMTOCPU1MSGRAM1 : origin = 0x20082800, length = 0x00000800
CPU2TOCMMSGRAM0 : origin = 0x20084000, length = 0x00000800
CPU2TOCMMSGRAM1 : origin = 0x20084800, length = 0x00000800
CMTOCPU2MSGRAM0 : origin = 0x20086000, length = 0x00000800
CMTOCPU2MSGRAM1 : origin = 0x20086800, length = 0x00000800
}
SECTIONS
{
.resetisr : > CMBANK0_RESETISR
.vftable : > CMBANK0_SECTOR0 /* Application placed vector table in Flash*/
.vtable : > SRAM /* Application placed vector table in RAM*/
.text : >> CMBANK0_SECTOR4
.cinit : > CMBANK0_SECTOR0
.pinit : >> CMBANK0_SECTOR0 | CMBANK0_SECTOR1
.switch : >> CMBANK0_SECTOR0 | CMBANK0_SECTOR1
.sysmem : > SRAM
.stack : > C1RAM
.ebss : > C1RAM
.econst : >> CMBANK0_SECTOR0 | CMBANK0_SECTOR1
.esysmem : > C1RAM
.data : > SRAM
.bss : > SRAM
.const : {} LOAD = CMBANK0_SECTOR0 | CMBANK0_SECTOR1 ,
RUN = SRAM,
LOAD_START(constLoadStart),
LOAD_SIZE(constLoadSize),
LOAD_END(constLoadEnd),
RUN_START(constRunStart),
RUN_SIZE(constRunSize),
RUN_END(constRunEnd)
MSGRAM_CM_TO_CPU1 : > CMTOCPU1MSGRAM0, type=NOINIT
MSGRAM_CM_TO_CPU2 : > CMTOCPU2MSGRAM0, type=NOINIT
MSGRAM_CPU1_TO_CM : > CPU1TOCMMSGRAM0, type=NOINIT
MSGRAM_CPU2_TO_CM : > CPU2TOCMMSGRAM0, type=NOINIT
.TI.ramfunc : {} LOAD = CMBANK0_SECTOR0 | CMBANK0_SECTOR1 | CMBANK0_SECTOR4,
RUN = SRAM,
LOAD_START(RamfuncsLoadStart),
LOAD_SIZE(RamfuncsLoadSize),
LOAD_END(RamfuncsLoadEnd),
RUN_START(RamfuncsRunStart),
RUN_SIZE(RamfuncsRunSize),
RUN_END(RamfuncsRunEnd),
ALIGN(8)
}
/*
//===========================================================================
// End of file.
//===========================================================================
*/
@@ -0,0 +1,953 @@
//###########################################################################
//
// FILE: enet_lwip.c
//
// TITLE: lwIP based Ethernet Example.
//
// Example to demonstrate UDP socket (for daikin customer)
// buf_rx,buf_tx are the watch variables which can be used or updated in the
// main application based on the requirement.
//
// Test setup
//
// F2838x Control Card connected to a PC/laptop on the Ethernet port.
// PC/laptop runs the SocketTest/Packet Sender software, configured for the IP Address and port . \
// Keywords START and STOP are used to send and stop receiving messages respectively
// Received data is stored in buf_rx array and data to be transmitted is stored in buf_tx array on CM core of F2838x device
// Examples is Interrupt based with a callback function udp_rx_callback which handles the received data from the SocketTest/Packet Sender software.
//
//###########################################################################
// $TI Release: $
// $Release Date: $
//
// C2000Ware v5.04.00.00
//
// Copyright (C) 2024 Texas Instruments Incorporated - http://www.ti.com
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the
// distribution.
//
// Neither the name of Texas Instruments Incorporated nor the names of
// its contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// $
//###########################################################################
#include <string.h>
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_nvic.h"
#include "inc/hw_types.h"
#include "inc/hw_sysctl.h"
#include "inc/hw_emac.h"
#include "driverlib_cm/ethernet.h"
#include "driverlib_cm/gpio.h"
#include "driverlib_cm/interrupt.h"
#include "driverlib_cm/flash.h"
#include "driverlib_cm/sysctl.h"
#include "driverlib_cm/systick.h"
#include "utils/lwiplib.h"
#include "board_drivers/pinout.h"
#include "lwipopts.h"
#define PAYLOAD 1088
volatile uint32_t msTime=0;
volatile bool flag_TX_frame_UDP=true;
#define MAKE_IP_ADDRESS(a0,a1,a2,a3) (((a0<<24) & 0xFF000000) | ((a1<<16) & 0x00FF0000) | ((a2<<8) & 0x0000FF00) | (a3 & 0x000000FF) )
bool Connected_udp_28000 = false;
uint16_t cnt_Connected_udp_28000 = 0;
//
// Defines
//
#define TEST_PASS 0x5555
#define TEST_FAIL 0xAAAA
//
// Defines
//
#define PACKET_LENGTH 132
struct udp_pcb *g_upcb;
u8_t buf_rx[PAYLOAD];
u8_t buf_tx[PAYLOAD];
char * buf_tx_start_msg = "Something to show UDP is working \n";
uint32_t buf_tx_start_msg_count = 35;
uint16_t cont_rx_udp = 0;
struct pbuf *pbuf1_tx;
//*****************************************************************************
//
//! \addtogroup master_example_list
//! <h1>Ethernet with lwIP (enet_lwip)</h1>
//!
//! This example application demonstrates the operation of the F2838x
//! microcontroller Ethernet controller using the lwIP TCP/IP Stack. Once
//! programmed, the device sits endlessly waiting for ICMP ping requests. It
//! has a static IP address. To ping the device, the sender has to be in the
//! same network. The stack also supports ARP.
//!
//! For additional details on lwIP, refer to the lwIP web page at:
//! http://savannah.nongnu.org/projects/lwip/
//
//*****************************************************************************
// These are defined by the linker (see device linker command file)
extern uint16_t RamfuncsLoadStart;
extern uint16_t RamfuncsLoadSize;
extern uint16_t RamfuncsRunStart;
extern uint16_t RamfuncsLoadEnd;
extern uint16_t RamfuncsRunEnd;
extern uint16_t RamfuncsRunSize;
extern uint16_t constLoadStart;
extern uint16_t constLoadEnd;
extern uint16_t constLoadSize;
extern uint16_t constRunStart;
extern uint16_t constRunEnd;
extern uint16_t constRunSize;
#define DEVICE_FLASH_WAITSTATES 2
//*****************************************************************************
//
// Driver specific initialization code and macro.
//
//*****************************************************************************
#define ETHERNET_NO_OF_RX_PACKETS 2U
#define ETHERNET_MAX_PACKET_LENGTH 1538U
#define NUM_PACKET_DESC_RX_APPLICATION PBUF_POOL_SIZE //8 - same as PBUF_POOL_SIZE
Ethernet_Handle emac_handle;
Ethernet_InitConfig *pInitCfg;
uint32_t Ethernet_numRxCallbackCustom = 0;
uint32_t releaseTxCount = 0;
uint32_t genericISRCustomcount = 0;
uint32_t genericISRCustomRBUcount = 0;
uint32_t genericISRCustomROVcount = 0;
uint32_t genericISRCustomRIcount = 0;
uint32_t systickPeriodValue = 125000; //15000000;
Ethernet_Pkt_Desc pktDescriptorRXCustom[NUM_PACKET_DESC_RX_APPLICATION];
extern uint32_t Ethernet_numGetPacketBufferCallback;
extern Ethernet_Device Ethernet_device_struct;
uint8_t Ethernet_rxBuffer[ETHERNET_NO_OF_RX_PACKETS *
ETHERNET_MAX_PACKET_LENGTH];
uint32_t sendPacketFailedCount = 0;
uint8_t mac_custom[6] = {0xA8, 0x63, 0xF2, 0x00, 0x1D, 0x98};
extern Ethernet_Pkt_Desc*
lwIPEthernetIntHandler(Ethernet_Pkt_Desc *pPacket);
void CM_init(void)
{
//
// Disable the watchdog
//
SysCtl_disableWatchdog();
#ifdef _FLASH
//
// Copy time critical code and flash setup code to RAM. This includes the
// following functions: InitFlash();
//
// The RamfuncsLoadStart, RamfuncsLoadSize, and RamfuncsRunStart symbols
// are created by the linker. Refer to the device .cmd file.
// Html pages are also being copied from flash to ram.
//
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
memcpy(&constRunStart, &constLoadStart, (size_t)&constLoadSize);
//
// Call Flash Initialization to setup flash waitstates. This function must
// reside in RAM.
//
Flash_initModule(FLASH0CTRL_BASE, FLASH0ECC_BASE, DEVICE_FLASH_WAITSTATES);
#endif
//
// Sets the NVIC vector table offset address.
//
#ifdef _FLASH
Interrupt_setVectorTableOffset((uint32_t)vectorTableFlash);
#else
Interrupt_setVectorTableOffset((uint32_t)vectorTableRAM);
#endif
}
//*****************************************************************************
//
// HTTP Webserver related callbacks and definitions.
//
//*****************************************************************************
//
// Currently, this implemented as a pointer to function which is called when
// corresponding query is received by the HTTP webserver daemon. When more
// features are needed to be added, it should be implemented as a separate
// interface.
//
void httpLEDToggle(void);
void(*ledtoggleFuncPtr)(void) = &httpLEDToggle;
//*****************************************************************************
//
// The interrupt handler for the SysTick interrupt.
//
//*****************************************************************************
void
SysTickIntHandler(void)
{
//
// Call the lwIP timer handler.
//
// lwIPTimer(systickPeriodValue);
lwIPTimer(1);
}
//*****************************************************************************
//
// This function is a callback function called by the example to
// get a Packet Buffer. Has to return a ETHERNET_Pkt_Desc Structure.
// Rewrite this API for custom use case.
//
//*****************************************************************************
Ethernet_Pkt_Desc* Ethernet_getPacketBufferCustom(void)
{
//
// Get the next packet descriptor from the descriptor pool
//
uint32_t shortIndex = (Ethernet_numGetPacketBufferCallback + 3)
% NUM_PACKET_DESC_RX_APPLICATION;
//
// Increment the book-keeping pointer which acts as a head pointer
// to the circular array of packet descriptor pool.
//
Ethernet_numGetPacketBufferCallback++;
//
// Update buffer length information to the newly procured packet
// descriptor.
//
pktDescriptorRXCustom[shortIndex].bufferLength =
ETHERNET_MAX_PACKET_LENGTH;
//
// Update the receive buffer address in the packer descriptor.
//
pktDescriptorRXCustom[shortIndex].dataBuffer =
&Ethernet_device_struct.rxBuffer [ \
(ETHERNET_MAX_PACKET_LENGTH*Ethernet_device_struct.rxBuffIndex)];
//
// Update the receive buffer pool index.
//
Ethernet_device_struct.rxBuffIndex += 1U;
Ethernet_device_struct.rxBuffIndex = \
(Ethernet_device_struct.rxBuffIndex%ETHERNET_NO_OF_RX_PACKETS);
//
// Receive buffer is usable from Address 0
//
pktDescriptorRXCustom[shortIndex].dataOffset = 0U;
//
// Return this new descriptor to the driver.
//
return (&(pktDescriptorRXCustom[shortIndex]));
}
//*****************************************************************************
//
// This is a hook function and called by the driver when it receives a
// packet. Application is expected to replenish the buffer after consuming it.
// Has to return a ETHERNET_Pkt_Desc Structure.
// Rewrite this API for custom use case.
//
//*****************************************************************************
Ethernet_Pkt_Desc* Ethernet_receivePacketCallbackCustom(
Ethernet_Handle handleApplication,
Ethernet_Pkt_Desc *pPacket)
{
Ethernet_Pkt_Desc* temp_eth_pkt;
//
// Book-keeping to maintain number of callbacks received.
//
#ifdef ETHERNET_DEBUG
Ethernet_numRxCallbackCustom++;
#endif
Ethernet_disableRxDMAReception(EMAC_BASE,0);
//
// This is a placeholder for Application specific handling
// We are replenishing the buffer received with another buffer
//
// return lwIPEthernetIntHandler(pPacket);
temp_eth_pkt=lwIPEthernetIntHandler(pPacket);
Ethernet_enableRxDMAReception(EMAC_BASE,0);
return temp_eth_pkt;
}
void Ethernet_releaseTxPacketBufferCustom(
Ethernet_Handle handleApplication,
Ethernet_Pkt_Desc *pPacket)
{
//
// Once the packet is sent, reuse the packet memory to avoid
// memory leaks. Call this interrupt handler function which will take care
// of freeing the memory used by the packet descriptor.
//
lwIPEthernetIntHandler(pPacket);
//
// Increment the book-keeping counter.
//
#ifdef ETHERNET_DEBUG
releaseTxCount++;
#endif
}
Ethernet_Pkt_Desc *Ethernet_performPopOnPacketQueueCustom(
Ethernet_PKT_Queue_T *pktQueuePtr)
{
Ethernet_Pkt_Desc *pktDescHdrPtr;
pktDescHdrPtr = pktQueuePtr->head;
if(0U != pktDescHdrPtr)
{
pktQueuePtr->head = pktDescHdrPtr->nextPacketDesc;
pktQueuePtr->count--;
}
return(pktDescHdrPtr);
}
void Ethernet_performPushOnPacketQueueCustom(
Ethernet_PKT_Queue_T *pktQueuePtr,
Ethernet_Pkt_Desc *pktDescHdrPtr)
{
pktDescHdrPtr->nextPacketDesc = 0U;
if(0U == pktQueuePtr->head)
{
//
// Queue is empty - Initialize it with this one packet
//
pktQueuePtr->head = pktDescHdrPtr;
pktQueuePtr->tail = pktDescHdrPtr;
}
else
{
//
// Queue is not empty - Push onto END
//
pktQueuePtr->tail->nextPacketDesc = pktDescHdrPtr;
pktQueuePtr->tail = pktDescHdrPtr;
}
pktQueuePtr->count++;
}
void Ethernet_setMACConfigurationCustom(uint32_t base, uint32_t flags)
{
HWREG(base + ETHERNET_O_MAC_CONFIGURATION) |= flags;
}
void Ethernet_clearMACConfigurationCustom(uint32_t base, uint32_t flags)
{
HWREG(base + ETHERNET_O_MAC_CONFIGURATION) &= ~flags;
}
interrupt void Ethernet_genericISRCustom(void)
{
genericISRCustomcount++;
Ethernet_RxChDesc *rxChan;
Ethernet_TxChDesc *txChan;
Ethernet_HW_descriptor *descPtr;
Ethernet_HW_descriptor *tailPtr;
uint16_t i=0;
Ethernet_clearMACConfigurationCustom(Ethernet_device_struct.baseAddresses.enet_base,ETHERNET_MAC_CONFIGURATION_RE);
Ethernet_clearMACConfigurationCustom(Ethernet_device_struct.baseAddresses.enet_base,ETHERNET_MAC_CONFIGURATION_TE);
for(i = 0U;i < Ethernet_device_struct.initConfig.numChannels;i++)
{
Ethernet_disableRxDMAReception(
Ethernet_device_struct.baseAddresses.enet_base,
i);
}
if(((ETHERNET_DMA_CH0_STATUS_AIS |
ETHERNET_DMA_CH0_STATUS_RBU) ==
(HWREG(Ethernet_device_struct.baseAddresses.enet_base +
ETHERNET_O_DMA_CH0_STATUS) &
(uint32_t)(ETHERNET_DMA_CH0_STATUS_AIS |
ETHERNET_DMA_CH0_STATUS_RBU))) ||
(ETHERNET_MTL_Q0_INTERRUPT_CONTROL_STATUS_RXOVFIS) ==
(HWREG(Ethernet_device_struct.baseAddresses.enet_base +
ETHERNET_O_MTL_Q0_INTERRUPT_CONTROL_STATUS) &
(uint32_t)(ETHERNET_MTL_Q0_INTERRUPT_CONTROL_STATUS_RXOVFIS
)))
{
if((ETHERNET_DMA_CH0_STATUS_AIS |
ETHERNET_DMA_CH0_STATUS_RBU) ==
(HWREG(Ethernet_device_struct.baseAddresses.enet_base +
ETHERNET_O_DMA_CH0_STATUS) &
(uint32_t)(ETHERNET_DMA_CH0_STATUS_AIS |
ETHERNET_DMA_CH0_STATUS_RBU)))
{
genericISRCustomRBUcount++;
}
if((ETHERNET_MTL_Q0_INTERRUPT_CONTROL_STATUS_RXOVFIS) ==
(HWREG(Ethernet_device_struct.baseAddresses.enet_base +
ETHERNET_O_MTL_Q0_INTERRUPT_CONTROL_STATUS) &
(uint32_t)(ETHERNET_MTL_Q0_INTERRUPT_CONTROL_STATUS_RXOVFIS
)))
{
genericISRCustomROVcount++;
Ethernet_enableMTLInterrupt(Ethernet_device_struct.baseAddresses.enet_base,0,
ETHERNET_MTL_Q0_INTERRUPT_CONTROL_STATUS_RXOVFIS);
}
/*
* Clear the AIS and RBU status bit. These MUST be
* cleared together!
*/
Ethernet_clearDMAChannelInterrupt(
Ethernet_device_struct.baseAddresses.enet_base,
ETHERNET_DMA_CHANNEL_NUM_0,
ETHERNET_DMA_CH0_STATUS_AIS |
ETHERNET_DMA_CH0_STATUS_RBU);
/*
*Recover from Receive Buffer Unavailable (and hung DMA)
*
* All descriptor buffers are owned by the application, and
* in result the DMA cannot transfer incoming frames to the
* buffers (RBU condition). DMA has also entered suspend
* mode at this point, too.
*
* Drain the RX queues
*/
/* Upon RBU error, discard all previously received packets */
if(Ethernet_device_struct.initConfig.pfcbDeletePackets != NULL)
(*Ethernet_device_struct.initConfig.pfcbDeletePackets)();
rxChan =
&Ethernet_device_struct.dmaObj.rxDma[ETHERNET_DMA_CHANNEL_NUM_0];
txChan=
&Ethernet_device_struct.dmaObj.txDma[ETHERNET_DMA_CHANNEL_NUM_0];
/*
* Need to disable multiple interrupts, so protect the code to do so within
* a global disable block (to prevent getting interrupted in between)
*/
if(NULL!= Ethernet_device_struct.ptrPlatformInterruptDisable)
{
(*Ethernet_device_struct.ptrPlatformInterruptDisable)(
Ethernet_device_struct.interruptNum[
ETHERNET_RX_INTR_CH0 + rxChan->chInfo->chNum]);
(*Ethernet_device_struct.ptrPlatformInterruptDisable)(
Ethernet_device_struct.interruptNum[
ETHERNET_GENERIC_INTERRUPT]);
}
/* verify we have full capacity in the descriptor queue */
if(rxChan->descQueue.count < rxChan->descMax) {
/* The queue is not at full capacity due to OOM errors.
Try to fill it again */
Ethernet_addPacketsIntoRxQueue(rxChan);
}
Ethernet_initRxChannel(
&Ethernet_device_struct.initConfig.chInfo[ETHERNET_CH_DIR_RX][0]);
Ethernet_writeRxDescTailPointer(
Ethernet_device_struct.baseAddresses.enet_base,
0,
(&Ethernet_device_struct.rxDesc[
((uint32_t)ETHERNET_DESCRIPTORS_NUM_RX_PER_CHANNEL) *
(0 + (uint32_t)1U)]));
if(NULL!= Ethernet_device_struct.ptrPlatformInterruptEnable)
{
(*Ethernet_device_struct.ptrPlatformInterruptEnable)(
Ethernet_device_struct.interruptNum[
ETHERNET_RX_INTR_CH0 + rxChan->chInfo->chNum]);
(*Ethernet_device_struct.ptrPlatformInterruptEnable)(
Ethernet_device_struct.interruptNum[
ETHERNET_GENERIC_INTERRUPT]);
}
}
if(0U != (HWREG(Ethernet_device_struct.baseAddresses.enet_base +
ETHERNET_O_DMA_CH0_STATUS) &
(uint32_t) ETHERNET_DMA_CH0_STATUS_RI))
{
genericISRCustomRIcount++;
Ethernet_clearDMAChannelInterrupt(
Ethernet_device_struct.baseAddresses.enet_base,
ETHERNET_DMA_CHANNEL_NUM_0,
ETHERNET_DMA_CH0_STATUS_NIS | ETHERNET_DMA_CH0_STATUS_RI);
}
for(i = 0U;i < Ethernet_device_struct.initConfig.numChannels;i++)
{
Ethernet_enableRxDMAReception(
Ethernet_device_struct.baseAddresses.enet_base,
i);
}
Ethernet_setMACConfigurationCustom(Ethernet_device_struct.baseAddresses.enet_base,ETHERNET_MAC_CONFIGURATION_RE);
Ethernet_setMACConfigurationCustom(Ethernet_device_struct.baseAddresses.enet_base,ETHERNET_MAC_CONFIGURATION_TE);
}
void
Ethernet_init(const unsigned char *mac)
{
Ethernet_InitInterfaceConfig initInterfaceConfig;
uint32_t macLower;
uint32_t macHigher;
uint8_t *temp;
initInterfaceConfig.ssbase = EMAC_SS_BASE;
initInterfaceConfig.enet_base = EMAC_BASE;
initInterfaceConfig.phyMode = ETHERNET_SS_PHY_INTF_SEL_MII;
//
// Assign SoC specific functions for Enabling,Disabling interrupts
// and for enabling the Peripheral at system level
//
initInterfaceConfig.ptrPlatformInterruptDisable =
&Platform_disableInterrupt;
initInterfaceConfig.ptrPlatformInterruptEnable =
&Platform_enableInterrupt;
initInterfaceConfig.ptrPlatformPeripheralEnable =
&Platform_enablePeripheral;
initInterfaceConfig.ptrPlatformPeripheralReset =
&Platform_resetPeripheral;
//
// Assign the peripheral number at the SoC
//
initInterfaceConfig.peripheralNum = SYSCTL_PERIPH_CLK_ENET;
//
// Assign the default SoC specific interrupt numbers of Ethernet interrupts
//
initInterfaceConfig.interruptNum[0] = INT_EMAC;
initInterfaceConfig.interruptNum[1] = INT_EMAC_TX0;
initInterfaceConfig.interruptNum[2] = INT_EMAC_TX1;
initInterfaceConfig.interruptNum[3] = INT_EMAC_RX0;
initInterfaceConfig.interruptNum[4] = INT_EMAC_RX1;
pInitCfg = Ethernet_initInterface(initInterfaceConfig);
Ethernet_getInitConfig(pInitCfg);
pInitCfg->dmaMode.InterruptMode = ETHERNET_DMA_MODE_INTM_MODE2;
//
// Assign the callbacks for Getting packet buffer when needed
// Releasing the TxPacketBuffer on Transmit interrupt callbacks
// Receive packet callback on Receive packet completion interrupt
//
pInitCfg->pfcbRxPacket = &Ethernet_receivePacketCallbackCustom;
pInitCfg->pfcbGetPacket = &Ethernet_getPacketBuffer; //custom
pInitCfg->pfcbFreePacket = &Ethernet_releaseTxPacketBufferCustom;
//
//Assign the Buffer to be used by the Low level driver for receiving
//Packets. This should be accessible by the Ethernet DMA
//
pInitCfg->rxBuffer = Ethernet_rxBuffer;
//
// The Application handle is not used by this application
// Hence using a dummy value of 1
//
Ethernet_getHandle((Ethernet_Handle)1, pInitCfg , &emac_handle);
//
// Disable transmit buffer unavailable and normal interrupt which
// are enabled by default in Ethernet_getHandle.
//
Ethernet_disableDmaInterrupt(Ethernet_device_struct.baseAddresses.enet_base,
0, (ETHERNET_DMA_CH0_INTERRUPT_ENABLE_TBUE |
ETHERNET_DMA_CH0_INTERRUPT_ENABLE_NIE));
//
// Enable the MTL interrupt to service the receive FIFO overflow
// condition in the Ethernet module.
//
Ethernet_enableMTLInterrupt(Ethernet_device_struct.baseAddresses.enet_base,0,
ETHERNET_MTL_Q0_INTERRUPT_CONTROL_STATUS_RXOIE);
//
// Disable the MAC Management counter interrupts as they are not used
// in this application.
//
HWREG(Ethernet_device_struct.baseAddresses.enet_base + ETHERNET_O_MMC_RX_INTERRUPT_MASK) = 0xFFFFFFFF;
HWREG(Ethernet_device_struct.baseAddresses.enet_base + ETHERNET_O_MMC_IPC_RX_INTERRUPT_MASK) = 0xFFFFFFFF;
HWREG(Ethernet_device_struct.baseAddresses.enet_base + ETHERNET_O_MMC_TX_INTERRUPT_MASK) = 0xFFFFFFFF;
//
//Do global Interrupt Enable
//
(void)Interrupt_enableInProcessor();
//
//Assign default ISRs
//
Interrupt_registerHandler(INT_EMAC_TX0, Ethernet_transmitISR);
Interrupt_registerHandler(INT_EMAC_RX0, Ethernet_receiveISR);
Interrupt_registerHandler(INT_EMAC, Ethernet_genericISRCustom);
//
// Convert the mac address string into the 32/16 split variables format
// that is required by the driver to program into hardware registers.
// Note: This step is done after the Ethernet_getHandle function because
// a dummy MAC address is programmed in that function.
//
temp = (uint8_t *)&macLower;
temp[0] = mac[0];
temp[1] = mac[1];
temp[2] = mac[2];
temp[3] = mac[3];
temp = (uint8_t *)&macHigher;
temp[0] = mac[4];
temp[1] = mac[5];
//
// Program the unicast mac address.
//
Ethernet_setMACAddr(EMAC_BASE,
0,
macHigher,
macLower,
ETHERNET_CHANNEL_0);
Ethernet_clearMACConfigurationCustom(Ethernet_device_struct.baseAddresses.enet_base,ETHERNET_MAC_CONFIGURATION_RE);
Ethernet_setMACConfigurationCustom(Ethernet_device_struct.baseAddresses.enet_base,ETHERNET_MAC_CONFIGURATION_RE);
}
void udp_rx_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p,
struct ip_addr *addr, u16_t port)
{
char *cad_rx;
uint16_t long_actual = 0;
uint16_t long_UDP_complete = 0;
uint16_t long_total = 0;
uint8_t cnt_lee = 0;
httpLEDToggle();
memset(buf_rx, 0x00, 50);
long_total = p->tot_len;
cont_rx_udp++;
while ((long_UDP_complete < long_total)
&& (long_UDP_complete < 1800) || (cnt_lee == 0))
{
cnt_lee++;
long_actual = p->len;
cad_rx = p->payload;
int i = 0;
for (i = 0; i < long_actual; i++)
{
buf_rx[0 + i + long_UDP_complete] = *cad_rx++;
}
long_UDP_complete = long_actual + long_UDP_complete;
buf_rx[long_UDP_complete + 1] = '\n';
if (long_UDP_complete == long_total)
{
pbuf_free(p); /* don't leak the pbuf!*/
}
else
{
if ( p->next != NULL)
p = p->next;
// pbuf_free(a); /* don't leak the pbuf!*/
}
if ((buf_rx[0] == 'S') && (buf_rx[1] == 'T') && (buf_rx[2] == 'O') && (buf_rx[3] == 'P'))
{ //Disconnect
//udp_disconnect(upcb);
Connected_udp_28000 = false;
cnt_Connected_udp_28000 = 0;
}
else if ((buf_rx[0] == 'S') && (buf_rx[1] == 'T') && (buf_rx[2] == 'A') && (buf_rx[3] == 'R') && (buf_rx[4] == 'T'))
{ //Connect
Connected_udp_28000 = true;
cnt_Connected_udp_28000 = 0;
/* process the payload in p->payload */
udp_connect(upcb, addr, port); /* connect to the remote host */
}
}
pbuf_free(p);
if (!Connected_udp_28000)
{
udp_disconnect(upcb);
}
}
/* UDP initialization ......................................................*/
void my_udp_init(void)
{
g_upcb = udp_new();
udp_bind(g_upcb, IP_ADDR_ANY, 28000);
udp_recv(g_upcb, &udp_rx_callback, (void*) 0);
}
//*****************************************************************************
//
// This example demonstrates the use of the Ethernet Controller.
//
//*****************************************************************************
unsigned long IPAddr = 0xC0A80004; // 0xC0A80004; //192.168.0.4
unsigned long NetMask = 0xFFFFFF00;
unsigned long GWAddr = 0x00000000;
int
main(void)
{
unsigned long ulUser0, ulUser1;
unsigned char pucMACArray[8];
int i=0;
// ////////////////////////////////////////
// Initializing the CM. Loading the required functions to SRAM.
//
CM_init();
SYSTICK_setPeriod(systickPeriodValue);
SYSTICK_enableCounter();
SYSTICK_registerInterruptHandler(SysTickIntHandler);
SYSTICK_enableInterrupt();
//
// Enable processor interrupts.
//
Interrupt_enableInProcessor();
// Set user/company specific MAC octets
// (for this code we are using A8-63-F2-00-00-80)
// 0x00 MACOCT3 MACOCT2 MACOCT1
ulUser0 = 0x00F263A8;
// 0x00 MACOCT6 MACOCT5 MACOCT4
ulUser1 = 0x00800000;
//
// Convert the 24/24 split MAC address from NV ram into a 32/16 split MAC
// address needed to program the hardware registers, then program the MAC
// address into the Ethernet Controller registers.
//
pucMACArray[0] = ((ulUser0 >> 0) & 0xff);
pucMACArray[1] = ((ulUser0 >> 8) & 0xff);
pucMACArray[2] = ((ulUser0 >> 16) & 0xff);
pucMACArray[3] = ((ulUser1 >> 0) & 0xff);
pucMACArray[4] = ((ulUser1 >> 8) & 0xff);
pucMACArray[5] = ((ulUser1 >> 16) & 0xff);
//
// Initialize ethernet module.
//
Ethernet_init(pucMACArray);
//
// Initialze the lwIP library, using DHCP.
//
lwIPInit(0, pucMACArray, IPAddr, NetMask, GWAddr, IPADDR_USE_STATIC);
// Initialize the UDP server
//
my_udp_init();
//
// Loop forever. All the work is done in interrupt handlers.
//
uint32_t cnt_FFT = 0;
Interrupt_setPriority(INT_EMAC_TX0, 2);
Interrupt_setPriority(INT_EMAC_RX0, 1);
Interrupt_enable(INT_EMAC_TX0);
Interrupt_enable(INT_EMAC_RX0);
Interrupt_enable(INT_EMAC);
volatile int cnt_total_loop=0;
volatile int cnt_total_mqtt_pub=0;
while (1)
{
cnt_total_loop++;
if (Connected_udp_28000)
{
//UDP TX block
if (flag_TX_frame_UDP)
{
cnt_FFT++;
//flag_TX_frame_UDP = false;
/////////////////////////////////////////////
for (i = 0; i < PAYLOAD; i++)
{
if(i < buf_tx_start_msg_count)
{
buf_tx[i] = (uint8_t)buf_tx_start_msg[i];
}
else
{
buf_tx[i] = (uint8_t) (cnt_FFT);
}
}
////////////////////////////////////////////
pbuf1_tx = pbuf_alloc(PBUF_TRANSPORT, PAYLOAD, PBUF_RAM);
if (pbuf1_tx!= NULL)
{
pbuf1_tx->payload = (void*) buf_tx;
pbuf1_tx->tot_len = PAYLOAD; //17 // long_UDP_complete+4;
pbuf1_tx->len = PAYLOAD; //17 // long_UDP_complete+4;
udp_send(g_upcb, pbuf1_tx);
}
cnt_Connected_udp_28000++;
if (pbuf1_tx!= NULL)
pbuf_free(pbuf1_tx);
}
}
SysCtl_delay(6000000);//aprox 1 sec
sys_check_timeouts();
}
}
//*****************************************************************************
//
// Called by lwIP Library. Toggles the led when a command is received by the
// HTTP webserver.
//
//*****************************************************************************
void httpLEDToggle(void)
{
//
// Toggle the LED D1 on the control card.
//
GPIO_togglePin(DEVICE_GPIO_PIN_LED1);
}
//*****************************************************************************
//
// Called by lwIP Library. Could be used for periodic custom tasks.
//
//*****************************************************************************
uint32_t cnt_ms_lwip_Htimer=0;
uint32_t cnt_ms_TX_Htimer=0;
void lwIPHostTimerHandler(void)
{
// msTime++;
cnt_ms_lwip_Htimer++;
}
@@ -0,0 +1,647 @@
//###########################################################################
//
// FILE: f2838xif.c
//
// TITLE: F2838x interface port file.
//
//###########################################################################
// $TI Release: $
// $Release Date: $
//
// C2000Ware v5.04.00.00
//
// Copyright (C) 2024 Texas Instruments Incorporated - http://www.ti.com
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the
// distribution.
//
// Neither the name of Texas Instruments Incorporated nor the names of
// its contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// $
//###########################################################################
/**
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* This file is part of the lwIP TCP/IP stack.
*
* Author: Adam Dunkels <adam@sics.se>
*
*/
/**
* Copyright (c) 2018 Texas Instruments Incorporated
*
* This file is dervied from the ``ethernetif.c'' skeleton Ethernet network
* interface driver for lwIP.
*
*/
#include <string.h>
/**
* lwIP specific header files
*/
#include "lwip/opt.h"
#include "lwip/def.h"
#include "lwip/mem.h"
#include "lwip/pbuf.h"
#include "lwip/sys.h"
#include <lwip/stats.h>
#include <lwip/snmp.h>
#include "netif/etharp.h"
#include "netif/ppp/pppoe.h"
#include "netif/f2838xif.h"
/**
* f2838x device specific header files
*/
#include "inc/hw_emac.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib_cm/ethernet.h"
#include "driverlib_cm/interrupt.h"
#include "driverlib_cm/sysctl.h"
#include "utils/lwiplib.h"
/**
* Sanity Check: This interface driver will NOT work if the following defines
* are incorrect.
*
*/
#if (PBUF_LINK_HLEN != 16)
#error "PBUF_LINK_HLEN must be 16 for this interface driver!"
#endif
#if (ETH_PAD_SIZE != 0)
#error "ETH_PAD_SIZE must be 0 for this interface driver!"
#endif
#if (!SYS_LIGHTWEIGHT_PROT)
#error "SYS_LIGHTWEIGHT_PROT must be enabled for this interface driver!"
#endif
/**
* Number of pbufs supported in low-level tx/rx pbuf queue.
*
*/
#ifndef F2838X_NUM_PBUF_QUEUE
#define F2838X_NUM_PBUF_QUEUE 20
#endif
#define EMAC_BASE 0x400C0000U //EMAC
#define EMAC_SS_BASE 0x400C2000U //EMACSS
/* Define those to better describe your network interface. */
#define IFNAME0 't'
#define IFNAME1 'i'
uint32_t mem_alloc_count = 0, mem_free_count = 0, process_transmit_count = 0;
/* Helper struct to hold a queue of pbufs for transmit and receive. */
struct pbufq
{
struct pbuf *pbuf[F2838X_NUM_PBUF_QUEUE];
unsigned long qwrite;
unsigned long qread;
unsigned long overflow;
};
/* Helper macros for accessing pbuf queues. */
#define PBUF_QUEUE_EMPTY(q) \
(((q)->qwrite == (q)->qread) ? true : false)
#define PBUF_QUEUE_FULL(q) \
((((((q)->qwrite + 1) % F2838X_NUM_PBUF_QUEUE)) == (q)->qread) ? \
true : false )
/**
* Helper struct to hold private data used to operate your ethernet interface.
* Keeping the ethernet address of the MAC in this struct is not necessary
* as it is already kept in the struct netif.
* But this is only an example, anyway...
*/
struct f2838xif
{
struct eth_addr *ethaddr;
/* Add whatever per-interface state that is needed here. */
struct pbufq txq;
Ethernet_Pkt_Desc *pktDesc;
};
/**
* A structure used to keep track of driver state and error counts.
*/
typedef struct {
uint32_t ui32TXCount;
uint32_t ui32TXCopyCount;
uint32_t ui32TXCopyFailCount;
uint32_t ui32TXNoDescCount;
uint32_t ui32TXBufQueuedCount;
uint32_t ui32TXBufFreedCount;
uint32_t ui32RXBufReadCount;
uint32_t ui32RXPacketReadCount;
uint32_t ui32RXPacketErrCount;
uint32_t ui32RXPacketCBErrCount;
uint32_t ui32RXNoBufCount;
}
tDriverStats;
tDriverStats g_sDriverStats = {0};
#define DRIVER_STATS_INC(x) do{ g_sDriverStats.ui32##x++; } while(0)
#define DRIVER_STATS_DEC(x) do{ g_sDriverStats.ui32##x--; } while(0)
#define DRIVER_STATS_ADD(x, inc) do{ g_sDriverStats.ui32##x += inc; } while(0)
#define DRIVER_STATS_SUB(x, dec) do{ g_sDriverStats.ui32##x -= dec; } while(0)
/*
* Creating a queue that maps an ethernet packet descriptor with
* the corresponding pbuf. It is useful to free up the allocated pbuf memory
* after the packet has been sent.
*/
#ifndef F2838X_INTERFACE_NUM_PKT_DESC_QUEUE
#define F2838X_INTERFACE_NUM_PKT_DESC_QUEUE 20
#endif
/**
* Global variable for this interface's private data. Needed to allow
* the interrupt handlers access to this information outside of the
* context of the lwIP netif.
*
*/
static struct f2838xif f2838xif_data;
Ethernet_Handle emac_handle;
extern uint32_t sendPacketFailedCount;
/**
* A macro which determines whether a pointer is within the SRAM address
* space and, hence, points to a buffer that the Ethernet MAC can directly
* DMA from.
*/
#define PTR_SAFE_FOR_EMAC_DMA(ptr) (((uint32_t)(ptr) >= 0x2000800) && \
((uint32_t)(ptr) < 0x2000FFFF))
/**
* In this function, the hardware should be initialized.
* Called from f2838xif_init().
*
* @param netif the already initialized lwip network interface structure
* for this ethernetif
*/
static void
f2838xif_hwinit(struct netif *netif)
{
uint32_t mac_low,mac_high;
uint8_t *pucTemp;
/* set MAC hardware address length */
netif->hwaddr_len = ETHARP_HWADDR_LEN;
/* set MAC address */
Ethernet_getMACAddr(EMAC_BASE, 0, &mac_high, &mac_low);
pucTemp = (uint8_t *)&mac_low;
netif->hwaddr[0] = pucTemp[0];
netif->hwaddr[1] = pucTemp[1];
netif->hwaddr[2] = pucTemp[2];
netif->hwaddr[3] = pucTemp[3];
pucTemp = (uint8_t *)&mac_high;
netif->hwaddr[4] = pucTemp[0];
netif->hwaddr[5] = pucTemp[1];
/* maximum transfer unit */
netif->mtu = 1500;
/* device capabilities */
/* don't set NETIF_FLAG_ETHARP if this device is not an ethernet one */
netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP | NETIF_FLAG_IGMP;
}
/**
* This function should do the actual transmission of the packet. The packet is
* contained in the pbuf that is passed to the function. This pbuf might be
* chained.
*
* @param netif the lwip network interface structure for this ethernetif
* @param p the MAC packet to send (e.g. IP packet including MAC addresses and type)
* @return ERR_OK if the packet could be sent
* an err_t value if the packet couldn't be sent
* @note This function MUST be called with interrupts disabled or with the
* F2838x Ethernet transmit fifo protected.
*/
static err_t
f2838xif_transmit(struct netif *netif, struct pbuf *p)
{
struct pbuf *q;
/* No of pbufs (if chained)*/
int n=0;
int i=0;
Ethernet_Pkt_Desc *pktDescOrigPtr, *pktDescPtr;
uint32_t Ethernet_sendStatus = 0;
/* ENTER CRITICAL SECTION
* This is to protect the forming of packetc descriptor chain using pbufs
* passed to the function.
*/
Interrupt_disable(INT_EMAC_TX0);
Interrupt_disable(INT_EMAC_RX0);
/*
* Make sure we still have a valid buffer (it may have been copied)
*/
if(!p)
{
LINK_STATS_INC(link.memerr);
/* EXIT CRITICAL SECTION */
Interrupt_enable(INT_EMAC_TX0);
Interrupt_enable(INT_EMAC_RX0);
return(ERR_MEM);
}
/*
* Count the number of the pbufs in the chain that we are passed with.
*/
for(q = p; q != NULL; q = q->next)
n++;
/*
* Get the head of the packet descriptor chain that will be passed to
* the driver for sending.
*/
pktDescOrigPtr = mem_malloc(sizeof(Ethernet_Pkt_Desc));
mem_alloc_count++;
if(pktDescOrigPtr == NULL)
{
pbuf_free(p);
LINK_STATS_INC(link.memerr);
__asm(" bkpt #0");
return (ERR_MEM);
}
/*
* Go over the pbufs present in the chain and allot a packet descriptor for
* each pbuf. The descriptors will also be chained in the same order as
* pbufs before passing the head of the chain to the driver.
*/
for(q = p, pktDescPtr = pktDescOrigPtr; // Initialization
q != NULL; // Condition evaluation
q = q->next, pktDescPtr = pktDescPtr->nextPacketDesc) // Manipulation
{
/*
* Initializing this data structure, otherwise garbage values will
* result in rogue results while running.
*/
memset(pktDescPtr,0,sizeof(Ethernet_Pkt_Desc));
pktDescPtr->dataOffset = 0;
pktDescPtr->dataBuffer = q->payload;
pktDescPtr->pktChannel = ETHERNET_DMA_CHANNEL_NUM_0;
pktDescPtr->pktLength = q->tot_len;
pktDescPtr->bufferLength = q->len;
pktDescPtr->validLength = q->len;
if(i==0)
{
if(n!=1)
{
/*
* Prepare the next ethernet packet descriptor holder if
* there is a pbuf next in the chain.
*/
pktDescPtr->nextPacketDesc =
mem_malloc(sizeof(Ethernet_Pkt_Desc));
mem_alloc_count++;
if(pktDescPtr->nextPacketDesc == NULL)
{
pbuf_free(p);
LINK_STATS_INC(link.memerr);
__asm(" bkpt #0");
return (ERR_MEM);
}
pktDescPtr->flags = ETHERNET_PKT_FLAG_SOP ;
}
else
{
pktDescPtr->nextPacketDesc = 0;
pktDescPtr->flags = ETHERNET_PKT_FLAG_SOP |
ETHERNET_PKT_FLAG_EOP;
}
}
else
{
if(q->next != NULL)
{
/*
* Prepare the next ethernet packet descriptor holder if
* there is a pbuf next in the chain.
*/
pktDescPtr->nextPacketDesc =
mem_malloc(sizeof(Ethernet_Pkt_Desc));
mem_alloc_count++;
if(pktDescPtr->nextPacketDesc == NULL)
{
pbuf_free(p);
LINK_STATS_INC(link.memerr);
__asm(" bkpt #0");
return (ERR_MEM);
}
pktDescPtr->flags = 0;
}
else
{
pktDescPtr->nextPacketDesc = 0;
pktDescPtr->flags = ETHERNET_PKT_FLAG_EOP;
}
}
i++;
}
/* EXIT CRITICAL SECTION */
Interrupt_enable(INT_EMAC_TX0);
Interrupt_enable(INT_EMAC_RX0);
/*
* Hand over the packet descriptor to the driver.
*/
pktDescOrigPtr->numPktFrags = n;
Ethernet_sendStatus = Ethernet_sendPacket(emac_handle,pktDescOrigPtr);
if(Ethernet_sendStatus != 0)
{
sendPacketFailedCount++;
}
LINK_STATS_INC(link.xmit);
return(ERR_OK);
}
/**
* This function will process all transmit descriptors and free pbufs attached
* to any that have been transmitted since we last checked.
*
* This function is called only from the Ethernet interrupt handler.
*
* @param netif the lwip network interface structure for this ethernetif
* @return None.
*/
int descriptorFreeErr=0;
static void
f2838xif_process_transmit(struct netif *netif, Ethernet_Pkt_Desc *pPacket)
{
Ethernet_Pkt_Desc *pktDescPtr, *pktDescPtrShadow;
process_transmit_count++;
/*
* Free the packet descriptor memory.
*/
if (pPacket == 0)
return;
pktDescPtr = pPacket;
/* ENTER CRITICAL SECTION */
Interrupt_disable(INT_EMAC_TX0);
//Interrupt_disable(INT_EMAC_RX0);
do
{
pktDescPtrShadow = pktDescPtr->nextPacketDesc;
mem_free_count++;
mem_free(pktDescPtr);
pktDescPtr = pktDescPtrShadow;
//if((pktDescPtr==0))
// break;
}
//while((pktDescPtr->flags & ETHERNET_INTERRUPT_FLAG_TRANSMIT) ==
// ETHERNET_INTERRUPT_FLAG_TRANSMIT);
//pktPtr->flags |= ETHERNET_INTERRUPT_FLAG_TRANSMIT
while((pktDescPtr!=0));
/* EXIT CRITICAL SECTION */
Interrupt_enable(INT_EMAC_TX0);
//Interrupt_enable(INT_EMAC_RX0);
}
/**
* This function with either place the packet into the F2838x transmit fifo,
* or will place the packet in the interface PBUF Queue for subsequent
* transmission when the transmitter becomes idle.
*
* @param netif the lwip network interface structure for this ethernetif
* @param p the MAC packet to send (e.g. IP packet including MAC addresses and type)
* @return ERR_OK if the packet could be sent
* an err_t value if the packet couldn't be sent
*
*/
static err_t
f2838xif_output(struct netif *netif, struct pbuf *p)
{
f2838xif_transmit(netif, p);
return ERR_OK;
}
/**
* This function will read a single packet from the F2838x ethernet
* interface, if available, and return a pointer to a pbuf. The timestamp
* of the packet will be placed into the pbuf structure.
*
* @param netif the lwip network interface structure for this ethernetif
* @return pointer to pbuf packet if available, NULL otherswise.
*/
Ethernet_Pkt_Desc*
f2838xif_receive( struct netif *netif, Ethernet_Pkt_Desc *pPacket )
{
struct pbuf *p;
#if LWIP_PTPD
u32_t time_s, time_ns;
/* Get the current timestamp if PTPD is enabled */
lwIPHostGetTime(&time_s, &time_ns);
#endif
p = pbuf_alloc(PBUF_RAW, sizeof(struct pbuf), PBUF_POOL);
if(p)
{
p->payload = pPacket->dataBuffer;
p->len = 1538;//pPacket->pktLength;
p->tot_len = p->len;
#if LWIP_PTPD
/* Place the timestamp in the PBUF */
p->time_s = time_s;
p->time_ns = time_ns;
#endif
if(ethernet_input(p, netif)!=ERR_OK)
{
/* drop the packet */
LWIP_DEBUGF(NETIF_DEBUG, ("f2838xif_input: input error\n"));
pbuf_free(p);
p = NULL;
/* Adjust the link statistics */
LINK_STATS_INC(link.memerr);
LINK_STATS_INC(link.drop);
}
}
LINK_STATS_INC(link.recv);
return(pPacket);
}
Ethernet_Pkt_Desc *f2838xif_newbuffcallback(void)
{
Ethernet_Pkt_Desc *newPacket = mem_calloc(1, sizeof(Ethernet_Pkt_Desc));
if(newPacket)
{
newPacket->dataBuffer= memp_malloc(MEMP_PBUF_POOL);
}
return newPacket;
}
/**
* Should be called at the beginning of the program to set up the
* network interface. It calls the function f2838xif_hwinit() to do the
* actual setup of the hardware.
* This function should be passed as a parameter to netif_add().
*
* @param netif the lwip network interface structure for this ethernetif
* @return ERR_OK if the loopif is initialized
* ERR_MEM if private data couldn't be allocated
* any other err_t on error
*/
err_t
f2838xif_init(struct netif *netif)
{
LWIP_ASSERT("netif != NULL", (netif != NULL));
#if LWIP_NETIF_HOSTNAME
/* Initialize interface hostname */
netif->hostname = "lwip";
#endif /* LWIP_NETIF_HOSTNAME */
/*
* Initialize the snmp variables and counters inside the struct netif.
* The last argument should be replaced with your link speed, in units
* of bits per second.
*/
NETIF_INIT_SNMP(netif, snmp_ifType_ethernet_csmacd, 1000000);
netif->state = &f2838xif_data;
netif->name[0] = IFNAME0;
netif->name[1] = IFNAME1;
/* We directly use etharp_output() here to save a function call.
* You can instead declare your own function an call etharp_output()
* from it if you have to do some checks before sending (e.g. if link
* is available...) */
netif->output = etharp_output;
netif->linkoutput = f2838xif_output;
f2838xif_data.ethaddr = (struct eth_addr *)&(netif->hwaddr[0]);
f2838xif_data.txq.qread = f2838xif_data.txq.qwrite = 0;
f2838xif_data.txq.overflow = 0;
/* initialize the hardware */
f2838xif_hwinit(netif);
return ERR_OK;
}
/**
* Process tx and rx packets at the low-level interrupt.
*
* Should be called from the F2838x Ethernet Interrupt Handler. This
* function will read packets from the F2838x Ethernet fifo and place them
* into a pbuf queue. If the transmitter is idle and there is at least one packet
* on the transmit queue, it will place it in the transmit fifo and start the
* transmitter.
*
*/
Ethernet_Pkt_Desc*
f2838xif_interrupt(struct netif *netif, Ethernet_Pkt_Desc *pPacket)
{
Ethernet_Pkt_Desc *sPacket = NULL;
/**
* Based on the flags we get from pPacket, we should decide whether
* to trasnmit or receive. Currently, it works for only incoming
* ICMP ping requests.
*/
/* ENTER CRITICAL SECTION
* This is to protect the forming of packetc descriptor chain using pbufs
* passed to the function.
*/
Interrupt_disable(INT_EMAC_TX0);
//Interrupt_disable(INT_EMAC_RX0);
if(pPacket->flags & ETHERNET_INTERRUPT_FLAG_RECEIVE)
sPacket = f2838xif_receive(netif, pPacket);
if(pPacket->flags & ETHERNET_INTERRUPT_FLAG_TRANSMIT)
f2838xif_process_transmit(netif, pPacket);
/* EXIT CRITICAL SECTION */
Interrupt_enable(INT_EMAC_TX0);
//Interrupt_enable(INT_EMAC_RX0);
return (sPacket);
}
@@ -0,0 +1,424 @@
//*****************************************************************************
//
// lwipopts.h - Configuration file for lwIP
//
//*****************************************************************************
//
// NOTE: This file has been derived from the lwIP/src/include/lwip/opt.h
// header file.
//
// For additional details, refer to the original "opt.h" file, and lwIP
// documentation.
//
//*****************************************************************************
#ifndef __LWIPOPTS_H__
#define __LWIPOPTS_H__
//*****************************************************************************
//
// ---------- Stellaris / lwIP Port Options ----------
//
//*****************************************************************************
#define HOST_TMR_INTERVAL 10 //100 // default is 0
//#define DHCP_EXPIRE_TIMER_MSECS (60 * 1000)
//#define INCLUDE_HTTPD_SSI
//#define INCLUDE_HTTPD_CGI
//#define DYNAMIC_HTTP_HEADERS
//#define INCLUDE_HTTPD_DEBUG
//*****************************************************************************
//
// ---------- Platform specific locking ----------
//
//*****************************************************************************
#define SYS_LIGHTWEIGHT_PROT 1 // default is 0
#define NO_SYS 1 // default is 0
//#define MEMCPY(dst,src,len) memcpy(dst,src,len)
//#define SMEMCPY(dst,src,len) memcpy(dst,src,len)
//*****************************************************************************
//
// ---------- Memory options ----------
//
//*****************************************************************************
//#define MEM_LIBC_MALLOC 0
#define MEM_ALIGNMENT 4 // default is 1
#define MEM_SIZE (4 * 1024) // default is 1600, was 16K
//#define MEMP_OVERFLOW_CHECK 0
//#define MEMP_SANITY_CHECK 0
//#define MEM_USE_POOLS 0
//#define MEMP_USE_CUSTOM_POOLS 0
//*****************************************************************************
//
// ---------- Internal Memory Pool Sizes ----------
//
//*****************************************************************************
#define MEMP_NUM_PBUF 16 //24 // Default 16, was 16
//#define MEMP_NUM_RAW_PCB 4
#define MEMP_NUM_UDP_PCB 4
#define MEMP_NUM_TCP_PCB 12 //16 // Default 5, was 12
//#define MEMP_NUM_TCP_PCB_LISTEN 8
//#define MEMP_NUM_TCP_SEG 16
//#define MEMP_NUM_REASSDATA 5
//#define MEMP_NUM_ARP_QUEUE 30
//#define MEMP_NUM_IGMP_GROUP 8
//#define MEMP_NUM_SYS_TIMEOUT 3
//#define MEMP_NUM_NETBUF 2
//#define MEMP_NUM_NETCONN 4
//#define MEMP_NUM_TCPIP_MSG_API 8
//#define MEMP_NUM_TCPIP_MSG_INPKT 8
#define PBUF_POOL_SIZE 16 //24 // Default 16, was 36
//*****************************************************************************
//
// ---------- ARP options ----------
//
//*****************************************************************************
#define LWIP_ARP 1
#define ARP_TABLE_SIZE 10
#define ARP_QUEUEING 1
#define ETHARP_TRUST_IP_MAC 1
//*****************************************************************************
//
// ---------- IP options ----------
//
//*****************************************************************************
//#define IP_FORWARD 0
//#define IP_OPTIONS_ALLOWED 1
#define IP_REASSEMBLY 0 // default is 1
#define IP_FRAG 0 // default is 1
//#define IP_REASS_MAXAGE 3
//#define IP_REASS_MAX_PBUFS 10
//#define IP_FRAG_USES_STATIC_BUF 1
//#define IP_FRAG_MAX_MTU 1500
//#define IP_DEFAULT_TTL 255
//*****************************************************************************
//
// ---------- ICMP options ----------
//
//*****************************************************************************
#define LWIP_ICMP 1
#define ICMP_TTL (IP_DEFAULT_TTL)
//*****************************************************************************
//
// ---------- RAW options ----------
//
//*****************************************************************************
//#define LWIP_RAW 1
//#define RAW_TTL (IP_DEFAULT_TTL)
//*****************************************************************************
//
// ---------- DHCP options ----------
//
//*****************************************************************************
#define LWIP_DHCP 0 // default is 0
//#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP))
//*****************************************************************************
//
// ---------- UPNP options ----------
//
//*****************************************************************************
//#define LWIP_UPNP 0
//*****************************************************************************
//
// ---------- PTPD options ----------
//
//*****************************************************************************
//#define LWIP_PTPD 0
//*****************************************************************************
//
// ---------- AUTOIP options ----------
//
//*****************************************************************************
#define LWIP_AUTOIP 0 // default is 0
#define LWIP_DHCP_AUTOIP_COOP ((LWIP_DHCP) && (LWIP_AUTOIP))
// default is 0
#define LWIP_DHCP_AUTOIP_COOP_TRIES 5 // default is 9
//*****************************************************************************
//
// ---------- SNMP options ----------
//
//*****************************************************************************
//#define LWIP_SNMP 0
//#define SNMP_CONCURRENT_REQUESTS 1
//#define SNMP_TRAP_DESTINATIONS 1
//#define SNMP_PRIVATE_MIB 0
//#define SNMP_SAFE_REQUESTS 1
//*****************************************************************************
//
// ---------- IGMP options ----------
//
//*****************************************************************************
//#define LWIP_IGMP 1
//*****************************************************************************
//
// ---------- DNS options -----------
//
//*****************************************************************************
//#define LWIP_DNS 0
//#define DNS_TABLE_SIZE 4
//#define DNS_MAX_NAME_LENGTH 256
//#define DNS_MAX_SERVERS 2
//#define DNS_DOES_NAME_CHECK 1
//#define DNS_USES_STATIC_BUF 1
//#define DNS_MSG_SIZE 512
//*****************************************************************************
//
// ---------- UDP options ----------
//
//*****************************************************************************
#ifdef UDP_OFF
#define LWIP_UDP 0
#else
#define LWIP_UDP 1
#endif
//#define LWIP_UDPLITE 0
#define UDP_TTL (IP_DEFAULT_TTL)
//*****************************************************************************
//
// ---------- TCP options ----------
//
//*****************************************************************************
#ifdef MQTT_ON
#define LWIP_TCP 1
#else
#define LWIP_TCP 0
#endif
//#define TCP_TTL (IP_DEFAULT_TTL)
#define TCP_WND 4096 // default is 2048
//#define TCP_MAXRTX 12
//#define TCP_SYNMAXRTX 6
//#define TCP_QUEUE_OOSEQ 1
#define TCP_MSS 1500 // default is 128
//#define TCP_CALCULATE_EFF_SEND_MSS 1
#define TCP_SND_BUF (4 * TCP_MSS)
// default is 256, was 6 *
//#define TCP_SND_QUEUELEN (4 * (TCP_SND_BUF/TCP_MSS))
//#define TCP_SNDLOWAT (TCP_SND_BUF/2)
//#define TCP_LISTEN_BACKLOG 0
//#define TCP_DEFAULT_LISTEN_BACKLOG 0xff
//*****************************************************************************
//
// ---------- API options ----------
//
//*****************************************************************************
//#define LWIP_EVENT_API 0
//#define LWIP_CALLBACK_API 1
//*****************************************************************************
//
// ---------- Pbuf options ----------
//
//*****************************************************************************
#define PBUF_LINK_HLEN 16 // default is 14
#define PBUF_POOL_BUFSIZE 1600//512
// default is LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN)
#define ETH_PAD_SIZE 0 // default is 0
//*****************************************************************************
//
// ---------- Network Interfaces options ----------
//
//*****************************************************************************
//#define LWIP_NETIF_HOSTNAME 0
//#define LWIP_NETIF_API 0
//#define LWIP_NETIF_STATUS_CALLBACK 0
//#define LWIP_NETIF_LINK_CALLBACK 0
//#define LWIP_NETIF_HWADDRHINT 0
//*****************************************************************************
//
// ---------- LOOPIF options ----------
//
//*****************************************************************************
//#define LWIP_HAVE_LOOPIF 0
//#define LWIP_LOOPIF_MULTITHREADING 1
//*****************************************************************************
//
// ---------- Thread options ----------
//
//*****************************************************************************
//#define TCPIP_THREAD_NAME "tcpip_thread"
//#define TCPIP_THREAD_STACKSIZE 0
//#define TCPIP_THREAD_PRIO 1
//#define TCPIP_MBOX_SIZE 0
//#define SLIPIF_THREAD_NAME "slipif_loop"
//#define SLIPIF_THREAD_STACKSIZE 0
//#define SLIPIF_THREAD_PRIO 1
//#define PPP_THREAD_NAME "pppMain"
//#define PPP_THREAD_STACKSIZE 0
//#define PPP_THREAD_PRIO 1
//#define DEFAULT_THREAD_NAME "lwIP"
//#define DEFAULT_THREAD_STACKSIZE 0
//#define DEFAULT_THREAD_PRIO 1
//#define DEFAULT_RAW_RECVMBOX_SIZE 0
//#define DEFAULT_UDP_RECVMBOX_SIZE 0
//#define DEFAULT_TCP_RECVMBOX_SIZE 0
//#define DEFAULT_ACCEPTMBOX_SIZE 0
//*****************************************************************************
//
// ---------- Sequential layer options ----------
//
//*****************************************************************************
//#define LWIP_TCPIP_CORE_LOCKING 0
#define LWIP_NETCONN 0 // default is 1
//*****************************************************************************
//
// ---------- Socket Options ----------
//
//*****************************************************************************
#define LWIP_SOCKET 0 // default is 1
//#define LWIP_COMPAT_SOCKETS 1
//#define LWIP_POSIX_SOCKETS_IO_NAMES 1
//#define LWIP_TCP_KEEPALIVE 0
//#define LWIP_SO_RCVTIMEO 0
//#define LWIP_SO_RCVBUF 0
//#define SO_REUSE 0
//*****************************************************************************
//
// ---------- Statistics options ----------
//
//*****************************************************************************
//#define LWIP_STATS 1
//#define LWIP_STATS_DISPLAY 0
//#define LINK_STATS 1
//#define ETHARP_STATS (LWIP_ARP)
//#define IP_STATS 1
//#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG)
//#define ICMP_STATS 1
//#define IGMP_STATS (LWIP_IGMP)
//#define UDP_STATS (LWIP_UDP)
//#define TCP_STATS (LWIP_TCP)
//#define MEM_STATS 1
//#define MEMP_STATS 1
//#define SYS_STATS 1
//*****************************************************************************
//
// ---------- PPP options ----------
//
//*****************************************************************************
//#define PPP_SUPPORT 0
//#define PPPOE_SUPPORT 0
//#define PPPOS_SUPPORT PPP_SUPPORT
#if PPP_SUPPORT
//#define NUM_PPP 1
//#define PAP_SUPPORT 0
//#define CHAP_SUPPORT 0
//#define MSCHAP_SUPPORT 0
//#define CBCP_SUPPORT 0
//#define CCP_SUPPORT 0
//#define VJ_SUPPORT 0
//#define MD5_SUPPORT 0
//#define FSM_DEFTIMEOUT 6
//#define FSM_DEFMAXTERMREQS 2
//#define FSM_DEFMAXCONFREQS 10
//#define FSM_DEFMAXNAKLOOPS 5
//#define UPAP_DEFTIMEOUT 6
//#define UPAP_DEFREQTIME 30
//#define CHAP_DEFTIMEOUT 6
//#define CHAP_DEFTRANSMITS 10
//#define LCP_ECHOINTERVAL 0
//#define LCP_MAXECHOFAILS 3
//#define PPP_MAXIDLEFLAG 100
//#define PPP_MAXMTU 1500
//#define PPP_DEFMRU 296
#endif
//*****************************************************************************
//
// ---------- checksum options ----------
//
//*****************************************************************************
//#define CHECKSUM_GEN_IP 1
//#define CHECKSUM_GEN_UDP 1
//#define CHECKSUM_GEN_TCP 1
//#define CHECKSUM_CHECK_IP 1
//#define CHECKSUM_CHECK_UDP 1
//#define CHECKSUM_CHECK_TCP 1
//*****************************************************************************
//
// ---------- Debugging options ----------
//
//*****************************************************************************
#if 0
#define U8_F "c"
#define S8_F "c"
#define X8_F "x"
#define U16_F "u"
#define S16_F "d"
#define X16_F "x"
#define U32_F "u"
#define S32_F "d"
#define X32_F "x"
extern void UARTprintf(const char *pcString, ...);
#define LWIP_DEBUG
#endif
//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF
#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF
//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_WARNING
//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SERIOUS
//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SEVERE
//#define LWIP_DBG_TYPES_ON LWIP_DBG_ON
#define LWIP_DBG_TYPES_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH)
//#define ETHARP_DEBUG LWIP_DBG_ON // default is OFF
//#define NETIF_DEBUG LWIP_DBG_ON // default is OFF
//#define PBUF_DEBUG LWIP_DBG_OFF
//#define API_LIB_DEBUG LWIP_DBG_OFF
//#define API_MSG_DEBUG LWIP_DBG_OFF
//#define SOCKETS_DEBUG LWIP_DBG_OFF
//#define ICMP_DEBUG LWIP_DBG_OFF
//#define IGMP_DEBUG LWIP_DBG_OFF
//#define INET_DEBUG LWIP_DBG_OFF
//#define IP_DEBUG LWIP_DBG_ON // default is OFF
//#define IP_REASS_DEBUG LWIP_DBG_OFF
//#define RAW_DEBUG LWIP_DBG_OFF
//#define MEM_DEBUG LWIP_DBG_OFF
//#define MEMP_DEBUG LWIP_DBG_OFF
//#define SYS_DEBUG LWIP_DBG_OFF
//#define TCP_DEBUG LWIP_DBG_OFF
//#define TCP_INPUT_DEBUG LWIP_DBG_OFF
//#define TCP_FR_DEBUG LWIP_DBG_OFF
//#define TCP_RTO_DEBUG LWIP_DBG_OFF
//#define TCP_CWND_DEBUG LWIP_DBG_OFF
//#define TCP_WND_DEBUG LWIP_DBG_OFF
//#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF
//#define TCP_RST_DEBUG LWIP_DBG_OFF
//#define TCP_QLEN_DEBUG LWIP_DBG_OFF
//#define UDP_DEBUG LWIP_DBG_ON // default is OFF
//#define TCPIP_DEBUG LWIP_DBG_OFF
//#define PPP_DEBUG LWIP_DBG_OFF
//#define SLIP_DEBUG LWIP_DBG_OFF
//#define DHCP_DEBUG LWIP_DBG_ON // default is OFF
//#define AUTOIP_DEBUG LWIP_DBG_OFF
//#define SNMP_MSG_DEBUG LWIP_DBG_OFF
//#define SNMP_MIB_DEBUG LWIP_DBG_OFF
//#define DNS_DEBUG LWIP_DBG_OFF
#endif /* __LWIPOPTS_H__ */
@@ -0,0 +1,247 @@
//###########################################################################
//
// FILE: startup_ccs.c
//
// TITLE: startup file for f2838x device.
//
//###########################################################################
// $TI Release: $
// $Release Date: $
//
// C2000Ware v5.04.00.00
//
// Copyright (C) 2024 Texas Instruments Incorporated - http://www.ti.com
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the
// distribution.
//
// Neither the name of Texas Instruments Incorporated nor the names of
// its contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// $
//###########################################################################
//*****************************************************************************
//
// Forward declaration of the default fault handlers.
//
//*****************************************************************************
void ResetISR(void);
static void NmiSR(void);
static void FaultISR(void);
static void IntDefaultHandler(void);
//*****************************************************************************
//
// External declaration for the reset handler that is to be called when the
// processor is started
//
//*****************************************************************************
extern void _c_int00(void);
//*****************************************************************************
//
// Linker variable that marks the top of the stack.
//
//*****************************************************************************
extern unsigned long __STACK_END;
//*****************************************************************************
//
// External declarations for the interrupt handlers used by the application.
//
//*****************************************************************************
extern void lwIPEthernetIntHandler(void);
extern void SysTickIntHandler(void);
extern void Ethernet_genericISRCustom(void);
//*****************************************************************************
//
// The vector table. Note that the proper constructs must be placed on this to
// ensure that it ends up at physical address 0x0000.0000 or at the start of
// the program if located at a start address other than 0.
//
//*****************************************************************************
#pragma DATA_ALIGN(vectorTableFlash, 1024)
#pragma DATA_SECTION(vectorTableFlash, ".vftable")
void (* const vectorTableFlash[])(void) =
{
(void (*)(void))((unsigned long)&__STACK_END),
/* The initial stack pointer */
ResetISR, /* The reset handler */
NmiSR, /* The NMI handler */
FaultISR, /* The hard fault handler */
IntDefaultHandler, /* The MPU fault handler */
IntDefaultHandler, /* The bus fault handler */
IntDefaultHandler, /* The usage fault handler */
0, /* Reserved */
0, /* Reserved */
0, /* Reserved */
0, /* Reserved */
IntDefaultHandler, /* SVCall handler */
IntDefaultHandler, /* Debug monitor handler */
0, /* Reserved */
IntDefaultHandler, /* The PendSV handler */
SysTickIntHandler, /* The SysTick handler */
IntDefaultHandler, /* MCANSS_0 handler */
IntDefaultHandler, /* MCANSS_1 handler */
IntDefaultHandler, /* MCANSS_WAKE_AND_TS_PLS ISR*/
IntDefaultHandler, /* MCANSS_ECC_CORR_PLS ISR */
IntDefaultHandler, /* Reserved */
IntDefaultHandler, /* ECAT ISR */
IntDefaultHandler, /* ECAT_SYNC0 ISR */
IntDefaultHandler, /* ECAT_SYNC1 ISR */
IntDefaultHandler, /* ECAT_RST ISR ISR */
IntDefaultHandler, /* CANA0 ISR */
IntDefaultHandler, /* CANA1 ISR */
IntDefaultHandler, /* CANB0 ISR */
IntDefaultHandler, /* CANB1 ISR */
Ethernet_genericISRCustom, /* EMAC ISR */
lwIPEthernetIntHandler, /* EMAC_TX0 ISR */
IntDefaultHandler, /* EMAC_TX1 ISR */
lwIPEthernetIntHandler, /* EMAC_RX0 ISR */
IntDefaultHandler, /* EMAC_RX1 ISR */
IntDefaultHandler, /* UART0 ISR */
IntDefaultHandler, /* Reserved */
IntDefaultHandler, /* SSI0 ISR */
IntDefaultHandler, /* Reserved */
IntDefaultHandler, /* I2C0 ISR */
IntDefaultHandler, /* Reserved */
IntDefaultHandler, /* USB ISR */
IntDefaultHandler, /* UDMA_SW ISR */
IntDefaultHandler, /* UDMA_ERR ISR */
IntDefaultHandler, /* Reserved */
IntDefaultHandler, /* Reserved */
IntDefaultHandler, /* CPU1TOCMIPC0 ISR */
IntDefaultHandler, /* CPU1TOCMIPC1 ISR */
IntDefaultHandler, /* CPU1TOCMIPC2 ISR */
IntDefaultHandler, /* CPU1TOCMIPC3 ISR */
IntDefaultHandler, /* CPU1TOCMIPC4 ISR */
IntDefaultHandler, /* CPU1TOCMIPC5 ISR */
IntDefaultHandler, /* CPU1TOCMIPC6 ISR */
IntDefaultHandler, /* CPU1TOCMIPC7 ISR */
IntDefaultHandler, /* CPU2TOCMIPC0 ISR */
IntDefaultHandler, /* CPU2TOCMIPC1 ISR */
IntDefaultHandler, /* CPU2TOCMIPC2 ISR */
IntDefaultHandler, /* CPU2TOCMIPC3 ISR */
IntDefaultHandler, /* CPU2TOCMIPC4 ISR */
IntDefaultHandler, /* CPU2TOCMIPC5 ISR */
IntDefaultHandler, /* CPU2TOCMIPC6 ISR */
IntDefaultHandler, /* CPU2TOCMIPC7 ISR */
IntDefaultHandler, /* FMC ISR */
IntDefaultHandler, /* FMC_CORR_ERR ISR */
IntDefaultHandler, /* AES Interrupt ISR */
IntDefaultHandler, /* TIMER0 ISR */
IntDefaultHandler, /* TIMER1 ISR */
IntDefaultHandler, /* TIMER2 ISR */
IntDefaultHandler, /* CMRAM_TESTERROR_LOG ISR */
IntDefaultHandler, /* Reserved 52 */
IntDefaultHandler, /* Reserved 53 */
IntDefaultHandler, /* Reserved 54 */
IntDefaultHandler, /* Reserved 55 */
IntDefaultHandler, /* Reserved 56 */
IntDefaultHandler, /* Reserved 57 */
IntDefaultHandler, /* Reserved 58 */
IntDefaultHandler, /* Reserved 59 */
IntDefaultHandler, /* Reserved 60 */
IntDefaultHandler, /* Reserved 61 */
IntDefaultHandler, /* Reserved 62 */
IntDefaultHandler /* Reserved 63 */
};
//*****************************************************************************
//
// This is the code that gets called when the processor first starts execution
// following a reset event. Only the absolutely necessary set is performed,
// after which the application supplied entry() routine is called. Any fancy
// actions (such as making decisions based on the reset cause register, and
// resetting the bits in that register) are left solely in the hands of the
// application.
//
//*****************************************************************************
#pragma CODE_SECTION(ResetISR, ".resetisr")
void
ResetISR(void)
{
// Jump to the CCS C Initialization Routine.
__asm(" .global _c_int00\n"
" b.w _c_int00");
}
//*****************************************************************************
//
// This is the code that gets called when the processor receives a NMI. This
// simply enters an infinite loop, preserving the system state for examination
// by a debugger.
//
//*****************************************************************************
static void
NmiSR(void)
{
//
// Enter an infinite loop.
//
while(1)
{
}
}
//*****************************************************************************
//
// This is the code that gets called when the processor receives a fault
// interrupt. This simply enters an infinite loop, preserving the system state
// for examination by a debugger.
//
//*****************************************************************************
static void
FaultISR(void)
{
//
// Enter an infinite loop.
//
while(1)
{
}
}
//*****************************************************************************
//
// This is the code that gets called when the processor receives an unexpected
// interrupt. This simply enters an infinite loop, preserving the system state
// for examination by a debugger.
//
//*****************************************************************************
static void
IntDefaultHandler(void)
{
//
// Go into an infinite loop.
//
while(1)
{
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,20 @@
cmake_minimum_required(VERSION 3.7)
project(lwIP)
set(LWIP_DIR ${CMAKE_CURRENT_SOURCE_DIR})
include(src/Filelists.cmake)
# Package generation
set(CPACK_SOURCE_GENERATOR "ZIP")
set(CPACK_SOURCE_PACKAGE_DESCRIPTION_SUMMARY "lwIP lightweight IP stack")
set(CPACK_PACKAGE_VERSION_MAJOR "${LWIP_VERSION_MAJOR}")
set(CPACK_PACKAGE_VERSION_MINOR "${LWIP_VERSION_MINOR}")
set(CPACK_PACKAGE_VERSION_PATCH "${LWIP_VERSION_REVISION}")
set(CPACK_SOURCE_IGNORE_FILES "/build/;${CPACK_SOURCE_IGNORE_FILES};.git")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "lwip-${LWIP_VERSION_MAJOR}.${LWIP_VERSION_MINOR}.${LWIP_VERSION_REVISION}")
include(CPack)
# Target for package generation
add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)
add_dependencies(dist lwipdocs)
@@ -0,0 +1,33 @@
/*
* Copyright (c) 2001, 2002 Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* This file is part of the lwIP TCP/IP stack.
*
* Author: Adam Dunkels <adam@sics.se>
*
*/
@@ -0,0 +1,11 @@
lwIP is a small independent implementation of the TCP/IP protocol suite targeted at embedded systems.
The focus of the lwIP TCP/IP implementation is to reduce resource usage while still having a full scale TCP. This makes lwIP suitable for use in embedded systems with tens of kilobytes of free RAM and room for around 40 kilobytes of code ROM.
Main features include:
- Protocols: IP, IPv6, ICMP, ND, MLD, UDP, TCP, IGMP, ARP, PPPoS, PPPoE, 6LowPAN (via IEEE 802.15.4, BLE or ZEP; since v2.1.0)
- DHCP client, stateless DHCPv6 (since v2.1.0), DNS client (incl. mDNS hostname resolver), AutoIP/APIPA (Zeroconf), SNMP agent (v1, v2c, v3 (since v2.1.0), private MIB support & MIB compiler)
- APIs: specialized APIs for enhanced performance & zero copy, optional Berkeley-alike socket API
- Extended features: IP forwarding over multiple network interfaces
- Extended TCP features: congestion control, RTT estimation and fast recovery/fast retransmit, sending SACKs (since v2.1.0), "altcp": nearly transparent TLS for any tcp pcb (since v2.1.0)
- Addon applications: HTTP server (HTTPS via altcp), HTTP(S) client (since v2.1.0), SNTP client, SMTP client (SMTPS via altcp), ping, NetBIOS nameserver, mDNS responder, MQTT client (TLS support since v2.1.0), TFTP server, iPerf2 counterpart
@@ -0,0 +1,5 @@
src/ - The source code for the lwIP TCP/IP stack.
doc/ - The documentation for lwIP.
test/ - Some code to test whether the sources do what they should.
See also the FILES file in each subdirectory.
@@ -0,0 +1,106 @@
INTRODUCTION
lwIP is a small independent implementation of the TCP/IP protocol suite.
The focus of the lwIP TCP/IP implementation is to reduce the RAM usage
while still having a full scale TCP. This making lwIP suitable for use
in embedded systems with tens of kilobytes of free RAM and room for
around 40 kilobytes of code ROM.
lwIP was originally developed by Adam Dunkels at the Computer and Networks
Architectures (CNA) lab at the Swedish Institute of Computer Science (SICS)
and is now developed and maintained by a worldwide network of developers.
FEATURES
* IP (Internet Protocol, IPv4 and IPv6) including packet forwarding over
multiple network interfaces
* ICMP (Internet Control Message Protocol) for network maintenance and debugging
* IGMP (Internet Group Management Protocol) for multicast traffic management
* MLD (Multicast listener discovery for IPv6). Aims to be compliant with
RFC 2710. No support for MLDv2
* ND (Neighbor discovery and stateless address autoconfiguration for IPv6).
Aims to be compliant with RFC 4861 (Neighbor discovery) and RFC 4862
(Address autoconfiguration)
* DHCP, AutoIP/APIPA (Zeroconf) and (stateless) DHCPv6
* UDP (User Datagram Protocol) including experimental UDP-lite extensions
* TCP (Transmission Control Protocol) with congestion control, RTT estimation
fast recovery/fast retransmit and sending SACKs
* raw/native API for enhanced performance
* Optional Berkeley-like socket API
* TLS: optional layered TCP ("altcp") for nearly transparent TLS for any
TCP-based protocol (ported to mbedTLS) (see changelog for more info)
* PPPoS and PPPoE (Point-to-point protocol over Serial/Ethernet)
* DNS (Domain name resolver incl. mDNS)
* 6LoWPAN (via IEEE 802.15.4, BLE or ZEP)
APPLICATIONS
* HTTP server with SSI and CGI (HTTPS via altcp)
* SNMPv2c agent with MIB compiler (Simple Network Management Protocol), v3 via altcp
* SNTP (Simple network time protocol)
* NetBIOS name service responder
* MDNS (Multicast DNS) responder
* iPerf server implementation
* MQTT client (TLS support via altcp)
LICENSE
lwIP is freely available under a BSD license.
DEVELOPMENT
lwIP has grown into an excellent TCP/IP stack for embedded devices,
and developers using the stack often submit bug fixes, improvements,
and additions to the stack to further increase its usefulness.
Development of lwIP is hosted on Savannah, a central point for
software development, maintenance and distribution. Everyone can
help improve lwIP by use of Savannah's interface, Git and the
mailing list. A core team of developers will commit changes to the
Git source tree.
The lwIP TCP/IP stack is maintained in the 'lwip' Git module and
contributions (such as platform ports) are in the 'contrib' Git module.
See doc/savannah.txt for details on Git server access for users and
developers.
The current Git trees are web-browsable:
http://git.savannah.gnu.org/cgit/lwip.git
http://git.savannah.gnu.org/cgit/lwip/lwip-contrib.git
Submit patches and bugs via the lwIP project page:
http://savannah.nongnu.org/projects/lwip/
Continuous integration builds (GCC, clang):
https://travis-ci.org/yarrick/lwip-merged
DOCUMENTATION
Self documentation of the source code is regularly extracted from the current
Git sources and is available from this web page:
http://www.nongnu.org/lwip/
There is now a constantly growing wiki about lwIP at
http://lwip.wikia.com/wiki/LwIP_Wiki
Also, there are mailing lists you can subscribe at
http://savannah.nongnu.org/mail/?group=lwip
plus searchable archives:
http://lists.nongnu.org/archive/html/lwip-users/
http://lists.nongnu.org/archive/html/lwip-devel/
lwIP was originally written by Adam Dunkels:
http://dunkels.com/adam/
Reading Adam's papers, the files in docs/, browsing the source code
documentation and browsing the mailing list archives is a good way to
become familiar with the design of lwIP.
Adam Dunkels <adam@sics.se>
Leon Woestenberg <leon.woestenberg@gmx.net>
@@ -0,0 +1,278 @@
This file lists major changes between release versions that require
ports or applications to be changed. Use it to update a port or an
application written for an older version of lwIP to correctly work
with newer versions.
(git master)
* [Enter new changes just after this line - do not remove this line]
(2.1.0)
++ Application changes:
* Use the new altcp API for seamless TLS integration into existing TCP applications (see changelog)
* TCP only kills existing connections with a LOWER priority than the one currently being opened.
Previous implementations also kill existing connections of the SAME priority.
* ip4_route_src: parameter order is reversed: ip4_route_src(dest, src) -> ip4_route_src(src, dest)
to make parameter order consistent with other ip*_route*() functions.
Same also applies to LWIP_HOOK_IP4_ROUTE_SRC() parameter order.
* pbuf API: pbuf->type (an u8_t holding the enum 'pbuf_type') has changed to only hold a
description of the pbuf (e.g. data following pbuf struct, data volatile, allocation
source heap/pool/etc.). As a consequence, applications can't test pbuf->type any more.
Use pbuf_match_type(pbuf, type) instead.
* socket API: according to the standard, SO_ERROR now only returns asynchronous errors.
All other/normal/synchronous errors are (and always were) available via 'errno'.
LWIP_SOCKET_SET_ERRNO has been removed - 'errno' is always set - and required!
* httpd LWIP_HTTPD_CGI_SSI: httpd_cgi_handler() has an additional parameter "struct fs_file *"
++ Port changes:
* tcpip_trycallback() was renamed to tcpip_callbackmsg_trycallback() to avoid confusion
with tcpip_try_callback()
* compatibility headers: moved from 'src/include/posix' to 'src/include/compat/posix',
'src/include/compat/stdc' etc.
* The IPv6 implementation now supports address scopes. (See LWIP_IPV6_SCOPES documentation
and ip6_zone.h for more documentation)
* LWIP_HOOK_DHCP_APPEND_OPTIONS() has changed, see description in opt.h (options_out_len is not
available in struct dhcp any more)
* Added debug helper asserts to ensure threading/locking requirements are met (define
LWIP_MARK_TCPIP_THREAD() and LWIP_ASSERT_CORE_LOCKED()).
* Added sys_mbox_trypost_fromisr() and tcpip_callbackmsg_trycallback_fromisr()
These can be used to post preallocated messages from an ISR to the tcpip thread
(e.g. when using FreeRTOS)
(2.0.2)
++ Application changes:
* slipif: The way to pass serial port number has changed. netif->num is not
supported any more, netif->state is interpreted as an u8_t port number now
(it's not a POINTER to an u8_t any more!)
(2.0.1)
++ Application changes:
* UDP does NOT receive multicast traffic from ALL netifs on an UDP PCB bound to a specific
netif any more. Users need to bind to IP_ADDR_ANY to receive multicast traffic and compare
ip_current_netif() to the desired netif for every packet.
See bug #49662 for an explanation.
(2.0.0)
++ Application changes:
* Changed netif "up" flag handling to be an administrative flag (as opposed to the previous meaning of
"ip4-address-valid", a netif will now not be used for transmission if not up) -> even a DHCP netif
has to be set "up" before starting the DHCP client
* Added IPv6 support (dual-stack or IPv4/IPv6 only)
* Changed ip_addr_t to be a union in dual-stack mode (use ip4_addr_t where referring to IPv4 only).
* Major rewrite of SNMP (added MIB parser that creates code stubs for custom MIBs);
supports SNMPv2c (experimental v3 support)
* Moved some core applications from contrib repository to src/apps (and include/lwip/apps)
+++ Raw API:
* Changed TCP listen backlog: removed tcp_accepted(), added the function pair tcp_backlog_delayed()/
tcp_backlog_accepted() to explicitly delay backlog handling on a connection pcb
+++ Socket API:
* Added an implementation for posix sendmsg()
* Added LWIP_FIONREAD_LINUXMODE that makes ioctl/FIONREAD return the size of the next pending datagram
++ Port changes
+++ new files:
* MANY new and moved files!
* Added src/Filelists.mk for use in Makefile projects
* Continued moving stack-internal parts from abc.h to abc_priv.h in sub-folder "priv"
to let abc.h only contain the actual application programmer's API
+++ sys layer:
* Made LWIP_TCPIP_CORE_LOCKING==1 the default as it usually performs better than
the traditional message passing (although with LWIP_COMPAT_MUTEX you are still
open to priority inversion, so this is not recommended any more)
* Added LWIP_NETCONN_SEM_PER_THREAD to use one "op_completed" semaphore per thread
instead of using one per netconn (these semaphores are used even with core locking
enabled as some longer lasting functions like big writes still need to delay)
* Added generalized abstraction for itoa(), strnicmp(), stricmp() and strnstr()
in def.h (to be overridden in cc.h) instead of config
options for netbiosns, httpd, dns, etc. ...
* New abstraction for hton* and ntoh* functions in def.h.
To override them, use the following in cc.h:
#define lwip_htons(x) <your_htons>
#define lwip_htonl(x) <your_htonl>
+++ new options:
* TODO
+++ new pools:
* Added LWIP_MEMPOOL_* (declare/init/alloc/free) to declare private memp pools
that share memp.c code but do not have to be made global via lwippools.h
* Added pools for IPv6, MPU_COMPATIBLE, dns-api, netif-api, etc.
* added hook LWIP_HOOK_MEMP_AVAILABLE() to get informed when a memp pool was empty and an item
is now available
* Signature of LWIP_HOOK_VLAN_SET macro was changed
* LWIP_DECLARE_MEMORY_ALIGNED() may be used to declare aligned memory buffers (mem/memp)
or to move buffers to dedicated memory using compiler attributes
* Standard C headers are used to define sized types and printf formatters
(disable by setting LWIP_NO_STDINT_H=1 or LWIP_NO_INTTYPES_H=1 if your compiler
does not support these)
++ Major bugfixes/improvements
* Added IPv6 support (dual-stack or IPv4/IPv6 only)
* Major rewrite of PPP (incl. keep-up with apache pppd)
see doc/ppp.txt for an upgrading how-to
* Major rewrite of SNMP (incl. MIB parser)
* Fixed timing issues that might have lead to losing a DHCP lease
* Made rx processing path more robust against crafted errors
* TCP window scaling support
* modification of api modules to support FreeRTOS-MPU (don't pass stack-pointers to other threads)
* made DNS client more robust
* support PBUF_REF for RX packets
* LWIP_NETCONN_FULLDUPLEX allows netconn/sockets to be used for reading/writing from separate
threads each (needs LWIP_NETCONN_SEM_PER_THREAD)
* Moved and reordered stats (mainly memp/mib2)
(1.4.0)
++ Application changes:
* Replaced struct ip_addr by typedef ip_addr_t (struct ip_addr is kept for
compatibility to old applications, but will be removed in the future).
* Renamed mem_realloc() to mem_trim() to prevent confusion with realloc()
+++ Raw API:
* Changed the semantics of tcp_close() (since it was rather a
shutdown before): Now the application does *NOT* get any calls to the recv
callback (aside from NULL/closed) after calling tcp_close()
* When calling tcp_abort() from a raw API TCP callback function,
make sure you return ERR_ABRT to prevent accessing unallocated memory.
(ERR_ABRT now means the applicaiton has called tcp_abort!)
+++ Netconn API:
* Changed netconn_receive() and netconn_accept() to return
err_t, not a pointer to new data/netconn.
+++ Socket API:
* LWIP_SO_RCVTIMEO: when accept() or recv() time out, they
now set errno to EWOULDBLOCK/EAGAIN, not ETIMEDOUT.
* Added a minimal version of posix fctl() to have a
standardised way to set O_NONBLOCK for nonblocking sockets.
+++ all APIs:
* correctly implemented SO(F)_REUSEADDR
++ Port changes
+++ new files:
* Added 4 new files: def.c, timers.c, timers.h, tcp_impl.h:
* Moved stack-internal parts of tcp.h to tcp_impl.h, tcp.h now only contains
the actual application programmer's API
* Separated timer implementation from sys.h/.c, moved to timers.h/.c;
Added timer implementation for NO_SYS==1, set NO_SYS_NO_TIMERS==1 if you
still want to use your own timer implementation for NO_SYS==0 (as before).
+++ sys layer:
* Converted mbox- and semaphore-functions to take pointers to sys_mbox_t/
sys_sem_t;
* Converted sys_mbox_new/sys_sem_new to take pointers and return err_t;
* Added Mutex concept in sys_arch (define LWIP_COMPAT_MUTEX to let sys.h use
binary semaphores instead of mutexes - as before)
+++ new options:
* Don't waste memory when chaining segments, added option TCP_OVERSIZE to
prevent creating many small pbufs when calling tcp_write with many small
blocks of data. Instead, pbufs are allocated larger than needed and the
space is used for later calls to tcp_write.
* Added LWIP_NETIF_TX_SINGLE_PBUF to always copy to try to create single pbufs
in tcp_write/udp_send.
* Added an additional option LWIP_ETHERNET to support ethernet without ARP
(necessary for pure PPPoE)
* Add MEMP_SEPARATE_POOLS to place memory pools in separate arrays. This may
be used to place these pools into user-defined memory by using external
declaration.
* Added TCP_SNDQUEUELOWAT corresponding to TCP_SNDLOWAT
+++ new pools:
* Netdb uses a memp pool for allocating memory when getaddrinfo() is called,
so MEMP_NUM_NETDB has to be set accordingly.
* DNS_LOCAL_HOSTLIST_IS_DYNAMIC uses a memp pool instead of the heap, so
MEMP_NUM_LOCALHOSTLIST has to be set accordingly.
* Snmp-agent uses a memp pools instead of the heap, so MEMP_NUM_SNMP_* have
to be set accordingly.
* PPPoE uses a MEMP pool instead of the heap, so MEMP_NUM_PPPOE_INTERFACES
has to be set accordingly
* Integrated loopif into netif.c - loopif does not have to be created by the
port any more, just define LWIP_HAVE_LOOPIF to 1.
* Added define LWIP_RAND() for lwip-wide randomization (needs to be defined
in cc.h, e.g. used by igmp)
* Added printf-formatter X8_F to printf u8_t as hex
* The heap now may be moved to user-defined memory by defining
LWIP_RAM_HEAP_POINTER as a void pointer to that memory's address
* added autoip_set_struct() and dhcp_set_struct() to let autoip and dhcp work
with user-allocated structs instead of calling mem_malloc
* Added const char* name to mem- and memp-stats for easier debugging.
* Calculate the TCP/UDP checksum while copying to only fetch data once:
Define LWIP_CHKSUM_COPY to a memcpy-like function that returns the checksum
* Added SO_REUSE_RXTOALL to pass received UDP broadcast/multicast packets to
more than one pcb.
* Changed the semantics of ARP_QUEUEING==0: ARP_QUEUEING now cannot be turned
off any more, if this is set to 0, only one packet (the most recent one) is
queued (like demanded by RFC 1122).
++ Major bugfixes/improvements
* Implemented tcp_shutdown() to only shut down one end of a connection
* Implemented shutdown() at socket- and netconn-level
* Added errorset support to select() + improved select speed overhead
* Merged pppd to v2.3.11 (including some backported bugfixes from 2.4.x)
* Added timer implementation for NO_SYS==1 (may be disabled with NO_SYS_NO_TIMERS==1
* Use macros defined in ip_addr.h to work with IP addresses
* Implemented many nonblocking socket/netconn functions
* Fixed ARP input processing: only add a new entry if a request was directed as us
* mem_realloc() to mem_trim() to prevent confusion with realloc()
* Some improvements for AutoIP (don't route/forward link-local addresses, don't break
existing connections when assigning a routable address)
* Correctly handle remote side overrunning our rcv_wnd in ooseq case
* Removed packing from ip_addr_t, the packed version is now only used in protocol headers
* Corrected PBUF_POOL_BUFSIZE for ports where ETH_PAD_SIZE > 0
* Added support for static ARP table entries
(STABLE-1.3.2)
* initial version of this file
@@ -0,0 +1,9 @@
doxygen/ - Configuration files and scripts to create the lwIP doxygen source
documentation (found at http://www.nongnu.org/lwip/)
savannah.txt - How to obtain the current development source code.
contrib.txt - How to contribute to lwIP as a developer.
rawapi.txt - The documentation for the core API of lwIP.
Also provides an overview about the other APIs and multithreading.
sys_arch.txt - The documentation for a system abstraction layer of lwIP.
ppp.txt - Documentation of the PPP interface for lwIP.
@@ -0,0 +1,122 @@
void
eth_mac_irq()
{
/* Service MAC IRQ here */
/* Allocate pbuf from pool (avoid using heap in interrupts) */
struct pbuf* p = pbuf_alloc(PBUF_RAW, eth_data_count, PBUF_POOL);
if(p != NULL) {
/* Copy ethernet frame into pbuf */
pbuf_take(p, eth_data, eth_data_count);
/* Put in a queue which is processed in main loop */
if(!queue_try_put(&queue, p)) {
/* queue is full -> packet loss */
pbuf_free(p);
}
}
}
static err_t
netif_output(struct netif *netif, struct pbuf *p)
{
LINK_STATS_INC(link.xmit);
/* Update SNMP stats (only if you use SNMP) */
MIB2_STATS_NETIF_ADD(netif, ifoutoctets, p->tot_len);
int unicast = ((p->payload[0] & 0x01) == 0);
if (unicast) {
MIB2_STATS_NETIF_INC(netif, ifoutucastpkts);
} else {
MIB2_STATS_NETIF_INC(netif, ifoutnucastpkts);
}
lock_interrupts();
pbuf_copy_partial(p, mac_send_buffer, p->tot_len, 0);
/* Start MAC transmit here */
unlock_interrupts();
return ERR_OK;
}
static void
netif_status_callback(struct netif *netif)
{
printf("netif status changed %s\n", ip4addr_ntoa(netif_ip4_addr(netif)));
}
static err_t
netif_init(struct netif *netif)
{
netif->linkoutput = netif_output;
netif->output = etharp_output;
netif->output_ip6 = ethip6_output;
netif->mtu = ETHERNET_MTU;
netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET | NETIF_FLAG_IGMP | NETIF_FLAG_MLD6;
MIB2_INIT_NETIF(netif, snmp_ifType_ethernet_csmacd, 100000000);
SMEMCPY(netif->hwaddr, your_mac_address_goes_here, ETH_HWADDR_LEN);
netif->hwaddr_len = ETH_HWADDR_LEN;
return ERR_OK;
}
void
main(void)
{
struct netif netif;
lwip_init();
netif_add(&netif, IP4_ADDR_ANY, IP4_ADDR_ANY, IP4_ADDR_ANY, NULL, netif_init, netif_input);
netif.name[0] = 'e';
netif.name[1] = '0';
netif_create_ip6_linklocal_address(&netif, 1);
netif.ip6_autoconfig_enabled = 1;
netif_set_status_callback(&netif, netif_status_callback);
netif_set_default(&netif);
netif_set_up(&netif);
/* Start DHCP and HTTPD */
dhcp_start(&netif );
httpd_init();
while(1) {
/* Check link state, e.g. via MDIO communication with PHY */
if(link_state_changed()) {
if(link_is_up()) {
netif_set_link_up(&netif);
} else {
netif_set_link_down(&netif);
}
}
/* Check for received frames, feed them to lwIP */
lock_interrupts();
struct pbuf* p = queue_try_get(&queue);
unlock_interrupts();
if(p != NULL) {
LINK_STATS_INC(link.recv);
/* Update SNMP stats (only if you use SNMP) */
MIB2_STATS_NETIF_ADD(netif, ifinoctets, p->tot_len);
int unicast = ((p->payload[0] & 0x01) == 0);
if (unicast) {
MIB2_STATS_NETIF_INC(netif, ifinucastpkts);
} else {
MIB2_STATS_NETIF_INC(netif, ifinnucastpkts);
}
if(netif.input(p, &netif) != ERR_OK) {
pbuf_free(p);
}
}
/* Cyclic lwIP timers check */
sys_check_timeouts();
/* your application goes here */
}
}
@@ -0,0 +1,45 @@
typedef struct my_custom_pbuf
{
struct pbuf_custom p;
void* dma_descriptor;
} my_custom_pbuf_t;
LWIP_MEMPOOL_DECLARE(RX_POOL, 10, sizeof(my_custom_pbuf_t), "Zero-copy RX PBUF pool");
void my_pbuf_free_custom(void* p)
{
SYS_ARCH_DECL_PROTECT(old_level);
my_custom_pbuf_t* my_puf = (my_custom_pbuf_t*)p;
// invalidate data cache here - lwIP and/or application may have written into buffer!
// (invalidate is faster than flushing, and noone needs the correct data in the buffer)
invalidate_cpu_cache(p->payload, p->tot_len);
SYS_ARCH_PROTECT(old_level);
free_rx_dma_descriptor(my_pbuf->dma_descriptor);
LWIP_MEMPOOL_FREE(RX_POOL, my_pbuf);
SYS_ARCH_UNPROTECT(old_level);
}
void eth_rx_irq()
{
dma_descriptor* dma_desc = get_RX_DMA_descriptor_from_ethernet();
my_custom_pbuf_t* my_pbuf = (my_custom_pbuf_t*)LWIP_MEMPOOL_ALLOC(RX_POOL);
my_pbuf->p.custom_free_function = my_pbuf_free_custom;
my_pbuf->dma_descriptor = dma_desc;
invalidate_cpu_cache(dma_desc->rx_data, dma_desc->rx_length);
struct pbuf* p = pbuf_alloced_custom(PBUF_RAW,
dma_desc->rx_length,
PBUF_REF,
&my_pbuf->p,
dma_desc->rx_data,
dma_desc->max_buffer_size);
if(netif->input(p, netif) != ERR_OK) {
pbuf_free(p);
}
}
@@ -0,0 +1,58 @@
1 Introduction
This document describes some guidelines for people participating
in lwIP development.
2 How to contribute to lwIP
Here is a short list of suggestions to anybody working with lwIP and
trying to contribute bug reports, fixes, enhancements, platform ports etc.
First of all as you may already know lwIP is a volunteer project so feedback
to fixes or questions might often come late. Hopefully the bug and patch tracking
features of Savannah help us not lose users' input.
2.1 Source code style:
1. do not use tabs.
2. indentation is two spaces per level (i.e. per tab).
3. end debug messages with a trailing newline (\n).
4. one space between keyword and opening bracket.
5. no space between function and opening bracket.
6. one space and no newline before opening curly braces of a block.
7. closing curly brace on a single line.
8. spaces surrounding assignment and comparisons.
9. don't initialize static and/or global variables to zero, the compiler takes care of that.
10. use current source code style as further reference.
2.2 Source code documentation style:
1. JavaDoc compliant and Doxygen compatible.
2. Function documentation above functions in .c files, not .h files.
(This forces you to synchronize documentation and implementation.)
3. Use current documentation style as further reference.
2.3 Bug reports and patches:
1. Make sure you are reporting bugs or send patches against the latest
sources. (From the latest release and/or the current Git sources.)
2. If you think you found a bug make sure it's not already filed in the
bugtracker at Savannah.
3. If you have a fix put the patch on Savannah. If it is a patch that affects
both core and arch specific stuff please separate them so that the core can
be applied separately while leaving the other patch 'open'. The preferred way
is to NOT touch archs you can't test and let maintainers take care of them.
This is a good way to see if they are used at all - the same goes for unix
netifs except tapif.
4. Do not file a bug and post a fix to it to the patch area. Either a bug report
or a patch will be enough.
If you correct an existing bug then attach the patch to the bug rather than creating a new entry in the patch area.
5. Patches should be specific to a single change or to related changes. Do not mix bugfixes with spelling and other
trivial fixes unless the bugfix is trivial too. Do not reorganize code and rename identifiers in the same patch you
change behaviour if not necessary. A patch is easier to read and understand if it's to the point and short than
if it's not to the point and long :) so the chances for it to be applied are greater.
2.4 Platform porters:
1. If you have ported lwIP to a platform (an OS, a uC/processor or a combination of these) and
you think it could benefit others[1] you might want discuss this on the mailing list. You
can also ask for Git access to submit and maintain your port in the contrib Git module.
@@ -0,0 +1 @@
doxygen lwip.Doxyfile
@@ -0,0 +1,3 @@
#!/bin/sh
doxygen lwip.Doxyfile
@@ -0,0 +1,403 @@
/**
* @defgroup lwip lwIP
*
* @defgroup infrastructure Infrastructure
*
* @defgroup api APIs
* lwIP provides three Application Program's Interfaces (APIs) for programs
* to use for communication with the TCP/IP code:
* - low-level "core" / "callback" or @ref callbackstyle_api.
* - higher-level @ref sequential_api.
* - BSD-style @ref socket.
*
* The raw TCP/IP interface allows the application program to integrate
* better with the TCP/IP code. Program execution is event based by
* having callback functions being called from within the TCP/IP
* code. The TCP/IP code and the application program both run in the same
* thread. The sequential API has a much higher overhead and is not very
* well suited for small systems since it forces a multithreaded paradigm
* on the application.
*
* The raw TCP/IP interface is not only faster in terms of code execution
* time but is also less memory intensive. The drawback is that program
* development is somewhat harder and application programs written for
* the raw TCP/IP interface are more difficult to understand. Still, this
* is the preferred way of writing applications that should be small in
* code size and memory usage.
*
* All APIs can be used simultaneously by different application
* programs. In fact, the sequential API is implemented as an application
* program using the raw TCP/IP interface.
*
* Do not confuse the lwIP raw API with raw Ethernet or IP sockets.
* The former is a way of interfacing the lwIP network stack (including
* TCP and UDP), the latter refers to processing raw Ethernet or IP data
* instead of TCP connections or UDP packets.
*
* Raw API applications may never block since all packet processing
* (input and output) as well as timer processing (TCP mainly) is done
* in a single execution context.
*
* @defgroup callbackstyle_api "raw" APIs
* @ingroup api
* Non thread-safe APIs, callback style for maximum performance and minimum
* memory footprint.
* Program execution is driven by callbacks functions, which are then
* invoked by the lwIP core when activity related to that application
* occurs. A particular application may register to be notified via a
* callback function for events such as incoming data available, outgoing
* data sent, error notifications, poll timer expiration, connection
* closed, etc. An application can provide a callback function to perform
* processing for any or all of these events. Each callback is an ordinary
* C function that is called from within the TCP/IP code. Every callback
* function is passed the current TCP or UDP connection state as an
* argument. Also, in order to be able to keep program specific state,
* the callback functions are called with a program specified argument
* that is independent of the TCP/IP state.
* The raw API (sometimes called native API) is an event-driven API designed
* to be used without an operating system that implements zero-copy send and
* receive. This API is also used by the core stack for interaction between
* the various protocols. It is the only API available when running lwIP
* without an operating system.
*
* @defgroup sequential_api Sequential-style APIs
* @ingroup api
* Sequential-style APIs, blocking functions. More overhead, but can be called
* from any thread except TCPIP thread.
* The sequential API provides a way for ordinary, sequential, programs
* to use the lwIP stack. It is quite similar to the BSD socket API. The
* model of execution is based on the blocking open-read-write-close
* paradigm. Since the TCP/IP stack is event based by nature, the TCP/IP
* code and the application program must reside in different execution
* contexts (threads).
*
* @defgroup socket Socket API
* @ingroup api
* BSD-style socket API.\n
* Thread-safe, to be called from non-TCPIP threads only.\n
* Can be activated by defining @ref LWIP_SOCKET to 1.\n
* Header is in posix/sys/socket.h\n
* The socket API is a compatibility API for existing applications,
* currently it is built on top of the sequential API. It is meant to
* provide all functions needed to run socket API applications running
* on other platforms (e.g. unix / windows etc.). However, due to limitations
* in the specification of this API, there might be incompatibilities
* that require small modifications of existing programs.
*
* @defgroup netifs NETIFs
*
* @defgroup apps Applications
*/
/**
* @mainpage Overview
* @verbinclude "README"
*/
/**
* @page upgrading Upgrading
* @verbinclude "UPGRADING"
*/
/**
* @page changelog Changelog
*
* 2.1.0
* -----
* * Support TLS via new @ref altcp_api connection API (https, smtps, mqtt over TLS)
* * Switch to cmake as the main build system (Makefile file lists are still
* maintained for now)
* * Improve IPv6 support: support address scopes, support stateless DHCPv6, bugfixes
* * Add debug helper asserts to ensure threading/locking requirements are met
* * Add sys_mbox_trypost_fromisr() and tcpip_callbackmsg_trycallback_fromisr()
* (for FreeRTOS, mainly)
* * socket API: support poll(), sendmsg() and recvmsg(); fix problems on close
*
* Detailed Changelog
* ------------------
* @verbinclude "CHANGELOG"
*/
/**
* @page contrib How to contribute to lwIP
* @verbinclude "contrib.txt"
*/
/**
* @page pitfalls Common pitfalls
*
* Multiple Execution Contexts in lwIP code
* ========================================
*
* The most common source of lwIP problems is to have multiple execution contexts
* inside the lwIP code.
*
* lwIP can be used in two basic modes: @ref lwip_nosys (no OS/RTOS
* running on target system) or @ref lwip_os (there is an OS running
* on the target system).
*
* See also: @ref multithreading (especially the part about @ref LWIP_ASSERT_CORE_LOCKED()!)
*
* Mainloop Mode
* -------------
* In mainloop mode, only @ref callbackstyle_api can be used.
* The user has two possibilities to ensure there is only one
* exection context at a time in lwIP:
*
* 1) Deliver RX ethernet packets directly in interrupt context to lwIP
* by calling netif->input directly in interrupt. This implies all lwIP
* callback functions are called in IRQ context, which may cause further
* problems in application code: IRQ is blocked for a long time, multiple
* execution contexts in application code etc. When the application wants
* to call lwIP, it only needs to disable interrupts during the call.
* If timers are involved, even more locking code is needed to lock out
* timer IRQ and ethernet IRQ from each other, assuming these may be nested.
*
* 2) Run lwIP in a mainloop. There is example code here: @ref lwip_nosys.
* lwIP is _ONLY_ called from mainloop callstacks here. The ethernet IRQ
* has to put received telegrams into a queue which is polled in the
* mainloop. Ensure lwIP is _NEVER_ called from an interrupt, e.g.
* some SPI IRQ wants to forward data to udp_send() or tcp_write()!
*
* OS Mode
* -------
* In OS mode, @ref callbackstyle_api AND @ref sequential_api can be used.
* @ref sequential_api are designed to be called from threads other than
* the TCPIP thread, so there is nothing to consider here.
* But @ref callbackstyle_api functions must _ONLY_ be called from
* TCPIP thread. It is a common error to call these from other threads
* or from IRQ contexts. Ethernet RX needs to deliver incoming packets
* in the correct way by sending a message to TCPIP thread, this is
* implemented in tcpip_input().
* Again, ensure lwIP is _NEVER_ called from an interrupt, e.g.
* some SPI IRQ wants to forward data to udp_send() or tcp_write()!
*
* 1) tcpip_callback() can be used get called back from TCPIP thread,
* it is safe to call any @ref callbackstyle_api from there.
*
* 2) Use @ref LWIP_TCPIP_CORE_LOCKING. All @ref callbackstyle_api
* functions can be called when lwIP core lock is aquired, see
* @ref LOCK_TCPIP_CORE() and @ref UNLOCK_TCPIP_CORE().
* These macros cannot be used in an interrupt context!
* Note the OS must correctly handle priority inversion for this.
*
* Cache / DMA issues
* ==================
*
* DMA-capable ethernet hardware and zero-copy RX
* ----------------------------------------------
*
* lwIP changes the content of RECEIVED pbufs in the TCP code path.
* This implies one or more cacheline(s) of the RX pbuf become dirty
* and need to be flushed before the memory is handed over to the
* DMA ethernet hardware for the next telegram to be received.
* See http://lists.nongnu.org/archive/html/lwip-devel/2017-12/msg00070.html
* for a more detailed explanation.
* Also keep in mind the user application may also write into pbufs,
* so it is generally a bug not to flush the data cache before handing
* a buffer to DMA hardware.
*
* DMA-capable ethernet hardware and cacheline alignment
* -----------------------------------------------------
* Nice description about DMA capable hardware and buffer handling:
* http://www.pebblebay.com/a-guide-to-using-direct-memory-access-in-embedded-systems-part-two/
* Read especially sections "Cache coherency" and "Buffer alignment".
*/
/**
* @page bugs Reporting bugs
* Please report bugs in the lwIP bug tracker at savannah.\n
* BEFORE submitting, please check if the bug has already been reported!\n
* https://savannah.nongnu.org/bugs/?group=lwip
*/
/**
* @page zerocopyrx Zero-copy RX
* The following code is an example for zero-copy RX ethernet driver:
* @include ZeroCopyRx.c
*/
/**
* @defgroup lwip_nosys Mainloop mode ("NO_SYS")
* @ingroup lwip
* Use this mode if you do not run an OS on your system. \#define NO_SYS to 1.
* Feed incoming packets to netif->input(pbuf, netif) function from mainloop,
* *not* *from* *interrupt* *context*. You can allocate a @ref pbuf in interrupt
* context and put them into a queue which is processed from mainloop.\n
* Call sys_check_timeouts() periodically in the mainloop.\n
* Porting: implement all functions in @ref sys_time, @ref sys_prot and
* @ref compiler_abstraction.\n
* You can only use @ref callbackstyle_api in this mode.\n
* Sample code:\n
* @include NO_SYS_SampleCode.c
*/
/**
* @defgroup lwip_os OS mode (TCPIP thread)
* @ingroup lwip
* Use this mode if you run an OS on your system. It is recommended to
* use an RTOS that correctly handles priority inversion and
* to use @ref LWIP_TCPIP_CORE_LOCKING.\n
* Porting: implement all functions in @ref sys_layer.\n
* You can use @ref callbackstyle_api together with @ref tcpip_callback,
* and all @ref sequential_api.
*/
/**
* @page sys_init System initalization
A truly complete and generic sequence for initializing the lwIP stack
cannot be given because it depends on additional initializations for
your runtime environment (e.g. timers).
We can give you some idea on how to proceed when using the raw API.
We assume a configuration using a single Ethernet netif and the
UDP and TCP transport layers, IPv4 and the DHCP client.
Call these functions in the order of appearance:
- lwip_init(): Initialize the lwIP stack and all of its subsystems.
- netif_add(struct netif *netif, ...):
Adds your network interface to the netif_list. Allocate a struct
netif and pass a pointer to this structure as the first argument.
Give pointers to cleared ip_addr structures when using DHCP,
or fill them with sane numbers otherwise. The state pointer may be NULL.
The init function pointer must point to a initialization function for
your Ethernet netif interface. The following code illustrates its use.
@code{.c}
err_t netif_if_init(struct netif *netif)
{
u8_t i;
for (i = 0; i < ETHARP_HWADDR_LEN; i++) {
netif->hwaddr[i] = some_eth_addr[i];
}
init_my_eth_device();
return ERR_OK;
}
@endcode
For Ethernet drivers, the input function pointer must point to the lwIP
function ethernet_input() declared in "netif/etharp.h". Other drivers
must use ip_input() declared in "lwip/ip.h".
- netif_set_default(struct netif *netif)
Registers the default network interface.
- netif_set_link_up(struct netif *netif)
This is the hardware link state; e.g. whether cable is plugged for wired
Ethernet interface. This function must be called even if you don't know
the current state. Having link up and link down events is optional but
DHCP and IPv6 discover benefit well from those events.
- netif_set_up(struct netif *netif)
This is the administrative (= software) state of the netif, when the
netif is fully configured this function must be called.
- dhcp_start(struct netif *netif)
Creates a new DHCP client for this interface on the first call.
You can peek in the netif->dhcp struct for the actual DHCP status.
- sys_check_timeouts()
When the system is running, you have to periodically call
sys_check_timeouts() which will handle all timers for all protocols in
the stack; add this to your main loop or equivalent.
*/
/**
* @page multithreading Multithreading
* lwIP started targeting single-threaded environments. When adding multi-
* threading support, instead of making the core thread-safe, another
* approach was chosen: there is one main thread running the lwIP core
* (also known as the "tcpip_thread"). When running in a multithreaded
* environment, raw API functions MUST only be called from the core thread
* since raw API functions are not protected from concurrent access (aside
* from pbuf- and memory management functions). Application threads using
* the sequential- or socket API communicate with this main thread through
* message passing.
*
* As such, the list of functions that may be called from
* other threads or an ISR is very limited! Only functions
* from these API header files are thread-safe:
* - api.h
* - netbuf.h
* - netdb.h
* - netifapi.h
* - pppapi.h
* - sockets.h
* - sys.h
*
* Additionaly, memory (de-)allocation functions may be
* called from multiple threads (not ISR!) with NO_SYS=0
* since they are protected by @ref SYS_LIGHTWEIGHT_PROT and/or
* semaphores.
*
* Netconn or Socket API functions are thread safe against the
* core thread but they are not reentrant at the control block
* granularity level. That is, a UDP or TCP control block must
* not be shared among multiple threads without proper locking.
*
* If @ref SYS_LIGHTWEIGHT_PROT is set to 1 and
* @ref LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT is set to 1,
* pbuf_free() may also be called from another thread or
* an ISR (since only then, mem_free - for PBUF_RAM - may
* be called from an ISR: otherwise, the HEAP is only
* protected by semaphores).
*
* How to get threading done right
* -------------------------------
*
* It is strongly recommended to implement the LWIP_ASSERT_CORE_LOCKED()
* macro in an application that uses multithreading. lwIP code has
* several places where a check for a correct thread context is
* implemented which greatly helps the user to get threading done right.
* See the example sys_arch.c files in unix and Win32 port
* in the contrib repository.
*
* In short: Copy the functions sys_mark_tcpip_thread() and
* sys_check_core_locking() to your port and modify them to work with your OS.
* Then let @ref LWIP_ASSERT_CORE_LOCKED() and @ref LWIP_MARK_TCPIP_THREAD()
* point to these functions.
*
* If you use @ref LWIP_TCPIP_CORE_LOCKING, you also need to copy and adapt
* the functions sys_lock_tcpip_core() and sys_unlock_tcpip_core().
* Let @ref LOCK_TCPIP_CORE() and @ref UNLOCK_TCPIP_CORE() point
* to these functions.
*/
/**
* @page optimization Optimization hints
The first thing you want to optimize is the lwip_standard_checksum()
routine from src/core/inet.c. You can override this standard
function with the \#define LWIP_CHKSUM your_checksum_routine().
There are C examples given in inet.c or you might want to
craft an assembly function for this. RFC1071 is a good
introduction to this subject.
Other significant improvements can be made by supplying
assembly or inline replacements for htons() and htonl()
if you're using a little-endian architecture.
\#define lwip_htons(x) your_htons()
\#define lwip_htonl(x) your_htonl()
If you \#define them to htons() and htonl(), you should
\#define LWIP_DONT_PROVIDE_BYTEORDER_FUNCTIONS to prevent lwIP from
defining htonx / ntohx compatibility macros.
Check your network interface driver if it reads at
a higher speed than the maximum wire-speed. If the
hardware isn't serviced frequently and fast enough
buffer overflows are likely to occur.
E.g. when using the cs8900 driver, call cs8900if_service(ethif)
as frequently as possible. When using an RTOS let the cs8900 interrupt
wake a high priority task that services your driver using a binary
semaphore or event flag. Some drivers might allow additional tuning
to match your application and network.
For a production release it is recommended to set LWIP_STATS to 0.
Note that speed performance isn't influenced much by simply setting
high values to the memory options.
*/
@@ -0,0 +1,200 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/core/altcp.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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('altcp_8c.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">altcp.c File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp_8h.html">lwip/altcp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp__priv_8h.html">lwip/priv/altcp_priv.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp__tcp_8h.html">lwip/altcp_tcp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="tcp_8h.html">lwip/tcp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="mem_8h.html">lwip/mem.h</a>&quot;</code><br />
<code>#include &lt;string.h&gt;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a6a99f8757c18fbc9b9f30925afbcf4c2"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp_8c.html#a6a99f8757c18fbc9b9f30925afbcf4c2">altcp_alloc</a> (void)</td></tr>
<tr class="separator:a6a99f8757c18fbc9b9f30925afbcf4c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afd7f6b6602e89cff51f8a8ea0315321d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp_8c.html#afd7f6b6602e89cff51f8a8ea0315321d">altcp_free</a> (struct altcp_pcb *conn)</td></tr>
<tr class="separator:afd7f6b6602e89cff51f8a8ea0315321d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa51a47bcb334b188c82a1b99db49f1f1"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gaa51a47bcb334b188c82a1b99db49f1f1">altcp_new_ip6</a> (<a class="el" href="group__altcp.html#ga9ddf490e24b1472a96ab2b4cedd171f8">altcp_allocator_t</a> *allocator)</td></tr>
<tr class="separator:gaa51a47bcb334b188c82a1b99db49f1f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga86843287b0ad0099c067817cfb7aa336"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga86843287b0ad0099c067817cfb7aa336">altcp_new</a> (<a class="el" href="group__altcp.html#ga9ddf490e24b1472a96ab2b4cedd171f8">altcp_allocator_t</a> *allocator)</td></tr>
<tr class="separator:ga86843287b0ad0099c067817cfb7aa336"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab631f6f92d7f6c58d9db27b7b415bc21"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gab631f6f92d7f6c58d9db27b7b415bc21">altcp_new_ip_type</a> (<a class="el" href="group__altcp.html#ga9ddf490e24b1472a96ab2b4cedd171f8">altcp_allocator_t</a> *allocator, u8_t ip_type)</td></tr>
<tr class="separator:gab631f6f92d7f6c58d9db27b7b415bc21"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga197a33af038556a04d8f27c7033d771f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga197a33af038556a04d8f27c7033d771f">altcp_arg</a> (struct altcp_pcb *conn, void *arg)</td></tr>
<tr class="separator:ga197a33af038556a04d8f27c7033d771f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7c4cd0b1179a53b1a223936ba2270bf9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga7c4cd0b1179a53b1a223936ba2270bf9">altcp_accept</a> (struct altcp_pcb *conn, altcp_accept_fn <a class="el" href="group__socket.html#gade2b17671b5a4b18e941fbf7e1060310">accept</a>)</td></tr>
<tr class="separator:ga7c4cd0b1179a53b1a223936ba2270bf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7f89221f9d65036d890b1e5bd9192a71"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga7f89221f9d65036d890b1e5bd9192a71">altcp_recv</a> (struct altcp_pcb *conn, altcp_recv_fn <a class="el" href="group__socket.html#gadd7ae45df7c005619eb1126542231e9b">recv</a>)</td></tr>
<tr class="separator:ga7f89221f9d65036d890b1e5bd9192a71"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab2b228c77c827fb14bfc513171c79f47"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gab2b228c77c827fb14bfc513171c79f47">altcp_sent</a> (struct altcp_pcb *conn, altcp_sent_fn sent)</td></tr>
<tr class="separator:gab2b228c77c827fb14bfc513171c79f47"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga269beeaf7d8264b6ff02333bcc7c7ab0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga269beeaf7d8264b6ff02333bcc7c7ab0">altcp_poll</a> (struct altcp_pcb *conn, altcp_poll_fn <a class="el" href="group__socket.html#ga80ae38841b0e64e60618cd8bf857f617">poll</a>, u8_t interval)</td></tr>
<tr class="separator:ga269beeaf7d8264b6ff02333bcc7c7ab0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gadc76a1f3b2448559dc87da1b33291644"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gadc76a1f3b2448559dc87da1b33291644">altcp_err</a> (struct altcp_pcb *conn, altcp_err_fn err)</td></tr>
<tr class="separator:gadc76a1f3b2448559dc87da1b33291644"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac086951cbfedaed0c36c5fb26b44ef83"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gac086951cbfedaed0c36c5fb26b44ef83">altcp_recved</a> (struct altcp_pcb *conn, u16_t len)</td></tr>
<tr class="separator:gac086951cbfedaed0c36c5fb26b44ef83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga485b248680f73b9876d8674029c5157c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga485b248680f73b9876d8674029c5157c">altcp_bind</a> (struct altcp_pcb *conn, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *ipaddr, u16_t port)</td></tr>
<tr class="separator:ga485b248680f73b9876d8674029c5157c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gafaf1d533e4e89dc249a3f931afa93492"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gafaf1d533e4e89dc249a3f931afa93492">altcp_connect</a> (struct altcp_pcb *conn, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *ipaddr, u16_t port, altcp_connected_fn connected)</td></tr>
<tr class="separator:gafaf1d533e4e89dc249a3f931afa93492"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac69722b86b1198916f2527fb9f132c2b"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gac69722b86b1198916f2527fb9f132c2b">altcp_listen_with_backlog_and_err</a> (struct altcp_pcb *conn, u8_t backlog, <a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> *err)</td></tr>
<tr class="separator:gac69722b86b1198916f2527fb9f132c2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7f6fab99fed448385a76b4a5100796ab"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga7f6fab99fed448385a76b4a5100796ab">altcp_abort</a> (struct altcp_pcb *conn)</td></tr>
<tr class="separator:ga7f6fab99fed448385a76b4a5100796ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4329798afdf3709c789a2ee060ee3993"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga4329798afdf3709c789a2ee060ee3993">altcp_close</a> (struct altcp_pcb *conn)</td></tr>
<tr class="separator:ga4329798afdf3709c789a2ee060ee3993"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0c3172d0bfe452599e242ea2e4692319"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga0c3172d0bfe452599e242ea2e4692319">altcp_shutdown</a> (struct altcp_pcb *conn, int shut_rx, int shut_tx)</td></tr>
<tr class="separator:ga0c3172d0bfe452599e242ea2e4692319"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaad9a38396b127cfd778e253f20a97b8d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gaad9a38396b127cfd778e253f20a97b8d">altcp_write</a> (struct altcp_pcb *conn, const void *dataptr, u16_t len, u8_t apiflags)</td></tr>
<tr class="separator:gaad9a38396b127cfd778e253f20a97b8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5d2370d3b671377d7e2c98ce2dc3cfc6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga5d2370d3b671377d7e2c98ce2dc3cfc6">altcp_output</a> (struct altcp_pcb *conn)</td></tr>
<tr class="separator:ga5d2370d3b671377d7e2c98ce2dc3cfc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae7cfc8bd8e45c517a706afd5857fda08"><td class="memItemLeft" align="right" valign="top">u16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gae7cfc8bd8e45c517a706afd5857fda08">altcp_mss</a> (struct altcp_pcb *conn)</td></tr>
<tr class="separator:gae7cfc8bd8e45c517a706afd5857fda08"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab295cba0c1ded90fe044a8c37387a12c"><td class="memItemLeft" align="right" valign="top">u16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gab295cba0c1ded90fe044a8c37387a12c">altcp_sndbuf</a> (struct altcp_pcb *conn)</td></tr>
<tr class="separator:gab295cba0c1ded90fe044a8c37387a12c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga516a1bfbf38fc47cfd47852715c505c5"><td class="memItemLeft" align="right" valign="top">u16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga516a1bfbf38fc47cfd47852715c505c5">altcp_sndqueuelen</a> (struct altcp_pcb *conn)</td></tr>
<tr class="separator:ga516a1bfbf38fc47cfd47852715c505c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5040b0a4646bca718d3611ba7fa558c5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga5040b0a4646bca718d3611ba7fa558c5">altcp_setprio</a> (struct altcp_pcb *conn, u8_t prio)</td></tr>
<tr class="separator:ga5040b0a4646bca718d3611ba7fa558c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a id="a6a99f8757c18fbc9b9f30925afbcf4c2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6a99f8757c18fbc9b9f30925afbcf4c2">&#9670;&nbsp;</a></span>altcp_alloc()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct altcp_pcb* altcp_alloc </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>For altcp layer implementations only: allocate a new struct altcp_pcb from the pool and zero the memory </p>
</div>
</div>
<a id="afd7f6b6602e89cff51f8a8ea0315321d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afd7f6b6602e89cff51f8a8ea0315321d">&#9670;&nbsp;</a></span>altcp_free()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void altcp_free </td>
<td>(</td>
<td class="paramtype">struct altcp_pcb *&#160;</td>
<td class="paramname"><em>conn</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>For altcp layer implementations only: return a struct altcp_pcb to the pool </p>
</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="altcp_8c.html">altcp.c</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,27 @@
var altcp_8c =
[
[ "altcp_abort", "group__altcp.html#ga7f6fab99fed448385a76b4a5100796ab", null ],
[ "altcp_accept", "group__altcp.html#ga7c4cd0b1179a53b1a223936ba2270bf9", null ],
[ "altcp_alloc", "altcp_8c.html#a6a99f8757c18fbc9b9f30925afbcf4c2", null ],
[ "altcp_arg", "group__altcp.html#ga197a33af038556a04d8f27c7033d771f", null ],
[ "altcp_bind", "group__altcp.html#ga485b248680f73b9876d8674029c5157c", null ],
[ "altcp_close", "group__altcp.html#ga4329798afdf3709c789a2ee060ee3993", null ],
[ "altcp_connect", "group__altcp.html#gafaf1d533e4e89dc249a3f931afa93492", null ],
[ "altcp_err", "group__altcp.html#gadc76a1f3b2448559dc87da1b33291644", null ],
[ "altcp_free", "altcp_8c.html#afd7f6b6602e89cff51f8a8ea0315321d", null ],
[ "altcp_listen_with_backlog_and_err", "group__altcp.html#gac69722b86b1198916f2527fb9f132c2b", null ],
[ "altcp_mss", "group__altcp.html#gae7cfc8bd8e45c517a706afd5857fda08", null ],
[ "altcp_new", "group__altcp.html#ga86843287b0ad0099c067817cfb7aa336", null ],
[ "altcp_new_ip6", "group__altcp.html#gaa51a47bcb334b188c82a1b99db49f1f1", null ],
[ "altcp_new_ip_type", "group__altcp.html#gab631f6f92d7f6c58d9db27b7b415bc21", null ],
[ "altcp_output", "group__altcp.html#ga5d2370d3b671377d7e2c98ce2dc3cfc6", null ],
[ "altcp_poll", "group__altcp.html#ga269beeaf7d8264b6ff02333bcc7c7ab0", null ],
[ "altcp_recv", "group__altcp.html#ga7f89221f9d65036d890b1e5bd9192a71", null ],
[ "altcp_recved", "group__altcp.html#gac086951cbfedaed0c36c5fb26b44ef83", null ],
[ "altcp_sent", "group__altcp.html#gab2b228c77c827fb14bfc513171c79f47", null ],
[ "altcp_setprio", "group__altcp.html#ga5040b0a4646bca718d3611ba7fa558c5", null ],
[ "altcp_shutdown", "group__altcp.html#ga0c3172d0bfe452599e242ea2e4692319", null ],
[ "altcp_sndbuf", "group__altcp.html#gab295cba0c1ded90fe044a8c37387a12c", null ],
[ "altcp_sndqueuelen", "group__altcp.html#ga516a1bfbf38fc47cfd47852715c505c5", null ],
[ "altcp_write", "group__altcp.html#gaad9a38396b127cfd778e253f20a97b8d", null ]
];
@@ -0,0 +1,176 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/include/lwip/altcp.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('altcp_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">altcp.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="tcpbase_8h.html">lwip/tcpbase.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="err_8h.html">lwip/err.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="pbuf_8h.html">lwip/pbuf.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="ip__addr_8h.html">lwip/ip_addr.h</a>&quot;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structaltcp__allocator__s.html">altcp_allocator_s</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga96c22e15230b5216b3a95dc9e2ca42c8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga96c22e15230b5216b3a95dc9e2ca42c8">altcp_listen</a>(conn)&#160;&#160;&#160;<a class="el" href="group__altcp.html#gac69722b86b1198916f2527fb9f132c2b">altcp_listen_with_backlog_and_err</a>(conn, <a class="el" href="group__lwip__opts__tcp.html#ga93cce3f47e33df11248c908d1775bacf">TCP_DEFAULT_LISTEN_BACKLOG</a>, NULL)</td></tr>
<tr class="separator:ga96c22e15230b5216b3a95dc9e2ca42c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga9ddf490e24b1472a96ab2b4cedd171f8"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structaltcp__allocator__s.html">altcp_allocator_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga9ddf490e24b1472a96ab2b4cedd171f8">altcp_allocator_t</a></td></tr>
<tr class="separator:ga9ddf490e24b1472a96ab2b4cedd171f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga86843287b0ad0099c067817cfb7aa336"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga86843287b0ad0099c067817cfb7aa336">altcp_new</a> (<a class="el" href="group__altcp.html#ga9ddf490e24b1472a96ab2b4cedd171f8">altcp_allocator_t</a> *allocator)</td></tr>
<tr class="separator:ga86843287b0ad0099c067817cfb7aa336"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa51a47bcb334b188c82a1b99db49f1f1"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gaa51a47bcb334b188c82a1b99db49f1f1">altcp_new_ip6</a> (<a class="el" href="group__altcp.html#ga9ddf490e24b1472a96ab2b4cedd171f8">altcp_allocator_t</a> *allocator)</td></tr>
<tr class="separator:gaa51a47bcb334b188c82a1b99db49f1f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab631f6f92d7f6c58d9db27b7b415bc21"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gab631f6f92d7f6c58d9db27b7b415bc21">altcp_new_ip_type</a> (<a class="el" href="group__altcp.html#ga9ddf490e24b1472a96ab2b4cedd171f8">altcp_allocator_t</a> *allocator, u8_t ip_type)</td></tr>
<tr class="separator:gab631f6f92d7f6c58d9db27b7b415bc21"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga197a33af038556a04d8f27c7033d771f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga197a33af038556a04d8f27c7033d771f">altcp_arg</a> (struct altcp_pcb *conn, void *arg)</td></tr>
<tr class="separator:ga197a33af038556a04d8f27c7033d771f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7c4cd0b1179a53b1a223936ba2270bf9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga7c4cd0b1179a53b1a223936ba2270bf9">altcp_accept</a> (struct altcp_pcb *conn, altcp_accept_fn <a class="el" href="group__socket.html#gade2b17671b5a4b18e941fbf7e1060310">accept</a>)</td></tr>
<tr class="separator:ga7c4cd0b1179a53b1a223936ba2270bf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7f89221f9d65036d890b1e5bd9192a71"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga7f89221f9d65036d890b1e5bd9192a71">altcp_recv</a> (struct altcp_pcb *conn, altcp_recv_fn <a class="el" href="group__socket.html#gadd7ae45df7c005619eb1126542231e9b">recv</a>)</td></tr>
<tr class="separator:ga7f89221f9d65036d890b1e5bd9192a71"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab2b228c77c827fb14bfc513171c79f47"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gab2b228c77c827fb14bfc513171c79f47">altcp_sent</a> (struct altcp_pcb *conn, altcp_sent_fn sent)</td></tr>
<tr class="separator:gab2b228c77c827fb14bfc513171c79f47"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga269beeaf7d8264b6ff02333bcc7c7ab0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga269beeaf7d8264b6ff02333bcc7c7ab0">altcp_poll</a> (struct altcp_pcb *conn, altcp_poll_fn <a class="el" href="group__socket.html#ga80ae38841b0e64e60618cd8bf857f617">poll</a>, u8_t interval)</td></tr>
<tr class="separator:ga269beeaf7d8264b6ff02333bcc7c7ab0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gadc76a1f3b2448559dc87da1b33291644"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gadc76a1f3b2448559dc87da1b33291644">altcp_err</a> (struct altcp_pcb *conn, altcp_err_fn err)</td></tr>
<tr class="separator:gadc76a1f3b2448559dc87da1b33291644"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac086951cbfedaed0c36c5fb26b44ef83"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gac086951cbfedaed0c36c5fb26b44ef83">altcp_recved</a> (struct altcp_pcb *conn, u16_t len)</td></tr>
<tr class="separator:gac086951cbfedaed0c36c5fb26b44ef83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga485b248680f73b9876d8674029c5157c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga485b248680f73b9876d8674029c5157c">altcp_bind</a> (struct altcp_pcb *conn, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *ipaddr, u16_t port)</td></tr>
<tr class="separator:ga485b248680f73b9876d8674029c5157c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gafaf1d533e4e89dc249a3f931afa93492"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gafaf1d533e4e89dc249a3f931afa93492">altcp_connect</a> (struct altcp_pcb *conn, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *ipaddr, u16_t port, altcp_connected_fn connected)</td></tr>
<tr class="separator:gafaf1d533e4e89dc249a3f931afa93492"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac69722b86b1198916f2527fb9f132c2b"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gac69722b86b1198916f2527fb9f132c2b">altcp_listen_with_backlog_and_err</a> (struct altcp_pcb *conn, u8_t backlog, <a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a> *err)</td></tr>
<tr class="separator:gac69722b86b1198916f2527fb9f132c2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7f6fab99fed448385a76b4a5100796ab"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga7f6fab99fed448385a76b4a5100796ab">altcp_abort</a> (struct altcp_pcb *conn)</td></tr>
<tr class="separator:ga7f6fab99fed448385a76b4a5100796ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4329798afdf3709c789a2ee060ee3993"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga4329798afdf3709c789a2ee060ee3993">altcp_close</a> (struct altcp_pcb *conn)</td></tr>
<tr class="separator:ga4329798afdf3709c789a2ee060ee3993"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0c3172d0bfe452599e242ea2e4692319"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga0c3172d0bfe452599e242ea2e4692319">altcp_shutdown</a> (struct altcp_pcb *conn, int shut_rx, int shut_tx)</td></tr>
<tr class="separator:ga0c3172d0bfe452599e242ea2e4692319"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaad9a38396b127cfd778e253f20a97b8d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gaad9a38396b127cfd778e253f20a97b8d">altcp_write</a> (struct altcp_pcb *conn, const void *dataptr, u16_t len, u8_t apiflags)</td></tr>
<tr class="separator:gaad9a38396b127cfd778e253f20a97b8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5d2370d3b671377d7e2c98ce2dc3cfc6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga5d2370d3b671377d7e2c98ce2dc3cfc6">altcp_output</a> (struct altcp_pcb *conn)</td></tr>
<tr class="separator:ga5d2370d3b671377d7e2c98ce2dc3cfc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae7cfc8bd8e45c517a706afd5857fda08"><td class="memItemLeft" align="right" valign="top">u16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gae7cfc8bd8e45c517a706afd5857fda08">altcp_mss</a> (struct altcp_pcb *conn)</td></tr>
<tr class="separator:gae7cfc8bd8e45c517a706afd5857fda08"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab295cba0c1ded90fe044a8c37387a12c"><td class="memItemLeft" align="right" valign="top">u16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#gab295cba0c1ded90fe044a8c37387a12c">altcp_sndbuf</a> (struct altcp_pcb *conn)</td></tr>
<tr class="separator:gab295cba0c1ded90fe044a8c37387a12c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga516a1bfbf38fc47cfd47852715c505c5"><td class="memItemLeft" align="right" valign="top">u16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga516a1bfbf38fc47cfd47852715c505c5">altcp_sndqueuelen</a> (struct altcp_pcb *conn)</td></tr>
<tr class="separator:ga516a1bfbf38fc47cfd47852715c505c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5040b0a4646bca718d3611ba7fa558c5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp.html#ga5040b0a4646bca718d3611ba7fa558c5">altcp_setprio</a> (struct altcp_pcb *conn, u8_t prio)</td></tr>
<tr class="separator:ga5040b0a4646bca718d3611ba7fa558c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Application layered TCP connection API (to be used from TCPIP thread)<br />
This file contains the generic API. For more details see <a class="el" href="group__altcp__api.html">Application layered TCP Introduction</a>. </p>
</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_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li><li class="navelem"><a class="el" href="dir_4e6b3cf33a61b6caac9c8ac30c866f37.html">lwip</a></li><li class="navelem"><a class="el" href="altcp_8h.html">altcp.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,27 @@
var altcp_8h =
[
[ "altcp_listen", "group__altcp.html#ga96c22e15230b5216b3a95dc9e2ca42c8", null ],
[ "altcp_allocator_t", "group__altcp.html#ga9ddf490e24b1472a96ab2b4cedd171f8", null ],
[ "altcp_abort", "group__altcp.html#ga7f6fab99fed448385a76b4a5100796ab", null ],
[ "altcp_accept", "group__altcp.html#ga7c4cd0b1179a53b1a223936ba2270bf9", null ],
[ "altcp_arg", "group__altcp.html#ga197a33af038556a04d8f27c7033d771f", null ],
[ "altcp_bind", "group__altcp.html#ga485b248680f73b9876d8674029c5157c", null ],
[ "altcp_close", "group__altcp.html#ga4329798afdf3709c789a2ee060ee3993", null ],
[ "altcp_connect", "group__altcp.html#gafaf1d533e4e89dc249a3f931afa93492", null ],
[ "altcp_err", "group__altcp.html#gadc76a1f3b2448559dc87da1b33291644", null ],
[ "altcp_listen_with_backlog_and_err", "group__altcp.html#gac69722b86b1198916f2527fb9f132c2b", null ],
[ "altcp_mss", "group__altcp.html#gae7cfc8bd8e45c517a706afd5857fda08", null ],
[ "altcp_new", "group__altcp.html#ga86843287b0ad0099c067817cfb7aa336", null ],
[ "altcp_new_ip6", "group__altcp.html#gaa51a47bcb334b188c82a1b99db49f1f1", null ],
[ "altcp_new_ip_type", "group__altcp.html#gab631f6f92d7f6c58d9db27b7b415bc21", null ],
[ "altcp_output", "group__altcp.html#ga5d2370d3b671377d7e2c98ce2dc3cfc6", null ],
[ "altcp_poll", "group__altcp.html#ga269beeaf7d8264b6ff02333bcc7c7ab0", null ],
[ "altcp_recv", "group__altcp.html#ga7f89221f9d65036d890b1e5bd9192a71", null ],
[ "altcp_recved", "group__altcp.html#gac086951cbfedaed0c36c5fb26b44ef83", null ],
[ "altcp_sent", "group__altcp.html#gab2b228c77c827fb14bfc513171c79f47", null ],
[ "altcp_setprio", "group__altcp.html#ga5040b0a4646bca718d3611ba7fa558c5", null ],
[ "altcp_shutdown", "group__altcp.html#ga0c3172d0bfe452599e242ea2e4692319", null ],
[ "altcp_sndbuf", "group__altcp.html#gab295cba0c1ded90fe044a8c37387a12c", null ],
[ "altcp_sndqueuelen", "group__altcp.html#ga516a1bfbf38fc47cfd47852715c505c5", null ],
[ "altcp_write", "group__altcp.html#gaad9a38396b127cfd778e253f20a97b8d", null ]
];
@@ -0,0 +1,121 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/core/altcp_alloc.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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('altcp__alloc_8c.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">altcp_alloc.c File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp_8h.html">lwip/altcp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp__tcp_8h.html">lwip/altcp_tcp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp__tls_8h.html">lwip/altcp_tls.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp__priv_8h.html">lwip/priv/altcp_priv.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="mem_8h.html">lwip/mem.h</a>&quot;</code><br />
<code>#include &lt;string.h&gt;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga028316a8257cf8dcace9cd063de79c0a"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp__tls.html#ga028316a8257cf8dcace9cd063de79c0a">altcp_tls_new</a> (struct altcp_tls_config *config, u8_t ip_type)</td></tr>
<tr class="separator:ga028316a8257cf8dcace9cd063de79c0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga09e6ca8f144ee94ef21d7e5760aa4391"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp__tls.html#ga09e6ca8f144ee94ef21d7e5760aa4391">altcp_tls_alloc</a> (void *arg, u8_t ip_type)</td></tr>
<tr class="separator:ga09e6ca8f144ee94ef21d7e5760aa4391"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Application layered TCP connection API (to be used from TCPIP thread)<br />
This interface mimics the tcp callback API to the application while preventing direct linking (much like virtual functions). This way, an application can make use of other application layer protocols on top of TCP without knowing the details (e.g. TLS, proxy connection).</p>
<p>This file contains allocation implementation that combine several layers. </p>
</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="altcp__alloc_8c.html">altcp_alloc.c</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,5 @@
var altcp__alloc_8c =
[
[ "altcp_tls_alloc", "group__altcp__tls.html#ga09e6ca8f144ee94ef21d7e5760aa4391", null ],
[ "altcp_tls_new", "group__altcp__tls.html#ga028316a8257cf8dcace9cd063de79c0a", null ]
];
@@ -0,0 +1,155 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/include/lwip/priv/altcp_priv.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('altcp__priv_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">altcp_priv.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp_8h.html">lwip/altcp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="ip__addr_8h.html">lwip/ip_addr.h</a>&quot;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a6a99f8757c18fbc9b9f30925afbcf4c2"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp__priv_8h.html#a6a99f8757c18fbc9b9f30925afbcf4c2">altcp_alloc</a> (void)</td></tr>
<tr class="separator:a6a99f8757c18fbc9b9f30925afbcf4c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afd7f6b6602e89cff51f8a8ea0315321d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp__priv_8h.html#afd7f6b6602e89cff51f8a8ea0315321d">altcp_free</a> (struct altcp_pcb *conn)</td></tr>
<tr class="separator:afd7f6b6602e89cff51f8a8ea0315321d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Application layered TCP connection API (to be used from TCPIP thread)<br />
This interface mimics the tcp callback API to the application while preventing direct linking (much like virtual functions). This way, an application can make use of other application layer protocols on top of TCP without knowing the details (e.g. TLS, proxy connection). </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="a6a99f8757c18fbc9b9f30925afbcf4c2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6a99f8757c18fbc9b9f30925afbcf4c2">&#9670;&nbsp;</a></span>altcp_alloc()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct altcp_pcb* altcp_alloc </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>For altcp layer implementations only: allocate a new struct altcp_pcb from the pool and zero the memory </p>
</div>
</div>
<a id="afd7f6b6602e89cff51f8a8ea0315321d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afd7f6b6602e89cff51f8a8ea0315321d">&#9670;&nbsp;</a></span>altcp_free()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void altcp_free </td>
<td>(</td>
<td class="paramtype">struct altcp_pcb *&#160;</td>
<td class="paramname"><em>conn</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>For altcp layer implementations only: return a struct altcp_pcb to the pool </p>
</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_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li><li class="navelem"><a class="el" href="dir_4e6b3cf33a61b6caac9c8ac30c866f37.html">lwip</a></li><li class="navelem"><a class="el" href="dir_460c501b2432fc107adcb38111835e48.html">priv</a></li><li class="navelem"><a class="el" href="altcp__priv_8h.html">altcp_priv.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,5 @@
var altcp__priv_8h =
[
[ "altcp_alloc", "altcp__priv_8h.html#a6a99f8757c18fbc9b9f30925afbcf4c2", null ],
[ "altcp_free", "altcp__priv_8h.html#afd7f6b6602e89cff51f8a8ea0315321d", null ]
];
@@ -0,0 +1,296 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/apps/http/altcp_proxyconnect.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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('altcp__proxyconnect_8c.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#define-members">Macros</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">altcp_proxyconnect.c File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="altcp__proxyconnect_8h.html">lwip/apps/altcp_proxyconnect.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp_8h.html">lwip/altcp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp__priv_8h.html">lwip/priv/altcp_priv.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp__tcp_8h.html">lwip/altcp_tcp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp__tls_8h.html">lwip/altcp_tls.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="mem_8h.html">lwip/mem.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="init_8h.html">lwip/init.h</a>&quot;</code><br />
<code>#include &lt;stdio.h&gt;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a344227f22aa1b58f7ed737a2d4f4636f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp__proxyconnect_8c.html#a344227f22aa1b58f7ed737a2d4f4636f">ALTCP_PROXYCONNECT_CLIENT_AGENT</a>&#160;&#160;&#160;&quot;lwIP/&quot; LWIP_VERSION_STRING &quot; (http://savannah.nongnu.org/projects/lwip)&quot;</td></tr>
<tr class="separator:a344227f22aa1b58f7ed737a2d4f4636f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ae774782064a92d0f58ce07b57a5360d1"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp__proxyconnect_8c.html#ae774782064a92d0f58ce07b57a5360d1">altcp_proxyconnect_new</a> (struct altcp_proxyconnect_config *config, struct altcp_pcb *inner_pcb)</td></tr>
<tr class="separator:ae774782064a92d0f58ce07b57a5360d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a24e122d2bc2c0b9f86074c1e8d5ccfe4"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp__proxyconnect_8c.html#a24e122d2bc2c0b9f86074c1e8d5ccfe4">altcp_proxyconnect_new_tcp</a> (struct altcp_proxyconnect_config *config, u8_t ip_type)</td></tr>
<tr class="separator:a24e122d2bc2c0b9f86074c1e8d5ccfe4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3d3af45390467ceeaa064b7e28dd43a9"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp__proxyconnect_8c.html#a3d3af45390467ceeaa064b7e28dd43a9">altcp_proxyconnect_alloc</a> (void *arg, u8_t ip_type)</td></tr>
<tr class="separator:a3d3af45390467ceeaa064b7e28dd43a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ff49bcd035847a8915f18deef4172a9"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp__proxyconnect_8c.html#a5ff49bcd035847a8915f18deef4172a9">altcp_proxyconnect_tls_alloc</a> (void *arg, u8_t ip_type)</td></tr>
<tr class="separator:a5ff49bcd035847a8915f18deef4172a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Application layered TCP connection API that executes a proxy-connect.</p>
<p>This file provides a starting layer that executes a proxy-connect e.g. to set up TLS connections through a http proxy. </p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a id="a344227f22aa1b58f7ed737a2d4f4636f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a344227f22aa1b58f7ed737a2d4f4636f">&#9670;&nbsp;</a></span>ALTCP_PROXYCONNECT_CLIENT_AGENT</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define ALTCP_PROXYCONNECT_CLIENT_AGENT&#160;&#160;&#160;&quot;lwIP/&quot; LWIP_VERSION_STRING &quot; (http://savannah.nongnu.org/projects/lwip)&quot;</td>
</tr>
</table>
</div><div class="memdoc">
<p>This string is passed in the HTTP header as "User-Agent: " </p>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="a3d3af45390467ceeaa064b7e28dd43a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3d3af45390467ceeaa064b7e28dd43a9">&#9670;&nbsp;</a></span>altcp_proxyconnect_alloc()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct altcp_pcb* altcp_proxyconnect_alloc </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>arg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8_t&#160;</td>
<td class="paramname"><em>ip_type</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocator function to allocate a proxy connect altcp pcb connecting directly via tcp to the proxy.</p>
<p>The returned pcb is a chain: altcp_proxyconnect - altcp_tcp - tcp pcb</p>
<p>This function is meant for use with <a class="el" href="group__altcp.html#ga86843287b0ad0099c067817cfb7aa336">altcp_new</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">arg</td><td>struct altcp_proxyconnect_config that contains the proxy settings </td></tr>
<tr><td class="paramname">ip_type</td><td>IP type of the connection (<a class="el" href="group__ipaddr.html#gaf2142f0dfdcc938e2db16aa745ed585c">lwip_ip_addr_type</a>) </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ae774782064a92d0f58ce07b57a5360d1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae774782064a92d0f58ce07b57a5360d1">&#9670;&nbsp;</a></span>altcp_proxyconnect_new()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct altcp_pcb* altcp_proxyconnect_new </td>
<td>(</td>
<td class="paramtype">struct altcp_proxyconnect_config *&#160;</td>
<td class="paramname"><em>config</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct altcp_pcb *&#160;</td>
<td class="paramname"><em>inner_pcb</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocate a new altcp layer connecting through a proxy. This function gets the inner pcb passed.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">config</td><td>struct altcp_proxyconnect_config that contains the proxy settings </td></tr>
<tr><td class="paramname">inner_pcb</td><td>pcb that makes the connection to the proxy (i.e. tcp pcb) </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a24e122d2bc2c0b9f86074c1e8d5ccfe4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a24e122d2bc2c0b9f86074c1e8d5ccfe4">&#9670;&nbsp;</a></span>altcp_proxyconnect_new_tcp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct altcp_pcb* altcp_proxyconnect_new_tcp </td>
<td>(</td>
<td class="paramtype">struct altcp_proxyconnect_config *&#160;</td>
<td class="paramname"><em>config</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8_t&#160;</td>
<td class="paramname"><em>ip_type</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocate a new altcp layer connecting through a proxy. This function allocates the inner pcb as tcp pcb, resulting in a direct tcp connection to the proxy.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">config</td><td>struct altcp_proxyconnect_config that contains the proxy settings </td></tr>
<tr><td class="paramname">ip_type</td><td>IP type of the connection (<a class="el" href="group__ipaddr.html#gaf2142f0dfdcc938e2db16aa745ed585c">lwip_ip_addr_type</a>) </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a5ff49bcd035847a8915f18deef4172a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5ff49bcd035847a8915f18deef4172a9">&#9670;&nbsp;</a></span>altcp_proxyconnect_tls_alloc()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct altcp_pcb* altcp_proxyconnect_tls_alloc </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>arg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8_t&#160;</td>
<td class="paramname"><em>ip_type</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocator function to allocate a TLS connection through a proxy.</p>
<p>The returned pcb is a chain: altcp_tls - altcp_proxyconnect - altcp_tcp - tcp pcb</p>
<p>This function is meant for use with <a class="el" href="group__altcp.html#ga86843287b0ad0099c067817cfb7aa336">altcp_new</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">arg</td><td>struct altcp_proxyconnect_tls_config that contains the proxy settings and tls settings </td></tr>
<tr><td class="paramname">ip_type</td><td>IP type of the connection (<a class="el" href="group__ipaddr.html#gaf2142f0dfdcc938e2db16aa745ed585c">lwip_ip_addr_type</a>) </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_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li><li class="navelem"><a class="el" href="dir_34adf996f92d0eef72c45a7167a966e6.html">http</a></li><li class="navelem"><a class="el" href="altcp__proxyconnect_8c.html">altcp_proxyconnect.c</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,8 @@
var altcp__proxyconnect_8c =
[
[ "ALTCP_PROXYCONNECT_CLIENT_AGENT", "altcp__proxyconnect_8c.html#a344227f22aa1b58f7ed737a2d4f4636f", null ],
[ "altcp_proxyconnect_alloc", "altcp__proxyconnect_8c.html#a3d3af45390467ceeaa064b7e28dd43a9", null ],
[ "altcp_proxyconnect_new", "altcp__proxyconnect_8c.html#ae774782064a92d0f58ce07b57a5360d1", null ],
[ "altcp_proxyconnect_new_tcp", "altcp__proxyconnect_8c.html#a24e122d2bc2c0b9f86074c1e8d5ccfe4", null ],
[ "altcp_proxyconnect_tls_alloc", "altcp__proxyconnect_8c.html#a5ff49bcd035847a8915f18deef4172a9", null ]
];
@@ -0,0 +1,268 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/include/lwip/apps/altcp_proxyconnect.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('altcp__proxyconnect_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">altcp_proxyconnect.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="ip__addr_8h.html">lwip/ip_addr.h</a>&quot;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ae774782064a92d0f58ce07b57a5360d1"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp__proxyconnect_8h.html#ae774782064a92d0f58ce07b57a5360d1">altcp_proxyconnect_new</a> (struct altcp_proxyconnect_config *config, struct altcp_pcb *inner_pcb)</td></tr>
<tr class="separator:ae774782064a92d0f58ce07b57a5360d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a24e122d2bc2c0b9f86074c1e8d5ccfe4"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp__proxyconnect_8h.html#a24e122d2bc2c0b9f86074c1e8d5ccfe4">altcp_proxyconnect_new_tcp</a> (struct altcp_proxyconnect_config *config, u8_t ip_type)</td></tr>
<tr class="separator:a24e122d2bc2c0b9f86074c1e8d5ccfe4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3d3af45390467ceeaa064b7e28dd43a9"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp__proxyconnect_8h.html#a3d3af45390467ceeaa064b7e28dd43a9">altcp_proxyconnect_alloc</a> (void *arg, u8_t ip_type)</td></tr>
<tr class="separator:a3d3af45390467ceeaa064b7e28dd43a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ff49bcd035847a8915f18deef4172a9"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp__proxyconnect_8h.html#a5ff49bcd035847a8915f18deef4172a9">altcp_proxyconnect_tls_alloc</a> (void *arg, u8_t ip_type)</td></tr>
<tr class="separator:a5ff49bcd035847a8915f18deef4172a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Application layered TCP connection API that executes a proxy-connect.</p>
<p>This file provides a starting layer that executes a proxy-connect e.g. to set up TLS connections through a http proxy. </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="a3d3af45390467ceeaa064b7e28dd43a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3d3af45390467ceeaa064b7e28dd43a9">&#9670;&nbsp;</a></span>altcp_proxyconnect_alloc()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct altcp_pcb* altcp_proxyconnect_alloc </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>arg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8_t&#160;</td>
<td class="paramname"><em>ip_type</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocator function to allocate a proxy connect altcp pcb connecting directly via tcp to the proxy.</p>
<p>The returned pcb is a chain: altcp_proxyconnect - altcp_tcp - tcp pcb</p>
<p>This function is meant for use with <a class="el" href="group__altcp.html#ga86843287b0ad0099c067817cfb7aa336">altcp_new</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">arg</td><td>struct altcp_proxyconnect_config that contains the proxy settings </td></tr>
<tr><td class="paramname">ip_type</td><td>IP type of the connection (<a class="el" href="group__ipaddr.html#gaf2142f0dfdcc938e2db16aa745ed585c">lwip_ip_addr_type</a>) </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ae774782064a92d0f58ce07b57a5360d1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae774782064a92d0f58ce07b57a5360d1">&#9670;&nbsp;</a></span>altcp_proxyconnect_new()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct altcp_pcb* altcp_proxyconnect_new </td>
<td>(</td>
<td class="paramtype">struct altcp_proxyconnect_config *&#160;</td>
<td class="paramname"><em>config</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct altcp_pcb *&#160;</td>
<td class="paramname"><em>inner_pcb</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocate a new altcp layer connecting through a proxy. This function gets the inner pcb passed.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">config</td><td>struct altcp_proxyconnect_config that contains the proxy settings </td></tr>
<tr><td class="paramname">inner_pcb</td><td>pcb that makes the connection to the proxy (i.e. tcp pcb) </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a24e122d2bc2c0b9f86074c1e8d5ccfe4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a24e122d2bc2c0b9f86074c1e8d5ccfe4">&#9670;&nbsp;</a></span>altcp_proxyconnect_new_tcp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct altcp_pcb* altcp_proxyconnect_new_tcp </td>
<td>(</td>
<td class="paramtype">struct altcp_proxyconnect_config *&#160;</td>
<td class="paramname"><em>config</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8_t&#160;</td>
<td class="paramname"><em>ip_type</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocate a new altcp layer connecting through a proxy. This function allocates the inner pcb as tcp pcb, resulting in a direct tcp connection to the proxy.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">config</td><td>struct altcp_proxyconnect_config that contains the proxy settings </td></tr>
<tr><td class="paramname">ip_type</td><td>IP type of the connection (<a class="el" href="group__ipaddr.html#gaf2142f0dfdcc938e2db16aa745ed585c">lwip_ip_addr_type</a>) </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a5ff49bcd035847a8915f18deef4172a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5ff49bcd035847a8915f18deef4172a9">&#9670;&nbsp;</a></span>altcp_proxyconnect_tls_alloc()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct altcp_pcb* altcp_proxyconnect_tls_alloc </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>arg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8_t&#160;</td>
<td class="paramname"><em>ip_type</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocator function to allocate a TLS connection through a proxy.</p>
<p>The returned pcb is a chain: altcp_tls - altcp_proxyconnect - altcp_tcp - tcp pcb</p>
<p>This function is meant for use with <a class="el" href="group__altcp.html#ga86843287b0ad0099c067817cfb7aa336">altcp_new</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">arg</td><td>struct altcp_proxyconnect_tls_config that contains the proxy settings and tls settings </td></tr>
<tr><td class="paramname">ip_type</td><td>IP type of the connection (<a class="el" href="group__ipaddr.html#gaf2142f0dfdcc938e2db16aa745ed585c">lwip_ip_addr_type</a>) </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_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li><li class="navelem"><a class="el" href="dir_4e6b3cf33a61b6caac9c8ac30c866f37.html">lwip</a></li><li class="navelem"><a class="el" href="dir_f9284811ac594eafdc3134d5f8b945cb.html">apps</a></li><li class="navelem"><a class="el" href="altcp__proxyconnect_8h.html">altcp_proxyconnect.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,7 @@
var altcp__proxyconnect_8h =
[
[ "altcp_proxyconnect_alloc", "altcp__proxyconnect_8h.html#a3d3af45390467ceeaa064b7e28dd43a9", null ],
[ "altcp_proxyconnect_new", "altcp__proxyconnect_8h.html#ae774782064a92d0f58ce07b57a5360d1", null ],
[ "altcp_proxyconnect_new_tcp", "altcp__proxyconnect_8h.html#a24e122d2bc2c0b9f86074c1e8d5ccfe4", null ],
[ "altcp_proxyconnect_tls_alloc", "altcp__proxyconnect_8h.html#a5ff49bcd035847a8915f18deef4172a9", null ]
];
@@ -0,0 +1,150 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/core/altcp_tcp.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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('altcp__tcp_8c.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">altcp_tcp.c File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp_8h.html">lwip/altcp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp__tcp_8h.html">lwip/altcp_tcp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp__priv_8h.html">lwip/priv/altcp_priv.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="tcp_8h.html">lwip/tcp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="mem_8h.html">lwip/mem.h</a>&quot;</code><br />
<code>#include &lt;string.h&gt;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a211215e43cb40bd204a20c34316b7caa"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp__tcp_8c.html#a211215e43cb40bd204a20c34316b7caa">altcp_tcp_alloc</a> (void *arg, u8_t ip_type)</td></tr>
<tr class="separator:a211215e43cb40bd204a20c34316b7caa"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Application layered TCP connection API (to be used from TCPIP thread)<br />
This interface mimics the tcp callback API to the application while preventing direct linking (much like virtual functions). This way, an application can make use of other application layer protocols on top of TCP without knowing the details (e.g. TLS, proxy connection).</p>
<p>This file contains the base implementation calling into tcp. </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="a211215e43cb40bd204a20c34316b7caa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a211215e43cb40bd204a20c34316b7caa">&#9670;&nbsp;</a></span>altcp_tcp_alloc()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct altcp_pcb* altcp_tcp_alloc </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>arg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8_t&#160;</td>
<td class="paramname"><em>ip_type</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>altcp_tcp allocator function fitting to <a class="el" href="group__altcp.html#ga9ddf490e24b1472a96ab2b4cedd171f8">altcp_allocator_t</a> / <a class="el" href="group__altcp.html#ga86843287b0ad0099c067817cfb7aa336">altcp_new</a>.</p>
<p>arg pointer is not used for TCP. </p>
</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="altcp__tcp_8c.html">altcp_tcp.c</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,4 @@
var altcp__tcp_8c =
[
[ "altcp_tcp_alloc", "altcp__tcp_8c.html#a211215e43cb40bd204a20c34316b7caa", null ]
];
@@ -0,0 +1,145 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/include/lwip/altcp_tcp.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('altcp__tcp_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">altcp_tcp.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp_8h.html">lwip/altcp.h</a>&quot;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a211215e43cb40bd204a20c34316b7caa"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp__tcp_8h.html#a211215e43cb40bd204a20c34316b7caa">altcp_tcp_alloc</a> (void *arg, u8_t ip_type)</td></tr>
<tr class="separator:a211215e43cb40bd204a20c34316b7caa"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Application layered TCP connection API (to be used from TCPIP thread)<br />
This interface mimics the tcp callback API to the application while preventing direct linking (much like virtual functions). This way, an application can make use of other application layer protocols on top of TCP without knowing the details (e.g. TLS, proxy connection).</p>
<p>This file contains the base implementation calling into tcp. </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="a211215e43cb40bd204a20c34316b7caa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a211215e43cb40bd204a20c34316b7caa">&#9670;&nbsp;</a></span>altcp_tcp_alloc()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct altcp_pcb* altcp_tcp_alloc </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>arg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8_t&#160;</td>
<td class="paramname"><em>ip_type</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>altcp_tcp allocator function fitting to <a class="el" href="group__altcp.html#ga9ddf490e24b1472a96ab2b4cedd171f8">altcp_allocator_t</a> / <a class="el" href="group__altcp.html#ga86843287b0ad0099c067817cfb7aa336">altcp_new</a>.</p>
<p>arg pointer is not used for TCP. </p>
</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_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li><li class="navelem"><a class="el" href="dir_4e6b3cf33a61b6caac9c8ac30c866f37.html">lwip</a></li><li class="navelem"><a class="el" href="altcp__tcp_8h.html">altcp_tcp.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,4 @@
var altcp__tcp_8h =
[
[ "altcp_tcp_alloc", "altcp__tcp_8h.html#a211215e43cb40bd204a20c34316b7caa", null ]
];
@@ -0,0 +1,126 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/include/lwip/altcp_tls.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('altcp__tls_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">altcp_tls.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp_8h.html">lwip/altcp.h</a>&quot;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga700dc0320e93cea337673e7d4295e161"><td class="memItemLeft" align="right" valign="top">struct altcp_tls_config *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp__tls.html#ga700dc0320e93cea337673e7d4295e161">altcp_tls_create_config_server_privkey_cert</a> (const u8_t *privkey, size_t privkey_len, const u8_t *privkey_pass, size_t privkey_pass_len, const u8_t *cert, size_t cert_len)</td></tr>
<tr class="separator:ga700dc0320e93cea337673e7d4295e161"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2b249447e10c8599b6d723d403086c35"><td class="memItemLeft" align="right" valign="top">struct altcp_tls_config *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp__tls.html#ga2b249447e10c8599b6d723d403086c35">altcp_tls_create_config_client</a> (const u8_t *cert, size_t cert_len)</td></tr>
<tr class="separator:ga2b249447e10c8599b6d723d403086c35"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7352a4600fee89e167541cf0776c01fb"><td class="memItemLeft" align="right" valign="top">struct altcp_tls_config *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp__tls.html#ga7352a4600fee89e167541cf0776c01fb">altcp_tls_create_config_client_2wayauth</a> (const u8_t *ca, size_t ca_len, const u8_t *privkey, size_t privkey_len, const u8_t *privkey_pass, size_t privkey_pass_len, const u8_t *cert, size_t cert_len)</td></tr>
<tr class="separator:ga7352a4600fee89e167541cf0776c01fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8fb8a92fa3f84170050ddab2888b9145"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp__tls.html#ga8fb8a92fa3f84170050ddab2888b9145">altcp_tls_free_config</a> (struct altcp_tls_config *conf)</td></tr>
<tr class="separator:ga8fb8a92fa3f84170050ddab2888b9145"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab874adb7f87984c0520bd032c2108c47"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp__tls.html#gab874adb7f87984c0520bd032c2108c47">altcp_tls_wrap</a> (struct altcp_tls_config *config, struct altcp_pcb *inner_pcb)</td></tr>
<tr class="separator:gab874adb7f87984c0520bd032c2108c47"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga028316a8257cf8dcace9cd063de79c0a"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp__tls.html#ga028316a8257cf8dcace9cd063de79c0a">altcp_tls_new</a> (struct altcp_tls_config *config, u8_t ip_type)</td></tr>
<tr class="separator:ga028316a8257cf8dcace9cd063de79c0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga09e6ca8f144ee94ef21d7e5760aa4391"><td class="memItemLeft" align="right" valign="top">struct altcp_pcb *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp__tls.html#ga09e6ca8f144ee94ef21d7e5760aa4391">altcp_tls_alloc</a> (void *arg, u8_t ip_type)</td></tr>
<tr class="separator:ga09e6ca8f144ee94ef21d7e5760aa4391"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabc1741530d5089c3093889416430bc76"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__altcp__tls.html#gabc1741530d5089c3093889416430bc76">altcp_tls_context</a> (struct altcp_pcb *conn)</td></tr>
<tr class="separator:gabc1741530d5089c3093889416430bc76"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Application layered TCP/TLS connection API (to be used from TCPIP thread) </p>
</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_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li><li class="navelem"><a class="el" href="dir_4e6b3cf33a61b6caac9c8ac30c866f37.html">lwip</a></li><li class="navelem"><a class="el" href="altcp__tls_8h.html">altcp_tls.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,11 @@
var altcp__tls_8h =
[
[ "altcp_tls_alloc", "group__altcp__tls.html#ga09e6ca8f144ee94ef21d7e5760aa4391", null ],
[ "altcp_tls_context", "group__altcp__tls.html#gabc1741530d5089c3093889416430bc76", null ],
[ "altcp_tls_create_config_client", "group__altcp__tls.html#ga2b249447e10c8599b6d723d403086c35", null ],
[ "altcp_tls_create_config_client_2wayauth", "group__altcp__tls.html#ga7352a4600fee89e167541cf0776c01fb", null ],
[ "altcp_tls_create_config_server_privkey_cert", "group__altcp__tls.html#ga700dc0320e93cea337673e7d4295e161", null ],
[ "altcp_tls_free_config", "group__altcp__tls.html#ga8fb8a92fa3f84170050ddab2888b9145", null ],
[ "altcp_tls_new", "group__altcp__tls.html#ga028316a8257cf8dcace9cd063de79c0a", null ],
[ "altcp_tls_wrap", "group__altcp__tls.html#gab874adb7f87984c0520bd032c2108c47", null ]
];
@@ -0,0 +1,105 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/apps/altcp_tls/altcp_tls_mbedtls.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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('altcp__tls__mbedtls_8c.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">altcp_tls_mbedtls.c File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp__tls__mbedtls__opts_8h.html">lwip/apps/altcp_tls_mbedtls_opts.h</a>&quot;</code><br />
</div><a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Application layered TCP/TLS connection API (to be used from TCPIP thread)</p>
<p>This file provides a TLS layer using mbedTLS </p>
</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_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li><li class="navelem"><a class="el" href="dir_1cb496c74bbaf54ecc99133e1c434e0c.html">altcp_tls</a></li><li class="navelem"><a class="el" href="altcp__tls__mbedtls_8c.html">altcp_tls_mbedtls.c</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,106 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/apps/altcp_tls/altcp_tls_mbedtls_mem.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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('altcp__tls__mbedtls__mem_8c.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">altcp_tls_mbedtls_mem.c File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp__tls__mbedtls__opts_8h.html">lwip/apps/altcp_tls_mbedtls_opts.h</a>&quot;</code><br />
</div><a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Application layered TCP connection API (to be used from TCPIP thread)</p>
<p>This file contains memory management functions for a TLS layer using mbedTLS.</p>
<p>ATTENTION: For production usage, you might want to override this file with your own implementation since this implementation simply uses the lwIP heap without caring for fragmentation or leaving heap for other parts of lwIP! </p>
</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_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li><li class="navelem"><a class="el" href="dir_1cb496c74bbaf54ecc99133e1c434e0c.html">altcp_tls</a></li><li class="navelem"><a class="el" href="altcp__tls__mbedtls__mem_8c.html">altcp_tls_mbedtls_mem.c</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,109 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/apps/altcp_tls/altcp_tls_mbedtls_mem.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('altcp__tls__mbedtls__mem_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">altcp_tls_mbedtls_mem.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp__tls__mbedtls__opts_8h.html">lwip/apps/altcp_tls_mbedtls_opts.h</a>&quot;</code><br />
</div><a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Application layered TCP/TLS connection API (to be used from TCPIP thread)</p>
<p>This file contains memory management function prototypes for a TLS layer using mbedTLS.</p>
<p>Memory management contains:</p><ul>
<li>allocating/freeing altcp_mbedtls_state_t</li>
<li>allocating/freeing memory used in the mbedTLS library </li>
</ul>
</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_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li><li class="navelem"><a class="el" href="dir_1cb496c74bbaf54ecc99133e1c434e0c.html">altcp_tls</a></li><li class="navelem"><a class="el" href="altcp__tls__mbedtls__mem_8h.html">altcp_tls_mbedtls_mem.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,162 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/include/lwip/apps/altcp_tls_mbedtls_opts.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('altcp__tls__mbedtls__opts_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#define-members">Macros</a> </div>
<div class="headertitle">
<div class="title">altcp_tls_mbedtls_opts.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ac8dbfe10a4a9a64c1e2c62ea97e48639"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp__tls__mbedtls__opts_8h.html#ac8dbfe10a4a9a64c1e2c62ea97e48639">LWIP_ALTCP_TLS_MBEDTLS</a>&#160;&#160;&#160;0</td></tr>
<tr class="separator:ac8dbfe10a4a9a64c1e2c62ea97e48639"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7727456eeb0b3311213936413d238989"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp__tls__mbedtls__opts_8h.html#a7727456eeb0b3311213936413d238989">ALTCP_MBEDTLS_DEBUG</a>&#160;&#160;&#160;<a class="el" href="group__debugging__levels.html#gadab1cdc3f45939a3a5c9a3d7e04987e1">LWIP_DBG_OFF</a></td></tr>
<tr class="separator:a7727456eeb0b3311213936413d238989"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6acb28346f87b2310fc00ec1fccba2b6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="altcp__tls__mbedtls__opts_8h.html#a6acb28346f87b2310fc00ec1fccba2b6">ALTCP_MBEDTLS_SESSION_CACHE_TIMEOUT_SECONDS</a>&#160;&#160;&#160;0</td></tr>
<tr class="separator:a6acb28346f87b2310fc00ec1fccba2b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Application layered TCP/TLS connection API (to be used from TCPIP thread)</p>
<p>This file contains options for an mbedtls port of the TLS layer. </p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a id="a7727456eeb0b3311213936413d238989"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7727456eeb0b3311213936413d238989">&#9670;&nbsp;</a></span>ALTCP_MBEDTLS_DEBUG</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define ALTCP_MBEDTLS_DEBUG&#160;&#160;&#160;<a class="el" href="group__debugging__levels.html#gadab1cdc3f45939a3a5c9a3d7e04987e1">LWIP_DBG_OFF</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Configure debug level of this file </p>
</div>
</div>
<a id="a6acb28346f87b2310fc00ec1fccba2b6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6acb28346f87b2310fc00ec1fccba2b6">&#9670;&nbsp;</a></span>ALTCP_MBEDTLS_SESSION_CACHE_TIMEOUT_SECONDS</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define ALTCP_MBEDTLS_SESSION_CACHE_TIMEOUT_SECONDS&#160;&#160;&#160;0</td>
</tr>
</table>
</div><div class="memdoc">
<p>Set a session timeout in seconds for the basic session cache ATTENTION: Using a session cache can lower security by reusing keys! </p>
</div>
</div>
<a id="ac8dbfe10a4a9a64c1e2c62ea97e48639"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac8dbfe10a4a9a64c1e2c62ea97e48639">&#9670;&nbsp;</a></span>LWIP_ALTCP_TLS_MBEDTLS</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LWIP_ALTCP_TLS_MBEDTLS&#160;&#160;&#160;0</td>
</tr>
</table>
</div><div class="memdoc">
<p>LWIP_ALTCP_TLS_MBEDTLS==1: use mbedTLS for TLS support for altcp API mbedtls include directory must be reachable via include search path </p>
</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_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li><li class="navelem"><a class="el" href="dir_4e6b3cf33a61b6caac9c8ac30c866f37.html">lwip</a></li><li class="navelem"><a class="el" href="dir_f9284811ac594eafdc3134d5f8b945cb.html">apps</a></li><li class="navelem"><a class="el" href="altcp__tls__mbedtls__opts_8h.html">altcp_tls_mbedtls_opts.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,6 @@
var altcp__tls__mbedtls__opts_8h =
[
[ "ALTCP_MBEDTLS_DEBUG", "altcp__tls__mbedtls__opts_8h.html#a7727456eeb0b3311213936413d238989", null ],
[ "ALTCP_MBEDTLS_SESSION_CACHE_TIMEOUT_SECONDS", "altcp__tls__mbedtls__opts_8h.html#a6acb28346f87b2310fc00ec1fccba2b6", null ],
[ "LWIP_ALTCP_TLS_MBEDTLS", "altcp__tls__mbedtls__opts_8h.html#ac8dbfe10a4a9a64c1e2c62ea97e48639", null ]
];
@@ -0,0 +1,105 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/apps/altcp_tls/altcp_tls_mbedtls_structs.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('altcp__tls__mbedtls__structs_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">altcp_tls_mbedtls_structs.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="altcp__tls__mbedtls__opts_8h.html">lwip/apps/altcp_tls_mbedtls_opts.h</a>&quot;</code><br />
</div><a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Application layered TCP/TLS connection API (to be used from TCPIP thread)</p>
<p>This file contains structure definitions for a TLS layer using mbedTLS. </p>
</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_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li><li class="navelem"><a class="el" href="dir_1cb496c74bbaf54ecc99133e1c434e0c.html">altcp_tls</a></li><li class="navelem"><a class="el" href="altcp__tls__mbedtls__structs_8h.html">altcp_tls_mbedtls_structs.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,228 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: Data Structures</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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('annotated.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Data Structures</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct__lwiperf__settings.html" target="_self">_lwiperf_settings</a></td><td class="desc"></td></tr>
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct__lwiperf__state__tcp.html" target="_self">_lwiperf_state_tcp</a></td><td class="desc"></td></tr>
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structaltcp__allocator__s.html" target="_self">altcp_allocator_s</a></td><td class="desc"></td></tr>
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structapi__msg.html" target="_self">api_msg</a></td><td class="desc"></td></tr>
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structautoip.html" target="_self">autoip</a></td><td class="desc"></td></tr>
<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structbridgeif__initdata__s.html" target="_self">bridgeif_initdata_s</a></td><td class="desc"></td></tr>
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structdhcp6__msg.html" target="_self">dhcp6_msg</a></td><td class="desc"></td></tr>
<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structdhcp__msg.html" target="_self">dhcp_msg</a></td><td class="desc"></td></tr>
<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structdns__answer.html" target="_self">dns_answer</a></td><td class="desc"></td></tr>
<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structdns__api__msg.html" target="_self">dns_api_msg</a></td><td class="desc"></td></tr>
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structdns__hdr.html" target="_self">dns_hdr</a></td><td class="desc"></td></tr>
<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structdns__query.html" target="_self">dns_query</a></td><td class="desc"></td></tr>
<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structdns__req__entry.html" target="_self">dns_req_entry</a></td><td class="desc"></td></tr>
<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structdns__table__entry.html" target="_self">dns_table_entry</a></td><td class="desc"></td></tr>
<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structeth__addr.html" target="_self">eth_addr</a></td><td class="desc"></td></tr>
<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structeth__hdr.html" target="_self">eth_hdr</a></td><td class="desc"></td></tr>
<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structeth__vlan__hdr.html" target="_self">eth_vlan_hdr</a></td><td class="desc"></td></tr>
<tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structetharp__hdr.html" target="_self">etharp_hdr</a></td><td class="desc"></td></tr>
<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structetharp__q__entry.html" target="_self">etharp_q_entry</a></td><td class="desc"></td></tr>
<tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structgethostbyname__r__helper.html" target="_self">gethostbyname_r_helper</a></td><td class="desc"></td></tr>
<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structicmp6__echo__hdr.html" target="_self">icmp6_echo_hdr</a></td><td class="desc"></td></tr>
<tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structicmp6__hdr.html" target="_self">icmp6_hdr</a></td><td class="desc"></td></tr>
<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structicmp__echo__hdr.html" target="_self">icmp_echo_hdr</a></td><td class="desc"></td></tr>
<tr id="row_23_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structieee__802154__hdr.html" target="_self">ieee_802154_hdr</a></td><td class="desc"></td></tr>
<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structigmp__group.html" target="_self">igmp_group</a></td><td class="desc"></td></tr>
<tr id="row_25_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structigmp__msg.html" target="_self">igmp_msg</a></td><td class="desc"></td></tr>
<tr id="row_26_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structip4__addr.html" target="_self">ip4_addr</a></td><td class="desc"></td></tr>
<tr id="row_27_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structip4__addr__packed.html" target="_self">ip4_addr_packed</a></td><td class="desc"></td></tr>
<tr id="row_28_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structip4__addr__wordaligned.html" target="_self">ip4_addr_wordaligned</a></td><td class="desc"></td></tr>
<tr id="row_29_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structip6__addr.html" target="_self">ip6_addr</a></td><td class="desc"></td></tr>
<tr id="row_30_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structip6__addr__packed.html" target="_self">ip6_addr_packed</a></td><td class="desc"></td></tr>
<tr id="row_31_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structip6__hdr.html" target="_self">ip6_hdr</a></td><td class="desc"></td></tr>
<tr id="row_32_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structip6__reass__helper.html" target="_self">ip6_reass_helper</a></td><td class="desc"></td></tr>
<tr id="row_33_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structip6__reassdata.html" target="_self">ip6_reassdata</a></td><td class="desc"></td></tr>
<tr id="row_34_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structip__addr.html" target="_self">ip_addr</a></td><td class="desc"></td></tr>
<tr id="row_35_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structip__globals.html" target="_self">ip_globals</a></td><td class="desc"></td></tr>
<tr id="row_36_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structip__reass__helper.html" target="_self">ip_reass_helper</a></td><td class="desc"></td></tr>
<tr id="row_37_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structip__reassdata.html" target="_self">ip_reassdata</a></td><td class="desc"></td></tr>
<tr id="row_38_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlowpan6__ieee802154__data.html" target="_self">lowpan6_ieee802154_data</a></td><td class="desc"></td></tr>
<tr id="row_39_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlowpan6__link__addr.html" target="_self">lowpan6_link_addr</a></td><td class="desc"></td></tr>
<tr id="row_40_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlowpan6__reass__helper.html" target="_self">lowpan6_reass_helper</a></td><td class="desc"></td></tr>
<tr id="row_41_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlwip__cyclic__timer.html" target="_self">lwip_cyclic_timer</a></td><td class="desc"></td></tr>
<tr id="row_42_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlwip__select__cb.html" target="_self">lwip_select_cb</a></td><td class="desc"></td></tr>
<tr id="row_43_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlwip__sock.html" target="_self">lwip_sock</a></td><td class="desc"></td></tr>
<tr id="row_44_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmdns__host.html" target="_self">mdns_host</a></td><td class="desc"></td></tr>
<tr id="row_45_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmdns__outpacket.html" target="_self">mdns_outpacket</a></td><td class="desc"></td></tr>
<tr id="row_46_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmdns__packet.html" target="_self">mdns_packet</a></td><td class="desc"></td></tr>
<tr id="row_47_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmdns__rr__info.html" target="_self">mdns_rr_info</a></td><td class="desc"></td></tr>
<tr id="row_48_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmdns__service.html" target="_self">mdns_service</a></td><td class="desc"></td></tr>
<tr id="row_49_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmem.html" target="_self">mem</a></td><td class="desc"></td></tr>
<tr id="row_50_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmemp__desc.html" target="_self">memp_desc</a></td><td class="desc"></td></tr>
<tr id="row_51_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmld__group.html" target="_self">mld_group</a></td><td class="desc"></td></tr>
<tr id="row_52_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmld__header.html" target="_self">mld_header</a></td><td class="desc"></td></tr>
<tr id="row_53_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmqtt__client__s.html" target="_self">mqtt_client_s</a></td><td class="desc"></td></tr>
<tr id="row_54_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmqtt__connect__client__info__t.html" target="_self">mqtt_connect_client_info_t</a></td><td class="desc"></td></tr>
<tr id="row_55_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmqtt__request__t.html" target="_self">mqtt_request_t</a></td><td class="desc"></td></tr>
<tr id="row_56_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmqtt__ringbuf__t.html" target="_self">mqtt_ringbuf_t</a></td><td class="desc"></td></tr>
<tr id="row_57_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structna__header.html" target="_self">na_header</a></td><td class="desc"></td></tr>
<tr id="row_58_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structnd6__neighbor__cache__entry.html" target="_self">nd6_neighbor_cache_entry</a></td><td class="desc"></td></tr>
<tr id="row_59_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structnd6__q__entry.html" target="_self">nd6_q_entry</a></td><td class="desc"></td></tr>
<tr id="row_60_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structnetbios__answer.html" target="_self">netbios_answer</a></td><td class="desc"></td></tr>
<tr id="row_61_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structnetbios__hdr.html" target="_self">netbios_hdr</a></td><td class="desc"></td></tr>
<tr id="row_62_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structnetbios__name__hdr.html" target="_self">netbios_name_hdr</a></td><td class="desc"></td></tr>
<tr id="row_63_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structnetbios__question__hdr.html" target="_self">netbios_question_hdr</a></td><td class="desc"></td></tr>
<tr id="row_64_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structnetbios__resp.html" target="_self">netbios_resp</a></td><td class="desc"></td></tr>
<tr id="row_65_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structnetbuf.html" target="_self">netbuf</a></td><td class="desc"></td></tr>
<tr id="row_66_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structnetconn.html" target="_self">netconn</a></td><td class="desc"></td></tr>
<tr id="row_67_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structnetif.html" target="_self">netif</a></td><td class="desc"></td></tr>
<tr id="row_68_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_68_" class="arrow" onclick="toggleFolder('68_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="unionnetif__ext__callback__args__t.html" target="_self">netif_ext_callback_args_t</a></td><td class="desc"></td></tr>
<tr id="row_68_0_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structnetif__ext__callback__args__t_1_1ipv4__changed__s.html" target="_self">ipv4_changed_s</a></td><td class="desc"></td></tr>
<tr id="row_68_1_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structnetif__ext__callback__args__t_1_1ipv6__addr__state__changed__s.html" target="_self">ipv6_addr_state_changed_s</a></td><td class="desc"></td></tr>
<tr id="row_68_2_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structnetif__ext__callback__args__t_1_1ipv6__set__s.html" target="_self">ipv6_set_s</a></td><td class="desc"></td></tr>
<tr id="row_68_3_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structnetif__ext__callback__args__t_1_1link__changed__s.html" target="_self">link_changed_s</a></td><td class="desc"></td></tr>
<tr id="row_68_4_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structnetif__ext__callback__args__t_1_1status__changed__s.html" target="_self">status_changed_s</a></td><td class="desc"></td></tr>
<tr id="row_69_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structnetvector.html" target="_self">netvector</a></td><td class="desc"></td></tr>
<tr id="row_70_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structns__header.html" target="_self">ns_header</a></td><td class="desc"></td></tr>
<tr id="row_71_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpbuf.html" target="_self">pbuf</a></td><td class="desc"></td></tr>
<tr id="row_72_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpbuf__custom.html" target="_self">pbuf_custom</a></td><td class="desc"></td></tr>
<tr id="row_73_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpbuf__custom__ref.html" target="_self">pbuf_custom_ref</a></td><td class="desc"></td></tr>
<tr id="row_74_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpbuf__rom.html" target="_self">pbuf_rom</a></td><td class="desc"></td></tr>
<tr id="row_75_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structraw__pcb.html" target="_self">raw_pcb</a></td><td class="desc"></td></tr>
<tr id="row_76_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structredirect__header.html" target="_self">redirect_header</a></td><td class="desc"></td></tr>
<tr id="row_77_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structrs__header.html" target="_self">rs_header</a></td><td class="desc"></td></tr>
<tr id="row_78_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsmtp__send__request.html" target="_self">smtp_send_request</a></td><td class="desc"></td></tr>
<tr id="row_79_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsmtp__session.html" target="_self">smtp_session</a></td><td class="desc"></td></tr>
<tr id="row_80_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__leaf__node.html" target="_self">snmp_leaf_node</a></td><td class="desc"></td></tr>
<tr id="row_81_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__mib.html" target="_self">snmp_mib</a></td><td class="desc"></td></tr>
<tr id="row_82_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__next__oid__state.html" target="_self">snmp_next_oid_state</a></td><td class="desc"></td></tr>
<tr id="row_83_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__node.html" target="_self">snmp_node</a></td><td class="desc"></td></tr>
<tr id="row_84_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__node__instance.html" target="_self">snmp_node_instance</a></td><td class="desc"></td></tr>
<tr id="row_85_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__obj__id.html" target="_self">snmp_obj_id</a></td><td class="desc"></td></tr>
<tr id="row_86_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__oid__range.html" target="_self">snmp_oid_range</a></td><td class="desc"></td></tr>
<tr id="row_87_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__scalar__array__node.html" target="_self">snmp_scalar_array_node</a></td><td class="desc"></td></tr>
<tr id="row_88_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__scalar__array__node__def.html" target="_self">snmp_scalar_array_node_def</a></td><td class="desc"></td></tr>
<tr id="row_89_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__scalar__node.html" target="_self">snmp_scalar_node</a></td><td class="desc"></td></tr>
<tr id="row_90_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__table__col__def.html" target="_self">snmp_table_col_def</a></td><td class="desc"></td></tr>
<tr id="row_91_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__table__node.html" target="_self">snmp_table_node</a></td><td class="desc"></td></tr>
<tr id="row_92_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__table__simple__node.html" target="_self">snmp_table_simple_node</a></td><td class="desc"></td></tr>
<tr id="row_93_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__threadsync__instance.html" target="_self">snmp_threadsync_instance</a></td><td class="desc"></td></tr>
<tr id="row_94_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__threadsync__node.html" target="_self">snmp_threadsync_node</a></td><td class="desc"></td></tr>
<tr id="row_95_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__tree__node.html" target="_self">snmp_tree_node</a></td><td class="desc"></td></tr>
<tr id="row_96_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__varbind.html" target="_self">snmp_varbind</a></td><td class="desc"></td></tr>
<tr id="row_97_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsnmp__varbind__len.html" target="_self">snmp_varbind_len</a></td><td class="desc"></td></tr>
<tr id="row_98_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="unionsnmp__variant__value.html" target="_self">snmp_variant_value</a></td><td class="desc"></td></tr>
<tr id="row_99_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsntp__msg.html" target="_self">sntp_msg</a></td><td class="desc"></td></tr>
<tr id="row_100_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsntp__server.html" target="_self">sntp_server</a></td><td class="desc"></td></tr>
<tr id="row_101_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsntp__time.html" target="_self">sntp_time</a></td><td class="desc"></td></tr>
<tr id="row_102_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsntp__timestamps.html" target="_self">sntp_timestamps</a></td><td class="desc"></td></tr>
<tr id="row_103_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="unionsockaddr__aligned.html" target="_self">sockaddr_aligned</a></td><td class="desc"></td></tr>
<tr id="row_104_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structstats__.html" target="_self">stats_</a></td><td class="desc"></td></tr>
<tr id="row_105_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structstats__igmp.html" target="_self">stats_igmp</a></td><td class="desc"></td></tr>
<tr id="row_106_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structstats__mem.html" target="_self">stats_mem</a></td><td class="desc"></td></tr>
<tr id="row_107_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structstats__mib2.html" target="_self">stats_mib2</a></td><td class="desc"></td></tr>
<tr id="row_108_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structstats__mib2__netif__ctrs.html" target="_self">stats_mib2_netif_ctrs</a></td><td class="desc"></td></tr>
<tr id="row_109_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structstats__proto.html" target="_self">stats_proto</a></td><td class="desc"></td></tr>
<tr id="row_110_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structstats__sys.html" target="_self">stats_sys</a></td><td class="desc"></td></tr>
<tr id="row_111_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structstats__syselem.html" target="_self">stats_syselem</a></td><td class="desc"></td></tr>
<tr id="row_112_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structt_c_g_i.html" target="_self">tCGI</a></td><td class="desc"></td></tr>
<tr id="row_113_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtcp__ext__arg__callbacks.html" target="_self">tcp_ext_arg_callbacks</a></td><td class="desc"></td></tr>
<tr id="row_114_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtcp__pcb.html" target="_self">tcp_pcb</a></td><td class="desc"></td></tr>
<tr id="row_115_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtcp__pcb__listen.html" target="_self">tcp_pcb_listen</a></td><td class="desc"></td></tr>
<tr id="row_116_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtftp__context.html" target="_self">tftp_context</a></td><td class="desc"></td></tr>
<tr id="row_117_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structthreadsync__data.html" target="_self">threadsync_data</a></td><td class="desc"></td></tr>
<tr id="row_118_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structudp__pcb.html" target="_self">udp_pcb</a></td><td class="desc"></td></tr>
<tr id="row_119_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structzepif__init.html" target="_self">zepif_init</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,123 @@
var annotated_dup =
[
[ "_lwiperf_settings", "struct__lwiperf__settings.html", null ],
[ "_lwiperf_state_tcp", "struct__lwiperf__state__tcp.html", null ],
[ "altcp_allocator_s", "structaltcp__allocator__s.html", "structaltcp__allocator__s" ],
[ "api_msg", "structapi__msg.html", "structapi__msg" ],
[ "autoip", "structautoip.html", "structautoip" ],
[ "bridgeif_initdata_s", "structbridgeif__initdata__s.html", "structbridgeif__initdata__s" ],
[ "dhcp6_msg", "structdhcp6__msg.html", null ],
[ "dhcp_msg", "structdhcp__msg.html", null ],
[ "dns_answer", "structdns__answer.html", null ],
[ "dns_api_msg", "structdns__api__msg.html", "structdns__api__msg" ],
[ "dns_hdr", "structdns__hdr.html", null ],
[ "dns_query", "structdns__query.html", null ],
[ "dns_req_entry", "structdns__req__entry.html", null ],
[ "dns_table_entry", "structdns__table__entry.html", null ],
[ "eth_addr", "structeth__addr.html", null ],
[ "eth_hdr", "structeth__hdr.html", null ],
[ "eth_vlan_hdr", "structeth__vlan__hdr.html", null ],
[ "etharp_hdr", "structetharp__hdr.html", null ],
[ "etharp_q_entry", "structetharp__q__entry.html", null ],
[ "gethostbyname_r_helper", "structgethostbyname__r__helper.html", null ],
[ "icmp6_echo_hdr", "structicmp6__echo__hdr.html", null ],
[ "icmp6_hdr", "structicmp6__hdr.html", null ],
[ "icmp_echo_hdr", "structicmp__echo__hdr.html", null ],
[ "ieee_802154_hdr", "structieee__802154__hdr.html", "structieee__802154__hdr" ],
[ "igmp_group", "structigmp__group.html", "structigmp__group" ],
[ "igmp_msg", "structigmp__msg.html", null ],
[ "ip4_addr", "structip4__addr.html", null ],
[ "ip4_addr_packed", "structip4__addr__packed.html", null ],
[ "ip4_addr_wordaligned", "structip4__addr__wordaligned.html", null ],
[ "ip6_addr", "structip6__addr.html", null ],
[ "ip6_addr_packed", "structip6__addr__packed.html", null ],
[ "ip6_hdr", "structip6__hdr.html", "structip6__hdr" ],
[ "ip6_reass_helper", "structip6__reass__helper.html", null ],
[ "ip6_reassdata", "structip6__reassdata.html", null ],
[ "ip_addr", "structip__addr.html", "structip__addr" ],
[ "ip_globals", "structip__globals.html", "structip__globals" ],
[ "ip_reass_helper", "structip__reass__helper.html", null ],
[ "ip_reassdata", "structip__reassdata.html", null ],
[ "lowpan6_ieee802154_data", "structlowpan6__ieee802154__data.html", "structlowpan6__ieee802154__data" ],
[ "lowpan6_link_addr", "structlowpan6__link__addr.html", null ],
[ "lowpan6_reass_helper", "structlowpan6__reass__helper.html", null ],
[ "lwip_cyclic_timer", "structlwip__cyclic__timer.html", null ],
[ "lwip_select_cb", "structlwip__select__cb.html", "structlwip__select__cb" ],
[ "lwip_sock", "structlwip__sock.html", "structlwip__sock" ],
[ "mdns_host", "structmdns__host.html", "structmdns__host" ],
[ "mdns_outpacket", "structmdns__outpacket.html", "structmdns__outpacket" ],
[ "mdns_packet", "structmdns__packet.html", "structmdns__packet" ],
[ "mdns_rr_info", "structmdns__rr__info.html", null ],
[ "mdns_service", "structmdns__service.html", "structmdns__service" ],
[ "mem", "structmem.html", "structmem" ],
[ "memp_desc", "structmemp__desc.html", "structmemp__desc" ],
[ "mld_group", "structmld__group.html", "structmld__group" ],
[ "mld_header", "structmld__header.html", null ],
[ "mqtt_client_s", "structmqtt__client__s.html", "structmqtt__client__s" ],
[ "mqtt_connect_client_info_t", "structmqtt__connect__client__info__t.html", "structmqtt__connect__client__info__t" ],
[ "mqtt_request_t", "structmqtt__request__t.html", "structmqtt__request__t" ],
[ "mqtt_ringbuf_t", "structmqtt__ringbuf__t.html", null ],
[ "na_header", "structna__header.html", null ],
[ "nd6_neighbor_cache_entry", "structnd6__neighbor__cache__entry.html", "structnd6__neighbor__cache__entry" ],
[ "nd6_q_entry", "structnd6__q__entry.html", null ],
[ "netbios_answer", "structnetbios__answer.html", "structnetbios__answer" ],
[ "netbios_hdr", "structnetbios__hdr.html", null ],
[ "netbios_name_hdr", "structnetbios__name__hdr.html", null ],
[ "netbios_question_hdr", "structnetbios__question__hdr.html", null ],
[ "netbios_resp", "structnetbios__resp.html", null ],
[ "netbuf", "structnetbuf.html", null ],
[ "netconn", "structnetconn.html", "structnetconn" ],
[ "netif", "structnetif.html", "structnetif" ],
[ "netif_ext_callback_args_t", "unionnetif__ext__callback__args__t.html", "unionnetif__ext__callback__args__t" ],
[ "netvector", "structnetvector.html", "structnetvector" ],
[ "ns_header", "structns__header.html", null ],
[ "pbuf", "structpbuf.html", "structpbuf" ],
[ "pbuf_custom", "structpbuf__custom.html", "structpbuf__custom" ],
[ "pbuf_custom_ref", "structpbuf__custom__ref.html", "structpbuf__custom__ref" ],
[ "pbuf_rom", "structpbuf__rom.html", "structpbuf__rom" ],
[ "raw_pcb", "structraw__pcb.html", "structraw__pcb" ],
[ "redirect_header", "structredirect__header.html", null ],
[ "rs_header", "structrs__header.html", null ],
[ "smtp_send_request", "structsmtp__send__request.html", "structsmtp__send__request" ],
[ "smtp_session", "structsmtp__session.html", "structsmtp__session" ],
[ "snmp_leaf_node", "structsnmp__leaf__node.html", "structsnmp__leaf__node" ],
[ "snmp_mib", "structsnmp__mib.html", null ],
[ "snmp_next_oid_state", "structsnmp__next__oid__state.html", null ],
[ "snmp_node", "structsnmp__node.html", "structsnmp__node" ],
[ "snmp_node_instance", "structsnmp__node__instance.html", "structsnmp__node__instance" ],
[ "snmp_obj_id", "structsnmp__obj__id.html", null ],
[ "snmp_oid_range", "structsnmp__oid__range.html", null ],
[ "snmp_scalar_array_node", "structsnmp__scalar__array__node.html", "structsnmp__scalar__array__node" ],
[ "snmp_scalar_array_node_def", "structsnmp__scalar__array__node__def.html", null ],
[ "snmp_scalar_node", "structsnmp__scalar__node.html", "structsnmp__scalar__node" ],
[ "snmp_table_col_def", "structsnmp__table__col__def.html", null ],
[ "snmp_table_node", "structsnmp__table__node.html", "structsnmp__table__node" ],
[ "snmp_table_simple_node", "structsnmp__table__simple__node.html", null ],
[ "snmp_threadsync_instance", "structsnmp__threadsync__instance.html", null ],
[ "snmp_threadsync_node", "structsnmp__threadsync__node.html", null ],
[ "snmp_tree_node", "structsnmp__tree__node.html", "structsnmp__tree__node" ],
[ "snmp_varbind", "structsnmp__varbind.html", "structsnmp__varbind" ],
[ "snmp_varbind_len", "structsnmp__varbind__len.html", null ],
[ "snmp_variant_value", "unionsnmp__variant__value.html", null ],
[ "sntp_msg", "structsntp__msg.html", null ],
[ "sntp_server", "structsntp__server.html", "structsntp__server" ],
[ "sntp_time", "structsntp__time.html", null ],
[ "sntp_timestamps", "structsntp__timestamps.html", null ],
[ "sockaddr_aligned", "unionsockaddr__aligned.html", null ],
[ "stats_", "structstats__.html", "structstats__" ],
[ "stats_igmp", "structstats__igmp.html", null ],
[ "stats_mem", "structstats__mem.html", null ],
[ "stats_mib2", "structstats__mib2.html", null ],
[ "stats_mib2_netif_ctrs", "structstats__mib2__netif__ctrs.html", "structstats__mib2__netif__ctrs" ],
[ "stats_proto", "structstats__proto.html", null ],
[ "stats_sys", "structstats__sys.html", null ],
[ "stats_syselem", "structstats__syselem.html", null ],
[ "tCGI", "structt_c_g_i.html", null ],
[ "tcp_ext_arg_callbacks", "structtcp__ext__arg__callbacks.html", "structtcp__ext__arg__callbacks" ],
[ "tcp_pcb", "structtcp__pcb.html", "structtcp__pcb" ],
[ "tcp_pcb_listen", "structtcp__pcb__listen.html", "structtcp__pcb__listen" ],
[ "tftp_context", "structtftp__context.html", "structtftp__context" ],
[ "threadsync_data", "structthreadsync__data.html", null ],
[ "udp_pcb", "structudp__pcb.html", "structudp__pcb" ],
[ "zepif_init", "structzepif__init.html", "structzepif__init" ]
];
@@ -0,0 +1,861 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/include/lwip/api.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('api_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">api.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="arch_8h.html">lwip/arch.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="netbuf_8h.html">lwip/netbuf.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="sys_8h.html">lwip/sys.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="ip__addr_8h.html">lwip/ip_addr.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="err_8h.html">lwip/err.h</a>&quot;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structnetconn.html">netconn</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structnetvector.html">netvector</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:af77be7590d3712259e78103c1dddf63f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#af77be7590d3712259e78103c1dddf63f">NETCONN_FLAG_MBOXCLOSED</a>&#160;&#160;&#160;0x01</td></tr>
<tr class="separator:af77be7590d3712259e78103c1dddf63f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abee57aa0ba63e35742d411bc5224900a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#abee57aa0ba63e35742d411bc5224900a">NETCONN_FLAG_NON_BLOCKING</a>&#160;&#160;&#160;0x02</td></tr>
<tr class="separator:abee57aa0ba63e35742d411bc5224900a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a70bb861ee643b60ee402fd48f581f58d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a70bb861ee643b60ee402fd48f581f58d">NETCONN_FLAG_IN_NONBLOCKING_CONNECT</a>&#160;&#160;&#160;0x04</td></tr>
<tr class="separator:a70bb861ee643b60ee402fd48f581f58d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9d791955a4256a0589a3844e4e6f0f9c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a9d791955a4256a0589a3844e4e6f0f9c">NETCONN_FLAG_CHECK_WRITESPACE</a>&#160;&#160;&#160;0x10</td></tr>
<tr class="separator:a9d791955a4256a0589a3844e4e6f0f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a60892e4eb139f10157847fea4266bf5b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a60892e4eb139f10157847fea4266bf5b">NETCONN_FLAG_IPV6_V6ONLY</a>&#160;&#160;&#160;0x20</td></tr>
<tr class="separator:a60892e4eb139f10157847fea4266bf5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a24d62a2a03ba421fcf2bdce1ea89b949"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a24d62a2a03ba421fcf2bdce1ea89b949">NETCONN_FIN_RX_PENDING</a>&#160;&#160;&#160;0x80</td></tr>
<tr class="separator:a24d62a2a03ba421fcf2bdce1ea89b949"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ce590f58be8f60dbde361920863b26d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a3ce590f58be8f60dbde361920863b26d">API_EVENT</a>(c, e, l)</td></tr>
<tr class="separator:a3ce590f58be8f60dbde361920863b26d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab2bd1d5e633e14e428cfc0ca908d5e0c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#gab2bd1d5e633e14e428cfc0ca908d5e0c">netconn_new</a>(t)&#160;&#160;&#160;<a class="el" href="api_8h.html#ad0a0434e5ff08bb350740cb840e2aca8">netconn_new_with_proto_and_callback</a>(t, 0, NULL)</td></tr>
<tr class="separator:gab2bd1d5e633e14e428cfc0ca908d5e0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a62cd17ad03bb2817cb0c419e1c9790b1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a62cd17ad03bb2817cb0c419e1c9790b1">netconn_type</a>(conn)&#160;&#160;&#160;(conn-&gt;type)</td></tr>
<tr class="separator:a62cd17ad03bb2817cb0c419e1c9790b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1065e769f2276270722a7700182077bc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#ga1065e769f2276270722a7700182077bc">netconn_peer</a>(c, i, p)&#160;&#160;&#160;<a class="el" href="api_8h.html#a28430d1d86733f1bf98dc31305c42104">netconn_getaddr</a>(c,i,p,0)</td></tr>
<tr class="separator:ga1065e769f2276270722a7700182077bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga37ec33522cfc26fa57251c33e4cebb3e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#ga37ec33522cfc26fa57251c33e4cebb3e">netconn_addr</a>(c, i, p)&#160;&#160;&#160;<a class="el" href="api_8h.html#a28430d1d86733f1bf98dc31305c42104">netconn_getaddr</a>(c,i,p,1)</td></tr>
<tr class="separator:ga37ec33522cfc26fa57251c33e4cebb3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga43e3f4c2169dec0f666c502e490416b7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__tcp.html#ga43e3f4c2169dec0f666c502e490416b7">netconn_listen</a>(conn)&#160;&#160;&#160;<a class="el" href="group__netconn__tcp.html#ga84333ba8e7cdf45558d2b4795f53265d">netconn_listen_with_backlog</a>(conn, <a class="el" href="group__lwip__opts__tcp.html#ga93cce3f47e33df11248c908d1775bacf">TCP_DEFAULT_LISTEN_BACKLOG</a>)</td></tr>
<tr class="separator:ga43e3f4c2169dec0f666c502e490416b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gafea5e9b90770a7c6cd0762ceb65e5b46"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__tcp.html#gafea5e9b90770a7c6cd0762ceb65e5b46">netconn_write</a>(conn, dataptr, size, apiflags)&#160;&#160;&#160;<a class="el" href="group__netconn__tcp.html#gacf9ce6f71652739d6be2ca83f7c423bf">netconn_write_partly</a>(conn, dataptr, size, apiflags, NULL)</td></tr>
<tr class="separator:gafea5e9b90770a7c6cd0762ceb65e5b46"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6a578dd5b55e4457e0d23574ec9c55bb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a6a578dd5b55e4457e0d23574ec9c55bb">netconn_set_nonblocking</a>(conn, val)</td></tr>
<tr class="separator:a6a578dd5b55e4457e0d23574ec9c55bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5789f0030b895b40625a74deb5a1092f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a5789f0030b895b40625a74deb5a1092f">netconn_is_nonblocking</a>(conn)&#160;&#160;&#160;(((conn)-&gt;flags &amp; <a class="el" href="api_8h.html#abee57aa0ba63e35742d411bc5224900a">NETCONN_FLAG_NON_BLOCKING</a>) != 0)</td></tr>
<tr class="separator:a5789f0030b895b40625a74deb5a1092f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae56911e2d92bebf43d73e116530e41f1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#gae56911e2d92bebf43d73e116530e41f1">netconn_set_ipv6only</a>(conn, val)</td></tr>
<tr class="separator:gae56911e2d92bebf43d73e116530e41f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf001c7d5fbf97c04eb1d9ac7d14c9c31"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#gaf001c7d5fbf97c04eb1d9ac7d14c9c31">netconn_get_ipv6only</a>(conn)&#160;&#160;&#160;(((conn)-&gt;flags &amp; <a class="el" href="api_8h.html#a60892e4eb139f10157847fea4266bf5b">NETCONN_FLAG_IPV6_V6ONLY</a>) != 0)</td></tr>
<tr class="separator:gaf001c7d5fbf97c04eb1d9ac7d14c9c31"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ce3ad9f660e99b11fec20cafaf8f016"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a3ce3ad9f660e99b11fec20cafaf8f016">netconn_set_sendtimeout</a>(conn, timeout)&#160;&#160;&#160;((conn)-&gt;send_timeout = (timeout))</td></tr>
<tr class="separator:a3ce3ad9f660e99b11fec20cafaf8f016"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7d6e84458eec796b0b0ce1bb247f323f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a7d6e84458eec796b0b0ce1bb247f323f">netconn_get_sendtimeout</a>(conn)&#160;&#160;&#160;((conn)-&gt;send_timeout)</td></tr>
<tr class="separator:a7d6e84458eec796b0b0ce1bb247f323f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a04785274634a5b504c760731c2e70725"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a04785274634a5b504c760731c2e70725">netconn_set_recvbufsize</a>(conn, recvbufsize)&#160;&#160;&#160;((conn)-&gt;recv_bufsize = (recvbufsize))</td></tr>
<tr class="separator:a04785274634a5b504c760731c2e70725"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac0298c287dc3823047c378c014ff1eb0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#ac0298c287dc3823047c378c014ff1eb0">netconn_get_recvbufsize</a>(conn)&#160;&#160;&#160;((conn)-&gt;recv_bufsize)</td></tr>
<tr class="separator:ac0298c287dc3823047c378c014ff1eb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:a3e130339f00202b3ab714af502163a2d"><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a3e130339f00202b3ab714af502163a2d">netconn_callback</a>) (struct <a class="el" href="structnetconn.html">netconn</a> *, enum <a class="el" href="api_8h.html#af722260882d14c49afb765293ffb0155">netconn_evt</a>, u16_t len)</td></tr>
<tr class="separator:a3e130339f00202b3ab714af502163a2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:gaaba260d28d105fb4bce9185fd0300d91"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#gaaba260d28d105fb4bce9185fd0300d91">netconn_type</a> { , <br />
&#160;&#160;<a class="el" href="group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91a75d14318b91af7a452230189f47e5e1a">NETCONN_TCP</a> = 0x10,
<a class="el" href="group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91ae7efa7c4e50b7b381531a2136cd5a013">NETCONN_TCP_IPV6</a> = NETCONN_TCP | 0x08,
<a class="el" href="group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91a6b8ec191d69f7e639f4ab40779069636">NETCONN_UDP</a> = 0x20,
<a class="el" href="group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91a655e1625cc7e6a93f1e3d2646f56a1e4">NETCONN_UDPLITE</a> = 0x21,
<br />
&#160;&#160;<a class="el" href="group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91a7e0c3f566b3d4321b36b711b6b1ad6de">NETCONN_UDPNOCHKSUM</a> = 0x22,
<a class="el" href="group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91a34ee1c89f6705462590a4fe2c9772d9e">NETCONN_UDP_IPV6</a> = NETCONN_UDP | 0x08,
<a class="el" href="group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91aa9cabc9d90606b5c5939fcc02ac588c7">NETCONN_UDPLITE_IPV6</a> = NETCONN_UDPLITE | 0x08,
<a class="el" href="group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91a2c7f548d26f6c411f084b6c59247b60e">NETCONN_UDPNOCHKSUM_IPV6</a> = NETCONN_UDPNOCHKSUM | 0x08,
<br />
&#160;&#160;<a class="el" href="group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91a0d828a7e9c1614d4cae56602b09f39e9">NETCONN_RAW</a> = 0x40
<br />
}</td></tr>
<tr class="separator:gaaba260d28d105fb4bce9185fd0300d91"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2c6c9c1869f443c5ec7b31180a44fada"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a2c6c9c1869f443c5ec7b31180a44fada">netconn_state</a> </td></tr>
<tr class="separator:a2c6c9c1869f443c5ec7b31180a44fada"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af722260882d14c49afb765293ffb0155"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#af722260882d14c49afb765293ffb0155">netconn_evt</a> </td></tr>
<tr class="separator:af722260882d14c49afb765293ffb0155"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5c6ded2c082de1536019b197a0a912db"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a5c6ded2c082de1536019b197a0a912db">netconn_igmp</a> </td></tr>
<tr class="separator:a5c6ded2c082de1536019b197a0a912db"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ad0a0434e5ff08bb350740cb840e2aca8"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structnetconn.html">netconn</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#ad0a0434e5ff08bb350740cb840e2aca8">netconn_new_with_proto_and_callback</a> (enum <a class="el" href="group__netconn__common.html#gaaba260d28d105fb4bce9185fd0300d91">netconn_type</a> t, u8_t proto, <a class="el" href="api_8h.html#a3e130339f00202b3ab714af502163a2d">netconn_callback</a> callback)</td></tr>
<tr class="separator:ad0a0434e5ff08bb350740cb840e2aca8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad5c079af0ad791a92fe9dade375744f0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#gad5c079af0ad791a92fe9dade375744f0">netconn_prepare_delete</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn)</td></tr>
<tr class="separator:gad5c079af0ad791a92fe9dade375744f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab411221f912a6d9e4c82ac3963989403"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#gab411221f912a6d9e4c82ac3963989403">netconn_delete</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn)</td></tr>
<tr class="separator:gab411221f912a6d9e4c82ac3963989403"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a28430d1d86733f1bf98dc31305c42104"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a28430d1d86733f1bf98dc31305c42104">netconn_getaddr</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *addr, u16_t *port, u8_t local)</td></tr>
<tr class="separator:a28430d1d86733f1bf98dc31305c42104"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga63bcc4d7bd150674fa953a1253fa6230"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#ga63bcc4d7bd150674fa953a1253fa6230">netconn_bind</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *addr, u16_t port)</td></tr>
<tr class="separator:ga63bcc4d7bd150674fa953a1253fa6230"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa78479deeedcecd3bacade387ac40cc5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#gaa78479deeedcecd3bacade387ac40cc5">netconn_bind_if</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, u8_t if_idx)</td></tr>
<tr class="separator:gaa78479deeedcecd3bacade387ac40cc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacba7f74d973872ad0b88b9a96098cf77"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#gacba7f74d973872ad0b88b9a96098cf77">netconn_connect</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *addr, u16_t port)</td></tr>
<tr class="separator:gacba7f74d973872ad0b88b9a96098cf77"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga90bb4c4d1af6602a655b78fce0520402"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__udp.html#ga90bb4c4d1af6602a655b78fce0520402">netconn_disconnect</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn)</td></tr>
<tr class="separator:ga90bb4c4d1af6602a655b78fce0520402"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga84333ba8e7cdf45558d2b4795f53265d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__tcp.html#ga84333ba8e7cdf45558d2b4795f53265d">netconn_listen_with_backlog</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, u8_t backlog)</td></tr>
<tr class="separator:ga84333ba8e7cdf45558d2b4795f53265d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga13593148f60f7bbc6a505b567f175d69"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__tcp.html#ga13593148f60f7bbc6a505b567f175d69">netconn_accept</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structnetconn.html">netconn</a> **new_conn)</td></tr>
<tr class="separator:ga13593148f60f7bbc6a505b567f175d69"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga50490bab058f4e740798beffcf48cabf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#ga50490bab058f4e740798beffcf48cabf">netconn_recv</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structnetbuf.html">netbuf</a> **new_buf)</td></tr>
<tr class="separator:ga50490bab058f4e740798beffcf48cabf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a805a90b546c5a149f04782351633979b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a805a90b546c5a149f04782351633979b">netconn_recv_udp_raw_netbuf</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structnetbuf.html">netbuf</a> **new_buf)</td></tr>
<tr class="separator:a805a90b546c5a149f04782351633979b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a505c3b8e400babf9681e09c945b7f421"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a505c3b8e400babf9681e09c945b7f421">netconn_recv_udp_raw_netbuf_flags</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structnetbuf.html">netbuf</a> **new_buf, u8_t apiflags)</td></tr>
<tr class="separator:a505c3b8e400babf9681e09c945b7f421"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6893cb7648733d1f05696bac94e10490"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__tcp.html#ga6893cb7648733d1f05696bac94e10490">netconn_recv_tcp_pbuf</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structpbuf.html">pbuf</a> **new_buf)</td></tr>
<tr class="separator:ga6893cb7648733d1f05696bac94e10490"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabb8a242c445ef928c23258a2b2344294"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__tcp.html#gabb8a242c445ef928c23258a2b2344294">netconn_recv_tcp_pbuf_flags</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structpbuf.html">pbuf</a> **new_buf, u8_t apiflags)</td></tr>
<tr class="separator:gabb8a242c445ef928c23258a2b2344294"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8e1d852119bda1e1b602c2995282ef0c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__udp.html#ga8e1d852119bda1e1b602c2995282ef0c">netconn_sendto</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structnetbuf.html">netbuf</a> *buf, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *addr, u16_t port)</td></tr>
<tr class="separator:ga8e1d852119bda1e1b602c2995282ef0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac4d4d10153d47c80a783c34b27c66238"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__udp.html#gac4d4d10153d47c80a783c34b27c66238">netconn_send</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structnetbuf.html">netbuf</a> *buf)</td></tr>
<tr class="separator:gac4d4d10153d47c80a783c34b27c66238"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacf9ce6f71652739d6be2ca83f7c423bf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__tcp.html#gacf9ce6f71652739d6be2ca83f7c423bf">netconn_write_partly</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, const void *dataptr, size_t size, u8_t apiflags, size_t *bytes_written)</td></tr>
<tr class="separator:gacf9ce6f71652739d6be2ca83f7c423bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a992b4fe8a855fd94861738f7260d0a32"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api_8h.html#a992b4fe8a855fd94861738f7260d0a32">netconn_write_vectors_partly</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structnetvector.html">netvector</a> *vectors, u16_t vectorcnt, u8_t apiflags, size_t *bytes_written)</td></tr>
<tr class="separator:a992b4fe8a855fd94861738f7260d0a32"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga25bb1c1c9928f91f53149a026e2e2624"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__tcp.html#ga25bb1c1c9928f91f53149a026e2e2624">netconn_close</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn)</td></tr>
<tr class="separator:ga25bb1c1c9928f91f53149a026e2e2624"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6ec6b2cf7b0f59e9371e38ae7dea2a63"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__tcp.html#ga6ec6b2cf7b0f59e9371e38ae7dea2a63">netconn_shutdown</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, u8_t shut_rx, u8_t shut_tx)</td></tr>
<tr class="separator:ga6ec6b2cf7b0f59e9371e38ae7dea2a63"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaaaf2f92eeb38dca70b3e6ad98c3c45ed"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__udp.html#gaaaf2f92eeb38dca70b3e6ad98c3c45ed">netconn_join_leave_group</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *multiaddr, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *netif_addr, enum <a class="el" href="api_8h.html#a5c6ded2c082de1536019b197a0a912db">netconn_igmp</a> join_or_leave)</td></tr>
<tr class="separator:gaaaf2f92eeb38dca70b3e6ad98c3c45ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5db2a1cf06a5fbb36f433e637da8729b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__udp.html#ga5db2a1cf06a5fbb36f433e637da8729b">netconn_join_leave_group_netif</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *multiaddr, u8_t if_idx, enum <a class="el" href="api_8h.html#a5c6ded2c082de1536019b197a0a912db">netconn_igmp</a> join_or_leave)</td></tr>
<tr class="separator:ga5db2a1cf06a5fbb36f433e637da8729b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gafb3494b149dff96ed8d1acb770ab52f5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#gafb3494b149dff96ed8d1acb770ab52f5">netconn_gethostbyname_addrtype</a> (const char *name, <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *addr, u8_t dns_addrtype)</td></tr>
<tr class="separator:gafb3494b149dff96ed8d1acb770ab52f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab9eccae90351eb6c3d2ca690068445d4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#gab9eccae90351eb6c3d2ca690068445d4">netconn_err</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn)</td></tr>
<tr class="separator:gab9eccae90351eb6c3d2ca690068445d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>netconn API (to be used from non-TCPIP threads) </p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a id="a3ce590f58be8f60dbde361920863b26d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ce590f58be8f60dbde361920863b26d">&#9670;&nbsp;</a></span>API_EVENT</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define API_EVENT</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">c, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">e, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">l&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span> (c-&gt;callback) { \</div><div class="line"> (*c-&gt;callback)(c, e, l); \</div><div class="line"> }</div></div><!-- fragment --><p>Register an Network connection event </p>
</div>
</div>
<a id="a24d62a2a03ba421fcf2bdce1ea89b949"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a24d62a2a03ba421fcf2bdce1ea89b949">&#9670;&nbsp;</a></span>NETCONN_FIN_RX_PENDING</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define NETCONN_FIN_RX_PENDING&#160;&#160;&#160;0x80</td>
</tr>
</table>
</div><div class="memdoc">
<p>A FIN has been received but not passed to the application yet </p>
</div>
</div>
<a id="a9d791955a4256a0589a3844e4e6f0f9c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9d791955a4256a0589a3844e4e6f0f9c">&#9670;&nbsp;</a></span>NETCONN_FLAG_CHECK_WRITESPACE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define NETCONN_FLAG_CHECK_WRITESPACE&#160;&#160;&#160;0x10</td>
</tr>
</table>
</div><div class="memdoc">
<p>If a nonblocking write has been rejected before, poll_tcp needs to check if the netconn is writable again </p>
</div>
</div>
<a id="a70bb861ee643b60ee402fd48f581f58d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a70bb861ee643b60ee402fd48f581f58d">&#9670;&nbsp;</a></span>NETCONN_FLAG_IN_NONBLOCKING_CONNECT</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define NETCONN_FLAG_IN_NONBLOCKING_CONNECT&#160;&#160;&#160;0x04</td>
</tr>
</table>
</div><div class="memdoc">
<p>Was the last connect action a non-blocking one? </p>
</div>
</div>
<a id="a60892e4eb139f10157847fea4266bf5b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a60892e4eb139f10157847fea4266bf5b">&#9670;&nbsp;</a></span>NETCONN_FLAG_IPV6_V6ONLY</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define NETCONN_FLAG_IPV6_V6ONLY&#160;&#160;&#160;0x20</td>
</tr>
</table>
</div><div class="memdoc">
<p>If this flag is set then only IPv6 communication is allowed on the netconn. As per RFC#3493 this features defaults to OFF allowing dual-stack usage by default. </p>
</div>
</div>
<a id="af77be7590d3712259e78103c1dddf63f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af77be7590d3712259e78103c1dddf63f">&#9670;&nbsp;</a></span>NETCONN_FLAG_MBOXCLOSED</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define NETCONN_FLAG_MBOXCLOSED&#160;&#160;&#160;0x01</td>
</tr>
</table>
</div><div class="memdoc">
<p>This netconn had an error, don't block on recvmbox/acceptmbox any more </p>
</div>
</div>
<a id="abee57aa0ba63e35742d411bc5224900a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abee57aa0ba63e35742d411bc5224900a">&#9670;&nbsp;</a></span>NETCONN_FLAG_NON_BLOCKING</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define NETCONN_FLAG_NON_BLOCKING&#160;&#160;&#160;0x02</td>
</tr>
</table>
</div><div class="memdoc">
<p>Should this netconn avoid blocking? </p>
</div>
</div>
<a id="ac0298c287dc3823047c378c014ff1eb0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac0298c287dc3823047c378c014ff1eb0">&#9670;&nbsp;</a></span>netconn_get_recvbufsize</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define netconn_get_recvbufsize</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">conn</td><td>)</td>
<td>&#160;&#160;&#160;((conn)-&gt;recv_bufsize)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the receive buffer in bytes </p>
</div>
</div>
<a id="a7d6e84458eec796b0b0ce1bb247f323f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7d6e84458eec796b0b0ce1bb247f323f">&#9670;&nbsp;</a></span>netconn_get_sendtimeout</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define netconn_get_sendtimeout</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">conn</td><td>)</td>
<td>&#160;&#160;&#160;((conn)-&gt;send_timeout)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the send timeout in milliseconds </p>
</div>
</div>
<a id="a5789f0030b895b40625a74deb5a1092f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5789f0030b895b40625a74deb5a1092f">&#9670;&nbsp;</a></span>netconn_is_nonblocking</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define netconn_is_nonblocking</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">conn</td><td>)</td>
<td>&#160;&#160;&#160;(((conn)-&gt;flags &amp; <a class="el" href="api_8h.html#abee57aa0ba63e35742d411bc5224900a">NETCONN_FLAG_NON_BLOCKING</a>) != 0)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the blocking status of netconn calls ( </p>
</div>
</div>
<a id="a6a578dd5b55e4457e0d23574ec9c55bb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6a578dd5b55e4457e0d23574ec9c55bb">&#9670;&nbsp;</a></span>netconn_set_nonblocking</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define netconn_set_nonblocking</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">conn, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">val&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">do</span> { <span class="keywordflow">if</span>(val) { \</div><div class="line"> netconn_set_flags(conn, <a class="code" href="api_8h.html#abee57aa0ba63e35742d411bc5224900a">NETCONN_FLAG_NON_BLOCKING</a>); \</div><div class="line">} <span class="keywordflow">else</span> { \</div><div class="line"> netconn_clear_flags(conn, <a class="code" href="api_8h.html#abee57aa0ba63e35742d411bc5224900a">NETCONN_FLAG_NON_BLOCKING</a>); }} <span class="keywordflow">while</span>(0)</div><div class="ttc" id="api_8h_html_abee57aa0ba63e35742d411bc5224900a"><div class="ttname"><a href="api_8h.html#abee57aa0ba63e35742d411bc5224900a">NETCONN_FLAG_NON_BLOCKING</a></div><div class="ttdeci">#define NETCONN_FLAG_NON_BLOCKING</div><div class="ttdef"><b>Definition:</b> api.h:73</div></div>
</div><!-- fragment --><p>Set the blocking status of netconn calls ( </p>
</div>
</div>
<a id="a04785274634a5b504c760731c2e70725"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a04785274634a5b504c760731c2e70725">&#9670;&nbsp;</a></span>netconn_set_recvbufsize</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define netconn_set_recvbufsize</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">conn, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">recvbufsize&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td>&#160;&#160;&#160;((conn)-&gt;recv_bufsize = (recvbufsize))</td>
</tr>
</table>
</div><div class="memdoc">
<p>Set the receive buffer in bytes </p>
</div>
</div>
<a id="a3ce3ad9f660e99b11fec20cafaf8f016"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ce3ad9f660e99b11fec20cafaf8f016">&#9670;&nbsp;</a></span>netconn_set_sendtimeout</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define netconn_set_sendtimeout</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">conn, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">timeout&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td>&#160;&#160;&#160;((conn)-&gt;send_timeout = (timeout))</td>
</tr>
</table>
</div><div class="memdoc">
<p>Set the send timeout in milliseconds </p>
</div>
</div>
<a id="a62cd17ad03bb2817cb0c419e1c9790b1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a62cd17ad03bb2817cb0c419e1c9790b1">&#9670;&nbsp;</a></span>netconn_type</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define <a class="el" href="group__netconn__common.html#gaaba260d28d105fb4bce9185fd0300d91">netconn_type</a></td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">conn</td><td>)</td>
<td>&#160;&#160;&#160;(conn-&gt;type)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the type of a netconn (as enum netconn_type). </p>
</div>
</div>
<h2 class="groupheader">Typedef Documentation</h2>
<a id="a3e130339f00202b3ab714af502163a2d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3e130339f00202b3ab714af502163a2d">&#9670;&nbsp;</a></span>netconn_callback</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef void(* netconn_callback) (struct <a class="el" href="structnetconn.html">netconn</a> *, enum <a class="el" href="api_8h.html#af722260882d14c49afb765293ffb0155">netconn_evt</a>, u16_t len)</td>
</tr>
</table>
</div><div class="memdoc">
<p>A callback prototype to inform about events for a netconn </p>
</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="af722260882d14c49afb765293ffb0155"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af722260882d14c49afb765293ffb0155">&#9670;&nbsp;</a></span>netconn_evt</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="api_8h.html#af722260882d14c49afb765293ffb0155">netconn_evt</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Used to inform the callback function about changes</p>
<p>Event explanation:</p>
<p>In the netconn implementation, there are three ways to block a client:</p>
<ul>
<li>accept mbox (sys_arch_mbox_fetch(&amp;conn-&gt;acceptmbox, &amp;accept_ptr, 0); in <a class="el" href="group__netconn__tcp.html#ga13593148f60f7bbc6a505b567f175d69">netconn_accept()</a>)</li>
<li>receive mbox (sys_arch_mbox_fetch(&amp;conn-&gt;recvmbox, &amp;buf, 0); in netconn_recv_data())</li>
<li>send queue is full (sys_arch_sem_wait(LWIP_API_MSG_SEM(msg), 0); in <a class="el" href="api__msg_8c.html#aca4545a471ead1bc673ea93fe85f7e5c">lwip_netconn_do_write()</a>)</li>
</ul>
<p>The events have to be seen as events signaling the state of these mboxes/semaphores. For non-blocking connections, you need to know in advance whether a call to a netconn function call would block or not, and these events tell you about that.</p>
<p>RCVPLUS events say: Safe to perform a potentially blocking call call once more. They are counted in sockets - three RCVPLUS events for accept mbox means you are safe to call netconn_accept 3 times without being blocked. Same thing for receive mbox.</p>
<p>RCVMINUS events say: Your call to to a possibly blocking function is "acknowledged". Socket implementation decrements the counter.</p>
<p>For TX, there is no need to count, its merely a flag. SENDPLUS means you may send something. SENDPLUS occurs when enough data was delivered to peer so <a class="el" href="group__netconn__udp.html#gac4d4d10153d47c80a783c34b27c66238">netconn_send()</a> can be called again. A SENDMINUS event occurs when the next call to a <a class="el" href="group__netconn__udp.html#gac4d4d10153d47c80a783c34b27c66238">netconn_send()</a> would be blocking. </p>
</div>
</div>
<a id="a5c6ded2c082de1536019b197a0a912db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5c6ded2c082de1536019b197a0a912db">&#9670;&nbsp;</a></span>netconn_igmp</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="api_8h.html#a5c6ded2c082de1536019b197a0a912db">netconn_igmp</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Used for <a class="el" href="group__netconn__udp.html#gaaaf2f92eeb38dca70b3e6ad98c3c45ed">netconn_join_leave_group()</a> </p>
</div>
</div>
<a id="a2c6c9c1869f443c5ec7b31180a44fada"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2c6c9c1869f443c5ec7b31180a44fada">&#9670;&nbsp;</a></span>netconn_state</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="api_8h.html#a2c6c9c1869f443c5ec7b31180a44fada">netconn_state</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Current state of the netconn. Non-TCP netconns are always in state NETCONN_NONE! </p>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="a28430d1d86733f1bf98dc31305c42104"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a28430d1d86733f1bf98dc31305c42104">&#9670;&nbsp;</a></span>netconn_getaddr()</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> netconn_getaddr </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structnetconn.html">netconn</a> *&#160;</td>
<td class="paramname"><em>conn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *&#160;</td>
<td class="paramname"><em>addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u16_t *&#160;</td>
<td class="paramname"><em>port</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8_t&#160;</td>
<td class="paramname"><em>local</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the local or remote IP address and port of a netconn. For RAW netconns, this returns the protocol instead of a port!</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">conn</td><td>the netconn to query </td></tr>
<tr><td class="paramname">addr</td><td>a pointer to which to save the IP address </td></tr>
<tr><td class="paramname">port</td><td>a pointer to which to save the port (or protocol for RAW) </td></tr>
<tr><td class="paramname">local</td><td>1 to get the local IP address, 0 to get the remote one </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>ERR_CONN for invalid connections ERR_OK if the information was retrieved </dd></dl>
</div>
</div>
<a id="ad0a0434e5ff08bb350740cb840e2aca8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad0a0434e5ff08bb350740cb840e2aca8">&#9670;&nbsp;</a></span>netconn_new_with_proto_and_callback()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct <a class="el" href="structnetconn.html">netconn</a>* netconn_new_with_proto_and_callback </td>
<td>(</td>
<td class="paramtype">enum <a class="el" href="group__netconn__common.html#gaaba260d28d105fb4bce9185fd0300d91">netconn_type</a>&#160;</td>
<td class="paramname"><em>t</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8_t&#160;</td>
<td class="paramname"><em>proto</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="api_8h.html#a3e130339f00202b3ab714af502163a2d">netconn_callback</a>&#160;</td>
<td class="paramname"><em>callback</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a new netconn (of a specific type) that has a callback function. The corresponding pcb is also created.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">t</td><td>the type of 'connection' to create (</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>See also</dt><dd>enum <a class="el" href="group__netconn__common.html#gaaba260d28d105fb4bce9185fd0300d91">netconn_type</a>) </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">proto</td><td>the IP protocol for RAW IP pcbs </td></tr>
<tr><td class="paramname">callback</td><td>a function to call on status changes (RX available, TX'ed) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a newly allocated struct netconn or NULL on memory error </dd></dl>
</div>
</div>
<a id="a805a90b546c5a149f04782351633979b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a805a90b546c5a149f04782351633979b">&#9670;&nbsp;</a></span>netconn_recv_udp_raw_netbuf()</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> netconn_recv_udp_raw_netbuf </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structnetconn.html">netconn</a> *&#160;</td>
<td class="paramname"><em>conn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct <a class="el" href="structnetbuf.html">netbuf</a> **&#160;</td>
<td class="paramname"><em>new_buf</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Receive data (in form of a netbuf) from a UDP or RAW netconn</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">conn</td><td>the netconn from which to receive data </td></tr>
<tr><td class="paramname">new_buf</td><td>pointer where a new netbuf is stored when received data </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>ERR_OK if data has been received, an error code otherwise (timeout, memory error or another error) ERR_ARG if conn is not a UDP/RAW netconn </dd></dl>
</div>
</div>
<a id="a505c3b8e400babf9681e09c945b7f421"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a505c3b8e400babf9681e09c945b7f421">&#9670;&nbsp;</a></span>netconn_recv_udp_raw_netbuf_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> netconn_recv_udp_raw_netbuf_flags </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structnetconn.html">netconn</a> *&#160;</td>
<td class="paramname"><em>conn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct <a class="el" href="structnetbuf.html">netbuf</a> **&#160;</td>
<td class="paramname"><em>new_buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8_t&#160;</td>
<td class="paramname"><em>apiflags</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Receive data (in form of a netbuf) from a UDP or RAW netconn</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">conn</td><td>the netconn from which to receive data </td></tr>
<tr><td class="paramname">new_buf</td><td>pointer where a new netbuf is stored when received data </td></tr>
<tr><td class="paramname">apiflags</td><td>flags that control function behaviour. For now only:<ul>
<li>NETCONN_DONTBLOCK: only read data that is available now, don't wait for more data </li>
</ul>
</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>ERR_OK if data has been received, an error code otherwise (timeout, memory error or another error) ERR_ARG if conn is not a UDP/RAW netconn </dd></dl>
</div>
</div>
<a id="a992b4fe8a855fd94861738f7260d0a32"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a992b4fe8a855fd94861738f7260d0a32">&#9670;&nbsp;</a></span>netconn_write_vectors_partly()</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> netconn_write_vectors_partly </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structnetconn.html">netconn</a> *&#160;</td>
<td class="paramname"><em>conn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct <a class="el" href="structnetvector.html">netvector</a> *&#160;</td>
<td class="paramname"><em>vectors</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u16_t&#160;</td>
<td class="paramname"><em>vectorcnt</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8_t&#160;</td>
<td class="paramname"><em>apiflags</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>bytes_written</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Send vectorized data atomically over a TCP netconn.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">conn</td><td>the TCP netconn over which to send data </td></tr>
<tr><td class="paramname">vectors</td><td>array of vectors containing data to send </td></tr>
<tr><td class="paramname">vectorcnt</td><td>number of vectors in the array </td></tr>
<tr><td class="paramname">apiflags</td><td>combination of following flags :<ul>
<li>NETCONN_COPY: data will be copied into memory belonging to the stack</li>
<li>NETCONN_MORE: for TCP connection, PSH flag will be set on last segment sent</li>
<li>NETCONN_DONTBLOCK: only write the data if all data can be written at once </li>
</ul>
</td></tr>
<tr><td class="paramname">bytes_written</td><td>pointer to a location that receives the number of written bytes </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>ERR_OK if data was sent, any other err_t on error </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_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li><li class="navelem"><a class="el" href="dir_4e6b3cf33a61b6caac9c8ac30c866f37.html">lwip</a></li><li class="navelem"><a class="el" href="api_8h.html">api.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,66 @@
var api_8h =
[
[ "netconn", "structnetconn.html", "structnetconn" ],
[ "netvector", "structnetvector.html", "structnetvector" ],
[ "API_EVENT", "api_8h.html#a3ce590f58be8f60dbde361920863b26d", null ],
[ "netconn_addr", "group__netconn__common.html#ga37ec33522cfc26fa57251c33e4cebb3e", null ],
[ "NETCONN_FIN_RX_PENDING", "api_8h.html#a24d62a2a03ba421fcf2bdce1ea89b949", null ],
[ "NETCONN_FLAG_CHECK_WRITESPACE", "api_8h.html#a9d791955a4256a0589a3844e4e6f0f9c", null ],
[ "NETCONN_FLAG_IN_NONBLOCKING_CONNECT", "api_8h.html#a70bb861ee643b60ee402fd48f581f58d", null ],
[ "NETCONN_FLAG_IPV6_V6ONLY", "api_8h.html#a60892e4eb139f10157847fea4266bf5b", null ],
[ "NETCONN_FLAG_MBOXCLOSED", "api_8h.html#af77be7590d3712259e78103c1dddf63f", null ],
[ "NETCONN_FLAG_NON_BLOCKING", "api_8h.html#abee57aa0ba63e35742d411bc5224900a", null ],
[ "netconn_get_ipv6only", "group__netconn__common.html#gaf001c7d5fbf97c04eb1d9ac7d14c9c31", null ],
[ "netconn_get_recvbufsize", "api_8h.html#ac0298c287dc3823047c378c014ff1eb0", null ],
[ "netconn_get_sendtimeout", "api_8h.html#a7d6e84458eec796b0b0ce1bb247f323f", null ],
[ "netconn_is_nonblocking", "api_8h.html#a5789f0030b895b40625a74deb5a1092f", null ],
[ "netconn_listen", "group__netconn__tcp.html#ga43e3f4c2169dec0f666c502e490416b7", null ],
[ "netconn_new", "group__netconn__common.html#gab2bd1d5e633e14e428cfc0ca908d5e0c", null ],
[ "netconn_peer", "group__netconn__common.html#ga1065e769f2276270722a7700182077bc", null ],
[ "netconn_set_ipv6only", "group__netconn__common.html#gae56911e2d92bebf43d73e116530e41f1", null ],
[ "netconn_set_nonblocking", "api_8h.html#a6a578dd5b55e4457e0d23574ec9c55bb", null ],
[ "netconn_set_recvbufsize", "api_8h.html#a04785274634a5b504c760731c2e70725", null ],
[ "netconn_set_sendtimeout", "api_8h.html#a3ce3ad9f660e99b11fec20cafaf8f016", null ],
[ "netconn_type", "api_8h.html#a62cd17ad03bb2817cb0c419e1c9790b1", null ],
[ "netconn_write", "group__netconn__tcp.html#gafea5e9b90770a7c6cd0762ceb65e5b46", null ],
[ "netconn_callback", "api_8h.html#a3e130339f00202b3ab714af502163a2d", null ],
[ "netconn_evt", "api_8h.html#af722260882d14c49afb765293ffb0155", null ],
[ "netconn_igmp", "api_8h.html#a5c6ded2c082de1536019b197a0a912db", null ],
[ "netconn_state", "api_8h.html#a2c6c9c1869f443c5ec7b31180a44fada", null ],
[ "netconn_type", "group__netconn__common.html#gaaba260d28d105fb4bce9185fd0300d91", [
[ "NETCONN_TCP", "group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91a75d14318b91af7a452230189f47e5e1a", null ],
[ "NETCONN_TCP_IPV6", "group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91ae7efa7c4e50b7b381531a2136cd5a013", null ],
[ "NETCONN_UDP", "group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91a6b8ec191d69f7e639f4ab40779069636", null ],
[ "NETCONN_UDPLITE", "group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91a655e1625cc7e6a93f1e3d2646f56a1e4", null ],
[ "NETCONN_UDPNOCHKSUM", "group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91a7e0c3f566b3d4321b36b711b6b1ad6de", null ],
[ "NETCONN_UDP_IPV6", "group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91a34ee1c89f6705462590a4fe2c9772d9e", null ],
[ "NETCONN_UDPLITE_IPV6", "group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91aa9cabc9d90606b5c5939fcc02ac588c7", null ],
[ "NETCONN_UDPNOCHKSUM_IPV6", "group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91a2c7f548d26f6c411f084b6c59247b60e", null ],
[ "NETCONN_RAW", "group__netconn__common.html#ggaaba260d28d105fb4bce9185fd0300d91a0d828a7e9c1614d4cae56602b09f39e9", null ]
] ],
[ "netconn_accept", "group__netconn__tcp.html#ga13593148f60f7bbc6a505b567f175d69", null ],
[ "netconn_bind", "group__netconn__common.html#ga63bcc4d7bd150674fa953a1253fa6230", null ],
[ "netconn_bind_if", "group__netconn__common.html#gaa78479deeedcecd3bacade387ac40cc5", null ],
[ "netconn_close", "group__netconn__tcp.html#ga25bb1c1c9928f91f53149a026e2e2624", null ],
[ "netconn_connect", "group__netconn__common.html#gacba7f74d973872ad0b88b9a96098cf77", null ],
[ "netconn_delete", "group__netconn__common.html#gab411221f912a6d9e4c82ac3963989403", null ],
[ "netconn_disconnect", "group__netconn__udp.html#ga90bb4c4d1af6602a655b78fce0520402", null ],
[ "netconn_err", "group__netconn__common.html#gab9eccae90351eb6c3d2ca690068445d4", null ],
[ "netconn_getaddr", "api_8h.html#a28430d1d86733f1bf98dc31305c42104", null ],
[ "netconn_gethostbyname_addrtype", "group__netconn__common.html#gafb3494b149dff96ed8d1acb770ab52f5", null ],
[ "netconn_join_leave_group", "group__netconn__udp.html#gaaaf2f92eeb38dca70b3e6ad98c3c45ed", null ],
[ "netconn_join_leave_group_netif", "group__netconn__udp.html#ga5db2a1cf06a5fbb36f433e637da8729b", null ],
[ "netconn_listen_with_backlog", "group__netconn__tcp.html#ga84333ba8e7cdf45558d2b4795f53265d", null ],
[ "netconn_new_with_proto_and_callback", "api_8h.html#ad0a0434e5ff08bb350740cb840e2aca8", null ],
[ "netconn_prepare_delete", "group__netconn__common.html#gad5c079af0ad791a92fe9dade375744f0", null ],
[ "netconn_recv", "group__netconn__common.html#ga50490bab058f4e740798beffcf48cabf", null ],
[ "netconn_recv_tcp_pbuf", "group__netconn__tcp.html#ga6893cb7648733d1f05696bac94e10490", null ],
[ "netconn_recv_tcp_pbuf_flags", "group__netconn__tcp.html#gabb8a242c445ef928c23258a2b2344294", null ],
[ "netconn_recv_udp_raw_netbuf", "api_8h.html#a805a90b546c5a149f04782351633979b", null ],
[ "netconn_recv_udp_raw_netbuf_flags", "api_8h.html#a505c3b8e400babf9681e09c945b7f421", null ],
[ "netconn_send", "group__netconn__udp.html#gac4d4d10153d47c80a783c34b27c66238", null ],
[ "netconn_sendto", "group__netconn__udp.html#ga8e1d852119bda1e1b602c2995282ef0c", null ],
[ "netconn_shutdown", "group__netconn__tcp.html#ga6ec6b2cf7b0f59e9371e38ae7dea2a63", null ],
[ "netconn_write_partly", "group__netconn__tcp.html#gacf9ce6f71652739d6be2ca83f7c423bf", null ],
[ "netconn_write_vectors_partly", "api_8h.html#a992b4fe8a855fd94861738f7260d0a32", null ]
];
@@ -0,0 +1,418 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/api/api_lib.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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('api__lib_8c.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">api_lib.c File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="api_8h.html">lwip/api.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="memp_8h.html">lwip/memp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="ip_8h.html">lwip/ip.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="raw_8h.html">lwip/raw.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="udp_8h.html">lwip/udp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="api__msg_8h.html">lwip/priv/api_msg.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="tcp__priv_8h.html">lwip/priv/tcp_priv.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="tcpip__priv_8h.html">lwip/priv/tcpip_priv.h</a>&quot;</code><br />
<code>#include &quot;path/to/my/lwip_hooks.h&quot;</code><br />
<code>#include &lt;string.h&gt;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ad0a0434e5ff08bb350740cb840e2aca8"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structnetconn.html">netconn</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__lib_8c.html#ad0a0434e5ff08bb350740cb840e2aca8">netconn_new_with_proto_and_callback</a> (enum <a class="el" href="group__netconn__common.html#gaaba260d28d105fb4bce9185fd0300d91">netconn_type</a> t, u8_t proto, <a class="el" href="api_8h.html#a3e130339f00202b3ab714af502163a2d">netconn_callback</a> callback)</td></tr>
<tr class="separator:ad0a0434e5ff08bb350740cb840e2aca8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad5c079af0ad791a92fe9dade375744f0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#gad5c079af0ad791a92fe9dade375744f0">netconn_prepare_delete</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn)</td></tr>
<tr class="separator:gad5c079af0ad791a92fe9dade375744f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab411221f912a6d9e4c82ac3963989403"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#gab411221f912a6d9e4c82ac3963989403">netconn_delete</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn)</td></tr>
<tr class="separator:gab411221f912a6d9e4c82ac3963989403"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a28430d1d86733f1bf98dc31305c42104"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__lib_8c.html#a28430d1d86733f1bf98dc31305c42104">netconn_getaddr</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *addr, u16_t *port, u8_t local)</td></tr>
<tr class="separator:a28430d1d86733f1bf98dc31305c42104"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga63bcc4d7bd150674fa953a1253fa6230"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#ga63bcc4d7bd150674fa953a1253fa6230">netconn_bind</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *addr, u16_t port)</td></tr>
<tr class="separator:ga63bcc4d7bd150674fa953a1253fa6230"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa78479deeedcecd3bacade387ac40cc5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#gaa78479deeedcecd3bacade387ac40cc5">netconn_bind_if</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, u8_t if_idx)</td></tr>
<tr class="separator:gaa78479deeedcecd3bacade387ac40cc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacba7f74d973872ad0b88b9a96098cf77"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#gacba7f74d973872ad0b88b9a96098cf77">netconn_connect</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *addr, u16_t port)</td></tr>
<tr class="separator:gacba7f74d973872ad0b88b9a96098cf77"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga90bb4c4d1af6602a655b78fce0520402"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__udp.html#ga90bb4c4d1af6602a655b78fce0520402">netconn_disconnect</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn)</td></tr>
<tr class="separator:ga90bb4c4d1af6602a655b78fce0520402"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga84333ba8e7cdf45558d2b4795f53265d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__tcp.html#ga84333ba8e7cdf45558d2b4795f53265d">netconn_listen_with_backlog</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, u8_t backlog)</td></tr>
<tr class="separator:ga84333ba8e7cdf45558d2b4795f53265d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga13593148f60f7bbc6a505b567f175d69"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__tcp.html#ga13593148f60f7bbc6a505b567f175d69">netconn_accept</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structnetconn.html">netconn</a> **new_conn)</td></tr>
<tr class="separator:ga13593148f60f7bbc6a505b567f175d69"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6893cb7648733d1f05696bac94e10490"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__tcp.html#ga6893cb7648733d1f05696bac94e10490">netconn_recv_tcp_pbuf</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structpbuf.html">pbuf</a> **new_buf)</td></tr>
<tr class="separator:ga6893cb7648733d1f05696bac94e10490"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabb8a242c445ef928c23258a2b2344294"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__tcp.html#gabb8a242c445ef928c23258a2b2344294">netconn_recv_tcp_pbuf_flags</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structpbuf.html">pbuf</a> **new_buf, u8_t apiflags)</td></tr>
<tr class="separator:gabb8a242c445ef928c23258a2b2344294"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a805a90b546c5a149f04782351633979b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__lib_8c.html#a805a90b546c5a149f04782351633979b">netconn_recv_udp_raw_netbuf</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structnetbuf.html">netbuf</a> **new_buf)</td></tr>
<tr class="separator:a805a90b546c5a149f04782351633979b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a505c3b8e400babf9681e09c945b7f421"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__lib_8c.html#a505c3b8e400babf9681e09c945b7f421">netconn_recv_udp_raw_netbuf_flags</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structnetbuf.html">netbuf</a> **new_buf, u8_t apiflags)</td></tr>
<tr class="separator:a505c3b8e400babf9681e09c945b7f421"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga50490bab058f4e740798beffcf48cabf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#ga50490bab058f4e740798beffcf48cabf">netconn_recv</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structnetbuf.html">netbuf</a> **new_buf)</td></tr>
<tr class="separator:ga50490bab058f4e740798beffcf48cabf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8e1d852119bda1e1b602c2995282ef0c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__udp.html#ga8e1d852119bda1e1b602c2995282ef0c">netconn_sendto</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structnetbuf.html">netbuf</a> *buf, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *addr, u16_t port)</td></tr>
<tr class="separator:ga8e1d852119bda1e1b602c2995282ef0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac4d4d10153d47c80a783c34b27c66238"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__udp.html#gac4d4d10153d47c80a783c34b27c66238">netconn_send</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structnetbuf.html">netbuf</a> *buf)</td></tr>
<tr class="separator:gac4d4d10153d47c80a783c34b27c66238"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacf9ce6f71652739d6be2ca83f7c423bf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__tcp.html#gacf9ce6f71652739d6be2ca83f7c423bf">netconn_write_partly</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, const void *dataptr, size_t size, u8_t apiflags, size_t *bytes_written)</td></tr>
<tr class="separator:gacf9ce6f71652739d6be2ca83f7c423bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a992b4fe8a855fd94861738f7260d0a32"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__lib_8c.html#a992b4fe8a855fd94861738f7260d0a32">netconn_write_vectors_partly</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, struct <a class="el" href="structnetvector.html">netvector</a> *vectors, u16_t vectorcnt, u8_t apiflags, size_t *bytes_written)</td></tr>
<tr class="separator:a992b4fe8a855fd94861738f7260d0a32"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga25bb1c1c9928f91f53149a026e2e2624"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__tcp.html#ga25bb1c1c9928f91f53149a026e2e2624">netconn_close</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn)</td></tr>
<tr class="separator:ga25bb1c1c9928f91f53149a026e2e2624"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab9eccae90351eb6c3d2ca690068445d4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#gab9eccae90351eb6c3d2ca690068445d4">netconn_err</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn)</td></tr>
<tr class="separator:gab9eccae90351eb6c3d2ca690068445d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6ec6b2cf7b0f59e9371e38ae7dea2a63"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__tcp.html#ga6ec6b2cf7b0f59e9371e38ae7dea2a63">netconn_shutdown</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, u8_t shut_rx, u8_t shut_tx)</td></tr>
<tr class="separator:ga6ec6b2cf7b0f59e9371e38ae7dea2a63"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaaaf2f92eeb38dca70b3e6ad98c3c45ed"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__udp.html#gaaaf2f92eeb38dca70b3e6ad98c3c45ed">netconn_join_leave_group</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *multiaddr, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *netif_addr, enum <a class="el" href="api_8h.html#a5c6ded2c082de1536019b197a0a912db">netconn_igmp</a> join_or_leave)</td></tr>
<tr class="separator:gaaaf2f92eeb38dca70b3e6ad98c3c45ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5db2a1cf06a5fbb36f433e637da8729b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__udp.html#ga5db2a1cf06a5fbb36f433e637da8729b">netconn_join_leave_group_netif</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *multiaddr, u8_t if_idx, enum <a class="el" href="api_8h.html#a5c6ded2c082de1536019b197a0a912db">netconn_igmp</a> join_or_leave)</td></tr>
<tr class="separator:ga5db2a1cf06a5fbb36f433e637da8729b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gafb3494b149dff96ed8d1acb770ab52f5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__netconn__common.html#gafb3494b149dff96ed8d1acb770ab52f5">netconn_gethostbyname_addrtype</a> (const char *name, <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *addr, u8_t dns_addrtype)</td></tr>
<tr class="separator:gafb3494b149dff96ed8d1acb770ab52f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Sequential API External module </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="a28430d1d86733f1bf98dc31305c42104"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a28430d1d86733f1bf98dc31305c42104">&#9670;&nbsp;</a></span>netconn_getaddr()</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> netconn_getaddr </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structnetconn.html">netconn</a> *&#160;</td>
<td class="paramname"><em>conn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *&#160;</td>
<td class="paramname"><em>addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u16_t *&#160;</td>
<td class="paramname"><em>port</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8_t&#160;</td>
<td class="paramname"><em>local</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the local or remote IP address and port of a netconn. For RAW netconns, this returns the protocol instead of a port!</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">conn</td><td>the netconn to query </td></tr>
<tr><td class="paramname">addr</td><td>a pointer to which to save the IP address </td></tr>
<tr><td class="paramname">port</td><td>a pointer to which to save the port (or protocol for RAW) </td></tr>
<tr><td class="paramname">local</td><td>1 to get the local IP address, 0 to get the remote one </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>ERR_CONN for invalid connections ERR_OK if the information was retrieved </dd></dl>
</div>
</div>
<a id="ad0a0434e5ff08bb350740cb840e2aca8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad0a0434e5ff08bb350740cb840e2aca8">&#9670;&nbsp;</a></span>netconn_new_with_proto_and_callback()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct <a class="el" href="structnetconn.html">netconn</a>* netconn_new_with_proto_and_callback </td>
<td>(</td>
<td class="paramtype">enum <a class="el" href="group__netconn__common.html#gaaba260d28d105fb4bce9185fd0300d91">netconn_type</a>&#160;</td>
<td class="paramname"><em>t</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8_t&#160;</td>
<td class="paramname"><em>proto</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="api_8h.html#a3e130339f00202b3ab714af502163a2d">netconn_callback</a>&#160;</td>
<td class="paramname"><em>callback</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a new netconn (of a specific type) that has a callback function. The corresponding pcb is also created.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">t</td><td>the type of 'connection' to create (</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>See also</dt><dd>enum <a class="el" href="group__netconn__common.html#gaaba260d28d105fb4bce9185fd0300d91">netconn_type</a>) </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">proto</td><td>the IP protocol for RAW IP pcbs </td></tr>
<tr><td class="paramname">callback</td><td>a function to call on status changes (RX available, TX'ed) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a newly allocated struct netconn or NULL on memory error </dd></dl>
</div>
</div>
<a id="a805a90b546c5a149f04782351633979b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a805a90b546c5a149f04782351633979b">&#9670;&nbsp;</a></span>netconn_recv_udp_raw_netbuf()</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> netconn_recv_udp_raw_netbuf </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structnetconn.html">netconn</a> *&#160;</td>
<td class="paramname"><em>conn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct <a class="el" href="structnetbuf.html">netbuf</a> **&#160;</td>
<td class="paramname"><em>new_buf</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Receive data (in form of a netbuf) from a UDP or RAW netconn</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">conn</td><td>the netconn from which to receive data </td></tr>
<tr><td class="paramname">new_buf</td><td>pointer where a new netbuf is stored when received data </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>ERR_OK if data has been received, an error code otherwise (timeout, memory error or another error) ERR_ARG if conn is not a UDP/RAW netconn </dd></dl>
</div>
</div>
<a id="a505c3b8e400babf9681e09c945b7f421"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a505c3b8e400babf9681e09c945b7f421">&#9670;&nbsp;</a></span>netconn_recv_udp_raw_netbuf_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> netconn_recv_udp_raw_netbuf_flags </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structnetconn.html">netconn</a> *&#160;</td>
<td class="paramname"><em>conn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct <a class="el" href="structnetbuf.html">netbuf</a> **&#160;</td>
<td class="paramname"><em>new_buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8_t&#160;</td>
<td class="paramname"><em>apiflags</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Receive data (in form of a netbuf) from a UDP or RAW netconn</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">conn</td><td>the netconn from which to receive data </td></tr>
<tr><td class="paramname">new_buf</td><td>pointer where a new netbuf is stored when received data </td></tr>
<tr><td class="paramname">apiflags</td><td>flags that control function behaviour. For now only:<ul>
<li>NETCONN_DONTBLOCK: only read data that is available now, don't wait for more data </li>
</ul>
</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>ERR_OK if data has been received, an error code otherwise (timeout, memory error or another error) ERR_ARG if conn is not a UDP/RAW netconn </dd></dl>
</div>
</div>
<a id="a992b4fe8a855fd94861738f7260d0a32"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a992b4fe8a855fd94861738f7260d0a32">&#9670;&nbsp;</a></span>netconn_write_vectors_partly()</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> netconn_write_vectors_partly </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structnetconn.html">netconn</a> *&#160;</td>
<td class="paramname"><em>conn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct <a class="el" href="structnetvector.html">netvector</a> *&#160;</td>
<td class="paramname"><em>vectors</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u16_t&#160;</td>
<td class="paramname"><em>vectorcnt</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8_t&#160;</td>
<td class="paramname"><em>apiflags</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>bytes_written</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Send vectorized data atomically over a TCP netconn.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">conn</td><td>the TCP netconn over which to send data </td></tr>
<tr><td class="paramname">vectors</td><td>array of vectors containing data to send </td></tr>
<tr><td class="paramname">vectorcnt</td><td>number of vectors in the array </td></tr>
<tr><td class="paramname">apiflags</td><td>combination of following flags :<ul>
<li>NETCONN_COPY: data will be copied into memory belonging to the stack</li>
<li>NETCONN_MORE: for TCP connection, PSH flag will be set on last segment sent</li>
<li>NETCONN_DONTBLOCK: only write the data if all data can be written at once </li>
</ul>
</td></tr>
<tr><td class="paramname">bytes_written</td><td>pointer to a location that receives the number of written bytes </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>ERR_OK if data was sent, any other err_t on error </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_da61e3e9a357748887e3ca8d7c5a0c16.html">api</a></li><li class="navelem"><a class="el" href="api__lib_8c.html">api_lib.c</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,28 @@
var api__lib_8c =
[
[ "netconn_accept", "group__netconn__tcp.html#ga13593148f60f7bbc6a505b567f175d69", null ],
[ "netconn_bind", "group__netconn__common.html#ga63bcc4d7bd150674fa953a1253fa6230", null ],
[ "netconn_bind_if", "group__netconn__common.html#gaa78479deeedcecd3bacade387ac40cc5", null ],
[ "netconn_close", "group__netconn__tcp.html#ga25bb1c1c9928f91f53149a026e2e2624", null ],
[ "netconn_connect", "group__netconn__common.html#gacba7f74d973872ad0b88b9a96098cf77", null ],
[ "netconn_delete", "group__netconn__common.html#gab411221f912a6d9e4c82ac3963989403", null ],
[ "netconn_disconnect", "group__netconn__udp.html#ga90bb4c4d1af6602a655b78fce0520402", null ],
[ "netconn_err", "group__netconn__common.html#gab9eccae90351eb6c3d2ca690068445d4", null ],
[ "netconn_getaddr", "api__lib_8c.html#a28430d1d86733f1bf98dc31305c42104", null ],
[ "netconn_gethostbyname_addrtype", "group__netconn__common.html#gafb3494b149dff96ed8d1acb770ab52f5", null ],
[ "netconn_join_leave_group", "group__netconn__udp.html#gaaaf2f92eeb38dca70b3e6ad98c3c45ed", null ],
[ "netconn_join_leave_group_netif", "group__netconn__udp.html#ga5db2a1cf06a5fbb36f433e637da8729b", null ],
[ "netconn_listen_with_backlog", "group__netconn__tcp.html#ga84333ba8e7cdf45558d2b4795f53265d", null ],
[ "netconn_new_with_proto_and_callback", "api__lib_8c.html#ad0a0434e5ff08bb350740cb840e2aca8", null ],
[ "netconn_prepare_delete", "group__netconn__common.html#gad5c079af0ad791a92fe9dade375744f0", null ],
[ "netconn_recv", "group__netconn__common.html#ga50490bab058f4e740798beffcf48cabf", null ],
[ "netconn_recv_tcp_pbuf", "group__netconn__tcp.html#ga6893cb7648733d1f05696bac94e10490", null ],
[ "netconn_recv_tcp_pbuf_flags", "group__netconn__tcp.html#gabb8a242c445ef928c23258a2b2344294", null ],
[ "netconn_recv_udp_raw_netbuf", "api__lib_8c.html#a805a90b546c5a149f04782351633979b", null ],
[ "netconn_recv_udp_raw_netbuf_flags", "api__lib_8c.html#a505c3b8e400babf9681e09c945b7f421", null ],
[ "netconn_send", "group__netconn__udp.html#gac4d4d10153d47c80a783c34b27c66238", null ],
[ "netconn_sendto", "group__netconn__udp.html#ga8e1d852119bda1e1b602c2995282ef0c", null ],
[ "netconn_shutdown", "group__netconn__tcp.html#ga6ec6b2cf7b0f59e9371e38ae7dea2a63", null ],
[ "netconn_write_partly", "group__netconn__tcp.html#gacf9ce6f71652739d6be2ca83f7c423bf", null ],
[ "netconn_write_vectors_partly", "api__lib_8c.html#a992b4fe8a855fd94861738f7260d0a32", null ]
];
@@ -0,0 +1,626 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/api/api_msg.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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('api__msg_8c.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">api_msg.c File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="api__msg_8h.html">lwip/priv/api_msg.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="ip_8h.html">lwip/ip.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="ip__addr_8h.html">lwip/ip_addr.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="udp_8h.html">lwip/udp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="tcp_8h.html">lwip/tcp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="raw_8h.html">lwip/raw.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="memp_8h.html">lwip/memp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="igmp_8h.html">lwip/igmp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="dns_8h.html">lwip/dns.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="mld6_8h.html">lwip/mld6.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="tcpip__priv_8h.html">lwip/priv/tcpip_priv.h</a>&quot;</code><br />
<code>#include &lt;string.h&gt;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:abc6e1a4f8dd4640ab00eae4bbfdb7236"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#abc6e1a4f8dd4640ab00eae4bbfdb7236">lwip_netconn_do_newconn</a> (void *m)</td></tr>
<tr class="separator:abc6e1a4f8dd4640ab00eae4bbfdb7236"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a919865fa64270a3e4cb719ddff2fead9"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structnetconn.html">netconn</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#a919865fa64270a3e4cb719ddff2fead9">netconn_alloc</a> (enum <a class="el" href="group__netconn__common.html#gaaba260d28d105fb4bce9185fd0300d91">netconn_type</a> t, <a class="el" href="api_8h.html#a3e130339f00202b3ab714af502163a2d">netconn_callback</a> callback)</td></tr>
<tr class="separator:a919865fa64270a3e4cb719ddff2fead9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a875b82ad129bdec1c6f2c21cbeedc48b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#a875b82ad129bdec1c6f2c21cbeedc48b">netconn_free</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn)</td></tr>
<tr class="separator:a875b82ad129bdec1c6f2c21cbeedc48b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9e77da8492e93d570bc1ec37f3c91d59"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#a9e77da8492e93d570bc1ec37f3c91d59">lwip_netconn_do_delconn</a> (void *m)</td></tr>
<tr class="separator:a9e77da8492e93d570bc1ec37f3c91d59"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa8e265922cda9f7fd54bf39e4ecf3768"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#aa8e265922cda9f7fd54bf39e4ecf3768">lwip_netconn_do_bind</a> (void *m)</td></tr>
<tr class="separator:aa8e265922cda9f7fd54bf39e4ecf3768"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af4fed475f06818552ffefc8a1eda6605"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#af4fed475f06818552ffefc8a1eda6605">lwip_netconn_do_bind_if</a> (void *m)</td></tr>
<tr class="separator:af4fed475f06818552ffefc8a1eda6605"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6f18f57eeda7b0596110930e696f9902"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#a6f18f57eeda7b0596110930e696f9902">lwip_netconn_do_connect</a> (void *m)</td></tr>
<tr class="separator:a6f18f57eeda7b0596110930e696f9902"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adec8a5ddbcbdacba099c630c8310d34a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#adec8a5ddbcbdacba099c630c8310d34a">lwip_netconn_do_disconnect</a> (void *m)</td></tr>
<tr class="separator:adec8a5ddbcbdacba099c630c8310d34a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa7d753d86818bfd77c1d73dab8dc943f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#aa7d753d86818bfd77c1d73dab8dc943f">lwip_netconn_do_listen</a> (void *m)</td></tr>
<tr class="separator:aa7d753d86818bfd77c1d73dab8dc943f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac714bdd3d57e34f0a6517a469d80df6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#ac714bdd3d57e34f0a6517a469d80df6c">lwip_netconn_do_send</a> (void *m)</td></tr>
<tr class="separator:ac714bdd3d57e34f0a6517a469d80df6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab6ae6036baf5c8fef22228ceb5e3ff9f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#ab6ae6036baf5c8fef22228ceb5e3ff9f">lwip_netconn_do_recv</a> (void *m)</td></tr>
<tr class="separator:ab6ae6036baf5c8fef22228ceb5e3ff9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afc455a5f63fa3bc85022e34861a2fea5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#afc455a5f63fa3bc85022e34861a2fea5">lwip_netconn_do_accepted</a> (void *m)</td></tr>
<tr class="separator:afc455a5f63fa3bc85022e34861a2fea5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aca4545a471ead1bc673ea93fe85f7e5c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#aca4545a471ead1bc673ea93fe85f7e5c">lwip_netconn_do_write</a> (void *m)</td></tr>
<tr class="separator:aca4545a471ead1bc673ea93fe85f7e5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af33f432db6e3f111d4ee5876089e4163"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#af33f432db6e3f111d4ee5876089e4163">lwip_netconn_do_getaddr</a> (void *m)</td></tr>
<tr class="separator:af33f432db6e3f111d4ee5876089e4163"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aff73e0fcdc13c7cb97a4bfbd71a4347d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#aff73e0fcdc13c7cb97a4bfbd71a4347d">lwip_netconn_do_close</a> (void *m)</td></tr>
<tr class="separator:aff73e0fcdc13c7cb97a4bfbd71a4347d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7402b52416828906a5679828cce37546"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#a7402b52416828906a5679828cce37546">lwip_netconn_do_join_leave_group</a> (void *m)</td></tr>
<tr class="separator:a7402b52416828906a5679828cce37546"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aacc47257c0a5aa5eb107da0cfc699722"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#aacc47257c0a5aa5eb107da0cfc699722">lwip_netconn_do_join_leave_group_netif</a> (void *m)</td></tr>
<tr class="separator:aacc47257c0a5aa5eb107da0cfc699722"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afd3802b2f12e27928ccc0f759b887d61"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8c.html#afd3802b2f12e27928ccc0f759b887d61">lwip_netconn_do_gethostbyname</a> (void *arg)</td></tr>
<tr class="separator:afd3802b2f12e27928ccc0f759b887d61"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Sequential API Internal module </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="afc455a5f63fa3bc85022e34861a2fea5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afc455a5f63fa3bc85022e34861a2fea5">&#9670;&nbsp;</a></span>lwip_netconn_do_accepted()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_accepted </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Indicate that a TCP pcb has been accepted Called from netconn_accept</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="aa8e265922cda9f7fd54bf39e4ecf3768"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa8e265922cda9f7fd54bf39e4ecf3768">&#9670;&nbsp;</a></span>lwip_netconn_do_bind()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_bind </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Bind a pcb contained in a netconn Called from netconn_bind.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection and containing the IP address and port to bind to </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="af4fed475f06818552ffefc8a1eda6605"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af4fed475f06818552ffefc8a1eda6605">&#9670;&nbsp;</a></span>lwip_netconn_do_bind_if()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_bind_if </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Bind a pcb contained in a netconn to an interface Called from netconn_bind_if.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection and containing the IP address and port to bind to </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="aff73e0fcdc13c7cb97a4bfbd71a4347d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aff73e0fcdc13c7cb97a4bfbd71a4347d">&#9670;&nbsp;</a></span>lwip_netconn_do_close()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_close </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Close or half-shutdown a TCP pcb contained in a netconn Called from netconn_close In contrast to closing sockets, the netconn is not deallocated.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a6f18f57eeda7b0596110930e696f9902"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6f18f57eeda7b0596110930e696f9902">&#9670;&nbsp;</a></span>lwip_netconn_do_connect()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_connect </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Connect a pcb contained inside a netconn Called from netconn_connect.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection and containing the IP address and port to connect to </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a9e77da8492e93d570bc1ec37f3c91d59"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9e77da8492e93d570bc1ec37f3c91d59">&#9670;&nbsp;</a></span>lwip_netconn_do_delconn()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_delconn </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Delete the pcb inside a netconn. Called from netconn_delete.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="adec8a5ddbcbdacba099c630c8310d34a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adec8a5ddbcbdacba099c630c8310d34a">&#9670;&nbsp;</a></span>lwip_netconn_do_disconnect()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_disconnect </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Disconnect a pcb contained inside a netconn Only used for UDP netconns. Called from netconn_disconnect.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection to disconnect </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="af33f432db6e3f111d4ee5876089e4163"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af33f432db6e3f111d4ee5876089e4163">&#9670;&nbsp;</a></span>lwip_netconn_do_getaddr()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_getaddr </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Return a connection's local or remote address Called from netconn_getaddr</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="afd3802b2f12e27928ccc0f759b887d61"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afd3802b2f12e27928ccc0f759b887d61">&#9670;&nbsp;</a></span>lwip_netconn_do_gethostbyname()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_gethostbyname </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>arg</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Execute a DNS query Called from netconn_gethostbyname</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">arg</td><td>the <a class="el" href="structdns__api__msg.html">dns_api_msg</a> pointing to the query </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a7402b52416828906a5679828cce37546"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7402b52416828906a5679828cce37546">&#9670;&nbsp;</a></span>lwip_netconn_do_join_leave_group()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_join_leave_group </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Join multicast groups for UDP netconns. Called from netconn_join_leave_group</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="aacc47257c0a5aa5eb107da0cfc699722"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aacc47257c0a5aa5eb107da0cfc699722">&#9670;&nbsp;</a></span>lwip_netconn_do_join_leave_group_netif()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_join_leave_group_netif </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Join multicast groups for UDP netconns. Called from netconn_join_leave_group_netif</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="aa7d753d86818bfd77c1d73dab8dc943f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa7d753d86818bfd77c1d73dab8dc943f">&#9670;&nbsp;</a></span>lwip_netconn_do_listen()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_listen </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set a TCP pcb contained in a netconn into listen mode Called from netconn_listen.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="abc6e1a4f8dd4640ab00eae4bbfdb7236"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abc6e1a4f8dd4640ab00eae4bbfdb7236">&#9670;&nbsp;</a></span>lwip_netconn_do_newconn()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_newconn </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a new pcb of a specific type inside a netconn. Called from netconn_new_with_proto_and_callback.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> describing the connection type </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ab6ae6036baf5c8fef22228ceb5e3ff9f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab6ae6036baf5c8fef22228ceb5e3ff9f">&#9670;&nbsp;</a></span>lwip_netconn_do_recv()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_recv </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Indicate data has been received from a TCP pcb contained in a netconn Called from netconn_recv</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ac714bdd3d57e34f0a6517a469d80df6c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac714bdd3d57e34f0a6517a469d80df6c">&#9670;&nbsp;</a></span>lwip_netconn_do_send()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_send </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Send some data on a RAW or UDP pcb contained in a netconn Called from netconn_send</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="aca4545a471ead1bc673ea93fe85f7e5c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aca4545a471ead1bc673ea93fe85f7e5c">&#9670;&nbsp;</a></span>lwip_netconn_do_write()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_write </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Send some data on a TCP pcb contained in a netconn Called from netconn_write</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a919865fa64270a3e4cb719ddff2fead9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a919865fa64270a3e4cb719ddff2fead9">&#9670;&nbsp;</a></span>netconn_alloc()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct <a class="el" href="structnetconn.html">netconn</a>* netconn_alloc </td>
<td>(</td>
<td class="paramtype">enum <a class="el" href="group__netconn__common.html#gaaba260d28d105fb4bce9185fd0300d91">netconn_type</a>&#160;</td>
<td class="paramname"><em>t</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="api_8h.html#a3e130339f00202b3ab714af502163a2d">netconn_callback</a>&#160;</td>
<td class="paramname"><em>callback</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a new netconn (of a specific type) that has a callback function. The corresponding pcb is NOT created!</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">t</td><td>the type of 'connection' to create (</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>See also</dt><dd>enum <a class="el" href="group__netconn__common.html#gaaba260d28d105fb4bce9185fd0300d91">netconn_type</a>) </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">callback</td><td>a function to call on status changes (RX available, TX'ed) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a newly allocated struct netconn or NULL on memory error </dd></dl>
</div>
</div>
<a id="a875b82ad129bdec1c6f2c21cbeedc48b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a875b82ad129bdec1c6f2c21cbeedc48b">&#9670;&nbsp;</a></span>netconn_free()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void netconn_free </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structnetconn.html">netconn</a> *&#160;</td>
<td class="paramname"><em>conn</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Delete a netconn and all its resources. The pcb is NOT freed (since we might not be in the right thread context do this).</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">conn</td><td>the netconn to free </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_da61e3e9a357748887e3ca8d7c5a0c16.html">api</a></li><li class="navelem"><a class="el" href="api__msg_8c.html">api_msg.c</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,21 @@
var api__msg_8c =
[
[ "lwip_netconn_do_accepted", "api__msg_8c.html#afc455a5f63fa3bc85022e34861a2fea5", null ],
[ "lwip_netconn_do_bind", "api__msg_8c.html#aa8e265922cda9f7fd54bf39e4ecf3768", null ],
[ "lwip_netconn_do_bind_if", "api__msg_8c.html#af4fed475f06818552ffefc8a1eda6605", null ],
[ "lwip_netconn_do_close", "api__msg_8c.html#aff73e0fcdc13c7cb97a4bfbd71a4347d", null ],
[ "lwip_netconn_do_connect", "api__msg_8c.html#a6f18f57eeda7b0596110930e696f9902", null ],
[ "lwip_netconn_do_delconn", "api__msg_8c.html#a9e77da8492e93d570bc1ec37f3c91d59", null ],
[ "lwip_netconn_do_disconnect", "api__msg_8c.html#adec8a5ddbcbdacba099c630c8310d34a", null ],
[ "lwip_netconn_do_getaddr", "api__msg_8c.html#af33f432db6e3f111d4ee5876089e4163", null ],
[ "lwip_netconn_do_gethostbyname", "api__msg_8c.html#afd3802b2f12e27928ccc0f759b887d61", null ],
[ "lwip_netconn_do_join_leave_group", "api__msg_8c.html#a7402b52416828906a5679828cce37546", null ],
[ "lwip_netconn_do_join_leave_group_netif", "api__msg_8c.html#aacc47257c0a5aa5eb107da0cfc699722", null ],
[ "lwip_netconn_do_listen", "api__msg_8c.html#aa7d753d86818bfd77c1d73dab8dc943f", null ],
[ "lwip_netconn_do_newconn", "api__msg_8c.html#abc6e1a4f8dd4640ab00eae4bbfdb7236", null ],
[ "lwip_netconn_do_recv", "api__msg_8c.html#ab6ae6036baf5c8fef22228ceb5e3ff9f", null ],
[ "lwip_netconn_do_send", "api__msg_8c.html#ac714bdd3d57e34f0a6517a469d80df6c", null ],
[ "lwip_netconn_do_write", "api__msg_8c.html#aca4545a471ead1bc673ea93fe85f7e5c", null ],
[ "netconn_alloc", "api__msg_8c.html#a919865fa64270a3e4cb719ddff2fead9", null ],
[ "netconn_free", "api__msg_8c.html#a875b82ad129bdec1c6f2c21cbeedc48b", null ]
];
@@ -0,0 +1,629 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/include/lwip/priv/api_msg.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('api__msg_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">api_msg.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="arch_8h.html">lwip/arch.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="ip__addr_8h.html">lwip/ip_addr.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="err_8h.html">lwip/err.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="sys_8h.html">lwip/sys.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="igmp_8h.html">lwip/igmp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="api_8h.html">lwip/api.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="tcpip__priv_8h.html">lwip/priv/tcpip_priv.h</a>&quot;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structapi__msg.html">api_msg</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdns__api__msg.html">dns_api_msg</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:abc6e1a4f8dd4640ab00eae4bbfdb7236"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#abc6e1a4f8dd4640ab00eae4bbfdb7236">lwip_netconn_do_newconn</a> (void *m)</td></tr>
<tr class="separator:abc6e1a4f8dd4640ab00eae4bbfdb7236"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9e77da8492e93d570bc1ec37f3c91d59"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#a9e77da8492e93d570bc1ec37f3c91d59">lwip_netconn_do_delconn</a> (void *m)</td></tr>
<tr class="separator:a9e77da8492e93d570bc1ec37f3c91d59"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa8e265922cda9f7fd54bf39e4ecf3768"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#aa8e265922cda9f7fd54bf39e4ecf3768">lwip_netconn_do_bind</a> (void *m)</td></tr>
<tr class="separator:aa8e265922cda9f7fd54bf39e4ecf3768"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af4fed475f06818552ffefc8a1eda6605"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#af4fed475f06818552ffefc8a1eda6605">lwip_netconn_do_bind_if</a> (void *m)</td></tr>
<tr class="separator:af4fed475f06818552ffefc8a1eda6605"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6f18f57eeda7b0596110930e696f9902"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#a6f18f57eeda7b0596110930e696f9902">lwip_netconn_do_connect</a> (void *m)</td></tr>
<tr class="separator:a6f18f57eeda7b0596110930e696f9902"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adec8a5ddbcbdacba099c630c8310d34a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#adec8a5ddbcbdacba099c630c8310d34a">lwip_netconn_do_disconnect</a> (void *m)</td></tr>
<tr class="separator:adec8a5ddbcbdacba099c630c8310d34a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa7d753d86818bfd77c1d73dab8dc943f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#aa7d753d86818bfd77c1d73dab8dc943f">lwip_netconn_do_listen</a> (void *m)</td></tr>
<tr class="separator:aa7d753d86818bfd77c1d73dab8dc943f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac714bdd3d57e34f0a6517a469d80df6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#ac714bdd3d57e34f0a6517a469d80df6c">lwip_netconn_do_send</a> (void *m)</td></tr>
<tr class="separator:ac714bdd3d57e34f0a6517a469d80df6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab6ae6036baf5c8fef22228ceb5e3ff9f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#ab6ae6036baf5c8fef22228ceb5e3ff9f">lwip_netconn_do_recv</a> (void *m)</td></tr>
<tr class="separator:ab6ae6036baf5c8fef22228ceb5e3ff9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afc455a5f63fa3bc85022e34861a2fea5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#afc455a5f63fa3bc85022e34861a2fea5">lwip_netconn_do_accepted</a> (void *m)</td></tr>
<tr class="separator:afc455a5f63fa3bc85022e34861a2fea5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aca4545a471ead1bc673ea93fe85f7e5c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#aca4545a471ead1bc673ea93fe85f7e5c">lwip_netconn_do_write</a> (void *m)</td></tr>
<tr class="separator:aca4545a471ead1bc673ea93fe85f7e5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af33f432db6e3f111d4ee5876089e4163"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#af33f432db6e3f111d4ee5876089e4163">lwip_netconn_do_getaddr</a> (void *m)</td></tr>
<tr class="separator:af33f432db6e3f111d4ee5876089e4163"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aff73e0fcdc13c7cb97a4bfbd71a4347d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#aff73e0fcdc13c7cb97a4bfbd71a4347d">lwip_netconn_do_close</a> (void *m)</td></tr>
<tr class="separator:aff73e0fcdc13c7cb97a4bfbd71a4347d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7402b52416828906a5679828cce37546"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#a7402b52416828906a5679828cce37546">lwip_netconn_do_join_leave_group</a> (void *m)</td></tr>
<tr class="separator:a7402b52416828906a5679828cce37546"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aacc47257c0a5aa5eb107da0cfc699722"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#aacc47257c0a5aa5eb107da0cfc699722">lwip_netconn_do_join_leave_group_netif</a> (void *m)</td></tr>
<tr class="separator:aacc47257c0a5aa5eb107da0cfc699722"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afd3802b2f12e27928ccc0f759b887d61"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#afd3802b2f12e27928ccc0f759b887d61">lwip_netconn_do_gethostbyname</a> (void *arg)</td></tr>
<tr class="separator:afd3802b2f12e27928ccc0f759b887d61"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a919865fa64270a3e4cb719ddff2fead9"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structnetconn.html">netconn</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#a919865fa64270a3e4cb719ddff2fead9">netconn_alloc</a> (enum <a class="el" href="group__netconn__common.html#gaaba260d28d105fb4bce9185fd0300d91">netconn_type</a> t, <a class="el" href="api_8h.html#a3e130339f00202b3ab714af502163a2d">netconn_callback</a> callback)</td></tr>
<tr class="separator:a919865fa64270a3e4cb719ddff2fead9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a875b82ad129bdec1c6f2c21cbeedc48b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="api__msg_8h.html#a875b82ad129bdec1c6f2c21cbeedc48b">netconn_free</a> (struct <a class="el" href="structnetconn.html">netconn</a> *conn)</td></tr>
<tr class="separator:a875b82ad129bdec1c6f2c21cbeedc48b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>netconn API lwIP internal implementations (do not use in application code) </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="afc455a5f63fa3bc85022e34861a2fea5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afc455a5f63fa3bc85022e34861a2fea5">&#9670;&nbsp;</a></span>lwip_netconn_do_accepted()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_accepted </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Indicate that a TCP pcb has been accepted Called from netconn_accept</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="aa8e265922cda9f7fd54bf39e4ecf3768"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa8e265922cda9f7fd54bf39e4ecf3768">&#9670;&nbsp;</a></span>lwip_netconn_do_bind()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_bind </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Bind a pcb contained in a netconn Called from netconn_bind.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection and containing the IP address and port to bind to </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="af4fed475f06818552ffefc8a1eda6605"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af4fed475f06818552ffefc8a1eda6605">&#9670;&nbsp;</a></span>lwip_netconn_do_bind_if()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_bind_if </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Bind a pcb contained in a netconn to an interface Called from netconn_bind_if.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection and containing the IP address and port to bind to </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="aff73e0fcdc13c7cb97a4bfbd71a4347d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aff73e0fcdc13c7cb97a4bfbd71a4347d">&#9670;&nbsp;</a></span>lwip_netconn_do_close()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_close </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Close or half-shutdown a TCP pcb contained in a netconn Called from netconn_close In contrast to closing sockets, the netconn is not deallocated.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a6f18f57eeda7b0596110930e696f9902"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6f18f57eeda7b0596110930e696f9902">&#9670;&nbsp;</a></span>lwip_netconn_do_connect()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_connect </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Connect a pcb contained inside a netconn Called from netconn_connect.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection and containing the IP address and port to connect to </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a9e77da8492e93d570bc1ec37f3c91d59"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9e77da8492e93d570bc1ec37f3c91d59">&#9670;&nbsp;</a></span>lwip_netconn_do_delconn()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_delconn </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Delete the pcb inside a netconn. Called from netconn_delete.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="adec8a5ddbcbdacba099c630c8310d34a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adec8a5ddbcbdacba099c630c8310d34a">&#9670;&nbsp;</a></span>lwip_netconn_do_disconnect()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_disconnect </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Disconnect a pcb contained inside a netconn Only used for UDP netconns. Called from netconn_disconnect.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection to disconnect </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="af33f432db6e3f111d4ee5876089e4163"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af33f432db6e3f111d4ee5876089e4163">&#9670;&nbsp;</a></span>lwip_netconn_do_getaddr()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_getaddr </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Return a connection's local or remote address Called from netconn_getaddr</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="afd3802b2f12e27928ccc0f759b887d61"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afd3802b2f12e27928ccc0f759b887d61">&#9670;&nbsp;</a></span>lwip_netconn_do_gethostbyname()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_gethostbyname </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>arg</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Execute a DNS query Called from netconn_gethostbyname</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">arg</td><td>the <a class="el" href="structdns__api__msg.html">dns_api_msg</a> pointing to the query </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a7402b52416828906a5679828cce37546"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7402b52416828906a5679828cce37546">&#9670;&nbsp;</a></span>lwip_netconn_do_join_leave_group()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_join_leave_group </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Join multicast groups for UDP netconns. Called from netconn_join_leave_group</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="aacc47257c0a5aa5eb107da0cfc699722"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aacc47257c0a5aa5eb107da0cfc699722">&#9670;&nbsp;</a></span>lwip_netconn_do_join_leave_group_netif()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_join_leave_group_netif </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Join multicast groups for UDP netconns. Called from netconn_join_leave_group_netif</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="aa7d753d86818bfd77c1d73dab8dc943f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa7d753d86818bfd77c1d73dab8dc943f">&#9670;&nbsp;</a></span>lwip_netconn_do_listen()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_listen </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set a TCP pcb contained in a netconn into listen mode Called from netconn_listen.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="abc6e1a4f8dd4640ab00eae4bbfdb7236"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abc6e1a4f8dd4640ab00eae4bbfdb7236">&#9670;&nbsp;</a></span>lwip_netconn_do_newconn()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_newconn </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a new pcb of a specific type inside a netconn. Called from netconn_new_with_proto_and_callback.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> describing the connection type </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ab6ae6036baf5c8fef22228ceb5e3ff9f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab6ae6036baf5c8fef22228ceb5e3ff9f">&#9670;&nbsp;</a></span>lwip_netconn_do_recv()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_recv </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Indicate data has been received from a TCP pcb contained in a netconn Called from netconn_recv</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ac714bdd3d57e34f0a6517a469d80df6c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac714bdd3d57e34f0a6517a469d80df6c">&#9670;&nbsp;</a></span>lwip_netconn_do_send()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_send </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Send some data on a RAW or UDP pcb contained in a netconn Called from netconn_send</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="aca4545a471ead1bc673ea93fe85f7e5c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aca4545a471ead1bc673ea93fe85f7e5c">&#9670;&nbsp;</a></span>lwip_netconn_do_write()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lwip_netconn_do_write </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Send some data on a TCP pcb contained in a netconn Called from netconn_write</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">m</td><td>the <a class="el" href="structapi__msg.html">api_msg</a> pointing to the connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a919865fa64270a3e4cb719ddff2fead9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a919865fa64270a3e4cb719ddff2fead9">&#9670;&nbsp;</a></span>netconn_alloc()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct <a class="el" href="structnetconn.html">netconn</a>* netconn_alloc </td>
<td>(</td>
<td class="paramtype">enum <a class="el" href="group__netconn__common.html#gaaba260d28d105fb4bce9185fd0300d91">netconn_type</a>&#160;</td>
<td class="paramname"><em>t</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="api_8h.html#a3e130339f00202b3ab714af502163a2d">netconn_callback</a>&#160;</td>
<td class="paramname"><em>callback</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a new netconn (of a specific type) that has a callback function. The corresponding pcb is NOT created!</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">t</td><td>the type of 'connection' to create (</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>See also</dt><dd>enum <a class="el" href="group__netconn__common.html#gaaba260d28d105fb4bce9185fd0300d91">netconn_type</a>) </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">callback</td><td>a function to call on status changes (RX available, TX'ed) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a newly allocated struct netconn or NULL on memory error </dd></dl>
</div>
</div>
<a id="a875b82ad129bdec1c6f2c21cbeedc48b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a875b82ad129bdec1c6f2c21cbeedc48b">&#9670;&nbsp;</a></span>netconn_free()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void netconn_free </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structnetconn.html">netconn</a> *&#160;</td>
<td class="paramname"><em>conn</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Delete a netconn and all its resources. The pcb is NOT freed (since we might not be in the right thread context do this).</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">conn</td><td>the netconn to free </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_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li><li class="navelem"><a class="el" href="dir_4e6b3cf33a61b6caac9c8ac30c866f37.html">lwip</a></li><li class="navelem"><a class="el" href="dir_460c501b2432fc107adcb38111835e48.html">priv</a></li><li class="navelem"><a class="el" href="api__msg_8h.html">api_msg.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,23 @@
var api__msg_8h =
[
[ "api_msg", "structapi__msg.html", "structapi__msg" ],
[ "dns_api_msg", "structdns__api__msg.html", "structdns__api__msg" ],
[ "lwip_netconn_do_accepted", "api__msg_8h.html#afc455a5f63fa3bc85022e34861a2fea5", null ],
[ "lwip_netconn_do_bind", "api__msg_8h.html#aa8e265922cda9f7fd54bf39e4ecf3768", null ],
[ "lwip_netconn_do_bind_if", "api__msg_8h.html#af4fed475f06818552ffefc8a1eda6605", null ],
[ "lwip_netconn_do_close", "api__msg_8h.html#aff73e0fcdc13c7cb97a4bfbd71a4347d", null ],
[ "lwip_netconn_do_connect", "api__msg_8h.html#a6f18f57eeda7b0596110930e696f9902", null ],
[ "lwip_netconn_do_delconn", "api__msg_8h.html#a9e77da8492e93d570bc1ec37f3c91d59", null ],
[ "lwip_netconn_do_disconnect", "api__msg_8h.html#adec8a5ddbcbdacba099c630c8310d34a", null ],
[ "lwip_netconn_do_getaddr", "api__msg_8h.html#af33f432db6e3f111d4ee5876089e4163", null ],
[ "lwip_netconn_do_gethostbyname", "api__msg_8h.html#afd3802b2f12e27928ccc0f759b887d61", null ],
[ "lwip_netconn_do_join_leave_group", "api__msg_8h.html#a7402b52416828906a5679828cce37546", null ],
[ "lwip_netconn_do_join_leave_group_netif", "api__msg_8h.html#aacc47257c0a5aa5eb107da0cfc699722", null ],
[ "lwip_netconn_do_listen", "api__msg_8h.html#aa7d753d86818bfd77c1d73dab8dc943f", null ],
[ "lwip_netconn_do_newconn", "api__msg_8h.html#abc6e1a4f8dd4640ab00eae4bbfdb7236", null ],
[ "lwip_netconn_do_recv", "api__msg_8h.html#ab6ae6036baf5c8fef22228ceb5e3ff9f", null ],
[ "lwip_netconn_do_send", "api__msg_8h.html#ac714bdd3d57e34f0a6517a469d80df6c", null ],
[ "lwip_netconn_do_write", "api__msg_8h.html#aca4545a471ead1bc673ea93fe85f7e5c", null ],
[ "netconn_alloc", "api__msg_8h.html#a919865fa64270a3e4cb719ddff2fead9", null ],
[ "netconn_free", "api__msg_8h.html#a875b82ad129bdec1c6f2c21cbeedc48b", null ]
];
@@ -0,0 +1,281 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/include/lwip/apps/snmp.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('apps_2snmp_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">snmp.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="snmp__opts_8h.html">lwip/apps/snmp_opts.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="err_8h.html">lwip/err.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="snmp__core_8h.html">lwip/apps/snmp_core.h</a>&quot;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsnmp__varbind.html">snmp_varbind</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ae9310bbe1948b3c3bc64c073d4621019"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apps_2snmp_8h.html#ae9310bbe1948b3c3bc64c073d4621019">SNMP_GENTRAP_COLDSTART</a>&#160;&#160;&#160;0</td></tr>
<tr class="separator:ae9310bbe1948b3c3bc64c073d4621019"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9a2e5824deab50e639b01181307a0926"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apps_2snmp_8h.html#a9a2e5824deab50e639b01181307a0926">SNMP_GENTRAP_WARMSTART</a>&#160;&#160;&#160;1</td></tr>
<tr class="separator:a9a2e5824deab50e639b01181307a0926"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1856efbe83199f456c34a4e5139dfb16"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apps_2snmp_8h.html#a1856efbe83199f456c34a4e5139dfb16">SNMP_GENTRAP_LINKDOWN</a>&#160;&#160;&#160;2</td></tr>
<tr class="separator:a1856efbe83199f456c34a4e5139dfb16"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa665cdc02ccd5ee9fe0c4cb1b792186"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apps_2snmp_8h.html#afa665cdc02ccd5ee9fe0c4cb1b792186">SNMP_GENTRAP_LINKUP</a>&#160;&#160;&#160;3</td></tr>
<tr class="separator:afa665cdc02ccd5ee9fe0c4cb1b792186"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaf312d8bdbeed2c02560321ab24a022f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apps_2snmp_8h.html#aaf312d8bdbeed2c02560321ab24a022f">SNMP_GENTRAP_AUTH_FAILURE</a>&#160;&#160;&#160;4</td></tr>
<tr class="separator:aaf312d8bdbeed2c02560321ab24a022f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac1cd822650d9ac66d0333a5ad600cfee"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apps_2snmp_8h.html#ac1cd822650d9ac66d0333a5ad600cfee">SNMP_GENTRAP_EGP_NEIGHBOR_LOSS</a>&#160;&#160;&#160;5</td></tr>
<tr class="separator:ac1cd822650d9ac66d0333a5ad600cfee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab3691cecfa911baa52ccf6054022ba43"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apps_2snmp_8h.html#ab3691cecfa911baa52ccf6054022ba43">SNMP_GENTRAP_ENTERPRISE_SPECIFIC</a>&#160;&#160;&#160;6</td></tr>
<tr class="separator:ab3691cecfa911baa52ccf6054022ba43"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga4d88f2fc7655280384131d543e0d83e5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__core.html#ga4d88f2fc7655280384131d543e0d83e5">snmp_init</a> (void)</td></tr>
<tr class="separator:ga4d88f2fc7655280384131d543e0d83e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga29c76474971f25d038fd486447c70e21"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__core.html#ga29c76474971f25d038fd486447c70e21">snmp_set_mibs</a> (const struct <a class="el" href="structsnmp__mib.html">snmp_mib</a> **mibs, u8_t num_mibs)</td></tr>
<tr class="separator:ga29c76474971f25d038fd486447c70e21"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacc71ac857bf9215f06a624dda09abe3a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__core.html#gacc71ac857bf9215f06a624dda09abe3a">snmp_set_device_enterprise_oid</a> (const struct <a class="el" href="structsnmp__obj__id.html">snmp_obj_id</a> *device_enterprise_oid)</td></tr>
<tr class="separator:gacc71ac857bf9215f06a624dda09abe3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4dff82dda2553b9554a9f98561852a50"><td class="memItemLeft" align="right" valign="top">const struct <a class="el" href="structsnmp__obj__id.html">snmp_obj_id</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__core.html#ga4dff82dda2553b9554a9f98561852a50">snmp_get_device_enterprise_oid</a> (void)</td></tr>
<tr class="separator:ga4dff82dda2553b9554a9f98561852a50"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab101505be59778cf0f2f1ac40bcf3f32"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__traps.html#gab101505be59778cf0f2f1ac40bcf3f32">snmp_trap_dst_enable</a> (u8_t dst_idx, u8_t enable)</td></tr>
<tr class="separator:gab101505be59778cf0f2f1ac40bcf3f32"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga15e4afbf80ed2260850842e6608c6d86"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__traps.html#ga15e4afbf80ed2260850842e6608c6d86">snmp_trap_dst_ip_set</a> (u8_t dst_idx, const <a class="el" href="group__ipaddr.html#ga16ef96d6cde029029bbf47fee35fd67a">ip_addr_t</a> *dst)</td></tr>
<tr class="separator:ga15e4afbf80ed2260850842e6608c6d86"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0e044259289cb690197173f93c17607d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__traps.html#ga0e044259289cb690197173f93c17607d">snmp_send_trap_generic</a> (s32_t generic_trap)</td></tr>
<tr class="separator:ga0e044259289cb690197173f93c17607d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga56bdce04e9e77cb3f8a872718cd273d1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__traps.html#ga56bdce04e9e77cb3f8a872718cd273d1">snmp_send_trap_specific</a> (s32_t specific_trap, struct <a class="el" href="structsnmp__varbind.html">snmp_varbind</a> *varbinds)</td></tr>
<tr class="separator:ga56bdce04e9e77cb3f8a872718cd273d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga96cc7af0118d75049609872ea41187cd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__traps.html#ga96cc7af0118d75049609872ea41187cd">snmp_send_trap</a> (const struct <a class="el" href="structsnmp__obj__id.html">snmp_obj_id</a> *oid, s32_t generic_trap, s32_t specific_trap, struct <a class="el" href="structsnmp__varbind.html">snmp_varbind</a> *varbinds)</td></tr>
<tr class="separator:ga96cc7af0118d75049609872ea41187cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacaf816ff917f7b7e5d00ed6c9f79b51c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__traps.html#gacaf816ff917f7b7e5d00ed6c9f79b51c">snmp_set_auth_traps_enabled</a> (u8_t enable)</td></tr>
<tr class="separator:gacaf816ff917f7b7e5d00ed6c9f79b51c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7804a22615bd9b3a323a3f48a9fb8cb7"><td class="memItemLeft" align="right" valign="top">u8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__traps.html#ga7804a22615bd9b3a323a3f48a9fb8cb7">snmp_get_auth_traps_enabled</a> (void)</td></tr>
<tr class="separator:ga7804a22615bd9b3a323a3f48a9fb8cb7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacf277cbca915275190426aeef4cfb103"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__core.html#gacf277cbca915275190426aeef4cfb103">snmp_get_community</a> (void)</td></tr>
<tr class="separator:gacf277cbca915275190426aeef4cfb103"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaba31b6f1816661df5a3b7f2076ee6ec0"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__core.html#gaba31b6f1816661df5a3b7f2076ee6ec0">snmp_get_community_write</a> (void)</td></tr>
<tr class="separator:gaba31b6f1816661df5a3b7f2076ee6ec0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gafdd3299e145f53cc826cc11a469f8409"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__traps.html#gafdd3299e145f53cc826cc11a469f8409">snmp_get_community_trap</a> (void)</td></tr>
<tr class="separator:gafdd3299e145f53cc826cc11a469f8409"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga30cc587a260757fdb2b81d462f430ef1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__core.html#ga30cc587a260757fdb2b81d462f430ef1">snmp_set_community</a> (const char *const community)</td></tr>
<tr class="separator:ga30cc587a260757fdb2b81d462f430ef1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga341461766863cff46a44e5f431f2da01"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__core.html#ga341461766863cff46a44e5f431f2da01">snmp_set_community_write</a> (const char *const community)</td></tr>
<tr class="separator:ga341461766863cff46a44e5f431f2da01"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5631711f357b6610be7e93b1c6d87760"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__traps.html#ga5631711f357b6610be7e93b1c6d87760">snmp_set_community_trap</a> (const char *const community)</td></tr>
<tr class="separator:ga5631711f357b6610be7e93b1c6d87760"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa8a49d1a6a207740ba44e27b5bbc22be"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__traps.html#gaa8a49d1a6a207740ba44e27b5bbc22be">snmp_coldstart_trap</a> (void)</td></tr>
<tr class="separator:gaa8a49d1a6a207740ba44e27b5bbc22be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf6d0a95a3a406d8ea00849c07aca05ee"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__traps.html#gaf6d0a95a3a406d8ea00849c07aca05ee">snmp_authfail_trap</a> (void)</td></tr>
<tr class="separator:gaf6d0a95a3a406d8ea00849c07aca05ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaff6a6b39322e92862ab55cfcddfe254b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__snmp__core.html#gaff6a6b39322e92862ab55cfcddfe254b">snmp_set_write_callback</a> (snmp_write_callback_fct write_callback, void *callback_arg)</td></tr>
<tr class="separator:gaff6a6b39322e92862ab55cfcddfe254b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>SNMP server main API - start and basic configuration </p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a id="aaf312d8bdbeed2c02560321ab24a022f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaf312d8bdbeed2c02560321ab24a022f">&#9670;&nbsp;</a></span>SNMP_GENTRAP_AUTH_FAILURE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SNMP_GENTRAP_AUTH_FAILURE&#160;&#160;&#160;4</td>
</tr>
</table>
</div><div class="memdoc">
<p>Generic trap: authentication failure </p>
</div>
</div>
<a id="ae9310bbe1948b3c3bc64c073d4621019"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae9310bbe1948b3c3bc64c073d4621019">&#9670;&nbsp;</a></span>SNMP_GENTRAP_COLDSTART</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SNMP_GENTRAP_COLDSTART&#160;&#160;&#160;0</td>
</tr>
</table>
</div><div class="memdoc">
<p>Generic trap: cold start </p>
</div>
</div>
<a id="ac1cd822650d9ac66d0333a5ad600cfee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac1cd822650d9ac66d0333a5ad600cfee">&#9670;&nbsp;</a></span>SNMP_GENTRAP_EGP_NEIGHBOR_LOSS</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SNMP_GENTRAP_EGP_NEIGHBOR_LOSS&#160;&#160;&#160;5</td>
</tr>
</table>
</div><div class="memdoc">
<p>Generic trap: EGP neighbor lost </p>
</div>
</div>
<a id="ab3691cecfa911baa52ccf6054022ba43"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab3691cecfa911baa52ccf6054022ba43">&#9670;&nbsp;</a></span>SNMP_GENTRAP_ENTERPRISE_SPECIFIC</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SNMP_GENTRAP_ENTERPRISE_SPECIFIC&#160;&#160;&#160;6</td>
</tr>
</table>
</div><div class="memdoc">
<p>Generic trap: enterprise specific </p>
</div>
</div>
<a id="a1856efbe83199f456c34a4e5139dfb16"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1856efbe83199f456c34a4e5139dfb16">&#9670;&nbsp;</a></span>SNMP_GENTRAP_LINKDOWN</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SNMP_GENTRAP_LINKDOWN&#160;&#160;&#160;2</td>
</tr>
</table>
</div><div class="memdoc">
<p>Generic trap: link down </p>
</div>
</div>
<a id="afa665cdc02ccd5ee9fe0c4cb1b792186"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afa665cdc02ccd5ee9fe0c4cb1b792186">&#9670;&nbsp;</a></span>SNMP_GENTRAP_LINKUP</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SNMP_GENTRAP_LINKUP&#160;&#160;&#160;3</td>
</tr>
</table>
</div><div class="memdoc">
<p>Generic trap: link up </p>
</div>
</div>
<a id="a9a2e5824deab50e639b01181307a0926"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9a2e5824deab50e639b01181307a0926">&#9670;&nbsp;</a></span>SNMP_GENTRAP_WARMSTART</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SNMP_GENTRAP_WARMSTART&#160;&#160;&#160;1</td>
</tr>
</table>
</div><div class="memdoc">
<p>Generic trap: warm start </p>
</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_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li><li class="navelem"><a class="el" href="dir_4e6b3cf33a61b6caac9c8ac30c866f37.html">lwip</a></li><li class="navelem"><a class="el" href="dir_f9284811ac594eafdc3134d5f8b945cb.html">apps</a></li><li class="navelem"><a class="el" href="apps_2snmp_8h.html">snmp.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,31 @@
var apps_2snmp_8h =
[
[ "snmp_varbind", "structsnmp__varbind.html", "structsnmp__varbind" ],
[ "SNMP_GENTRAP_AUTH_FAILURE", "apps_2snmp_8h.html#aaf312d8bdbeed2c02560321ab24a022f", null ],
[ "SNMP_GENTRAP_COLDSTART", "apps_2snmp_8h.html#ae9310bbe1948b3c3bc64c073d4621019", null ],
[ "SNMP_GENTRAP_EGP_NEIGHBOR_LOSS", "apps_2snmp_8h.html#ac1cd822650d9ac66d0333a5ad600cfee", null ],
[ "SNMP_GENTRAP_ENTERPRISE_SPECIFIC", "apps_2snmp_8h.html#ab3691cecfa911baa52ccf6054022ba43", null ],
[ "SNMP_GENTRAP_LINKDOWN", "apps_2snmp_8h.html#a1856efbe83199f456c34a4e5139dfb16", null ],
[ "SNMP_GENTRAP_LINKUP", "apps_2snmp_8h.html#afa665cdc02ccd5ee9fe0c4cb1b792186", null ],
[ "SNMP_GENTRAP_WARMSTART", "apps_2snmp_8h.html#a9a2e5824deab50e639b01181307a0926", null ],
[ "snmp_authfail_trap", "group__snmp__traps.html#gaf6d0a95a3a406d8ea00849c07aca05ee", null ],
[ "snmp_coldstart_trap", "group__snmp__traps.html#gaa8a49d1a6a207740ba44e27b5bbc22be", null ],
[ "snmp_get_auth_traps_enabled", "group__snmp__traps.html#ga7804a22615bd9b3a323a3f48a9fb8cb7", null ],
[ "snmp_get_community", "group__snmp__core.html#gacf277cbca915275190426aeef4cfb103", null ],
[ "snmp_get_community_trap", "group__snmp__traps.html#gafdd3299e145f53cc826cc11a469f8409", null ],
[ "snmp_get_community_write", "group__snmp__core.html#gaba31b6f1816661df5a3b7f2076ee6ec0", null ],
[ "snmp_get_device_enterprise_oid", "group__snmp__core.html#ga4dff82dda2553b9554a9f98561852a50", null ],
[ "snmp_init", "group__snmp__core.html#ga4d88f2fc7655280384131d543e0d83e5", null ],
[ "snmp_send_trap", "group__snmp__traps.html#ga96cc7af0118d75049609872ea41187cd", null ],
[ "snmp_send_trap_generic", "group__snmp__traps.html#ga0e044259289cb690197173f93c17607d", null ],
[ "snmp_send_trap_specific", "group__snmp__traps.html#ga56bdce04e9e77cb3f8a872718cd273d1", null ],
[ "snmp_set_auth_traps_enabled", "group__snmp__traps.html#gacaf816ff917f7b7e5d00ed6c9f79b51c", null ],
[ "snmp_set_community", "group__snmp__core.html#ga30cc587a260757fdb2b81d462f430ef1", null ],
[ "snmp_set_community_trap", "group__snmp__traps.html#ga5631711f357b6610be7e93b1c6d87760", null ],
[ "snmp_set_community_write", "group__snmp__core.html#ga341461766863cff46a44e5f431f2da01", null ],
[ "snmp_set_device_enterprise_oid", "group__snmp__core.html#gacc71ac857bf9215f06a624dda09abe3a", null ],
[ "snmp_set_mibs", "group__snmp__core.html#ga29c76474971f25d038fd486447c70e21", null ],
[ "snmp_set_write_callback", "group__snmp__core.html#gaff6a6b39322e92862ab55cfcddfe254b", null ],
[ "snmp_trap_dst_enable", "group__snmp__traps.html#gab101505be59778cf0f2f1ac40bcf3f32", null ],
[ "snmp_trap_dst_ip_set", "group__snmp__traps.html#ga15e4afbf80ed2260850842e6608c6d86", null ]
];
@@ -0,0 +1,168 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/include/lwip/arch.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('arch_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#define-members">Macros</a> </div>
<div class="headertitle">
<div class="title">arch.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;arch/cc.h&quot;</code><br />
<code>#include &lt;stdio.h&gt;</code><br />
<code>#include &lt;stdlib.h&gt;</code><br />
<code>#include &lt;stddef.h&gt;</code><br />
<code>#include &lt;stdint.h&gt;</code><br />
<code>#include &lt;inttypes.h&gt;</code><br />
<code>#include &lt;limits.h&gt;</code><br />
<code>#include &lt;ctype.h&gt;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga1771b7fb65ee640524d0052f229768c3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga1771b7fb65ee640524d0052f229768c3">BYTE_ORDER</a>&#160;&#160;&#160;LITTLE_ENDIAN</td></tr>
<tr class="separator:ga1771b7fb65ee640524d0052f229768c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga77370c377781ee7489e30eaf772ea05a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga77370c377781ee7489e30eaf772ea05a">LWIP_RAND</a>()&#160;&#160;&#160;((u32_t)rand())</td></tr>
<tr class="separator:ga77370c377781ee7489e30eaf772ea05a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaccef167be13a500ce30036030a9b142b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#gaccef167be13a500ce30036030a9b142b">LWIP_PLATFORM_DIAG</a>(x)&#160;&#160;&#160;do {printf x;} while(0)</td></tr>
<tr class="separator:gaccef167be13a500ce30036030a9b142b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7e8bcd0282525704d6dd596bdd1b47d0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga7e8bcd0282525704d6dd596bdd1b47d0">LWIP_PLATFORM_ASSERT</a>(x)</td></tr>
<tr class="separator:ga7e8bcd0282525704d6dd596bdd1b47d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga53954d507c09e521ec0d44a2450bb89d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga53954d507c09e521ec0d44a2450bb89d">LWIP_NO_STDDEF_H</a>&#160;&#160;&#160;0</td></tr>
<tr class="separator:ga53954d507c09e521ec0d44a2450bb89d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga122c754db96ecad23bc6f4541d6360c1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga122c754db96ecad23bc6f4541d6360c1">LWIP_NO_STDINT_H</a>&#160;&#160;&#160;0</td></tr>
<tr class="separator:ga122c754db96ecad23bc6f4541d6360c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5bf52d6f2729d0c8afd365f69d7d4373"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga5bf52d6f2729d0c8afd365f69d7d4373">LWIP_NO_INTTYPES_H</a>&#160;&#160;&#160;0</td></tr>
<tr class="separator:ga5bf52d6f2729d0c8afd365f69d7d4373"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gade9c8513419a799cd78a07ae894bb805"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#gade9c8513419a799cd78a07ae894bb805">LWIP_NO_LIMITS_H</a>&#160;&#160;&#160;0</td></tr>
<tr class="separator:gade9c8513419a799cd78a07ae894bb805"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6871ce1e92ae09cdad39a9b230a3a800"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga6871ce1e92ae09cdad39a9b230a3a800">LWIP_NO_CTYPE_H</a>&#160;&#160;&#160;0</td></tr>
<tr class="separator:ga6871ce1e92ae09cdad39a9b230a3a800"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa0dd3f76dd9a837feaac61fedc0dbe72"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#gaa0dd3f76dd9a837feaac61fedc0dbe72">LWIP_CONST_CAST</a>(target_type, val)&#160;&#160;&#160;((target_type)((ptrdiff_t)val))</td></tr>
<tr class="separator:gaa0dd3f76dd9a837feaac61fedc0dbe72"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaade87973d72135b0b3afccfff4f62eb8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#gaade87973d72135b0b3afccfff4f62eb8">LWIP_ALIGNMENT_CAST</a>(target_type, val)&#160;&#160;&#160;<a class="el" href="group__compiler__abstraction.html#gaa0dd3f76dd9a837feaac61fedc0dbe72">LWIP_CONST_CAST</a>(target_type, val)</td></tr>
<tr class="separator:gaade87973d72135b0b3afccfff4f62eb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga683e5c35d3263fe3145e6a6bc546604a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga683e5c35d3263fe3145e6a6bc546604a">LWIP_PTR_NUMERIC_CAST</a>(target_type, val)&#160;&#160;&#160;<a class="el" href="group__compiler__abstraction.html#gaa0dd3f76dd9a837feaac61fedc0dbe72">LWIP_CONST_CAST</a>(target_type, val)</td></tr>
<tr class="separator:ga683e5c35d3263fe3145e6a6bc546604a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4488578f18ad1a76e4fa8bc288c51446"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga4488578f18ad1a76e4fa8bc288c51446">LWIP_PACKED_CAST</a>(target_type, val)&#160;&#160;&#160;<a class="el" href="group__compiler__abstraction.html#gaa0dd3f76dd9a837feaac61fedc0dbe72">LWIP_CONST_CAST</a>(target_type, val)</td></tr>
<tr class="separator:ga4488578f18ad1a76e4fa8bc288c51446"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga651bb349041669fe717b19f127ef16c0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga651bb349041669fe717b19f127ef16c0">LWIP_DECLARE_MEMORY_ALIGNED</a>(variable_name, size)&#160;&#160;&#160;u8_t variable_name[<a class="el" href="group__compiler__abstraction.html#ga25591dcb72fccc7b5dc46fbc1959694e">LWIP_MEM_ALIGN_BUFFER</a>(size)]</td></tr>
<tr class="separator:ga651bb349041669fe717b19f127ef16c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaef204be511fd32f681b55abc08e9ae18"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#gaef204be511fd32f681b55abc08e9ae18">LWIP_MEM_ALIGN_SIZE</a>(size)&#160;&#160;&#160;(((size) + <a class="el" href="group__lwip__opts__mem.html#ga97343214666ee6dcb18c0bd77b441ea7">MEM_ALIGNMENT</a> - 1U) &amp; ~(MEM_ALIGNMENT-1U))</td></tr>
<tr class="separator:gaef204be511fd32f681b55abc08e9ae18"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga25591dcb72fccc7b5dc46fbc1959694e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga25591dcb72fccc7b5dc46fbc1959694e">LWIP_MEM_ALIGN_BUFFER</a>(size)&#160;&#160;&#160;(((size) + <a class="el" href="group__lwip__opts__mem.html#ga97343214666ee6dcb18c0bd77b441ea7">MEM_ALIGNMENT</a> - 1U))</td></tr>
<tr class="separator:ga25591dcb72fccc7b5dc46fbc1959694e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa8e8724eb1c220cbbb90de9e175ce1dc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#gaa8e8724eb1c220cbbb90de9e175ce1dc">LWIP_MEM_ALIGN</a>(addr)&#160;&#160;&#160;((void *)(((mem_ptr_t)(addr) + <a class="el" href="group__lwip__opts__mem.html#ga97343214666ee6dcb18c0bd77b441ea7">MEM_ALIGNMENT</a> - 1) &amp; ~(mem_ptr_t)(<a class="el" href="group__lwip__opts__mem.html#ga97343214666ee6dcb18c0bd77b441ea7">MEM_ALIGNMENT</a>-1)))</td></tr>
<tr class="separator:gaa8e8724eb1c220cbbb90de9e175ce1dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga73199061891adf1b912d20835c7d5e96"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga73199061891adf1b912d20835c7d5e96">PACK_STRUCT_BEGIN</a></td></tr>
<tr class="separator:ga73199061891adf1b912d20835c7d5e96"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga465fef70f294e21cbf4ea51fc342f20e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga465fef70f294e21cbf4ea51fc342f20e">PACK_STRUCT_END</a></td></tr>
<tr class="separator:ga465fef70f294e21cbf4ea51fc342f20e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga33623da05bb55497534c3dc26ebebeb2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga33623da05bb55497534c3dc26ebebeb2">PACK_STRUCT_STRUCT</a></td></tr>
<tr class="separator:ga33623da05bb55497534c3dc26ebebeb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaab0b988124e37a978d9a88e7c1c778e0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#gaab0b988124e37a978d9a88e7c1c778e0">PACK_STRUCT_FIELD</a>(x)&#160;&#160;&#160;x</td></tr>
<tr class="separator:gaab0b988124e37a978d9a88e7c1c778e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa8f75e4117374c2d09fbda5566e40b62"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#gaa8f75e4117374c2d09fbda5566e40b62">PACK_STRUCT_FLD_8</a>(x)&#160;&#160;&#160;<a class="el" href="group__compiler__abstraction.html#gaab0b988124e37a978d9a88e7c1c778e0">PACK_STRUCT_FIELD</a>(x)</td></tr>
<tr class="separator:gaa8f75e4117374c2d09fbda5566e40b62"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacc89e224363eb0ebca24b64d925c3cb7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#gacc89e224363eb0ebca24b64d925c3cb7">PACK_STRUCT_FLD_S</a>(x)&#160;&#160;&#160;<a class="el" href="group__compiler__abstraction.html#gaab0b988124e37a978d9a88e7c1c778e0">PACK_STRUCT_FIELD</a>(x)</td></tr>
<tr class="separator:gacc89e224363eb0ebca24b64d925c3cb7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga57b90d36d8bea3798a5d1815945fd8ef"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga57b90d36d8bea3798a5d1815945fd8ef">PACK_STRUCT_USE_INCLUDES</a></td></tr>
<tr class="separator:ga57b90d36d8bea3798a5d1815945fd8ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga70624a5deb8b9199406372a7f3603ecf"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga70624a5deb8b9199406372a7f3603ecf">LWIP_UNUSED_ARG</a>(x)&#160;&#160;&#160;(void)x</td></tr>
<tr class="separator:ga70624a5deb8b9199406372a7f3603ecf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8e2cba4c97dd38f4d517ed21cf109ade"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__compiler__abstraction.html#ga8e2cba4c97dd38f4d517ed21cf109ade">LWIP_PROVIDE_ERRNO</a></td></tr>
<tr class="separator:ga8e2cba4c97dd38f4d517ed21cf109ade"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Support for different processor and compiler architectures </p>
</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_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li><li class="navelem"><a class="el" href="dir_4e6b3cf33a61b6caac9c8ac30c866f37.html">lwip</a></li><li class="navelem"><a class="el" href="arch_8h.html">arch.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,29 @@
var arch_8h =
[
[ "BYTE_ORDER", "group__compiler__abstraction.html#ga1771b7fb65ee640524d0052f229768c3", null ],
[ "LWIP_ALIGNMENT_CAST", "group__compiler__abstraction.html#gaade87973d72135b0b3afccfff4f62eb8", null ],
[ "LWIP_CONST_CAST", "group__compiler__abstraction.html#gaa0dd3f76dd9a837feaac61fedc0dbe72", null ],
[ "LWIP_DECLARE_MEMORY_ALIGNED", "group__compiler__abstraction.html#ga651bb349041669fe717b19f127ef16c0", null ],
[ "LWIP_MEM_ALIGN", "group__compiler__abstraction.html#gaa8e8724eb1c220cbbb90de9e175ce1dc", null ],
[ "LWIP_MEM_ALIGN_BUFFER", "group__compiler__abstraction.html#ga25591dcb72fccc7b5dc46fbc1959694e", null ],
[ "LWIP_MEM_ALIGN_SIZE", "group__compiler__abstraction.html#gaef204be511fd32f681b55abc08e9ae18", null ],
[ "LWIP_NO_CTYPE_H", "group__compiler__abstraction.html#ga6871ce1e92ae09cdad39a9b230a3a800", null ],
[ "LWIP_NO_INTTYPES_H", "group__compiler__abstraction.html#ga5bf52d6f2729d0c8afd365f69d7d4373", null ],
[ "LWIP_NO_LIMITS_H", "group__compiler__abstraction.html#gade9c8513419a799cd78a07ae894bb805", null ],
[ "LWIP_NO_STDDEF_H", "group__compiler__abstraction.html#ga53954d507c09e521ec0d44a2450bb89d", null ],
[ "LWIP_NO_STDINT_H", "group__compiler__abstraction.html#ga122c754db96ecad23bc6f4541d6360c1", null ],
[ "LWIP_PACKED_CAST", "group__compiler__abstraction.html#ga4488578f18ad1a76e4fa8bc288c51446", null ],
[ "LWIP_PLATFORM_ASSERT", "group__compiler__abstraction.html#ga7e8bcd0282525704d6dd596bdd1b47d0", null ],
[ "LWIP_PLATFORM_DIAG", "group__compiler__abstraction.html#gaccef167be13a500ce30036030a9b142b", null ],
[ "LWIP_PROVIDE_ERRNO", "group__compiler__abstraction.html#ga8e2cba4c97dd38f4d517ed21cf109ade", null ],
[ "LWIP_PTR_NUMERIC_CAST", "group__compiler__abstraction.html#ga683e5c35d3263fe3145e6a6bc546604a", null ],
[ "LWIP_RAND", "group__compiler__abstraction.html#ga77370c377781ee7489e30eaf772ea05a", null ],
[ "LWIP_UNUSED_ARG", "group__compiler__abstraction.html#ga70624a5deb8b9199406372a7f3603ecf", null ],
[ "PACK_STRUCT_BEGIN", "group__compiler__abstraction.html#ga73199061891adf1b912d20835c7d5e96", null ],
[ "PACK_STRUCT_END", "group__compiler__abstraction.html#ga465fef70f294e21cbf4ea51fc342f20e", null ],
[ "PACK_STRUCT_FIELD", "group__compiler__abstraction.html#gaab0b988124e37a978d9a88e7c1c778e0", null ],
[ "PACK_STRUCT_FLD_8", "group__compiler__abstraction.html#gaa8f75e4117374c2d09fbda5566e40b62", null ],
[ "PACK_STRUCT_FLD_S", "group__compiler__abstraction.html#gacc89e224363eb0ebca24b64d925c3cb7", null ],
[ "PACK_STRUCT_STRUCT", "group__compiler__abstraction.html#ga33623da05bb55497534c3dc26ebebeb2", null ],
[ "PACK_STRUCT_USE_INCLUDES", "group__compiler__abstraction.html#ga57b90d36d8bea3798a5d1815945fd8ef", null ]
];
@@ -0,0 +1,285 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/core/ipv4/autoip.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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('autoip_8c.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#define-members">Macros</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">autoip.c File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="mem_8h.html">lwip/mem.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="ip__addr_8h.html">lwip/ip_addr.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="netif_8h.html">lwip/netif.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="autoip_8h.html">lwip/autoip.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="lwip_2etharp_8h.html">lwip/etharp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="prot_2autoip_8h.html">lwip/prot/autoip.h</a>&quot;</code><br />
<code>#include &lt;string.h&gt;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a634535156cc1a8cf9f04d3d5c74f8a59"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="autoip_8c.html#a634535156cc1a8cf9f04d3d5c74f8a59">LWIP_AUTOIP_RAND</a>(<a class="el" href="structnetif.html">netif</a>)</td></tr>
<tr class="separator:a634535156cc1a8cf9f04d3d5c74f8a59"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acec75069f6e6ecbe200c5691e56ecd43"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="autoip_8c.html#acec75069f6e6ecbe200c5691e56ecd43">LWIP_AUTOIP_CREATE_SEED_ADDR</a>(<a class="el" href="structnetif.html">netif</a>)</td></tr>
<tr class="separator:acec75069f6e6ecbe200c5691e56ecd43"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga2122c0b2518b371559fef5ec1d2aed90"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__autoip.html#ga2122c0b2518b371559fef5ec1d2aed90">autoip_set_struct</a> (struct <a class="el" href="structnetif.html">netif</a> *<a class="el" href="structnetif.html">netif</a>, struct <a class="el" href="structautoip.html">autoip</a> *<a class="el" href="structautoip.html">autoip</a>)</td></tr>
<tr class="separator:ga2122c0b2518b371559fef5ec1d2aed90"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1461f5826ebefc050e0d63013818d1e8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__autoip.html#ga1461f5826ebefc050e0d63013818d1e8">autoip_start</a> (struct <a class="el" href="structnetif.html">netif</a> *<a class="el" href="structnetif.html">netif</a>)</td></tr>
<tr class="separator:ga1461f5826ebefc050e0d63013818d1e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a11df7a20d52680cd8c1c18fba2b91e9e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="autoip_8c.html#a11df7a20d52680cd8c1c18fba2b91e9e">autoip_network_changed</a> (struct <a class="el" href="structnetif.html">netif</a> *<a class="el" href="structnetif.html">netif</a>)</td></tr>
<tr class="separator:a11df7a20d52680cd8c1c18fba2b91e9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga58a4dce658dd1263e84eb982f62587d4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__autoip.html#ga58a4dce658dd1263e84eb982f62587d4">autoip_stop</a> (struct <a class="el" href="structnetif.html">netif</a> *<a class="el" href="structnetif.html">netif</a>)</td></tr>
<tr class="separator:ga58a4dce658dd1263e84eb982f62587d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a746fc1d7db1bf1617afae166c9d92c2d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="autoip_8c.html#a746fc1d7db1bf1617afae166c9d92c2d">autoip_tmr</a> (void)</td></tr>
<tr class="separator:a746fc1d7db1bf1617afae166c9d92c2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acaf2793325c60dc4531c21a3fd55c16e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="autoip_8c.html#acaf2793325c60dc4531c21a3fd55c16e">autoip_arp_reply</a> (struct <a class="el" href="structnetif.html">netif</a> *<a class="el" href="structnetif.html">netif</a>, struct <a class="el" href="structetharp__hdr.html">etharp_hdr</a> *hdr)</td></tr>
<tr class="separator:acaf2793325c60dc4531c21a3fd55c16e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1b4f0c53da17395d9de92a85708a1bb9"><td class="memItemLeft" align="right" valign="top">u8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="autoip_8c.html#a1b4f0c53da17395d9de92a85708a1bb9">autoip_supplied_address</a> (const struct <a class="el" href="structnetif.html">netif</a> *<a class="el" href="structnetif.html">netif</a>)</td></tr>
<tr class="separator:a1b4f0c53da17395d9de92a85708a1bb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>AutoIP Automatic LinkLocal IP Configuration</p>
<p>This is a AutoIP implementation for the lwIP TCP/IP stack. It aims to conform with RFC 3927. </p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a id="acec75069f6e6ecbe200c5691e56ecd43"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acec75069f6e6ecbe200c5691e56ecd43">&#9670;&nbsp;</a></span>LWIP_AUTOIP_CREATE_SEED_ADDR</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LWIP_AUTOIP_CREATE_SEED_ADDR</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><a class="el" href="structnetif.html">netif</a></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><a class="code" href="def_8c.html#a14f94347a5b9b9e3602705b75b7ae524">lwip_htonl</a>(AUTOIP_RANGE_START + ((u32_t)(((u8_t)(<a class="code" href="structnetif.html">netif</a>-&gt;<a class="code" href="structnetif.html#aee967965d999fc1a4c40a66709304e69">hwaddr</a>[4])) | \</div><div class="line"> ((u32_t)((u8_t)(<a class="code" href="structnetif.html">netif</a>-&gt;<a class="code" href="structnetif.html#aee967965d999fc1a4c40a66709304e69">hwaddr</a>[5]))) &lt;&lt; 8)))</div><div class="ttc" id="structnetif_html_aee967965d999fc1a4c40a66709304e69"><div class="ttname"><a href="structnetif.html#aee967965d999fc1a4c40a66709304e69">netif::hwaddr</a></div><div class="ttdeci">u8_t hwaddr[6U]</div><div class="ttdef"><b>Definition:</b> netif.h:341</div></div>
<div class="ttc" id="def_8c_html_a14f94347a5b9b9e3602705b75b7ae524"><div class="ttname"><a href="def_8c.html#a14f94347a5b9b9e3602705b75b7ae524">lwip_htonl</a></div><div class="ttdeci">u32_t lwip_htonl(u32_t n)</div><div class="ttdef"><b>Definition:</b> def.c:90</div></div>
<div class="ttc" id="structnetif_html"><div class="ttname"><a href="structnetif.html">netif</a></div><div class="ttdef"><b>Definition:</b> netif.h:260</div></div>
</div><!-- fragment --><p>Macro that generates the initial IP address to be tried by AUTOIP. If you want to override this, define it to something else in lwipopts.h. </p>
</div>
</div>
<a id="a634535156cc1a8cf9f04d3d5c74f8a59"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a634535156cc1a8cf9f04d3d5c74f8a59">&#9670;&nbsp;</a></span>LWIP_AUTOIP_RAND</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LWIP_AUTOIP_RAND</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><a class="el" href="structnetif.html">netif</a></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">( (((u32_t)((<a class="code" href="structnetif.html">netif</a>-&gt;<a class="code" href="structnetif.html#aee967965d999fc1a4c40a66709304e69">hwaddr</a>[5]) &amp; 0xff) &lt;&lt; 24) | \</div><div class="line"> ((u32_t)((<a class="code" href="structnetif.html">netif</a>-&gt;<a class="code" href="structnetif.html#aee967965d999fc1a4c40a66709304e69">hwaddr</a>[3]) &amp; 0xff) &lt;&lt; 16) | \</div><div class="line"> ((u32_t)((<a class="code" href="structnetif.html">netif</a>-&gt;<a class="code" href="structnetif.html#aee967965d999fc1a4c40a66709304e69">hwaddr</a>[2]) &amp; 0xff) &lt;&lt; 8) | \</div><div class="line"> ((u32_t)((<a class="code" href="structnetif.html">netif</a>-&gt;<a class="code" href="structnetif.html#aee967965d999fc1a4c40a66709304e69">hwaddr</a>[4]) &amp; 0xff))) + \</div><div class="line"> (netif_autoip_data(<a class="code" href="structnetif.html">netif</a>)? netif_autoip_data(<a class="code" href="structnetif.html">netif</a>)-&gt;tried_llipaddr : 0))</div><div class="ttc" id="structnetif_html_aee967965d999fc1a4c40a66709304e69"><div class="ttname"><a href="structnetif.html#aee967965d999fc1a4c40a66709304e69">netif::hwaddr</a></div><div class="ttdeci">u8_t hwaddr[6U]</div><div class="ttdef"><b>Definition:</b> netif.h:341</div></div>
<div class="ttc" id="structnetif_html"><div class="ttname"><a href="structnetif.html">netif</a></div><div class="ttdef"><b>Definition:</b> netif.h:260</div></div>
</div><!-- fragment --><p>Pseudo random macro based on netif informations. You could use "rand()" from the C Library if you define LWIP_AUTOIP_RAND in lwipopts.h </p>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="acaf2793325c60dc4531c21a3fd55c16e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acaf2793325c60dc4531c21a3fd55c16e">&#9670;&nbsp;</a></span>autoip_arp_reply()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void autoip_arp_reply </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structnetif.html">netif</a> *&#160;</td>
<td class="paramname"><em>netif</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct <a class="el" href="structetharp__hdr.html">etharp_hdr</a> *&#160;</td>
<td class="paramname"><em>hdr</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Handles every incoming ARP Packet, called by <a class="el" href="etharp_8c.html#a540a5506979693ef9ac4496db9bfa7d6">etharp_input()</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">netif</td><td>network interface to use for autoip processing </td></tr>
<tr><td class="paramname">hdr</td><td>Incoming ARP packet </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a11df7a20d52680cd8c1c18fba2b91e9e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a11df7a20d52680cd8c1c18fba2b91e9e">&#9670;&nbsp;</a></span>autoip_network_changed()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void autoip_network_changed </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structnetif.html">netif</a> *&#160;</td>
<td class="paramname"><em>netif</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Handle a possible change in the network configuration.</p>
<p>If there is an AutoIP address configured, take the interface down and begin probing with the same address. </p>
</div>
</div>
<a id="a1b4f0c53da17395d9de92a85708a1bb9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1b4f0c53da17395d9de92a85708a1bb9">&#9670;&nbsp;</a></span>autoip_supplied_address()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">u8_t autoip_supplied_address </td>
<td>(</td>
<td class="paramtype">const struct <a class="el" href="structnetif.html">netif</a> *&#160;</td>
<td class="paramname"><em>netif</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>check if AutoIP supplied netif-&gt;<a class="el" href="structip__addr.html">ip_addr</a></p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">netif</td><td>the netif to check </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>1 if AutoIP supplied netif-&gt;<a class="el" href="structip__addr.html">ip_addr</a> (state BOUND or ANNOUNCING), 0 otherwise </dd></dl>
</div>
</div>
<a id="a746fc1d7db1bf1617afae166c9d92c2d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a746fc1d7db1bf1617afae166c9d92c2d">&#9670;&nbsp;</a></span>autoip_tmr()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void autoip_tmr </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Has to be called in loop every AUTOIP_TMR_INTERVAL milliseconds </p>
</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="dir_a32e111ee6805cfc63488fd2d37f2390.html">ipv4</a></li><li class="navelem"><a class="el" href="autoip_8c.html">autoip.c</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,12 @@
var autoip_8c =
[
[ "LWIP_AUTOIP_CREATE_SEED_ADDR", "autoip_8c.html#acec75069f6e6ecbe200c5691e56ecd43", null ],
[ "LWIP_AUTOIP_RAND", "autoip_8c.html#a634535156cc1a8cf9f04d3d5c74f8a59", null ],
[ "autoip_arp_reply", "autoip_8c.html#acaf2793325c60dc4531c21a3fd55c16e", null ],
[ "autoip_network_changed", "autoip_8c.html#a11df7a20d52680cd8c1c18fba2b91e9e", null ],
[ "autoip_set_struct", "group__autoip.html#ga2122c0b2518b371559fef5ec1d2aed90", null ],
[ "autoip_start", "group__autoip.html#ga1461f5826ebefc050e0d63013818d1e8", null ],
[ "autoip_stop", "group__autoip.html#ga58a4dce658dd1263e84eb982f62587d4", null ],
[ "autoip_supplied_address", "autoip_8c.html#a1b4f0c53da17395d9de92a85708a1bb9", null ],
[ "autoip_tmr", "autoip_8c.html#a746fc1d7db1bf1617afae166c9d92c2d", null ]
];
@@ -0,0 +1,276 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/include/lwip/autoip.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('autoip_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">autoip.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="netif_8h.html">lwip/netif.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="lwip_2etharp_8h.html">lwip/etharp.h</a>&quot;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structautoip.html">autoip</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a8986919a452ab77eec9a199ff6668e92"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="autoip_8h.html#a8986919a452ab77eec9a199ff6668e92">AUTOIP_TMR_INTERVAL</a>&#160;&#160;&#160;100</td></tr>
<tr class="separator:a8986919a452ab77eec9a199ff6668e92"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaeb4b778fce078bee84144ab50916b15"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="autoip_8h.html#aaeb4b778fce078bee84144ab50916b15">autoip_remove_struct</a>(<a class="el" href="structnetif.html">netif</a>)&#160;&#160;&#160;do { (<a class="el" href="structnetif.html">netif</a>)-&gt;<a class="el" href="structautoip.html">autoip</a> = NULL; } while (0)</td></tr>
<tr class="separator:aaeb4b778fce078bee84144ab50916b15"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga2122c0b2518b371559fef5ec1d2aed90"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__autoip.html#ga2122c0b2518b371559fef5ec1d2aed90">autoip_set_struct</a> (struct <a class="el" href="structnetif.html">netif</a> *<a class="el" href="structnetif.html">netif</a>, struct <a class="el" href="structautoip.html">autoip</a> *<a class="el" href="structautoip.html">autoip</a>)</td></tr>
<tr class="separator:ga2122c0b2518b371559fef5ec1d2aed90"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1461f5826ebefc050e0d63013818d1e8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__autoip.html#ga1461f5826ebefc050e0d63013818d1e8">autoip_start</a> (struct <a class="el" href="structnetif.html">netif</a> *<a class="el" href="structnetif.html">netif</a>)</td></tr>
<tr class="separator:ga1461f5826ebefc050e0d63013818d1e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga58a4dce658dd1263e84eb982f62587d4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__autoip.html#ga58a4dce658dd1263e84eb982f62587d4">autoip_stop</a> (struct <a class="el" href="structnetif.html">netif</a> *<a class="el" href="structnetif.html">netif</a>)</td></tr>
<tr class="separator:ga58a4dce658dd1263e84eb982f62587d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acaf2793325c60dc4531c21a3fd55c16e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="autoip_8h.html#acaf2793325c60dc4531c21a3fd55c16e">autoip_arp_reply</a> (struct <a class="el" href="structnetif.html">netif</a> *<a class="el" href="structnetif.html">netif</a>, struct <a class="el" href="structetharp__hdr.html">etharp_hdr</a> *hdr)</td></tr>
<tr class="separator:acaf2793325c60dc4531c21a3fd55c16e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a746fc1d7db1bf1617afae166c9d92c2d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="autoip_8h.html#a746fc1d7db1bf1617afae166c9d92c2d">autoip_tmr</a> (void)</td></tr>
<tr class="separator:a746fc1d7db1bf1617afae166c9d92c2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a11df7a20d52680cd8c1c18fba2b91e9e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="autoip_8h.html#a11df7a20d52680cd8c1c18fba2b91e9e">autoip_network_changed</a> (struct <a class="el" href="structnetif.html">netif</a> *<a class="el" href="structnetif.html">netif</a>)</td></tr>
<tr class="separator:a11df7a20d52680cd8c1c18fba2b91e9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1b4f0c53da17395d9de92a85708a1bb9"><td class="memItemLeft" align="right" valign="top">u8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="autoip_8h.html#a1b4f0c53da17395d9de92a85708a1bb9">autoip_supplied_address</a> (const struct <a class="el" href="structnetif.html">netif</a> *<a class="el" href="structnetif.html">netif</a>)</td></tr>
<tr class="separator:a1b4f0c53da17395d9de92a85708a1bb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>AutoIP Automatic LinkLocal IP Configuration </p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a id="aaeb4b778fce078bee84144ab50916b15"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaeb4b778fce078bee84144ab50916b15">&#9670;&nbsp;</a></span>autoip_remove_struct</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define autoip_remove_struct</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><a class="el" href="structnetif.html">netif</a></td><td>)</td>
<td>&#160;&#160;&#160;do { (<a class="el" href="structnetif.html">netif</a>)-&gt;<a class="el" href="structautoip.html">autoip</a> = NULL; } while (0)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Remove a struct autoip previously set to the netif using <a class="el" href="group__autoip.html#ga2122c0b2518b371559fef5ec1d2aed90">autoip_set_struct()</a> </p>
</div>
</div>
<a id="a8986919a452ab77eec9a199ff6668e92"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8986919a452ab77eec9a199ff6668e92">&#9670;&nbsp;</a></span>AUTOIP_TMR_INTERVAL</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define AUTOIP_TMR_INTERVAL&#160;&#160;&#160;100</td>
</tr>
</table>
</div><div class="memdoc">
<p>AutoIP Timing </p>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="acaf2793325c60dc4531c21a3fd55c16e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acaf2793325c60dc4531c21a3fd55c16e">&#9670;&nbsp;</a></span>autoip_arp_reply()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void autoip_arp_reply </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structnetif.html">netif</a> *&#160;</td>
<td class="paramname"><em>netif</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct <a class="el" href="structetharp__hdr.html">etharp_hdr</a> *&#160;</td>
<td class="paramname"><em>hdr</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Handles every incoming ARP Packet, called by <a class="el" href="etharp_8c.html#a540a5506979693ef9ac4496db9bfa7d6">etharp_input()</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">netif</td><td>network interface to use for autoip processing </td></tr>
<tr><td class="paramname">hdr</td><td>Incoming ARP packet </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a11df7a20d52680cd8c1c18fba2b91e9e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a11df7a20d52680cd8c1c18fba2b91e9e">&#9670;&nbsp;</a></span>autoip_network_changed()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void autoip_network_changed </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structnetif.html">netif</a> *&#160;</td>
<td class="paramname"><em>netif</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Handle a possible change in the network configuration.</p>
<p>If there is an AutoIP address configured, take the interface down and begin probing with the same address. </p>
</div>
</div>
<a id="a1b4f0c53da17395d9de92a85708a1bb9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1b4f0c53da17395d9de92a85708a1bb9">&#9670;&nbsp;</a></span>autoip_supplied_address()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">u8_t autoip_supplied_address </td>
<td>(</td>
<td class="paramtype">const struct <a class="el" href="structnetif.html">netif</a> *&#160;</td>
<td class="paramname"><em>netif</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>check if AutoIP supplied netif-&gt;<a class="el" href="structip__addr.html">ip_addr</a></p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">netif</td><td>the netif to check </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>1 if AutoIP supplied netif-&gt;<a class="el" href="structip__addr.html">ip_addr</a> (state BOUND or ANNOUNCING), 0 otherwise </dd></dl>
</div>
</div>
<a id="a746fc1d7db1bf1617afae166c9d92c2d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a746fc1d7db1bf1617afae166c9d92c2d">&#9670;&nbsp;</a></span>autoip_tmr()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void autoip_tmr </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Has to be called in loop every AUTOIP_TMR_INTERVAL milliseconds </p>
</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_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li><li class="navelem"><a class="el" href="dir_4e6b3cf33a61b6caac9c8ac30c866f37.html">lwip</a></li><li class="navelem"><a class="el" href="autoip_8h.html">autoip.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,13 @@
var autoip_8h =
[
[ "autoip", "structautoip.html", "structautoip" ],
[ "autoip_remove_struct", "autoip_8h.html#aaeb4b778fce078bee84144ab50916b15", null ],
[ "AUTOIP_TMR_INTERVAL", "autoip_8h.html#a8986919a452ab77eec9a199ff6668e92", null ],
[ "autoip_arp_reply", "autoip_8h.html#acaf2793325c60dc4531c21a3fd55c16e", null ],
[ "autoip_network_changed", "autoip_8h.html#a11df7a20d52680cd8c1c18fba2b91e9e", null ],
[ "autoip_set_struct", "group__autoip.html#ga2122c0b2518b371559fef5ec1d2aed90", null ],
[ "autoip_start", "group__autoip.html#ga1461f5826ebefc050e0d63013818d1e8", null ],
[ "autoip_stop", "group__autoip.html#ga58a4dce658dd1263e84eb982f62587d4", null ],
[ "autoip_supplied_address", "autoip_8h.html#a1b4f0c53da17395d9de92a85708a1bb9", null ],
[ "autoip_tmr", "autoip_8h.html#a746fc1d7db1bf1617afae166c9d92c2d", null ]
];
Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 B

@@ -0,0 +1,124 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/netif/bridgeif.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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('bridgeif_8c.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">bridgeif.c File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="bridgeif_8h.html">netif/bridgeif.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="netif_8h.html">lwip/netif.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="sys_8h.html">lwip/sys.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="lwip_2etharp_8h.html">lwip/etharp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="ethip6_8h.html">lwip/ethip6.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="snmp_8h.html">lwip/snmp.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="timeouts_8h.html">lwip/timeouts.h</a>&quot;</code><br />
<code>#include &lt;string.h&gt;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gad20fea2657431d4a0905be80cb0b4666"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif.html#gad20fea2657431d4a0905be80cb0b4666">bridgeif_fdb_add</a> (struct <a class="el" href="structnetif.html">netif</a> *bridgeif, const struct <a class="el" href="structeth__addr.html">eth_addr</a> *addr, bridgeif_portmask_t ports)</td></tr>
<tr class="separator:gad20fea2657431d4a0905be80cb0b4666"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga79349b1e9d0f944e8abad5a6cfb1c8e8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif.html#ga79349b1e9d0f944e8abad5a6cfb1c8e8">bridgeif_fdb_remove</a> (struct <a class="el" href="structnetif.html">netif</a> *bridgeif, const struct <a class="el" href="structeth__addr.html">eth_addr</a> *addr)</td></tr>
<tr class="separator:ga79349b1e9d0f944e8abad5a6cfb1c8e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga23cc2c5f8fccefc470093840cc53727c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif.html#ga23cc2c5f8fccefc470093840cc53727c">bridgeif_init</a> (struct <a class="el" href="structnetif.html">netif</a> *<a class="el" href="structnetif.html">netif</a>)</td></tr>
<tr class="separator:ga23cc2c5f8fccefc470093840cc53727c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga51b7d1af22f7023aabd8502aadf77c77"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif.html#ga51b7d1af22f7023aabd8502aadf77c77">bridgeif_add_port</a> (struct <a class="el" href="structnetif.html">netif</a> *bridgeif, struct <a class="el" href="structnetif.html">netif</a> *portif)</td></tr>
<tr class="separator:ga51b7d1af22f7023aabd8502aadf77c77"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>lwIP netif implementing an IEEE 802.1D MAC Bridge </p>
</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_900e6f7ff90690cb8edb53323dd38d80.html">netif</a></li><li class="navelem"><a class="el" href="bridgeif_8c.html">bridgeif.c</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,7 @@
var bridgeif_8c =
[
[ "bridgeif_add_port", "group__bridgeif.html#ga51b7d1af22f7023aabd8502aadf77c77", null ],
[ "bridgeif_fdb_add", "group__bridgeif.html#gad20fea2657431d4a0905be80cb0b4666", null ],
[ "bridgeif_fdb_remove", "group__bridgeif.html#ga79349b1e9d0f944e8abad5a6cfb1c8e8", null ],
[ "bridgeif_init", "group__bridgeif.html#ga23cc2c5f8fccefc470093840cc53727c", null ]
];
@@ -0,0 +1,146 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/include/netif/bridgeif.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('bridgeif_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">bridgeif.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="bridgeif__opts_8h.html">netif/bridgeif_opts.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="err_8h.html">lwip/err.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="lwip_2prot_2ethernet_8h.html">lwip/prot/ethernet.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="tcpip_8h.html">lwip/tcpip.h</a>&quot;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structbridgeif__initdata__s.html">bridgeif_initdata_s</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga3d41c7905b61aef3a3b8c61b3af7879f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif.html#ga3d41c7905b61aef3a3b8c61b3af7879f">BRIDGEIF_INITDATA1</a>(max_ports, max_fdb_dynamic_entries, max_fdb_static_entries, ethaddr)&#160;&#160;&#160;{ethaddr, max_ports, max_fdb_dynamic_entries, max_fdb_static_entries}</td></tr>
<tr class="separator:ga3d41c7905b61aef3a3b8c61b3af7879f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaaaeb47fbf1dd6c30cb502343fa0d0741"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif.html#gaaaeb47fbf1dd6c30cb502343fa0d0741">BRIDGEIF_INITDATA2</a>(max_ports, max_fdb_dynamic_entries, max_fdb_static_entries, e0, e1, e2, e3, e4, e5)&#160;&#160;&#160;{{e0, e1, e2, e3, e4, e5}, max_ports, max_fdb_dynamic_entries, max_fdb_static_entries}</td></tr>
<tr class="separator:gaaaeb47fbf1dd6c30cb502343fa0d0741"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:gac47f8ce66bc6dad5dd9829467f93a1bb"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structbridgeif__initdata__s.html">bridgeif_initdata_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif.html#gac47f8ce66bc6dad5dd9829467f93a1bb">bridgeif_initdata_t</a></td></tr>
<tr class="separator:gac47f8ce66bc6dad5dd9829467f93a1bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga23cc2c5f8fccefc470093840cc53727c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif.html#ga23cc2c5f8fccefc470093840cc53727c">bridgeif_init</a> (struct <a class="el" href="structnetif.html">netif</a> *<a class="el" href="structnetif.html">netif</a>)</td></tr>
<tr class="separator:ga23cc2c5f8fccefc470093840cc53727c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga51b7d1af22f7023aabd8502aadf77c77"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif.html#ga51b7d1af22f7023aabd8502aadf77c77">bridgeif_add_port</a> (struct <a class="el" href="structnetif.html">netif</a> *bridgeif, struct <a class="el" href="structnetif.html">netif</a> *portif)</td></tr>
<tr class="separator:ga51b7d1af22f7023aabd8502aadf77c77"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad20fea2657431d4a0905be80cb0b4666"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif.html#gad20fea2657431d4a0905be80cb0b4666">bridgeif_fdb_add</a> (struct <a class="el" href="structnetif.html">netif</a> *bridgeif, const struct <a class="el" href="structeth__addr.html">eth_addr</a> *addr, bridgeif_portmask_t ports)</td></tr>
<tr class="separator:gad20fea2657431d4a0905be80cb0b4666"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga79349b1e9d0f944e8abad5a6cfb1c8e8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__infrastructure__errors.html#gaf02d9da80fd66b4f986d2c53d7231ddb">err_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif.html#ga79349b1e9d0f944e8abad5a6cfb1c8e8">bridgeif_fdb_remove</a> (struct <a class="el" href="structnetif.html">netif</a> *bridgeif, const struct <a class="el" href="structeth__addr.html">eth_addr</a> *addr)</td></tr>
<tr class="separator:ga79349b1e9d0f944e8abad5a6cfb1c8e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad912bfd3ce8e24d0eb48b7dc9de07c39"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif__fdb.html#gad912bfd3ce8e24d0eb48b7dc9de07c39">bridgeif_fdb_update_src</a> (void *fdb_ptr, struct <a class="el" href="structeth__addr.html">eth_addr</a> *src_addr, u8_t port_idx)</td></tr>
<tr class="separator:gad912bfd3ce8e24d0eb48b7dc9de07c39"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga616fb7404be5da79d8092b4a14976750"><td class="memItemLeft" align="right" valign="top">bridgeif_portmask_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif__fdb.html#ga616fb7404be5da79d8092b4a14976750">bridgeif_fdb_get_dst_ports</a> (void *fdb_ptr, struct <a class="el" href="structeth__addr.html">eth_addr</a> *dst_addr)</td></tr>
<tr class="separator:ga616fb7404be5da79d8092b4a14976750"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf7935226ee7f99f964bf0135b6cb9ca0"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif__fdb.html#gaf7935226ee7f99f964bf0135b6cb9ca0">bridgeif_fdb_init</a> (u16_t max_fdb_entries)</td></tr>
<tr class="separator:gaf7935226ee7f99f964bf0135b6cb9ca0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>lwIP netif implementing an IEEE 802.1D MAC Bridge </p>
</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_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li><li class="navelem"><a class="el" href="dir_c9a67764bf8a12cf6b427bb859cbcd0b.html">netif</a></li><li class="navelem"><a class="el" href="bridgeif_8h.html">bridgeif.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,13 @@
var bridgeif_8h =
[
[ "BRIDGEIF_INITDATA1", "group__bridgeif.html#ga3d41c7905b61aef3a3b8c61b3af7879f", null ],
[ "BRIDGEIF_INITDATA2", "group__bridgeif.html#gaaaeb47fbf1dd6c30cb502343fa0d0741", null ],
[ "bridgeif_initdata_t", "group__bridgeif.html#gac47f8ce66bc6dad5dd9829467f93a1bb", null ],
[ "bridgeif_add_port", "group__bridgeif.html#ga51b7d1af22f7023aabd8502aadf77c77", null ],
[ "bridgeif_fdb_add", "group__bridgeif.html#gad20fea2657431d4a0905be80cb0b4666", null ],
[ "bridgeif_fdb_get_dst_ports", "group__bridgeif__fdb.html#ga616fb7404be5da79d8092b4a14976750", null ],
[ "bridgeif_fdb_init", "group__bridgeif__fdb.html#gaf7935226ee7f99f964bf0135b6cb9ca0", null ],
[ "bridgeif_fdb_remove", "group__bridgeif.html#ga79349b1e9d0f944e8abad5a6cfb1c8e8", null ],
[ "bridgeif_fdb_update_src", "group__bridgeif__fdb.html#gad912bfd3ce8e24d0eb48b7dc9de07c39", null ],
[ "bridgeif_init", "group__bridgeif.html#ga23cc2c5f8fccefc470093840cc53727c", null ]
];
@@ -0,0 +1,119 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/netif/bridgeif_fdb.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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('bridgeif__fdb_8c.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">bridgeif_fdb.c File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="bridgeif_8h.html">netif/bridgeif.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="sys_8h.html">lwip/sys.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="mem_8h.html">lwip/mem.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="timeouts_8h.html">lwip/timeouts.h</a>&quot;</code><br />
<code>#include &lt;string.h&gt;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gad912bfd3ce8e24d0eb48b7dc9de07c39"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif__fdb.html#gad912bfd3ce8e24d0eb48b7dc9de07c39">bridgeif_fdb_update_src</a> (void *fdb_ptr, struct <a class="el" href="structeth__addr.html">eth_addr</a> *src_addr, u8_t port_idx)</td></tr>
<tr class="separator:gad912bfd3ce8e24d0eb48b7dc9de07c39"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga616fb7404be5da79d8092b4a14976750"><td class="memItemLeft" align="right" valign="top">bridgeif_portmask_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif__fdb.html#ga616fb7404be5da79d8092b4a14976750">bridgeif_fdb_get_dst_ports</a> (void *fdb_ptr, struct <a class="el" href="structeth__addr.html">eth_addr</a> *dst_addr)</td></tr>
<tr class="separator:ga616fb7404be5da79d8092b4a14976750"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf7935226ee7f99f964bf0135b6cb9ca0"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif__fdb.html#gaf7935226ee7f99f964bf0135b6cb9ca0">bridgeif_fdb_init</a> (u16_t max_fdb_entries)</td></tr>
<tr class="separator:gaf7935226ee7f99f964bf0135b6cb9ca0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>lwIP netif implementing an FDB for IEEE 802.1D MAC Bridge </p>
</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_900e6f7ff90690cb8edb53323dd38d80.html">netif</a></li><li class="navelem"><a class="el" href="bridgeif__fdb_8c.html">bridgeif_fdb.c</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,6 @@
var bridgeif__fdb_8c =
[
[ "bridgeif_fdb_get_dst_ports", "group__bridgeif__fdb.html#ga616fb7404be5da79d8092b4a14976750", null ],
[ "bridgeif_fdb_init", "group__bridgeif__fdb.html#gaf7935226ee7f99f964bf0135b6cb9ca0", null ],
[ "bridgeif_fdb_update_src", "group__bridgeif__fdb.html#gad912bfd3ce8e24d0eb48b7dc9de07c39", null ]
];
@@ -0,0 +1,119 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/include/netif/bridgeif_opts.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('bridgeif__opts_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#define-members">Macros</a> </div>
<div class="headertitle">
<div class="title">bridgeif_opts.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga5aed5cd9b01ba1345b47845cd04ca30d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif__opts.html#ga5aed5cd9b01ba1345b47845cd04ca30d">BRIDGEIF_PORT_NETIFS_OUTPUT_DIRECT</a>&#160;&#160;&#160;<a class="el" href="group__lwip__opts__nosys.html#gae00ba99de94a5bf84d832be8976df59b">NO_SYS</a></td></tr>
<tr class="separator:ga5aed5cd9b01ba1345b47845cd04ca30d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6fe03b84359150b7dea3dfca942b6414"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif__opts.html#ga6fe03b84359150b7dea3dfca942b6414">BRIDGEIF_MAX_PORTS</a>&#160;&#160;&#160;7</td></tr>
<tr class="separator:ga6fe03b84359150b7dea3dfca942b6414"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaab45e20e9b09a98217994082968cec73"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif__opts.html#gaab45e20e9b09a98217994082968cec73">BRIDGEIF_DEBUG</a>&#160;&#160;&#160;<a class="el" href="group__debugging__levels.html#gadab1cdc3f45939a3a5c9a3d7e04987e1">LWIP_DBG_OFF</a></td></tr>
<tr class="separator:gaab45e20e9b09a98217994082968cec73"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga72e389f592470dc50288a68f3db70730"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif__opts.html#ga72e389f592470dc50288a68f3db70730">BRIDGEIF_FDB_DEBUG</a>&#160;&#160;&#160;<a class="el" href="group__debugging__levels.html#gadab1cdc3f45939a3a5c9a3d7e04987e1">LWIP_DBG_OFF</a></td></tr>
<tr class="separator:ga72e389f592470dc50288a68f3db70730"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac456e97b1b0e9a57449596a2b229763a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bridgeif__opts.html#gac456e97b1b0e9a57449596a2b229763a">BRIDGEIF_FW_DEBUG</a>&#160;&#160;&#160;<a class="el" href="group__debugging__levels.html#gadab1cdc3f45939a3a5c9a3d7e04987e1">LWIP_DBG_OFF</a></td></tr>
<tr class="separator:gac456e97b1b0e9a57449596a2b229763a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>lwIP netif implementing an IEEE 802.1D MAC Bridge </p>
</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_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li><li class="navelem"><a class="el" href="dir_c9a67764bf8a12cf6b427bb859cbcd0b.html">netif</a></li><li class="navelem"><a class="el" href="bridgeif__opts_8h.html">bridgeif_opts.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,8 @@
var bridgeif__opts_8h =
[
[ "BRIDGEIF_DEBUG", "group__bridgeif__opts.html#gaab45e20e9b09a98217994082968cec73", null ],
[ "BRIDGEIF_FDB_DEBUG", "group__bridgeif__opts.html#ga72e389f592470dc50288a68f3db70730", null ],
[ "BRIDGEIF_FW_DEBUG", "group__bridgeif__opts.html#gac456e97b1b0e9a57449596a2b229763a", null ],
[ "BRIDGEIF_MAX_PORTS", "group__bridgeif__opts.html#ga6fe03b84359150b7dea3dfca942b6414", null ],
[ "BRIDGEIF_PORT_NETIFS_OUTPUT_DIRECT", "group__bridgeif__opts.html#ga5aed5cd9b01ba1345b47845cd04ca30d", null ]
];
@@ -0,0 +1,102 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: Reporting bugs</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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('bugs.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Reporting bugs </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Please report bugs in the lwIP bug tracker at savannah.<br />
BEFORE submitting, please check if the bug has already been reported!<br />
<a href="https://savannah.nongnu.org/bugs/?group=lwip">https://savannah.nongnu.org/bugs/?group=lwip</a> </p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,154 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: Data Structure Index</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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('classes.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Data Structure Index</div> </div>
</div><!--header-->
<div class="contents">
<div class="qindex"><a class="qindex" href="#letter__">_</a>&#160;|&#160;<a class="qindex" href="#letter_a">a</a>&#160;|&#160;<a class="qindex" href="#letter_b">b</a>&#160;|&#160;<a class="qindex" href="#letter_d">d</a>&#160;|&#160;<a class="qindex" href="#letter_e">e</a>&#160;|&#160;<a class="qindex" href="#letter_g">g</a>&#160;|&#160;<a class="qindex" href="#letter_i">i</a>&#160;|&#160;<a class="qindex" href="#letter_l">l</a>&#160;|&#160;<a class="qindex" href="#letter_m">m</a>&#160;|&#160;<a class="qindex" href="#letter_n">n</a>&#160;|&#160;<a class="qindex" href="#letter_p">p</a>&#160;|&#160;<a class="qindex" href="#letter_r">r</a>&#160;|&#160;<a class="qindex" href="#letter_s">s</a>&#160;|&#160;<a class="qindex" href="#letter_t">t</a>&#160;|&#160;<a class="qindex" href="#letter_u">u</a>&#160;|&#160;<a class="qindex" href="#letter_z">z</a></div>
<table class="classindex">
<tr><td rowspan="2" valign="bottom"><a name="letter__"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;_&#160;&#160;</div></td></tr></table>
</td><td rowspan="2" valign="bottom"><a name="letter_i"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;i&#160;&#160;</div></td></tr></table>
</td><td rowspan="2" valign="bottom"><a name="letter_m"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;m&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="structpbuf__custom.html">pbuf_custom</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsntp__server.html">sntp_server</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structpbuf__custom__ref.html">pbuf_custom_ref</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsntp__time.html">sntp_time</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="struct__lwiperf__settings.html">_lwiperf_settings</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structicmp6__echo__hdr.html">icmp6_echo_hdr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structmdns__host.html">mdns_host</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structpbuf__rom.html">pbuf_rom</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsntp__timestamps.html">sntp_timestamps</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="struct__lwiperf__state__tcp.html">_lwiperf_state_tcp</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structicmp6__hdr.html">icmp6_hdr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structmdns__outpacket.html">mdns_outpacket</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_r"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;r&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="unionsockaddr__aligned.html">sockaddr_aligned</a>&#160;&#160;&#160;</td></tr>
<tr><td rowspan="2" valign="bottom"><a name="letter_a"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;a&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="structicmp__echo__hdr.html">icmp_echo_hdr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structmdns__packet.html">mdns_packet</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structstats__.html">stats_</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structieee__802154__hdr.html">ieee_802154_hdr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structmdns__rr__info.html">mdns_rr_info</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structraw__pcb.html">raw_pcb</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structstats__igmp.html">stats_igmp</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structaltcp__allocator__s.html">altcp_allocator_s</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structigmp__group.html">igmp_group</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structmdns__service.html">mdns_service</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structredirect__header.html">redirect_header</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structstats__mem.html">stats_mem</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structapi__msg.html">api_msg</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structigmp__msg.html">igmp_msg</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structmem.html">mem</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structrs__header.html">rs_header</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structstats__mib2.html">stats_mib2</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structautoip.html">autoip</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structip4__addr.html">ip4_addr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structmemp__desc.html">memp_desc</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_s"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;s&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="structstats__mib2__netif__ctrs.html">stats_mib2_netif_ctrs</a>&#160;&#160;&#160;</td></tr>
<tr><td rowspan="2" valign="bottom"><a name="letter_b"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;b&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="structip4__addr__packed.html">ip4_addr_packed</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structmld__group.html">mld_group</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structstats__proto.html">stats_proto</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structip4__addr__wordaligned.html">ip4_addr_wordaligned</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structmld__header.html">mld_header</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsmtp__send__request.html">smtp_send_request</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structstats__sys.html">stats_sys</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structbridgeif__initdata__s.html">bridgeif_initdata_s</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structip6__addr.html">ip6_addr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structmqtt__client__s.html">mqtt_client_s</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsmtp__session.html">smtp_session</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structstats__syselem.html">stats_syselem</a>&#160;&#160;&#160;</td></tr>
<tr><td rowspan="2" valign="bottom"><a name="letter_d"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;d&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="structip6__addr__packed.html">ip6_addr_packed</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structmqtt__connect__client__info__t.html">mqtt_connect_client_info_t</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__leaf__node.html">snmp_leaf_node</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structnetif__ext__callback__args__t_1_1status__changed__s.html">netif_ext_callback_args_t::status_changed_s</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structip6__hdr.html">ip6_hdr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structmqtt__request__t.html">mqtt_request_t</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__mib.html">snmp_mib</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_t"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;t&#160;&#160;</div></td></tr></table>
</td></tr>
<tr><td valign="top"><a class="el" href="structdhcp6__msg.html">dhcp6_msg</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structip6__reass__helper.html">ip6_reass_helper</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structmqtt__ringbuf__t.html">mqtt_ringbuf_t</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__next__oid__state.html">snmp_next_oid_state</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structdhcp__msg.html">dhcp_msg</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structip6__reassdata.html">ip6_reassdata</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_n"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;n&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="structsnmp__node.html">snmp_node</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structt_c_g_i.html">tCGI</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structdns__answer.html">dns_answer</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structip__addr.html">ip_addr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__node__instance.html">snmp_node_instance</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtcp__ext__arg__callbacks.html">tcp_ext_arg_callbacks</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structdns__api__msg.html">dns_api_msg</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structip__globals.html">ip_globals</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structna__header.html">na_header</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__obj__id.html">snmp_obj_id</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtcp__pcb.html">tcp_pcb</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structdns__hdr.html">dns_hdr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structip__reass__helper.html">ip_reass_helper</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structnd6__neighbor__cache__entry.html">nd6_neighbor_cache_entry</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__oid__range.html">snmp_oid_range</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtcp__pcb__listen.html">tcp_pcb_listen</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structdns__query.html">dns_query</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structip__reassdata.html">ip_reassdata</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structnd6__q__entry.html">nd6_q_entry</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__scalar__array__node.html">snmp_scalar_array_node</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtftp__context.html">tftp_context</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structdns__req__entry.html">dns_req_entry</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structnetif__ext__callback__args__t_1_1ipv4__changed__s.html">netif_ext_callback_args_t::ipv4_changed_s</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structnetbios__answer.html">netbios_answer</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__scalar__array__node__def.html">snmp_scalar_array_node_def</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structthreadsync__data.html">threadsync_data</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structdns__table__entry.html">dns_table_entry</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structnetif__ext__callback__args__t_1_1ipv6__addr__state__changed__s.html">netif_ext_callback_args_t::ipv6_addr_state_changed_s</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structnetbios__hdr.html">netbios_hdr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__scalar__node.html">snmp_scalar_node</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_u"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;u&#160;&#160;</div></td></tr></table>
</td></tr>
<tr><td rowspan="2" valign="bottom"><a name="letter_e"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;e&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="structnetif__ext__callback__args__t_1_1ipv6__set__s.html">netif_ext_callback_args_t::ipv6_set_s</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structnetbios__name__hdr.html">netbios_name_hdr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__table__col__def.html">snmp_table_col_def</a>&#160;&#160;&#160;</td></tr>
<tr><td rowspan="2" valign="bottom"><a name="letter_l"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;l&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="structnetbios__question__hdr.html">netbios_question_hdr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__table__node.html">snmp_table_node</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structudp__pcb.html">udp_pcb</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structeth__addr.html">eth_addr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structnetbios__resp.html">netbios_resp</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__table__simple__node.html">snmp_table_simple_node</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_z"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;z&#160;&#160;</div></td></tr></table>
</td></tr>
<tr><td valign="top"><a class="el" href="structeth__hdr.html">eth_hdr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structnetif__ext__callback__args__t_1_1link__changed__s.html">netif_ext_callback_args_t::link_changed_s</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structnetbuf.html">netbuf</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__threadsync__instance.html">snmp_threadsync_instance</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structeth__vlan__hdr.html">eth_vlan_hdr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlowpan6__ieee802154__data.html">lowpan6_ieee802154_data</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structnetconn.html">netconn</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__threadsync__node.html">snmp_threadsync_node</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structzepif__init.html">zepif_init</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structetharp__hdr.html">etharp_hdr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlowpan6__link__addr.html">lowpan6_link_addr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structnetif.html">netif</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__tree__node.html">snmp_tree_node</a>&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="structetharp__q__entry.html">etharp_q_entry</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlowpan6__reass__helper.html">lowpan6_reass_helper</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="unionnetif__ext__callback__args__t.html">netif_ext_callback_args_t</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__varbind.html">snmp_varbind</a>&#160;&#160;&#160;</td><td></td></tr>
<tr><td rowspan="2" valign="bottom"><a name="letter_g"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;g&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="structlwip__cyclic__timer.html">lwip_cyclic_timer</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structnetvector.html">netvector</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsnmp__varbind__len.html">snmp_varbind_len</a>&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="structlwip__select__cb.html">lwip_select_cb</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structns__header.html">ns_header</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="unionsnmp__variant__value.html">snmp_variant_value</a>&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="structgethostbyname__r__helper.html">gethostbyname_r_helper</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlwip__sock.html">lwip_sock</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_p"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;p&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="structsntp__msg.html">sntp_msg</a>&#160;&#160;&#160;</td><td></td></tr>
<tr><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td valign="top"><a class="el" href="structpbuf.html">pbuf</a>&#160;&#160;&#160;</td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
</table>
<div class="qindex"><a class="qindex" href="#letter__">_</a>&#160;|&#160;<a class="qindex" href="#letter_a">a</a>&#160;|&#160;<a class="qindex" href="#letter_b">b</a>&#160;|&#160;<a class="qindex" href="#letter_d">d</a>&#160;|&#160;<a class="qindex" href="#letter_e">e</a>&#160;|&#160;<a class="qindex" href="#letter_g">g</a>&#160;|&#160;<a class="qindex" href="#letter_i">i</a>&#160;|&#160;<a class="qindex" href="#letter_l">l</a>&#160;|&#160;<a class="qindex" href="#letter_m">m</a>&#160;|&#160;<a class="qindex" href="#letter_n">n</a>&#160;|&#160;<a class="qindex" href="#letter_p">p</a>&#160;|&#160;<a class="qindex" href="#letter_r">r</a>&#160;|&#160;<a class="qindex" href="#letter_s">s</a>&#160;|&#160;<a class="qindex" href="#letter_t">t</a>&#160;|&#160;<a class="qindex" href="#letter_u">u</a>&#160;|&#160;<a class="qindex" href="#letter_z">z</a></div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

@@ -0,0 +1,103 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/include/compat/posix/arpa/inet.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('compat_2posix_2arpa_2inet_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">inet.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="sockets_8h.html">lwip/sockets.h</a>&quot;</code><br />
</div><a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>This file is a posix wrapper for <a class="el" href="sockets_8h.html">lwip/sockets.h</a>. </p>
</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_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li><li class="navelem"><a class="el" href="dir_1e445e767c368c70d58af8a0b7552719.html">compat</a></li><li class="navelem"><a class="el" href="dir_fe219fca207b878205c0dd92278d118b.html">posix</a></li><li class="navelem"><a class="el" href="dir_6b1b06896a870ebfb9c854c4c71f4ff5.html">arpa</a></li><li class="navelem"><a class="el" href="compat_2posix_2arpa_2inet_8h.html">inet.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,103 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/include/compat/posix/netdb.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('compat_2posix_2netdb_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">netdb.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="lwip_2netdb_8h.html">lwip/netdb.h</a>&quot;</code><br />
</div><a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>This file is a posix wrapper for <a class="el" href="lwip_2netdb_8h.html">lwip/netdb.h</a>. </p>
</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_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li><li class="navelem"><a class="el" href="dir_1e445e767c368c70d58af8a0b7552719.html">compat</a></li><li class="navelem"><a class="el" href="dir_fe219fca207b878205c0dd92278d118b.html">posix</a></li><li class="navelem"><a class="el" href="compat_2posix_2netdb_8h.html">netdb.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,103 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: src/include/compat/stdc/errno.h 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('compat_2stdc_2errno_8h.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">errno.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="lwip_2errno_8h.html">lwip/errno.h</a>&quot;</code><br />
</div><a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>This file is a posix/stdc wrapper for <a class="el" href="lwip_2errno_8h.html">lwip/errno.h</a>. </p>
</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_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li><li class="navelem"><a class="el" href="dir_1e445e767c368c70d58af8a0b7552719.html">compat</a></li><li class="navelem"><a class="el" href="dir_b42baff89a1adc9a57da7decb1835b6b.html">stdc</a></li><li class="navelem"><a class="el" href="compat_2stdc_2errno_8h.html">errno.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,157 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>lwIP: How to contribute to lwIP</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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">lwIP
&#160;<span id="projectnumber">2.1.2</span>
</div>
<div id="projectbrief">Lightweight IP stack</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('contrib.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">How to contribute to lwIP </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><pre class="fragment">1 Introduction
This document describes some guidelines for people participating
in lwIP development.
2 How to contribute to lwIP
Here is a short list of suggestions to anybody working with lwIP and
trying to contribute bug reports, fixes, enhancements, platform ports etc.
First of all as you may already know lwIP is a volunteer project so feedback
to fixes or questions might often come late. Hopefully the bug and patch tracking
features of Savannah help us not lose users' input.
2.1 Source code style:
1. do not use tabs.
2. indentation is two spaces per level (i.e. per tab).
3. end debug messages with a trailing newline (\n).
4. one space between keyword and opening bracket.
5. no space between function and opening bracket.
6. one space and no newline before opening curly braces of a block.
7. closing curly brace on a single line.
8. spaces surrounding assignment and comparisons.
9. don't initialize static and/or global variables to zero, the compiler takes care of that.
10. use current source code style as further reference.
2.2 Source code documentation style:
1. JavaDoc compliant and Doxygen compatible.
2. Function documentation above functions in .c files, not .h files.
(This forces you to synchronize documentation and implementation.)
3. Use current documentation style as further reference.
2.3 Bug reports and patches:
1. Make sure you are reporting bugs or send patches against the latest
sources. (From the latest release and/or the current Git sources.)
2. If you think you found a bug make sure it's not already filed in the
bugtracker at Savannah.
3. If you have a fix put the patch on Savannah. If it is a patch that affects
both core and arch specific stuff please separate them so that the core can
be applied separately while leaving the other patch 'open'. The preferred way
is to NOT touch archs you can't test and let maintainers take care of them.
This is a good way to see if they are used at all - the same goes for unix
netifs except tapif.
4. Do not file a bug and post a fix to it to the patch area. Either a bug report
or a patch will be enough.
If you correct an existing bug then attach the patch to the bug rather than creating a new entry in the patch area.
5. Patches should be specific to a single change or to related changes. Do not mix bugfixes with spelling and other
trivial fixes unless the bugfix is trivial too. Do not reorganize code and rename identifiers in the same patch you
change behaviour if not necessary. A patch is easier to read and understand if it's to the point and short than
if it's not to the point and long :) so the chances for it to be applied are greater.
2.4 Platform porters:
1. If you have ported lwIP to a platform (an OS, a uC/processor or a combination of these) and
you think it could benefit others[1] you might want discuss this on the mailing list. You
can also ask for Git access to submit and maintain your port in the contrib Git module.
</pre> </div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More