dhcpv6: Retransmit a message with same transaction id
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Fri, 26 Apr 2013 06:51:31 +0000 (09:51 +0300)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Fri, 26 Apr 2013 10:06:24 +0000 (13:06 +0300)
Make sure we do not create a new transaction id for a message
when it needs to be retransmitted.

src/dhcpv6.c

index 1d724e5..7315c39 100644 (file)
@@ -271,6 +271,8 @@ static void info_req_cb(GDHCPClient *dhcp_client, gpointer user_data)
                return;
        }
 
+       g_dhcpv6_client_clear_retransmit(dhcp_client);
+
        option = g_dhcp_client_get_option(dhcp_client, G_DHCPV6_DNS_SERVERS);
        entries = g_list_length(option);
 
@@ -570,6 +572,7 @@ static void rebind_cb(GDHCPClient *dhcp_client, gpointer user_data)
 
        g_dhcpv6_client_reset_rebind(dhcp_client);
        g_dhcpv6_client_reset_renew(dhcp_client);
+       g_dhcpv6_client_clear_retransmit(dhcp_client);
 
        re_cb(dhcp_client, user_data);
 }
@@ -652,6 +655,8 @@ static gboolean timeout_rebind(gpointer user_data)
 
        dhcp->timeout = g_timeout_add(dhcp->RT, timeout_rebind, dhcp);
 
+       g_dhcpv6_client_set_retransmit(dhcp->dhcp_client);
+
        g_dhcp_client_start(dhcp->dhcp_client, NULL);
 
        return FALSE;
@@ -676,6 +681,8 @@ static void request_cb(GDHCPClient *dhcp_client, gpointer user_data)
 {
        DBG("");
 
+       g_dhcpv6_client_clear_retransmit(dhcp_client);
+
        re_cb(dhcp_client, user_data);
 }
 
@@ -733,6 +740,8 @@ static gboolean timeout_request(gpointer user_data)
        DBG("request RT timeout %d msec", dhcp->RT);
        dhcp->timeout = g_timeout_add(dhcp->RT, timeout_request, dhcp);
 
+       g_dhcpv6_client_set_retransmit(dhcp->dhcp_client);
+
        g_dhcp_client_start(dhcp->dhcp_client, NULL);
 
        return FALSE;
@@ -743,6 +752,7 @@ static void renew_cb(GDHCPClient *dhcp_client, gpointer user_data)
        DBG("");
 
        g_dhcpv6_client_reset_renew(dhcp_client);
+       g_dhcpv6_client_clear_retransmit(dhcp_client);
 
        re_cb(dhcp_client, user_data);
 }
@@ -795,6 +805,8 @@ static gboolean timeout_renew(gpointer user_data)
 
        dhcp->timeout = g_timeout_add(dhcp->RT, timeout_renew, dhcp);
 
+       g_dhcpv6_client_set_retransmit(dhcp->dhcp_client);
+
        g_dhcp_client_start(dhcp->dhcp_client, NULL);
 
        return FALSE;
@@ -979,6 +991,8 @@ static gboolean timeout_info_req(gpointer user_data)
 
        dhcp->timeout = g_timeout_add(dhcp->RT, timeout_info_req, dhcp);
 
+       g_dhcpv6_client_set_retransmit(dhcp->dhcp_client);
+
        g_dhcp_client_start(dhcp->dhcp_client, NULL);
 
        return FALSE;
@@ -1045,6 +1059,8 @@ static void advertise_cb(GDHCPClient *dhcp_client, gpointer user_data)
 
        clear_timer(dhcp);
 
+       g_dhcpv6_client_clear_retransmit(dhcp_client);
+
        if (g_dhcpv6_client_get_status(dhcp_client) != 0) {
                if (dhcp->callback != NULL)
                        dhcp->callback(dhcp->network, FALSE);
@@ -1070,6 +1086,8 @@ static void solicitation_cb(GDHCPClient *dhcp_client, gpointer user_data)
        clear_timer(dhcp);
 
        set_addresses(dhcp_client, dhcp);
+
+       g_dhcpv6_client_clear_retransmit(dhcp_client);
 }
 
 static gboolean timeout_solicitation(gpointer user_data)
@@ -1082,6 +1100,8 @@ static gboolean timeout_solicitation(gpointer user_data)
 
        dhcp->timeout = g_timeout_add(dhcp->RT, timeout_solicitation, dhcp);
 
+       g_dhcpv6_client_set_retransmit(dhcp->dhcp_client);
+
        g_dhcp_client_start(dhcp->dhcp_client, NULL);
 
        return FALSE;