mikroSDK Reference Manual
net.h
Go to the documentation of this file.
1
31#ifndef _NET_H
32#define _NET_H
33
34//Forward declaration of NetInterface structure
35struct _NetInterface;
36#define NetInterface struct _NetInterface
37
38//Dependencies
39#include "os_port.h"
40#include "net_config.h"
41#include "core/net_legacy.h"
42#include "core/net_mem.h"
43#include "core/net_misc.h"
44#include "core/nic.h"
45#include "core/ethernet.h"
46#include "ipv4/ipv4.h"
47#include "ipv4/ipv4_frag.h"
48#include "ipv4/auto_ip.h"
49#include "ipv6/ipv6.h"
50#include "ipv4/arp.h"
51#include "igmp/igmp_host.h"
52#include "igmp/igmp_router.h"
53#include "igmp/igmp_snooping.h"
54#include "ipv6/ndp.h"
55#include "ipv6/ndp_router_adv.h"
56#include "ipv6/slaac.h"
57#include "ppp/ppp.h"
58#include "dhcp/dhcp_client.h"
59#include "dhcp/dhcp_server.h"
61#include "dns/dns_client.h"
62#include "mdns/mdns_responder.h"
63#include "mdns/mdns_common.h"
64#include "dns_sd/dns_sd.h"
65#include "cpu_endian.h"
66#include "error.h"
67
68
69/*
70 * CycloneTCP Open is licensed under GPL version 2. In particular:
71 *
72 * - If you link your program to CycloneTCP Open, the result is a derivative
73 * work that can only be distributed under the same GPL license terms.
74 *
75 * - If additions or changes to CycloneTCP Open are made, the result is a
76 * derivative work that can only be distributed under the same license terms.
77 *
78 * - The GPL license requires that you make the source code available to
79 * whoever you make the binary available to.
80 *
81 * - If you sell or distribute a hardware product that runs CycloneTCP Open,
82 * the GPL license requires you to provide public and full access to all
83 * source code on a nondiscriminatory basis.
84 *
85 * If you fully understand and accept the terms of the GPL license, then edit
86 * the os_port_config.h header and add the following directive:
87 *
88 * #define GPL_LICENSE_TERMS_ACCEPTED
89 */
90
91#ifndef GPL_LICENSE_TERMS_ACCEPTED
92 #error Before compiling CycloneTCP Open, you must accept the terms of the GPL license
93#endif
94
95//Version string
96#define CYCLONE_TCP_VERSION_STRING "2.3.0"
97//Major version
98#define CYCLONE_TCP_MAJOR_VERSION 2
99//Minor version
100#define CYCLONE_TCP_MINOR_VERSION 3
101//Revision number
102#define CYCLONE_TCP_REV_NUMBER 0
103
104//RTOS support
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
109#endif
110
111//Number of network adapters
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
116#endif
117
118//Loopback interface support
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
123#endif
124
125//Maximum number of link change callback functions that can be registered
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
130#endif
131
132//Maximum number of timer callback functions that can be registered
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
137#endif
138
139//Maximum length of interface name
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
144#endif
145
146//Maximum length of host name
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
151#endif
152
153//Size of the seed
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
158#endif
159
160//Stack size required to run the TCP/IP task
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
165#endif
166
167//Priority at which the TCP/IP task should run
168#ifndef NET_TASK_PRIORITY
169 #define NET_TASK_PRIORITY OS_TASK_PRIORITY_HIGH
170#endif
171
172//TCP/IP stack tick interval
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
177#endif
178
179//Get system tick count
180#ifndef netGetSystemTickCount
181 #define netGetSystemTickCount() osGetSystemTime()
182#endif
183
184//C++ guard
185#ifdef __cplusplus
186extern "C" {
187#endif
188
189
195{
196 uint_t index;
197 uint32_t id;
198 Eui64 eui64;
199 char_t name[NET_MAX_IF_NAME_LEN + 1];
200 char_t hostname[NET_MAX_HOSTNAME_LEN + 1];
205 uint8_t nicContext[NIC_CONTEXT_SIZE];
207 bool_t nicEvent;
209 bool_t linkState;
210 uint32_t linkSpeed;
212 bool_t configured;
214
215#if (ETH_SUPPORT == ENABLED)
217 uint8_t phyAddr;
218 bool_t phyEvent;
221 MacAddr macAddr;
222 MacFilterEntry macAddrFilter[MAC_ADDR_FILTER_SIZE];
223 bool_t promiscuous;
225#endif
226#if (ETH_VLAN_SUPPORT == ENABLED)
227 uint16_t vlanId;
228#endif
229#if (ETH_VMAN_SUPPORT == ENABLED)
230 uint16_t vmanId;
231#endif
232#if (ETH_LLC_SUPPORT == ENABLED)
235#endif
236#if (ETH_PORT_TAGGING_SUPPORT == ENABLED)
237 uint8_t port;
238#endif
239#if (ETH_VIRTUAL_IF_SUPPORT == ENABLED || ETH_VLAN_SUPPORT == ENABLED || \
240 ETH_PORT_TAGGING_SUPPORT == ENABLED)
241 NetInterface *parent;
242#endif
243
244#if (IPV4_SUPPORT == ENABLED)
246#if (ETH_SUPPORT == ENABLED)
247 bool_t enableArp;
248 ArpCacheEntry arpCache[ARP_CACHE_SIZE];
249#endif
250#if (IGMP_HOST_SUPPORT == ENABLED)
252#endif
253#if (IGMP_ROUTER_SUPPORT == ENABLED)
254 IgmpRouterContext *igmpRouterContext;
255#endif
256#if (IGMP_SNOOPING_SUPPORT == ENABLED)
258#endif
259#if (AUTO_IP_SUPPORT == ENABLED)
260 AutoIpContext *autoIpContext;
261#endif
262#if (DHCP_CLIENT_SUPPORT == ENABLED)
263 DhcpClientContext *dhcpClientContext;
264#endif
265#if (DHCP_SERVER_SUPPORT == ENABLED)
266 DhcpServerContext *dhcpServerContext;
267#endif
268#endif
269
270#if (IPV6_SUPPORT == ENABLED)
272#if (NDP_SUPPORT == ENABLED)
274#endif
275#if (NDP_ROUTER_ADV_SUPPORT == ENABLED)
276 NdpRouterAdvContext *ndpRouterAdvContext;
277#endif
278#if (SLAAC_SUPPORT == ENABLED)
279 SlaacContext *slaacContext;
280#endif
281#if (DHCPV6_CLIENT_SUPPORT == ENABLED)
282 Dhcpv6ClientContext *dhcpv6ClientContext;
283#endif
284#endif
285
286#if (MDNS_RESPONDER_SUPPORT == ENABLED)
287 MdnsResponderContext *mdnsResponderContext;
288#endif
289
290#if (DNS_SD_SUPPORT == ENABLED)
291 DnsSdContext *dnsSdContext;
292#endif
293
294#if (PPP_SUPPORT == ENABLED)
295 PppContext *pppContext;
296#endif
297};
298
299
304typedef struct
305{
308 bool_t running;
310#if (OS_STATIC_TASK_SUPPORT == ENABLED)
311 OsTaskTcb taskTcb;
312 OsStackType taskStack[NET_TASK_STACK_SIZE];
313#endif
314 uint32_t entropy;
315 systime_t timestamp;
316 uint8_t randSeed[NET_RAND_SEED_SIZE];
318 NetInterface interfaces[NET_INTERFACE_COUNT];
319 NetLinkChangeCallbackEntry linkChangeCallbacks[NET_MAX_LINK_CHANGE_CALLBACKS];
320 NetTimerCallbackEntry timerCallbacks[NET_MAX_TIMER_CALLBACKS];
321#if (IPV4_IPSEC_SUPPORT == ENABLED)
324#endif
325} NetContext;
326
327
328//Global variables
329extern NetContext netContext;
330
331//TCP/IP stack related functions
332error_t netInit(void);
333
334error_t netSeedRand(const uint8_t *seed, size_t length);
335uint32_t netGetRand(void);
336uint32_t netGetRandRange(uint32_t min, uint32_t max);
337void netGetRandData(uint8_t *data, size_t length);
338
339NetInterface *netGetDefaultInterface(void);
340
341error_t netSetMacAddr(NetInterface *interface, const MacAddr *macAddr);
342error_t netGetMacAddr(NetInterface *interface, MacAddr *macAddr);
343
344error_t netSetEui64(NetInterface *interface, const Eui64 *eui64);
345error_t netGetEui64(NetInterface *interface, Eui64 *eui64);
346
347error_t netSetInterfaceId(NetInterface *interface, uint32_t id);
348error_t netSetInterfaceName(NetInterface *interface, const char_t *name);
349error_t netSetHostname(NetInterface *interface, const char_t *name);
350
351error_t netSetVlanId(NetInterface *interface, uint16_t vlanId);
352error_t netSetVmanId(NetInterface *interface, uint16_t vmanId);
353
354error_t netSetParentInterface(NetInterface *interface,
355 NetInterface *physicalInterface);
356
357error_t netSetDriver(NetInterface *interface, const NicDriver *driver);
358
359error_t netSetPhyDriver(NetInterface *interface, const PhyDriver *driver);
360error_t netSetPhyAddr(NetInterface *interface, uint8_t phyAddr);
361
362error_t netSetSwitchDriver(NetInterface *interface, const SwitchDriver *driver);
363error_t netSetSwitchPort(NetInterface *interface, uint8_t port);
364
365error_t netSetSmiDriver(NetInterface *interface, const SmiDriver *driver);
366error_t netSetSpiDriver(NetInterface *interface, const SpiDriver *driver);
367error_t netSetUartDriver(NetInterface *interface, const UartDriver *driver);
368error_t netSetExtIntDriver(NetInterface *interface, const ExtIntDriver *driver);
369
370error_t netSetLinkState(NetInterface *interface, NicLinkState linkState);
371bool_t netGetLinkState(NetInterface *interface);
372
373uint_t netGetLinkSpeed(NetInterface *interface);
374NicDuplexMode netGetDuplexMode(NetInterface *interface);
375
376error_t netEnablePromiscuousMode(NetInterface *interface, bool_t enable);
377
378error_t netConfigInterface(NetInterface *interface);
379error_t netStartInterface(NetInterface *interface);
380error_t netStopInterface(NetInterface *interface);
381
382void netTask(void);
383
384//C++ guard
385#ifdef __cplusplus
386}
387#endif
388
389#endif
ARP (Address Resolution Protocol)
Auto-IP (Dynamic Configuration of IPv4 Link-Local Addresses)
Byte order conversion.
DHCP client (Dynamic Host Configuration Protocol)
DHCP server (Dynamic Host Configuration Protocol)
DHCPv6 client (Dynamic Host Configuration Protocol for IPv6)
DNS client (Domain Name System)
DNS-SD (DNS-Based Service Discovery)
Error codes description.
error_t
Error codes.
Definition error.h:43
Ethernet.
void(* LlcRxCallback)(NetInterface *interface, EthHeader *header, const uint8_t *data, size_t length, NetRxAncillary *ancillary, void *param)
LLC frame received callback.
Definition ethernet.h:270
IGMP host.
IGMP router.
IGMP snooping switch.
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)
NDP (Neighbor Discovery Protocol)
Router advertisement service.
CycloneTCP configuration file.
Legacy definitions.
Memory management.
Helper functions for TCP/IP stack.
Network interface controller abstraction layer.
NicLinkState
Link state.
Definition nic.h:97
NicDuplexMode
Duplex mode.
Definition nic.h:122
RTOS abstraction layer.
uint_t OsMutex
Mutex object.
Definition os_port_none.h:118
uint_t OsEvent
Event object.
Definition os_port_none.h:104
uint_t OsTaskId
Task identifier.
Definition os_port_none.h:97
uint32_t systime_t
System time.
Definition os_port_none.h:90
PPP (Point-to-Point Protocol)
IPv6 Stateless Address Autoconfiguration.
ARP cache entry.
Definition arp.h:185
External interrupt line driver.
Definition nic.h:394
IGMP host context.
Definition igmp_host.h:68
IGMP snooping switch context.
Definition igmp_snooping.h:109
IPv4 context.
Definition ipv4.h:367
IPv6 context.
Definition ipv6.h:458
MAC filter table entry.
Definition ethernet.h:258
NDP context.
Definition ndp.h:576
TCP/IP stack context.
Definition net.h:305
bool_t running
The TCP/IP stack is currently running.
Definition net.h:308
NetRandState randState
Pseudo-random number generator state.
Definition net.h:317
OsTaskTcb taskTcb
Task control block.
Definition net.h:311
OsEvent event
Event object to receive notifications from drivers.
Definition net.h:307
void * ipsecContext
IPsec context.
Definition net.h:322
OsTaskId taskId
Task identifier.
Definition net.h:309
OsMutex mutex
Mutex preventing simultaneous access to the TCP/IP stack.
Definition net.h:306
void * ikeContext
IKE context.
Definition net.h:323
Link change callback entry.
Definition net_misc.h:73
Pseudo-random number generator state.
Definition net_misc.h:183
Timer callback entry.
Definition net_misc.h:92
NIC driver.
Definition nic.h:283
Ethernet PHY driver.
Definition nic.h:308
SMI driver.
Definition nic.h:354
SPI driver.
Definition nic.h:366
Ethernet switch driver.
Definition nic.h:322
UART driver.
Definition nic.h:381
Structure describing a network interface.
Definition net.h:195
void * llcRxParam
Callback parameter.
Definition net.h:234
LlcRxCallback llcRxCallback
LLC frame received callback (802.2)
Definition net.h:233
uint8_t nicContext[NIC_CONTEXT_SIZE]
Driver specific context.
Definition net.h:205
uint8_t port
Switch port identifier.
Definition net.h:237
systime_t initialRto
TCP initial retransmission timeout.
Definition net.h:213
SlaacContext * slaacContext
SLAAC context.
Definition net.h:279
PppContext * pppContext
DNS-SD context.
Definition net.h:295
MacAddr macAddr
Link-layer address.
Definition net.h:221
Eui64 eui64
EUI-64 interface identifier.
Definition net.h:198
bool_t linkState
Link state.
Definition net.h:209
bool_t enableArp
Enable address resolution using ARP.
Definition net.h:247
bool_t phyEvent
A PHY event is pending.
Definition net.h:218
bool_t nicEvent
A NIC event is pending.
Definition net.h:207
bool_t promiscuous
Promiscuous mode.
Definition net.h:223
MdnsResponderContext * mdnsResponderContext
mDNS responder context
Definition net.h:287
IgmpRouterContext * igmpRouterContext
IGMP router context.
Definition net.h:254
const SpiDriver * spiDriver
Underlying SPI driver.
Definition net.h:202
AutoIpContext * autoIpContext
Auto-IP context.
Definition net.h:260
ArpCacheEntry arpCache[ARP_CACHE_SIZE]
ARP cache.
Definition net.h:248
DhcpClientContext * dhcpClientContext
DHCP client context.
Definition net.h:263
NdpContext ndpContext
NDP context.
Definition net.h:273
IgmpHostContext igmpHostContext
IGMP host context.
Definition net.h:251
uint32_t linkSpeed
Link speed.
Definition net.h:210
const UartDriver * uartDriver
Underlying UART driver.
Definition net.h:203
const ExtIntDriver * extIntDriver
External interrupt line driver.
Definition net.h:204
NicDuplexMode duplexMode
Duplex mode.
Definition net.h:211
bool_t acceptAllMulticast
Accept all frames with a multicast destination address.
Definition net.h:224
uint_t index
Zero-based index.
Definition net.h:196
const PhyDriver * phyDriver
Ethernet PHY driver.
Definition net.h:216
OsEvent nicTxEvent
Network controller TX event.
Definition net.h:206
uint16_t vlanId
VLAN identifier (802.1Q)
Definition net.h:227
const SwitchDriver * switchDriver
Ethernet switch driver.
Definition net.h:219
bool_t configured
Configuration done.
Definition net.h:212
char_t name[NET_MAX_IF_NAME_LEN+1]
A unique name identifying the interface.
Definition net.h:199
const NicDriver * nicDriver
NIC driver.
Definition net.h:201
uint16_t vmanId
VMAN identifier (802.1ad)
Definition net.h:230
Ipv4Context ipv4Context
IPv4 context.
Definition net.h:245
NetInterface * parent
Interface on top of which the virtual interface runs.
Definition net.h:241
NicLinkState adminLinkState
Administrative link state.
Definition net.h:208
Dhcpv6ClientContext * dhcpv6ClientContext
DHCPv6 client context.
Definition net.h:282
IgmpSnoopingContext * igmpSnoopingContext
IGMP snooping switch context.
Definition net.h:257
Ipv6Context ipv6Context
IPv6 context.
Definition net.h:271
const SmiDriver * smiDriver
SMI driver.
Definition net.h:220
NdpRouterAdvContext * ndpRouterAdvContext
RA service context.
Definition net.h:276
uint8_t phyAddr
PHY address.
Definition net.h:217
uint32_t id
A unique number identifying the interface.
Definition net.h:197
DhcpServerContext * dhcpServerContext
DHCP server context.
Definition net.h:266
char_t hostname[NET_MAX_HOSTNAME_LEN+1]
Host name.
Definition net.h:200
MacFilterEntry macAddrFilter[MAC_ADDR_FILTER_SIZE]
MAC filter table.
Definition net.h:222