From 3eb51a744275841db42d7dc423e4e16c6c0bceb7 Mon Sep 17 00:00:00 2001 From: giomba Date: Tue, 24 Dec 2019 10:01:27 +0100 Subject: [PATCH] IPv6 packet constructor engineered --- ipv6.ino | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/ipv6.ino b/ipv6.ino index 26537cf..c4ec3a7 100644 --- a/ipv6.ino +++ b/ipv6.ino @@ -53,7 +53,9 @@ IPv6Addr::IPv6Addr(const char* address) { /******** IPv6Packet ********/ IPv6Packet::IPv6Packet() { - ; + memset(packet, 0, LEN); + *(packet) = 0x60; /* IP version 6 */ + *(packet + 7) = 64; /* hop limit / ttl */ } IPv6Packet::IPv6Packet(const char* buffer, int len) { @@ -80,16 +82,12 @@ void IPv6Packet::setFlow(const char* flow) { } void IPv6Packet::setPayload(char* payload, int len) { - memset(packet, 0, LEN); - - *(packet) = 0x60; /* IP version 6 */ - *(packet + 4 + 1) = len & 0xff; /* length */ - *(packet + 7) = 64; /* hop limit / ttl */ + *(packet + 4 + 0) = len >> 8; + *(packet + 4 + 1) = len & 0xff; + memcpy(packet + 40, payload, len); /* payload */ +} - memcpy(packet + 40, payload, len); /* actual payload */ - } - - void IPv6Packet::doAction() { +void IPv6Packet::doAction() { /* if destination is my address, or destination is "all nodes" address, then... */ if ((memcmp(&(ALL_NODES_ADDRESS), packet + 24, 16) == 0) || (memcmp(&(coppino::address), packet + 24, 16) == 0)) { int len = ((*(packet + 4)) << 8) + (*(packet + 5)); @@ -106,7 +104,7 @@ void IPv6Packet::setPayload(char* payload, int len) { break; } } - } +} void handleICMP(const char* src_addr, const char* dst_addr, const char* flow, char* packet, int len) { uint8_t type = *(packet);