summaryrefslogtreecommitdiff
path: root/client/dhclient.c
diff options
context:
space:
mode:
authorTed Lemon <source@isc.org>1996-02-21 12:11:09 +0000
committerTed Lemon <source@isc.org>1996-02-21 12:11:09 +0000
commit97ca16995f70c396d4d69e742953cf80edf612cd (patch)
treef8ebd8a7fe4cc5a52e32b88bdd0a1aa4b0d8949b /client/dhclient.c
parentd9c6d82c49360ee7d451d7cfc20d90bf600f9f2c (diff)
downloadisc-dhcp-97ca16995f70c396d4d69e742953cf80edf612cd.tar.gz
Intermediate changes to support actual DHCP protocol engine
Diffstat (limited to 'client/dhclient.c')
-rw-r--r--client/dhclient.c50
1 files changed, 45 insertions, 5 deletions
diff --git a/client/dhclient.c b/client/dhclient.c
index 0a66c41d..c9d9e64d 100644
--- a/client/dhclient.c
+++ b/client/dhclient.c
@@ -189,11 +189,51 @@ int main (argc, argv, envp)
cons_options ((struct packet *)0,
&outgoing, &decl, bufs);
- memset (&raw.ciaddr, 0, sizeof raw.ciaddr);
- memset (&raw.yiaddr, 0, sizeof raw.ciaddr);
- memset (&raw.siaddr, 0, sizeof raw.ciaddr);
- memset (&raw.giaddr, 0, sizeof raw.ciaddr);
-
+
+ if (decl.ciaddr) {
+ if (tree_evaluate (decl.ciaddr) != 4)
+ warn ("ciaddr is more"
+ " than one address");
+ else
+ memcpy (&raw.ciaddr,
+ decl.ciaddr -> value,
+ decl.ciaddr -> len);
+ } else
+ memset (&raw.ciaddr, 0, sizeof raw.ciaddr);
+
+ if (decl.yiaddr) {
+ if (tree_evaluate (decl.yiaddr) != 4)
+ warn ("yiaddr is more"
+ " than one address");
+ else
+ memcpy (&raw.yiaddr,
+ decl.yiaddr -> value,
+ decl.yiaddr -> len);
+ } else
+ memset (&raw.yiaddr, 0, sizeof raw.yiaddr);
+
+ if (decl.siaddr) {
+ if (tree_evaluate (decl.siaddr) != 4)
+ warn ("siaddr is more"
+ " than one address");
+ else
+ memcpy (&raw.siaddr,
+ decl.siaddr -> value,
+ decl.siaddr -> len);
+ } else
+ memset (&raw.siaddr, 0, sizeof raw.siaddr);
+
+ if (decl.giaddr) {
+ if (tree_evaluate (decl.giaddr) != 4)
+ warn ("giaddr is more"
+ " than one address");
+ else
+ memcpy (&raw.giaddr,
+ decl.giaddr -> value,
+ decl.giaddr -> len);
+ } else
+ memset (&raw.giaddr, 0, sizeof raw.giaddr);
+
raw.xid = xid++;
raw.xid = htons (raw.xid);
raw.secs = 0;