gdhcp: Do not change the transaction id if retransmitting
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Fri, 26 Apr 2013 06:51:30 +0000 (09:51 +0300)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Fri, 26 Apr 2013 10:06:01 +0000 (13:06 +0300)
As requested in RFC 3315 chapter 15.1, a client MUST leave
the transaction id unchanged in retransmissions of a message.

gdhcp/client.c

index ec1cdec..71983ce 100644 (file)
@@ -816,9 +816,15 @@ static int send_dhcpv6_msg(GDHCPClient *dhcp_client, int type, char *msg)
 
        init_packet(dhcp_client, packet, type);
 
-       dhcp_client->xid = packet->transaction_id[0] << 16 |
-                       packet->transaction_id[1] << 8 |
-                       packet->transaction_id[2];
+       if (dhcp_client->retransmit == FALSE)
+               dhcp_client->xid = packet->transaction_id[0] << 16 |
+                               packet->transaction_id[1] << 8 |
+                               packet->transaction_id[2];
+       else {
+               packet->transaction_id[0] = dhcp_client->xid >> 16;
+               packet->transaction_id[1] = dhcp_client->xid >> 8 ;
+               packet->transaction_id[2] = dhcp_client->xid;
+       }
 
        debug(dhcp_client, "sending DHCPv6 %s message xid 0x%04x", msg,
                                                        dhcp_client->xid);