|
@@ -134,15 +134,24 @@ Pkt6::packUDP() {
|
|
|
try {
|
|
|
// DHCPv6 header: message-type (1 octect) + transaction id (3 octets)
|
|
|
data_[0] = msg_type_;
|
|
|
+
|
|
|
+ // that's elegant, but it doesn't work
|
|
|
data_[1] = (transid_ >> 16) & 0xff;
|
|
|
data_[2] = (transid_ >> 8) & 0xff;
|
|
|
data_[3] = (transid_) & 0xff;
|
|
|
|
|
|
+ // that's ugly, but it does work
|
|
|
+ int tmp = transid_;
|
|
|
+ data_[3] = tmp%256; tmp /=256;
|
|
|
+ data_[2] = tmp%256; tmp /=256;
|
|
|
+ data_[1] = tmp%256; tmp /=256;
|
|
|
+
|
|
|
// the rest are options
|
|
|
unsigned short offset = LibDHCP::packOptions6(data_, length,
|
|
|
4/*offset*/,
|
|
|
options_);
|
|
|
|
|
|
+
|
|
|
// sanity check
|
|
|
if (offset != length) {
|
|
|
isc_throw(OutOfRange, "Packet build failed: expected size="
|
|
@@ -205,7 +214,8 @@ Pkt6::unpackUDP() {
|
|
|
return (false);
|
|
|
}
|
|
|
msg_type_ = data_[0];
|
|
|
- transid_ = (data_[1] << 16) + (data_[2] << 8) + data_[3];
|
|
|
+ transid_ = ((unsigned int)data_[1] << 16) + ((unsigned int)data_[2] << 8) + (unsigned int)data_[3];
|
|
|
+ transid_ = transid_ & 0xffffff;
|
|
|
|
|
|
unsigned int offset = LibDHCP::unpackOptions6(data_,
|
|
|
data_len_,
|