diff --git a/include/ppi.h b/include/ppi.h index 3ea1805..bfa59ca 100644 --- a/include/ppi.h +++ b/include/ppi.h @@ -85,7 +85,7 @@ public: * \return The stored length field value. */ uint16_t length() const { - return _header.length; + return Endian::le_to_host(_header.length); } /** @@ -93,7 +93,7 @@ public: * \return The stored Data Link Type field value. */ uint32_t dlt() const { - return _header.dlt; + return Endian::le_to_host(_header.dlt); } /** diff --git a/src/icmpv6.cpp b/src/icmpv6.cpp index e8615fd..ce00043 100644 --- a/src/icmpv6.cpp +++ b/src/icmpv6.cpp @@ -300,39 +300,41 @@ void ICMPv6::redirect_header(const byte_array& data) { void ICMPv6::mtu(const mtu_type& value) { uint8_t buffer[sizeof(uint16_t) + sizeof(uint32_t)] = {0}; - const uint16_t u16_tmp = Endian::host_to_be(value.first); - const uint32_t u32_tmp = Endian::host_to_be(value.second); - buffer[0] = u16_tmp & 0xff; - buffer[1] = u16_tmp >> 8; - buffer[2] = u32_tmp & 0xff; - buffer[3] = u32_tmp >> 8; - buffer[4] = u32_tmp >> 16; - buffer[5] = u32_tmp >> 24; + const uint16_t u16_tmp = value.first; + const uint32_t u32_tmp = value.second; + buffer[0] = u16_tmp >> 8; + buffer[1] = u16_tmp & 0xff; + + buffer[2] = u32_tmp >> 24; + buffer[3] = u32_tmp >> 16; + buffer[4] = u32_tmp >> 8; + buffer[5] = u32_tmp & 0xff; add_option(option(MTU, sizeof(buffer), buffer)); } void ICMPv6::shortcut_limit(const shortcut_limit_type &value) { uint8_t buffer[sizeof(uint16_t) + sizeof(uint32_t)] = {0}; - const uint32_t u32_tmp = Endian::host_to_be(value.reserved2); + const uint32_t u32_tmp = value.reserved2; buffer[0] = value.limit; buffer[1] = value.reserved1; - buffer[2] = u32_tmp & 0xff; - buffer[3] = u32_tmp >> 8; - buffer[4] = u32_tmp >> 16; - buffer[5] = u32_tmp >> 24; + buffer[2] = u32_tmp >> 24; + buffer[3] = u32_tmp >> 16; + buffer[4] = u32_tmp >> 8; + buffer[5] = u32_tmp & 0xff; add_option(option(NBMA_SHORT_LIMIT, sizeof(buffer), buffer)); } void ICMPv6::new_advert_interval(const new_advert_interval_type &value) { uint8_t buffer[sizeof(uint16_t) + sizeof(uint32_t)] = {0}; - const uint16_t u16_tmp = Endian::host_to_be(value.reserved); - const uint32_t u32_tmp = Endian::host_to_be(value.interval); - buffer[0] = u16_tmp & 0xff; - buffer[1] = u16_tmp >> 8; - buffer[2] = u32_tmp & 0xff; - buffer[3] = u32_tmp >> 8; - buffer[4] = u32_tmp >> 16; - buffer[5] = u32_tmp >> 24; + const uint16_t u16_tmp = value.reserved; + const uint32_t u32_tmp = value.interval; + buffer[0] = u16_tmp >> 8; + buffer[1] = u16_tmp & 0xff; + + buffer[2] = u32_tmp >> 24; + buffer[3] = u32_tmp >> 16; + buffer[4] = u32_tmp >> 8; + buffer[5] = u32_tmp & 0xff; add_option(option(ADVERT_INTERVAL, sizeof(buffer), buffer)); } diff --git a/tests/src/icmpv6.cpp b/tests/src/icmpv6.cpp index fbb72b3..d8dc7bb 100644 --- a/tests/src/icmpv6.cpp +++ b/tests/src/icmpv6.cpp @@ -223,19 +223,24 @@ TEST_F(ICMPv6Test, MTU) { TEST_F(ICMPv6Test, ShortcutLimit) { ICMPv6 icmp; - icmp.shortcut_limit(123); + ICMPv6::shortcut_limit_type slimit(123); + slimit.reserved1 = 0x7f; + slimit.reserved2 = 0x12345678; + icmp.shortcut_limit(slimit); ICMPv6::shortcut_limit_type sl = icmp.shortcut_limit(); EXPECT_EQ(123, sl.limit); - EXPECT_EQ(0, sl.reserved1); - EXPECT_EQ(0, sl.reserved2); + EXPECT_EQ(0x7f, sl.reserved1); + EXPECT_EQ(0x12345678, sl.reserved2); } TEST_F(ICMPv6Test, NewAdvertisementInterval) { ICMPv6 icmp; - icmp.new_advert_interval(0x9a8df7); + ICMPv6::new_advert_interval_type adv(0x9a8df7); + adv.reserved = 0x1234; + icmp.new_advert_interval(adv); ICMPv6::new_advert_interval_type data = icmp.new_advert_interval(); EXPECT_EQ(0x9a8df7U, data.interval); - EXPECT_EQ(0, data.reserved); + EXPECT_EQ(0x1234, data.reserved); } TEST_F(ICMPv6Test, NewHomeAgentInformation) {