Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 1b0602a3 in mainline


Ignore:
Timestamp:
2013-09-24T21:11:46Z (8 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master
Children:
ee20e8a
Parents:
b417559
Message:

Limit the number of retries.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/dhcp/dhcp.c

    rb417559 r1b0602a3  
    5353#include "transport.h"
    5454
    55 #define DHCP_DISCOVER_TIMEOUT_VAL (5 * 1000 * 1000)
    56 #define DHCP_REQUEST_TIMEOUT_VAL (1 * 1000 * 1000)
     55enum {
     56        /** In microseconds */
     57        dhcp_discover_timeout_val = 5 * 1000 * 1000,
     58        /** In microseconds */
     59        dhcp_request_timeout_val = 1 * 1000 * 1000,
     60        dhcp_discover_retries = 5,
     61        dhcp_request_retries = 3
     62};
    5763
    5864#define MAX_MSG_SIZE 1024
     
    6773typedef enum {
    6874        ds_bound,
     75        ds_fail,
    6976        ds_init,
    7077        ds_init_reboot,
     
    99106        /** Transport timeout */
    100107        fibril_timer_t *timeout;
     108        /** Number of retries */
     109        int retries_left;
    101110        /** Link state */
    102111        dhcp_state_t state;
     
    455464        rc = dhcp_send_discover(dlink);
    456465        if (rc != EOK) {
     466                dlink->state = ds_fail;
    457467                rc = EIO;
    458468                goto error;
    459469        }
    460470
    461         fibril_timer_set(dlink->timeout, DHCP_DISCOVER_TIMEOUT_VAL,
     471        dlink->retries_left = dhcp_discover_retries;
     472        fibril_timer_set(dlink->timeout, dhcp_discover_timeout_val,
    462473            dhcpsrv_discover_timeout, dlink);
    463474
     
    498509        }
    499510
    500         fibril_timer_set(dlink->timeout, DHCP_REQUEST_TIMEOUT_VAL,
     511        dlink->retries_left = dhcp_request_retries;
     512        fibril_timer_set(dlink->timeout, dhcp_request_timeout_val,
    501513            dhcpsrv_request_timeout, dlink);
    502514}
     
    559571        log_msg(LOG_DEFAULT, LVL_NOTE, "dcpsrv_discover_timeout");
    560572
     573        if (dlink->retries_left == 0) {
     574                log_msg(LOG_DEFAULT, LVL_NOTE, "Retries exhausted");
     575                dlink->state = ds_fail;
     576                return;
     577        }
     578        --dlink->retries_left;
     579
    561580        log_msg(LOG_DEFAULT, LVL_DEBUG, "Send DHCPDISCOVER");
    562581        rc = dhcp_send_discover(dlink);
    563582        if (rc != EOK) {
    564583                log_msg(LOG_DEFAULT, LVL_ERROR, "Error sending DHCPDISCOVER");
    565                 return;
    566         }
    567 
    568         fibril_timer_set(dlink->timeout, DHCP_DISCOVER_TIMEOUT_VAL,
     584                dlink->state = ds_fail;
     585                return;
     586        }
     587
     588        fibril_timer_set(dlink->timeout, dhcp_discover_timeout_val,
    569589            dhcpsrv_discover_timeout, dlink);
    570590}
     
    578598        log_msg(LOG_DEFAULT, LVL_NOTE, "dcpsrv_request_timeout");
    579599
     600        if (dlink->retries_left == 0) {
     601                log_msg(LOG_DEFAULT, LVL_NOTE, "Retries exhausted");
     602                dlink->state = ds_fail;
     603                return;
     604        }
     605        --dlink->retries_left;
     606
    580607        log_msg(LOG_DEFAULT, LVL_DEBUG, "Send DHCPREQUEST");
    581608        rc = dhcp_send_request(dlink, &dlink->offer);
    582609        if (rc != EOK) {
    583610                log_msg(LOG_DEFAULT, LVL_DEBUG, "Error sending request.");
    584                 return;
    585         }
    586 
    587         fibril_timer_set(dlink->timeout, DHCP_REQUEST_TIMEOUT_VAL,
     611                dlink->state = ds_fail;
     612                return;
     613        }
     614
     615        fibril_timer_set(dlink->timeout, dhcp_request_timeout_val,
    588616            dhcpsrv_request_timeout, dlink);
    589617}
Note: See TracChangeset for help on using the changeset viewer.