1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /* dumpleases.c - Dump the leases granted by udhcpd.
- *
- * Copyright 2013 Sandeep Sharma <sandeep.jack2756@gmail.com>
- * Copyright 2013 Kyungwan Han <asura321@gmail.com>
- *
- USE_DUMPLEASES(NEWTOY(dumpleases, ">0arf:[!ar]", TOYFLAG_USR|TOYFLAG_BIN))
- config DUMPLEASES
- bool "dumpleases"
- default n
- help
- usage: dumpleases [-r|-a] [-f LEASEFILE]
- Display DHCP leases granted by udhcpd
- -f FILE, Lease file
- -r Show remaining time
- -a Show expiration time
- */
- #define FOR_dumpleases
- #include "toys.h"
- GLOBALS(
- char *file;
- )
- //lease structure
- struct lease {
- uint32_t expires;
- uint32_t lease_nip;
- uint8_t lease_mac[6];
- char hostname[20];
- uint8_t pad[2]; //Padding
- };
- void dumpleases_main(void)
- {
- struct in_addr addr;
- struct lease lease_struct;
- int64_t written_time , current_time, exp;
- int i, fd;
-
- if(!(toys.optflags & FLAG_f)) TT.file = "/var/lib/misc/dhcpd.leases"; //DEF_LEASE_FILE
- fd = xopenro(TT.file);
- xprintf("Mac Address IP Address Host Name Expires %s\n", (toys.optflags & FLAG_a) ? "at" : "in");
- xread(fd, &written_time, sizeof(written_time));
- current_time = time(NULL);
- written_time = SWAP_BE64(written_time);
- if(current_time < written_time) written_time = current_time;
- while(sizeof(lease_struct) ==
- (readall(fd, &lease_struct, sizeof(lease_struct)))) {
- for (i = 0; i < 6; i++) printf(":%02x"+ !i, lease_struct.lease_mac[i]);
-
- addr.s_addr = lease_struct.lease_nip;
- lease_struct.hostname[19] = '\0';
- xprintf(" %-16s%-20s", inet_ntoa(addr), lease_struct.hostname );
- exp = ntohl(lease_struct.expires) + written_time;
- if (exp <= current_time) {
- xputs("expired");
- continue;
- }
- if (!(toys.optflags & FLAG_a)) {
- unsigned dt, hr, m;
- unsigned expires = exp - current_time;
- dt = expires / (24*60*60); expires %= (24*60*60);
- hr = expires / (60*60); expires %= (60*60);
- m = expires / 60; expires %= 60;
- if (dt) xprintf("%u days ", dt);
- xprintf("%02u:%02u:%02u\n", hr, m, (unsigned)expires);
- } else {
- fputs(ctime((const time_t*)&exp), stdout);
- }
- }
- xclose(fd);
- }
|