annotate toys/pending/dumpleases.c @ 1117:4c664a479dd5 draft

dumpleases (for dhcpd) submitted by Ashwini Sharma.
author Rob Landley <rob@landley.net>
date Sun, 10 Nov 2013 18:25:18 -0600
parents
children 473491dbd8c3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1117
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
1 /* dumpleases.c - Dump the leases granted by udhcpd.
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
2 *
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
3 * Copyright 2013 Sandeep Sharma <sandeep.jack2756@gmail.com>
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
4 * Copyright 2013 Kyungwan Han <asura321@gmail.com>
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
5 *
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
6
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
7 USE_DUMPLEASES(NEWTOY(dumpleases, ">0arf:[!ar]", TOYFLAG_USR|TOYFLAG_BIN))
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
8
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
9 config DUMPLEASES
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
10 bool "dumpleases"
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
11 default n
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
12 help
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
13 Usage: dumpleases [-r|-a] [-f LEASEFILE]
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
14
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
15 Display DHCP leases granted by udhcpd
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
16 -f FILE, Lease file
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
17 -r Show remaining time
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
18 -a Show expiration time
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
19 */
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
20
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
21 #define FOR_dumpleases
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
22 #include "toys.h"
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
23 #include "toynet.h"
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
24
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
25 GLOBALS(
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
26 char *file;
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
27 )
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
28
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
29 //lease structure
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
30 struct lease {
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
31 uint32_t expires;
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
32 uint32_t lease_nip;
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
33 uint8_t lease_mac[6];
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
34 char hostname[20];
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
35 uint8_t pad[2]; //Padding
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
36 };
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
37
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
38 void dumpleases_main(void)
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
39 {
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
40 struct in_addr addr;
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
41 struct lease lease_struct;
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
42 int64_t written_time , current_time, exp;
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
43 int i, fd;
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
44
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
45 if(!(toys.optflags & FLAG_f)) TT.file = "/var/lib/misc/udhcpd.leases"; //DEF_LEASE_FILE
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
46 fd = xopen(TT.file, O_RDONLY);
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
47 xprintf("Mac Address IP Address Host Name Expires %s\n", (toys.optflags & FLAG_a) ? "at" : "in");
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
48 xread(fd, &written_time, sizeof(written_time));
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
49 current_time = time(NULL);
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
50 written_time = SWAP_BE64(written_time);
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
51 if(current_time < written_time) written_time = current_time;
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
52
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
53 while(sizeof(lease_struct) ==
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
54 (readall(fd, &lease_struct, sizeof(lease_struct)))) {
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
55 for (i = 0; i < 6; i++) printf(":%02x"+ !i, lease_struct.lease_mac[i]);
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
56
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
57 addr.s_addr = lease_struct.lease_nip;
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
58 lease_struct.hostname[19] = '\0';
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
59 xprintf(" %-16s%-20s", inet_ntoa(addr), lease_struct.hostname );
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
60 exp = ntohl(lease_struct.expires) + written_time;
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
61 if (exp <= current_time) {
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
62 xputs("expired");
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
63 continue;
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
64 }
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
65 if (!(toys.optflags & FLAG_a)) {
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
66 unsigned dt, hr, m;
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
67 unsigned expires = exp - current_time;
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
68 dt = expires / (24*60*60); expires %= (24*60*60);
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
69 hr = expires / (60*60); expires %= (60*60);
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
70 m = expires / 60; expires %= 60;
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
71 if (dt) xprintf("%u days ", dt);
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
72 xprintf("%02u:%02u:%02u\n", hr, m, (unsigned)expires);
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
73 } else {
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
74 fputs(ctime((const time_t*)&exp), stdout);
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
75 }
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
76 }
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
77 xclose(fd);
4c664a479dd5 dumpleases (for dhcpd) submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
78 }