Changeset 1770 in MondoRescue for branches/stable/mindi-busybox/networking/udhcp/dumpleases.c
- Timestamp:
- Nov 6, 2007, 11:01:53 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/stable/mindi-busybox/networking/udhcp/dumpleases.c
r821 r1770 3 3 * Licensed under the GPL v2 or later, see the file LICENSE in this tarball. 4 4 */ 5 #include <fcntl.h>6 #include <string.h>7 #include <stdlib.h>8 #include <stdio.h>9 #include <sys/wait.h>10 #include <arpa/inet.h>11 #include <netdb.h>12 #include <netinet/in.h>13 #include <stdio.h>14 #include <sys/socket.h>15 #include <unistd.h>16 5 #include <getopt.h> 17 #include <time.h>18 6 7 #include "common.h" 19 8 #include "dhcpd.h" 20 #include "leases.h"21 #include "libbb_udhcp.h"22 9 23 #define REMAINING 0 24 #define ABSOLUTE 1 25 26 27 #ifndef IN_BUSYBOX 28 static void ATTRIBUTE_NORETURN show_usage(void) 10 int dumpleases_main(int argc, char **argv); 11 int dumpleases_main(int argc, char **argv) 29 12 { 30 printf( 31 "Usage: dumpleases -f <file> -[r|a]\n\n" 32 " -f, --file=FILENAME Leases file to load\n" 33 " -r, --remaining Interepret lease times as time remaining\n" 34 " -a, --absolute Interepret lease times as expire time\n"); 35 exit(0); 36 } 37 #else 38 #define show_usage bb_show_usage 39 #endif 40 41 42 #ifdef IN_BUSYBOX 43 int dumpleases_main(int argc, char *argv[]) 44 #else 45 int main(int argc, char *argv[]) 46 #endif 47 { 48 FILE *fp; 49 int i, c, mode = REMAINING; 50 long expires; 13 int fd; 14 int i; 15 unsigned opt; 16 time_t expires; 51 17 const char *file = LEASES_FILE; 52 18 struct dhcpOfferedAddr lease; 53 19 struct in_addr addr; 54 20 55 static const struct option options[] = { 56 {"absolute", 0, 0, 'a'}, 57 {"remaining", 0, 0, 'r'}, 58 {"file", 1, 0, 'f'}, 59 {0, 0, 0, 0} 21 enum { 22 OPT_a = 0x1, // -a 23 OPT_r = 0x2, // -r 24 OPT_f = 0x4, // -f 60 25 }; 26 #if ENABLE_GETOPT_LONG 27 static const char dumpleases_longopts[] ALIGN1 = 28 "absolute\0" No_argument "a" 29 "remaining\0" No_argument "r" 30 "file\0" Required_argument "f" 31 ; 61 32 62 while (1) {63 int option_index = 0; 64 c = getopt_long(argc, argv, "arf:", options, &option_index);65 if (c == -1) break;33 applet_long_options = dumpleases_longopts; 34 #endif 35 opt_complementary = "=0:a--r:r--a"; 36 opt = getopt32(argv, "arf:", &file); 66 37 67 switch (c) { 68 case 'a': mode = ABSOLUTE; break; 69 case 'r': mode = REMAINING; break; 70 case 'f': 71 file = optarg; 72 break; 73 default: 74 show_usage(); 75 } 76 } 38 fd = xopen(file, O_RDONLY); 77 39 78 fp = xfopen(file, "r"); 79 80 printf("Mac Address IP-Address Expires %s\n", mode == REMAINING ? "in" : "at"); 40 printf("Mac Address IP-Address Expires %s\n", (opt & OPT_a) ? "at" : "in"); 81 41 /* "00:00:00:00:00:00 255.255.255.255 Wed Jun 30 21:49:08 1993" */ 82 while (fread(&lease, sizeof(lease), 1, fp)) { 83 84 for (i = 0; i < 6; i++) { 85 printf("%02x", lease.chaddr[i]); 86 if (i != 5) printf(":"); 42 while (full_read(fd, &lease, sizeof(lease)) == sizeof(lease)) { 43 printf(":%02x"+1, lease.chaddr[0]); 44 for (i = 1; i < 6; i++) { 45 printf(":%02x", lease.chaddr[i]); 87 46 } 88 47 addr.s_addr = lease.yiaddr; 89 printf(" %-15s ", inet_ntoa(addr));48 printf(" %-15s ", inet_ntoa(addr)); 90 49 expires = ntohl(lease.expires); 91 printf(" ");92 if (mode == REMAINING) {93 if (!expires) printf("expired\n");50 if (!(opt & OPT_a)) { /* no -a */ 51 if (!expires) 52 puts("expired"); 94 53 else { 95 if (expires > 60*60*24) { 96 printf("%ld days, ", expires / (60*60*24)); 97 expires %= 60*60*24; 98 } 99 if (expires > 60*60) { 100 printf("%ld hours, ", expires / (60*60)); 101 expires %= 60*60; 102 } 103 if (expires > 60) { 104 printf("%ld minutes, ", expires / 60); 105 expires %= 60; 106 } 107 printf("%ld seconds\n", expires); 54 unsigned d, h, m; 55 d = expires / (24*60*60); expires %= (24*60*60); 56 h = expires / (60*60); expires %= (60*60); 57 m = expires / 60; expires %= 60; 58 if (d) printf("%u days ", d); 59 printf("%02u:%02u:%02u\n", h, m, (unsigned)expires); 108 60 } 109 } else printf("%s", ctime(&expires)); 61 } else /* -a */ 62 fputs(ctime(&expires), stdout); 110 63 } 111 fclose(fp);64 /* close(fd); */ 112 65 113 66 return 0;
Note:
See TracChangeset
for help on using the changeset viewer.