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); |