36 #define NetInterface struct _NetInterface
40 #include "net_config.h"
91 #ifndef GPL_LICENSE_TERMS_ACCEPTED
92 #error Before compiling CycloneTCP Open, you must accept the terms of the GPL license
96 #define CYCLONE_TCP_VERSION_STRING "2.3.2"
98 #define CYCLONE_TCP_MAJOR_VERSION 2
100 #define CYCLONE_TCP_MINOR_VERSION 3
102 #define CYCLONE_TCP_REV_NUMBER 2
105 #ifndef NET_RTOS_SUPPORT
106 #define NET_RTOS_SUPPORT ENABLED
107 #elif (NET_RTOS_SUPPORT != ENABLED && NET_RTOS_SUPPORT != DISABLED)
108 #error NET_RTOS_SUPPORT parameter is not valid
112 #ifndef NET_INTERFACE_COUNT
113 #define NET_INTERFACE_COUNT 1
114 #elif (NET_INTERFACE_COUNT < 1)
115 #error NET_INTERFACE_COUNT parameter is not valid
119 #ifndef NET_LOOPBACK_IF_SUPPORT
120 #define NET_LOOPBACK_IF_SUPPORT DISABLED
121 #elif (NET_LOOPBACK_IF_SUPPORT != ENABLED && NET_LOOPBACK_IF_SUPPORT != DISABLED)
122 #error NET_LOOPBACK_IF_SUPPORT parameter is not valid
126 #ifndef NET_MAX_LINK_CHANGE_CALLBACKS
127 #define NET_MAX_LINK_CHANGE_CALLBACKS (6 * NET_INTERFACE_COUNT)
128 #elif (NET_MAX_LINK_CHANGE_CALLBACKS < 1)
129 #error NET_MAX_LINK_CHANGE_CALLBACKS parameter is not valid
133 #ifndef NET_MAX_TIMER_CALLBACKS
134 #define NET_MAX_TIMER_CALLBACKS (6 * NET_INTERFACE_COUNT)
135 #elif (NET_MAX_TIMER_CALLBACKS < 1)
136 #error NET_MAX_TIMER_CALLBACKS parameter is not valid
140 #ifndef NET_MAX_IF_NAME_LEN
141 #define NET_MAX_IF_NAME_LEN 8
142 #elif (NET_MAX_IF_NAME_LEN < 1)
143 #error NET_MAX_IF_NAME_LEN parameter is not valid
147 #ifndef NET_MAX_HOSTNAME_LEN
148 #define NET_MAX_HOSTNAME_LEN 24
149 #elif (NET_MAX_HOSTNAME_LEN < 1)
150 #error NET_MAX_HOSTNAME_LEN parameter is not valid
154 #ifndef NET_RAND_SEED_SIZE
155 #define NET_RAND_SEED_SIZE 16
156 #elif (NET_RAND_SEED_SIZE < 10)
157 #error NET_RAND_SEED_SIZE parameter is not valid
161 #ifndef NET_TASK_STACK_SIZE
162 #define NET_TASK_STACK_SIZE 650
163 #elif (NET_TASK_STACK_SIZE < 1)
164 #error NET_TASK_STACK_SIZE parameter is not valid
168 #ifndef NET_TASK_PRIORITY
169 #define NET_TASK_PRIORITY OS_TASK_PRIORITY_HIGH
173 #ifndef NET_TICK_INTERVAL
174 #define NET_TICK_INTERVAL 100
175 #elif (NET_TICK_INTERVAL < 10)
176 #error NET_TICK_INTERVAL parameter is not valid
180 #ifndef netGetSystemTickCount
181 #define netGetSystemTickCount() osGetSystemTime()
215 #if (ETH_SUPPORT == ENABLED)
226 #if (ETH_VLAN_SUPPORT == ENABLED)
229 #if (ETH_VMAN_SUPPORT == ENABLED)
232 #if (ETH_LLC_SUPPORT == ENABLED)
236 #if (ETH_PORT_TAGGING_SUPPORT == ENABLED)
239 #if (ETH_VIRTUAL_IF_SUPPORT == ENABLED || ETH_VLAN_SUPPORT == ENABLED || \
240 ETH_PORT_TAGGING_SUPPORT == ENABLED)
244 #if (IPV4_SUPPORT == ENABLED)
246 #if (ETH_SUPPORT == ENABLED)
250 #if (IGMP_HOST_SUPPORT == ENABLED)
253 #if (IGMP_ROUTER_SUPPORT == ENABLED)
256 #if (IGMP_SNOOPING_SUPPORT == ENABLED)
259 #if (AUTO_IP_SUPPORT == ENABLED)
262 #if (DHCP_CLIENT_SUPPORT == ENABLED)
265 #if (DHCP_SERVER_SUPPORT == ENABLED)
270 #if (IPV6_SUPPORT == ENABLED)
272 #if (NDP_SUPPORT == ENABLED)
275 #if (NDP_ROUTER_ADV_SUPPORT == ENABLED)
278 #if (SLAAC_SUPPORT == ENABLED)
281 #if (DHCPV6_CLIENT_SUPPORT == ENABLED)
286 #if (MDNS_RESPONDER_SUPPORT == ENABLED)
290 #if (DNS_SD_SUPPORT == ENABLED)
294 #if (PPP_SUPPORT == ENABLED)
310 #if (OS_STATIC_TASK_SUPPORT == ENABLED)
321 #if (IPV4_IPSEC_SUPPORT == ENABLED)
ARP (Address Resolution Protocol)
Auto-IP (Dynamic Configuration of IPv4 Link-Local Addresses)
DHCP client (Dynamic Host Configuration Protocol)
#define DhcpClientContext
DHCP server (Dynamic Host Configuration Protocol)
#define DhcpServerContext
DHCPv6 client (Dynamic Host Configuration Protocol for IPv6)
#define Dhcpv6ClientContext
DNS client (Domain Name System)
DNS-SD (DNS-Based Service Discovery)
#define MAC_ADDR_FILTER_SIZE
void(* LlcRxCallback)(NetInterface *interface, EthHeader *header, const uint8_t *data, size_t length, NetRxAncillary *ancillary, void *param)
LLC frame received callback.
#define IgmpRouterContext
IPv4 (Internet Protocol Version 4)
IPv4 fragmentation and reassembly.
IPv6 (Internet Protocol Version 6)
Definitions common to mDNS client and mDNS responder.
mDNS responder (Multicast DNS)
#define MdnsResponderContext
NDP (Neighbor Discovery Protocol)
Router advertisement service.
#define NdpRouterAdvContext
bool_t netGetLinkState(NetInterface *interface)
Get link state.
#define NET_RAND_SEED_SIZE
error_t netSetParentInterface(NetInterface *interface, NetInterface *physicalInterface)
Attach a virtual interface to a given physical interface.
#define NET_MAX_TIMER_CALLBACKS
#define NET_INTERFACE_COUNT
error_t netSetDriver(NetInterface *interface, const NicDriver *driver)
Set Ethernet MAC driver.
error_t netSetSmiDriver(NetInterface *interface, const SmiDriver *driver)
Set SMI driver.
error_t netSeedRand(const uint8_t *seed, size_t length)
Seed the pseudo-random number generator.
#define NET_MAX_IF_NAME_LEN
#define NET_MAX_LINK_CHANGE_CALLBACKS
error_t netEnablePromiscuousMode(NetInterface *interface, bool_t enable)
Enable promiscuous mode.
void netGetRandData(uint8_t *data, size_t length)
Get a string of random data.
error_t netSetInterfaceName(NetInterface *interface, const char_t *name)
Set interface name.
error_t netSetExtIntDriver(NetInterface *interface, const ExtIntDriver *driver)
Set external interrupt line driver.
#define NET_MAX_HOSTNAME_LEN
#define NET_TASK_STACK_SIZE
error_t netSetVlanId(NetInterface *interface, uint16_t vlanId)
Specify VLAN identifier (802.1Q)
error_t netSetSpiDriver(NetInterface *interface, const SpiDriver *driver)
Set SPI driver.
NicDuplexMode netGetDuplexMode(NetInterface *interface)
Get duplex mode.
error_t netGetEui64(NetInterface *interface, Eui64 *eui64)
Retrieve EUI-64 interface identifier.
error_t netSetSwitchDriver(NetInterface *interface, const SwitchDriver *driver)
Set Ethernet switch driver.
error_t netSetPhyDriver(NetInterface *interface, const PhyDriver *driver)
Set Ethernet PHY driver.
error_t netConfigInterface(NetInterface *interface)
Configure network interface.
error_t netSetMacAddr(NetInterface *interface, const MacAddr *macAddr)
Set MAC address.
error_t netSetHostname(NetInterface *interface, const char_t *name)
Set host name.
error_t netSetPhyAddr(NetInterface *interface, uint8_t phyAddr)
Specify Ethernet PHY address.
uint32_t netGetRand(void)
Generate a random 32-bit value.
error_t netSetUartDriver(NetInterface *interface, const UartDriver *driver)
Set UART driver.
error_t netSetSwitchPort(NetInterface *interface, uint8_t port)
Specify switch port.
uint_t netGetLinkSpeed(NetInterface *interface)
Get link speed.
void netTask(void)
TCP/IP events handling.
NetInterface * netGetDefaultInterface(void)
Get default network interface.
error_t netSetLinkState(NetInterface *interface, NicLinkState linkState)
Set administrative link state.
error_t netStopInterface(NetInterface *interface)
Stop network interface.
error_t netInit(void)
TCP/IP stack initialization.
error_t netSetEui64(NetInterface *interface, const Eui64 *eui64)
Set EUI-64 interface identifier.
error_t netSetVmanId(NetInterface *interface, uint16_t vmanId)
Specify VMAN identifier (802.1ad)
error_t netGetMacAddr(NetInterface *interface, MacAddr *macAddr)
Retrieve MAC address.
error_t netSetInterfaceId(NetInterface *interface, uint32_t id)
Set interface identifier.
uint32_t netGetRandRange(uint32_t min, uint32_t max)
Generate a random value in the specified range.
error_t netStartInterface(NetInterface *interface)
Start network interface.
Helper functions for TCP/IP stack.
Network interface controller abstraction layer.
NicDuplexMode
Duplex mode.
uint32_t systime_t
System time.
uint32_t OsStackType
Stack data type.
thread_t * OsTaskId
Task identifier.
PPP (Point-to-Point Protocol)
IPv6 Stateless Address Autoconfiguration.
Structure describing a network interface.
DhcpClientContext * dhcpClientContext
DHCP client context.
IgmpHostContext igmpHostContext
IGMP host context.
LlcRxCallback llcRxCallback
LLC frame received callback (802.2)
bool_t nicEvent
A NIC event is pending.
const SmiDriver * smiDriver
SMI driver.
void * llcRxParam
Callback parameter.
SlaacContext * slaacContext
SLAAC context.
DnsSdContext * dnsSdContext
uint8_t port
Switch port identifier.
const SpiDriver * spiDriver
Underlying SPI driver.
bool_t acceptAllMulticast
Accept all frames with a multicast destination address.
MacFilterEntry macAddrFilter[MAC_ADDR_FILTER_SIZE]
MAC filter table.
const NicDriver * nicDriver
NIC driver.
uint8_t phyAddr
PHY address.
systime_t initialRto
TCP initial retransmission timeout.
bool_t promiscuous
Promiscuous mode.
DhcpServerContext * dhcpServerContext
DHCP server context.
const PhyDriver * phyDriver
Ethernet PHY driver.
MacAddr macAddr
Link-layer address.
AutoIpContext * autoIpContext
Auto-IP context.
NdpRouterAdvContext * ndpRouterAdvContext
RA service context.
const UartDriver * uartDriver
Underlying UART driver.
NetInterface * parent
Interface on top of which the virtual interface runs.
PppContext * pppContext
DNS-SD context.
MdnsResponderContext * mdnsResponderContext
mDNS responder context
bool_t configured
Configuration done.
Eui64 eui64
EUI-64 interface identifier.
Ipv4Context ipv4Context
IPv4 context.
const ExtIntDriver * extIntDriver
External interrupt line driver.
Dhcpv6ClientContext * dhcpv6ClientContext
DHCPv6 client context.
uint16_t vlanId
VLAN identifier (802.1Q)
uint8_t nicContext[NIC_CONTEXT_SIZE]
Driver specific context.
bool_t phyEvent
A PHY event is pending.
uint32_t linkSpeed
Link speed.
uint32_t id
A unique number identifying the interface.
IgmpSnoopingContext * igmpSnoopingContext
IGMP snooping switch context.
IgmpRouterContext * igmpRouterContext
IGMP router context.
Ipv6Context ipv6Context
IPv6 context.
char_t hostname[NET_MAX_HOSTNAME_LEN+1]
Host name.
bool_t linkState
Link state.
NicLinkState adminLinkState
Administrative link state.
const SwitchDriver * switchDriver
Ethernet switch driver.
NdpContext ndpContext
NDP context.
uint16_t vmanId
VMAN identifier (802.1ad)
OsEvent nicTxEvent
Network controller TX event.
bool_t enableArp
Enable address resolution using ARP.
NicDuplexMode duplexMode
Duplex mode.
ArpCacheEntry arpCache[ARP_CACHE_SIZE]
ARP cache.
uint_t index
Zero-based index.
char_t name[NET_MAX_IF_NAME_LEN+1]
A unique name identifying the interface.
External interrupt line driver.
IGMP snooping switch context.
void * ipsecContext
IPsec context.
OsTaskId taskId
Task identifier.
bool_t running
The TCP/IP stack is currently running.
void * ikeContext
IKE context.
OsTaskTcb taskTcb
Task control block.
OsEvent event
Event object to receive notifications from drivers.
NetRandState randState
Pseudo-random number generator state.
OsMutex mutex
Mutex preventing simultaneous access to the TCP/IP stack.
Link change callback entry.
Pseudo-random number generator state.