Introduction
Introduction Statistics Contact Development Disclaimer Help
args: simplify a bit - sdhcp - simple dhcp client
git clone git://git.codemadness.org/sdhcp
Log
Files
Refs
LICENSE
---
commit 2f36192032083fac6ee0200f3b32f5253ac6c221
parent 4f0cb77b97c5b7e907cd5b1e926a1d992f566995
Author: Hiltjo Posthuma <[email protected]>
Date: Sat, 26 Apr 2014 00:18:33 +0200
args: simplify a bit
- change -i to toggle to set ip (default none).
- add -e to launch program $CLIENT, $DNS, $ROUTER and $MASK are set.
Signed-off-by: Hiltjo Posthuma <[email protected]>
Diffstat:
M sdhcp.c | 31 +++++++++++++++++++++++------…
1 file changed, 23 insertions(+), 8 deletions(-)
---
diff --git a/sdhcp.c b/sdhcp.c
@@ -85,6 +85,7 @@ static unsigned char hwaddr[16];
static time_t starttime;
static char *ifname = "eth0";
static char *cid = "";
+static char *program = "";
static int sock;
/* sav */
static unsigned char server[4];
@@ -95,6 +96,7 @@ static unsigned char dns[4];
static unsigned long t1;
static int dflag = 0; /* set DNS: change /etc/resolv.conf ? */
+static int iflag = 0;
#define IP(a,b,c,d) (unsigned char[4]){a,b,c,d}
@@ -312,9 +314,22 @@ dhcprecv(void)
static void
acceptlease(void)
{
- setip(client, mask, router);
+ char buf[128];
+ if(iflag)
+ setip(client, mask, router);
if(dflag == 1)
setdns(dns);
+ if(*program) {
+ snprintf(buf, sizeof(buf), "%d.%d.%d.%d", client[0], client[1]…
+ setenv("CLIENT", buf, 1);
+ snprintf(buf, sizeof(buf), "%d.%d.%d.%d", mask[0], mask[1], ma…
+ setenv("MASK", buf, 1);
+ snprintf(buf, sizeof(buf), "%d.%d.%d.%d", router[0], router[1]…
+ setenv("ROUTER", buf, 1);
+ snprintf(buf, sizeof(buf), "%d.%d.%d.%d", dns[0], dns[1], dns[…
+ setenv("DNS", buf, 1);
+ system(program);
+ }
alarm(t1);
}
@@ -414,7 +429,7 @@ static void cleanexit(int unused) {
static void
usage(void) {
- eprintf("usage: sdhcp [ifname] | [[-i] <ifname>] [-d] [-c <clientid>]\…
+ eprintf("usage: sdhcp [-i] [-d] [-e program] [ifname] [clientid]\n");
}
int
@@ -426,11 +441,11 @@ main(int argc, char *argv[])
int rnd;
ARGBEGIN {
- case 'c': /* client-id */
- cid = EARGF(usage());
+ case 'e': /* run program */
+ program = EARGF(usage());
break;
- case 'i': /* interface */
- ifname = EARGF(usage());
+ case 'i': /* set ip */
+ iflag = 1;
break;
case 'd': /* DNS: update /etc/resolv.conf */
dflag = 1;
@@ -441,9 +456,9 @@ main(int argc, char *argv[])
} ARGEND;
if(argc >= 1)
- ifname = argv[0];
+ ifname = argv[0]; /* interface name */
if(argc >= 2)
- cid = argv[1];
+ cid = argv[1]; /* client-id */
memset(&ifreq, 0, sizeof(ifreq));
signal(SIGALRM, nop);
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.