Go to the documentation of this file.
36 #define Ipv4Header struct _Ipv4Header
39 #define Ipv4PseudoHeader struct _Ipv4PseudoHeader
49 #define IPV4_SUPPORT ENABLED
50 #elif (IPV4_SUPPORT != ENABLED && IPV4_SUPPORT != DISABLED)
51 #error IPV4_SUPPORT parameter is not valid
55 #ifndef IPV4_DEFAULT_TTL
56 #define IPV4_DEFAULT_TTL 64
57 #elif (IPV4_DEFAULT_TTL < 1)
58 #error IPV4_DEFAULT_TTL parameter is not valid
62 #ifndef IPV4_ADDR_LIST_SIZE
63 #define IPV4_ADDR_LIST_SIZE 1
64 #elif (IPV4_ADDR_LIST_SIZE < 1)
65 #error IPV4_ADDR_LIST_SIZE parameter is not valid
69 #ifndef IPV4_DNS_SERVER_LIST_SIZE
70 #define IPV4_DNS_SERVER_LIST_SIZE 2
71 #elif (IPV4_DNS_SERVER_LIST_SIZE < 1)
72 #error IPV4_DNS_SERVER_LIST_SIZE parameter is not valid
76 #ifndef IPV4_MULTICAST_FILTER_SIZE
77 #define IPV4_MULTICAST_FILTER_SIZE 4
78 #elif (IPV4_MULTICAST_FILTER_SIZE < 1)
79 #error IPV4_MULTICAST_FILTER_SIZE parameter is not valid
83 #define IPV4_VERSION 4
85 #define IPV4_MINIMUM_MTU 68
87 #define IPV4_DEFAULT_MTU 576
89 #define IPV4_MIN_HEADER_LENGTH 20
91 #define IPV4_MAX_HEADER_LENGTH 60
94 #define IPV4_DATA(packet) PTR_OFFSET(packet, packet->headerLength * 4)
97 #ifdef _CPU_BIG_ENDIAN
98 #define IPV4_ADDR(a, b, c, d) (((uint32_t) (a) << 24) | ((b) << 16) | ((c) << 8) | (d))
100 #define IPV4_ADDR(a, b, c, d) ((a) | ((b) << 8) | ((c) << 16) | ((uint32_t) (d) << 24))
104 #define IPV4_UNSPECIFIED_ADDR IPV4_ADDR(0, 0, 0, 0)
106 #define IPV4_BROADCAST_ADDR IPV4_ADDR(255, 255, 255, 255)
109 #define IPV4_LOOPBACK_ADDR IPV4_ADDR(127, 0, 0, 1)
110 #define IPV4_LOOPBACK_PREFIX IPV4_ADDR(127, 0, 0, 0)
111 #define IPV4_LOOPBACK_MASK IPV4_ADDR(255, 0, 0, 0)
114 #define IPV4_LINK_LOCAL_PREFIX IPV4_ADDR(169, 254, 0, 0)
115 #define IPV4_LINK_LOCAL_MASK IPV4_ADDR(255, 255, 0, 0)
118 #define IPV4_MULTICAST_PREFIX IPV4_ADDR(224, 0, 0, 0)
119 #define IPV4_MULTICAST_MASK IPV4_ADDR(240, 0, 0, 0)
122 #define IPV4_MULTICAST_LNCB_PREFIX IPV4_ADDR(224, 0, 0, 0)
123 #define IPV4_MULTICAST_LNCB_MASK IPV4_ADDR(255, 255, 255, 0)
126 #define IPV4_MULTICAST_INCB_PREFIX IPV4_ADDR(224, 0, 1, 0)
127 #define IPV4_MULTICAST_INCB_MASK IPV4_ADDR(255, 255, 255, 0)
130 #define IPV4_CLASS_A_ADDR IPV4_ADDR(0, 0, 0, 0)
131 #define IPV4_CLASS_A_MASK IPV4_ADDR(128, 0, 0, 0)
132 #define IPV4_CLASS_B_ADDR IPV4_ADDR(128, 0, 0, 0)
133 #define IPV4_CLASS_B_MASK IPV4_ADDR(192, 0, 0, 0)
134 #define IPV4_CLASS_C_ADDR IPV4_ADDR(192, 0, 0, 0)
135 #define IPV4_CLASS_C_MASK IPV4_ADDR(224, 0, 0, 0)
136 #define IPV4_CLASS_D_ADDR IPV4_ADDR(224, 0, 0, 0)
137 #define IPV4_CLASS_D_MASK IPV4_ADDR(240, 0, 0, 0)
138 #define IPV4_CLASS_E_ADDR IPV4_ADDR(240, 0, 0, 0)
139 #define IPV4_CLASS_E_MASK IPV4_ADDR(240, 0, 0, 0)
142 #define ipv4CopyAddr(destIpAddr, srcIpAddr) \
143 osMemcpy(destIpAddr, srcIpAddr, sizeof(Ipv4Addr))
146 #define ipv4CompAddr(ipAddr1, ipAddr2) \
147 (!osMemcmp(ipAddr1, ipAddr2, sizeof(Ipv4Addr)))
150 #define ipv4IsOnSubnet(entry, ipAddr) \
151 (((ipAddr) & (entry)->subnetMask) == ((entry)->addr & (entry)->subnetMask))
154 #define ipv4IsLoopbackAddr(ipAddr) \
155 (((ipAddr) & IPV4_LOOPBACK_MASK) == IPV4_LOOPBACK_PREFIX)
158 #define ipv4IsLinkLocalAddr(ipAddr) \
159 (((ipAddr) & IPV4_LINK_LOCAL_MASK) == IPV4_LINK_LOCAL_PREFIX)
162 #define ipv4IsMulticastAddr(ipAddr) \
163 (((ipAddr) & IPV4_MULTICAST_MASK) == IPV4_MULTICAST_PREFIX)
243 #if defined(__CWCC__) || defined(_WIN32)
244 #pragma pack(push, 1)
254 #if defined(_CPU_BIG_ENDIAN) && !defined(__IAR_SYSTEMS_ICC__)
292 typedef __start_packed
struct
301 #if defined(__CWCC__) || defined(_WIN32)
347 #if (IPV4_FRAG_SUPPORT == ENABLED)
error_t ipv4LeaveMulticastGroup(NetInterface *interface, Ipv4Addr groupAddr)
Leave the specified host group.
Ipv4Addr addr
IPv4 address.
@ IPV4_ADDR_SCOPE_LINK_LOCAL
error_t ipv4Init(NetInterface *interface)
IPv4 related initialization.
void ipv4DumpHeader(const Ipv4Header *ipHeader)
Dump IPv4 header for debugging purpose.
Structure describing a buffer that spans multiple chunks.
uint_t state
IGMP host state.
void ipv4LinkChangeEvent(NetInterface *interface)
Callback function for link change event.
error_t ipv4SetDefaultGateway(NetInterface *interface, Ipv4Addr addr)
Configure default gateway.
Ipv4AddrState
IPv4 address state.
error_t ipv4SendDatagram(NetInterface *interface, Ipv4PseudoHeader *pseudoHeader, NetBuffer *buffer, size_t offset, NetTxAncillary *ancillary)
Send an IPv4 datagram.
Ipv4AddrState state
IPv4 address state.
error_t ipv4GetHostAddr(NetInterface *interface, Ipv4Addr *addr)
Retrieve host address.
uint32_t Ipv4Addr
IPv4 network address.
error_t ipv4GetDnsServer(NetInterface *interface, uint_t index, Ipv4Addr *addr)
Retrieve DNS server.
bool_t isRouter
A flag indicating whether routing is enabled on this interface.
error_t ipv4SendPacket(NetInterface *interface, Ipv4PseudoHeader *pseudoHeader, uint16_t fragId, size_t fragOffset, NetBuffer *buffer, size_t offset, NetTxAncillary *ancillary)
Send an IPv4 packet.
error_t ipv4GetSubnetMaskEx(NetInterface *interface, uint_t index, Ipv4Addr *mask)
Retrieve subnet mask.
error_t ipv4GetDefaultGateway(NetInterface *interface, Ipv4Addr *addr)
Retrieve default gateway.
error_t ipv4SetHostAddrEx(NetInterface *interface, uint_t index, Ipv4Addr addr)
Assign host address.
Ipv4FragmentOffset
IPv4 fragment offset field.
Ipv4Addr defaultGateway
Default gateway.
Ipv4AddrScope
IPv4 address scopes.
size_t linkMtu
Maximum transmission unit.
@ IPV4_ADDR_STATE_TENTATIVE
An address whose uniqueness on a link is being verified.
Ipv4OptionType
IPv4 option types.
#define IPV4_DNS_SERVER_LIST_SIZE
uint16_t identification
IPv4 fragment identification field.
__start_packed struct _Ipv4Header __end_packed
IPv4 multicast filter entry.
error_t ipv4GetDefaultGatewayEx(NetInterface *interface, uint_t index, Ipv4Addr *addr)
Retrieve default gateway.
#define IPV4_ADDR_LIST_SIZE
void ipv4ProcessPacket(NetInterface *interface, Ipv4Header *packet, size_t length, NetRxAncillary *ancillary)
Incoming IPv4 packet processing.
systime_t timer
Delay timer.
__start_packed struct @0 Ipv4Option
IPv4 option.
@ IPV4_ADDR_SCOPE_INTERFACE_LOCAL
Fragmented packet descriptor.
#define IPV4_MAX_FRAG_DATAGRAMS
Ipv4Addr addr
Multicast address.
Ipv4Addr subnetMask
Subnet mask.
void ipv4ProcessDatagram(NetInterface *interface, const NetBuffer *buffer, NetRxAncillary *ancillary)
Incoming IPv4 datagram processing.
IPv4 fragmentation and reassembly.
error_t ipv4GetHostAddrEx(NetInterface *interface, uint_t index, Ipv4Addr *addr)
Retrieve host address.
@ IPV4_ADDR_STATE_INVALID
An address that is not assigned to any interface.
error_t ipv4GetSubnetMask(NetInterface *interface, Ipv4Addr *mask)
Retrieve subnet mask.
error_t ipv4SetHostAddr(NetInterface *interface, Ipv4Addr addr)
Assign host address.
error_t ipv4JoinMulticastGroup(NetInterface *interface, Ipv4Addr groupAddr)
Join the specified host group.
Ipv4Protocol
IPv4 protocol field.
uint_t refCount
Reference count for the current entry.
@ IPV4_ADDR_STATE_VALID
An address assigned to an interface whose use is unrestricted.
bool_t conflict
Address conflict detected.
error_t ipv4SetDnsServer(NetInterface *interface, uint_t index, Ipv4Addr addr)
Configure DNS server.
char_t * ipv4AddrToString(Ipv4Addr ipAddr, char_t *str)
Convert a binary IPv4 address to dot-decimal notation.
error_t ipv4StringToAddr(const char_t *str, Ipv4Addr *ipAddr)
Convert a dot-decimal string to a binary IPv4 address.
bool_t enableBroadcastEchoReq
Support for broadcast ICMP Echo Request messages.
error_t ipv4SetDefaultGatewayEx(NetInterface *interface, uint_t index, Ipv4Addr addr)
Configure default gateway.
error_t ipv4SetSubnetMaskEx(NetInterface *interface, uint_t index, Ipv4Addr mask)
Configure subnet mask.
error_t ipv4SetSubnetMask(NetInterface *interface, Ipv4Addr mask)
Configure subnet mask.
#define IPV4_MULTICAST_FILTER_SIZE