FreeNOS
IPV4.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2015 Niek Linnenbank
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __LIB_LIBNET_IPV4_H
19#define __LIB_LIBNET_IPV4_H
20
21#include <Types.h>
22#include <String.h>
23#include "NetworkProtocol.h"
24
25class ICMP;
26class ARP;
27class UDP;
28
40class IPV4 : public NetworkProtocol
41{
42 public:
43
47 typedef u32 Address;
48
53 {
54 ICMP = 1,
55 IGMP = 2,
56 UDP = 17,
57 TCP = 6
58 };
59
80
96
97 public:
98
106 IPV4(NetworkServer &server,
107 NetworkDevice &device,
108 NetworkProtocol &parent);
109
113 virtual ~IPV4();
114
121
127 void setICMP(::ICMP *icmp);
128
134 void setARP(::ARP *arp);
135
141 void setUDP(::UDP *udp);
142
150 virtual FileSystem::Result getAddress(Address *address);
151
159 virtual FileSystem::Result setAddress(const Address *address);
160
168 static const String toString(const Address address);
169
176 static const Address toAddress(const char *address);
177
190 const void *address,
191 const Size addressSize,
192 const Identifier protocol,
193 const Size payloadSize);
194
204 const Size offset);
205
214 static const u16 checksum(const void *buffer,
215 const Size length);
216
217 private:
218
227
228 private:
229
232
235
238
241
244};
245
251#endif /* __LIB_LIBNET_IPV4_H */
u32 length
Definition IntelACPI.h:1
u8 checksum
Definition IntelACPI.h:1
Address Resolution Protocol.
Definition ARP.h:43
Internet Control Message Protocol (ICMP)
Definition ICMP.h:43
Internet Protocol Version 4.
Definition IPV4.h:41
virtual FileSystem::Result initialize()
Perform initialization.
Definition IPV4.cpp:45
Protocol getProtocolByIdentifier(const NetworkProtocol::Identifier id) const
Convert protocol identifier.
Definition IPV4.cpp:120
static const String toString(const Address address)
Convert address to string.
Definition IPV4.cpp:82
u32 Address
IP-address.
Definition IPV4.h:47
virtual ~IPV4()
Destructor.
Definition IPV4.cpp:41
void setARP(::ARP *arp)
Set ARP instance.
Definition IPV4.cpp:60
void setUDP(::UDP *udp)
Set UDP instance.
Definition IPV4.cpp:65
virtual FileSystem::Result getTransmitPacket(NetworkQueue::Packet **pkt, const void *address, const Size addressSize, const Identifier protocol, const Size payloadSize)
Get a new packet for transmission.
Definition IPV4.cpp:133
::ICMP * m_icmp
ICMP instance.
Definition IPV4.h:234
Address m_address
Current IP address.
Definition IPV4.h:231
struct IPV4::PseudoHeader PseudoHeader
Pseudo Header.
virtual FileSystem::Result process(const NetworkQueue::Packet *pkt, const Size offset)
Process incoming network packet.
Definition IPV4.cpp:210
u16 m_id
Packet ID for IPV4.
Definition IPV4.h:243
Protocol
Protocol types.
Definition IPV4.h:53
@ TCP
Definition IPV4.h:57
@ IGMP
Definition IPV4.h:55
virtual FileSystem::Result getAddress(Address *address)
Get current IP address.
Definition IPV4.cpp:70
virtual FileSystem::Result setAddress(const Address *address)
Set current IP address.
Definition IPV4.cpp:76
::UDP * m_udp
UDP instance.
Definition IPV4.h:240
static const Address toAddress(const char *address)
Convert string to IPV4 address.
Definition IPV4.cpp:94
::ARP * m_arp
ARP instance.
Definition IPV4.h:237
void setICMP(::ICMP *icmp)
Set ICMP instance.
Definition IPV4.cpp:55
struct IPV4::Header Header
IP network packet header.
Network Device abstract class.
Network protocol abstraction class.
Identifier
List of known network protocol identifiers.
Networking server.
Abstraction of strings.
Definition String.h:42
User Datagram Protocol (UDP)
Definition UDP.h:42
unsigned int u32
Unsigned 32-bit number.
Definition Types.h:53
#define PACKED
Ensures strict minimum memory requirements.
Definition Macros.h:159
unsigned short u16
Unsigned 16-bit number.
Definition Types.h:56
unsigned int Size
Any sane size indicator cannot go negative.
Definition Types.h:128
unsigned char u8
Unsigned 8-bit number.
Definition Types.h:59
Result
Result code for filesystem Actions.
Definition FileSystem.h:53
IP network packet header.
Definition IPV4.h:67
u8 versionIHL
Version and header length (IHL)
Definition IPV4.h:68
u16 identification
Definition IPV4.h:71
u16 checksum
Definition IPV4.h:75
Address destination
Definition IPV4.h:77
u8 timeToLive
Definition IPV4.h:73
u8 typeOfService
Definition IPV4.h:69
u16 length
Definition IPV4.h:70
Address source
Definition IPV4.h:76
u8 protocol
Definition IPV4.h:74
u16 fragmentOffset
Definition IPV4.h:72
Pseudo Header.
Definition IPV4.h:88
Address source
Definition IPV4.h:89
Address destination
Definition IPV4.h:90
Represents a network packet.