From b58e7bc7cb8ce4fc6f824761ac8ef3920e7dfcc1 Mon Sep 17 00:00:00 2001 From: Miguel Date: Tue, 25 Sep 2018 20:46:52 +0200 Subject: working on icmp ping reply --- net/ipv4.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 net/ipv4.h (limited to 'net/ipv4.h') diff --git a/net/ipv4.h b/net/ipv4.h new file mode 100644 index 0000000..e3cbc36 --- /dev/null +++ b/net/ipv4.h @@ -0,0 +1,25 @@ +// http://www.saminiir.com/lets-code-tcp-ip-stack-2-ipv4-icmpv4/ +#include +#include + +#include "eth.h" +#include "netdev.h" + +struct ipv4_hdr { + uint8_t ihl : 4; // 4bit / number of 32 bit words in header + uint8_t version : 4; // 4bit / 4 - ipv4 + uint8_t tos; // type of service + uint16_t len; // total length of ip datagramm + uint16_t id; // index of datagram for fragmentation + uint16_t flags : 3; // various control flags + uint16_t frag_offset : 13; // fragment offset 0 - first + uint8_t ttl; // time to live - countdown decreased by each receiver + uint8_t proto; // payload protocol / 1-icmp, 16 - udp , 6 -tcp + uint16_t csum; // header checksum + uint32_t saddr; // source ip address + uint32_t daddr; // destination ip address +} __attribute__((packed)); + +uint16_t ipv4_checksum(void *addr, int count); +bool ipv4_incoming(struct netdev *,struct eth_hdr *); +uint16_t ipv4_checksum(void *addr, int count); -- cgit v1.2.3