12 #ifndef NB_NET_TYPES_H 38 #define IP_VERSION_MASK (0xF0) 39 #define IP_VERSION_IPv4 (0x40) 40 #define IP_VERSION_IPv6 (0x60) 45 #define IP_HEADER_LENGTH_MASK (0x0F) 46 #define IP_HEADER_LENGTH_NO_OPTIONS (0x05) 51 #define IP_FLAGS_MASK (0xE000) 52 #define IP_FRAGMENT_OFFSET_MASK (0x1FFF) 57 #define IP_PROTOCOL_ICMP (0x01) 58 #define IP_PROTOCOL_IGMP (0x02) 59 #define IP_PROTOCOL_INTERNET (0x04) 60 #define IP_PROTOCOL_TCP (0x06) 61 #define IP_PROTOCOL_UDP (0x11) 66 #define ICMP_TYPE_ECHO_REPLY (0) 67 #define ICMP_CODE_ECHO_REPLY (0) 68 #define ICMP_TYPE_DEST_UNREACHABLE (3) 69 #define ICMP_CODE_PORT_UNREACHABLE (3) 70 #define ICMP_TYPE_SOURCE_QUENCH (4) 71 #define ICMP_CODE_SOURCE_QUENCH (0) 72 #define ICMP_TYPE_REDIRECT_MESSAGE (5) 73 #define ICMP_TYPE_ECHO_REQUEST (8) 74 #define ICMP_CODE_ECHO_REQUEST (0) 79 #define IANA_ECHO_PORT (7) 80 #define IANA_DISCARD_PORT (9) 81 #define IANA_SSH_PORT (22) 82 #define IANA_TELNET_PORT (23) 84 #define IANA_NETBIOS_NAME_SERVICE_PORT (137) 89 #define ICMP_PING_DATA_SIZE (32) 121 typedef struct _IpHeaderIPv4
123 uint8_t versionNLength;
124 uint8_t diffServNEcn;
125 beuint16_t totalLength;
126 beuint16_t identification;
127 beuint16_t flagsNFragmentOffset;
130 beuint16_t headerChecksum;
131 beuint32_t sourceAddress;
132 beuint32_t destinationAddress;
134 } __attribute__((packed)) IpHeaderIPv4;
145 beuint16_t wFlags_Frag;
153 typedef IPPKT *PIPPKT;
171 typedef UDPPKT *PUDPPKT;
198 typedef PsudeoHeader *PPSUH;
208 extern uint8_t bTTL_Default;
211 extern uint16_t wArpLifetime;
214 extern BOOL bQuietStart;
225 void IpProcessEthernetPacket(PoolPtr poolPtr, uint16_t packetSizeInBytes);
230 uint16_t GetSum(puint16_t addr, uint16_t count);
232 uint16_t GetSum20(puint32_t addr);
234 uint16_t GetSumHdr(PsudeoHeader &hdr, puint16_t addr, uint16_t count);
238 BOOL IsMyIp4(IPADDR4 ip,
int ifc = -1);
241 IPADDR4 GetSrcIp4(IPADDR4 dst);
245 BOOL IsMyIp6(
const IPADDR6 &ip,
int ifc = -1);
246 inline BOOL IsMyIp(
const IPADDR6 &ip,
int ifc = -1)
248 return IsMyIp6(ip, ifc);
255 return GetSrcIp6(dst);
259 inline BOOL IsMyIp(IPADDR4 ip,
int ifc = -1)
261 return IsMyIp4(ip, ifc);
263 inline IPADDR4 GetSrcIp(IPADDR4 dst)
265 return GetSrcIp4(dst);
277 void SendICMPError(PoolPtr pBadPacket, uint8_t type, uint8_t code);
280 void FixHeaderAndSend(PoolPtr p, PIPPKT pIp);
283 void FixHeaderAndSendViaInterface(PoolPtr p, PIPPKT pIp,
int Interface);
286 inline PIPPKT GetIpPkt(PoolPtr p)
288 return (p ==
NULL) ?
NULL : (PIPPKT)(p->pData + 14);
292 inline PIPPKT GetIpPkt(PEFRAME pFrame)
294 return (PIPPKT)(pFrame->pData);
305 inline PUDPPKT GetUdpPkt(PIPPKT pIp)
308 if (pIp->bVerHdrLen == 0x45) {
return (PUDPPKT)pIp->DATA; }
309 return (PUDPPKT)(pIp->DATA + (((pIp->bVerHdrLen & 0XF) * 4) - 20));
342 void InitializeStack();
360 typedef void(FragmentProcessFunction)(PoolPtr pp);
361 extern FragmentProcessFunction *pFragFunc;
380 typedef void(PromisciousPacketFunc)(PoolPtr pp);
381 extern PromisciousPacketFunc *pPromisciousPacketFunc;
401 typedef int(TaskPacketFunc)(
UDPPacket &pkt,
int ifn);
402 extern TaskPacketFunc *pTaskPacketFunc;
420 void ShowIPBuffer(PoolPtr rp);
448 int Ping4(IPADDR4 to, uint16_t
id, uint16_t seq, uint16_t maxwaitticks);
449 int Ping4ViaInterface(IPADDR4 to, uint16_t
id, uint16_t seq, uint16_t wait,
int interface);
452 int Ping6(
const IPADDR6 &to, uint16_t
id, uint16_t seq, uint16_t maxwaitticks,
int size = 32);
453 int Ping6ViaInterface(
const IPADDR6 &to, uint16_t
id, uint16_t seq, uint16_t wait,
int interface,
int size = 32);
454 inline int Ping(
const IPADDR6 &to, uint16_t
id, uint16_t seq, uint16_t maxwaitticks,
int size = 32)
456 return Ping6(to,
id, seq, maxwaitticks, size);
458 inline int PingViaInterface(
const IPADDR6 &to, uint16_t
id, uint16_t seq, uint16_t wait,
int interface,
int size = 32)
460 return Ping6ViaInterface(to,
id, seq, wait, interface, size);
463 inline int Ping(IPADDR4 to, uint16_t
id, uint16_t seq, uint16_t maxwaitticks)
465 return Ping4(to,
id, seq, maxwaitticks);
467 inline int PingViaInterface(IPADDR4 to, uint16_t
id, uint16_t seq, uint16_t wait,
int interface)
469 return Ping4ViaInterface(to,
id, seq, wait, interface);
473 BOOL IsLocal4(IPADDR4 ip,
int ifc);
474 int GetProperInterface4(IPADDR4 dst);
476 #if defined MULTIHOME || defined AUTOIP 477 int AddInterface(IPADDR4 addr, IPADDR4 mask, IPADDR4 gateway,
int root_if);
478 int GetMultiHomeInterface(IPADDR4 ipa,
int norgif);
479 int GetLocalIPInterface4(IPADDR4 ipa);
481 int GetLocalIPInterface6(
const IPADDR6 &ipa);
482 inline int GetLocalIPInterface(
const IPADDR6 &ipa)
484 return GetLocalIPInterface6(ipa);
487 inline int GetLocalIPInterface(IPADDR4 ipa)
489 return GetLocalIPInterface4(ipa);
504 #error Got to pick an IP version 509 uint16_t GetEphemeralPort();
Used to hold and manipulate IPv4 and IPv6 addresses in dual stack mode.
Definition: ipv6_addr.h:28
UDP Packet Class.
Definition: udp.h:70
#define NULL
Definition: nm_bsp.h:76