mirror of
https://github.com/mfontanini/libtins
synced 2026-01-23 02:35:57 +01:00
Fixed broken strict-aliasing rules on ICMPv6.
This commit is contained in:
@@ -300,23 +300,39 @@ 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};
|
||||
*(uint16_t*)buffer = Endian::host_to_be(value.first);
|
||||
*(uint32_t*)(buffer + sizeof(uint16_t)) = Endian::host_to_be(value.second);
|
||||
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;
|
||||
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);
|
||||
buffer[0] = value.limit;
|
||||
buffer[1] = value.reserved1;
|
||||
*(uint32_t*)&buffer[2] = Endian::host_to_be(value.reserved2);
|
||||
buffer[2] = u32_tmp & 0xff;
|
||||
buffer[3] = u32_tmp >> 8;
|
||||
buffer[4] = u32_tmp >> 16;
|
||||
buffer[5] = u32_tmp >> 24;
|
||||
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};
|
||||
*(uint16_t*)buffer = Endian::host_to_be(value.reserved);
|
||||
*((uint32_t*)(buffer + sizeof(uint16_t))) = Endian::host_to_be(value.interval);
|
||||
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;
|
||||
add_option(option(ADVERT_INTERVAL, sizeof(buffer), buffer));
|
||||
}
|
||||
|
||||
|
||||
@@ -216,7 +216,7 @@ TEST_F(ICMPv6Test, RedirectHeader) {
|
||||
|
||||
TEST_F(ICMPv6Test, MTU) {
|
||||
ICMPv6 icmp;
|
||||
ICMPv6::mtu_type data(0, 0x9a8df7);
|
||||
ICMPv6::mtu_type data(0x1234, 0x9a8df7);
|
||||
icmp.mtu(data);
|
||||
EXPECT_EQ(data, icmp.mtu());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user