Patch from Giuseppe Ciotta to specify retry count.
authorRob Landley <rob@landley.net>
Mon, 20 Feb 2006 23:26:38 +0000 (23:26 -0000)
committerRob Landley <rob@landley.net>
Mon, 20 Feb 2006 23:26:38 +0000 (23:26 -0000)
include/usage.h
networking/udhcp/dhcpc.c

index 05fe506c87f5148ef4e0458df47b9cdf16c302b6..22beeadf34f71e2646c62e0bb60236c579e4e2f0 100644 (file)
        "Adjust filesystem options on ext[23] filesystems.\n\n"
 
 #define udhcpc_trivial_usage \
-       "[-Cfbnqv] [-c CID] [-V VCLS] [-H HOSTNAME] [-i INTERFACE]\n[-p pidfile] [-r IP] [-s script]"
+       "[-Cfbnqtv] [-c CID] [-V VCLS] [-H HOSTNAME] [-i INTERFACE]\n[-p pidfile] [-r IP] [-s script]"
 #define udhcpc_full_usage \
        "\t-c,\t--clientid=CLIENTID\tSet client identifier\n" \
        "\t-C,\t--clientid-none\tSuppress default client identifier\n" \
        "\t-q,\t--quit\tQuit after obtaining lease\n" \
        "\t-r,\t--request=IP\tIP address to request (default: none)\n" \
        "\t-s,\t--script=file\tRun file at dhcp events (default: /usr/share/udhcpc/default.script)\n" \
+       "\t-t,\t--retries=NUM\tSend up to NUM request packets\n"\
        "\t-v,\t--version\tDisplay version"
 
 #define udhcpd_trivial_usage \
index 8568ac1e75aac39d563186577bbe3c2e9784aa59..e035bd4c2473656ceb3eba00ddb086dcc7dc3399 100644 (file)
@@ -58,6 +58,7 @@ struct client_config_t client_config = {
        .hostname = NULL,
        .fqdn = NULL,
        .ifindex = 0,
+       .retries = 3,
        .arp = "\0\0\0\0\0\0",          /* appease gcc-3.0 */
 };
 
@@ -202,13 +203,14 @@ int main(int argc, char *argv[])
                {"request",     required_argument,      0, 'r'},
                {"script",      required_argument,      0, 's'},
                {"version",     no_argument,            0, 'v'},
+               {"retries",     required_argument,      0, 't'},                
                {0, 0, 0, 0}
        };
 
        /* get options */
        while (1) {
                int option_index = 0;
-               c = getopt_long(argc, argv, "c:CV:fbH:h:F:i:np:qr:s:v", arg_options, &option_index);
+               c = getopt_long(argc, argv, "c:CV:fbH:h:F:i:np:qr:s:t:v", arg_options, &option_index);
                if (c == -1) break;
 
                switch (c) {
@@ -284,6 +286,9 @@ int main(int argc, char *argv[])
                case 's':
                        client_config.script = optarg;
                        break;
+               case 't':
+                       client_config.retries = atoi(optarg);
+                       break;
                case 'v':
                        printf("udhcpcd, version %s\n\n", VERSION);
                        return 0;
@@ -353,7 +358,7 @@ int main(int argc, char *argv[])
                        /* timeout dropped to zero */
                        switch (state) {
                        case INIT_SELECTING:
-                               if (packet_num < 3) {
+                               if (packet_num < client_config.retries) {
                                        if (packet_num == 0)
                                                xid = random_xid();
 
@@ -378,7 +383,7 @@ int main(int argc, char *argv[])
                                break;
                        case RENEW_REQUESTED:
                        case REQUESTING:
-                               if (packet_num < 3) {
+                               if (packet_num < client_config.retries) {
                                        /* send request packet */
                                        if (state == RENEW_REQUESTED)
                                                send_renew(xid, server_addr, requested_ip); /* unicast */