summaryrefslogtreecommitdiff
path: root/dhcpctl
diff options
context:
space:
mode:
authorTed Lemon <source@isc.org>2000-02-15 20:40:36 +0000
committerTed Lemon <source@isc.org>2000-02-15 20:40:36 +0000
commitbdcaf7b95d9b5a409919e0f359e3c651a6f1e100 (patch)
tree530fc0f6b9e5dea5c661a6c173a87491ae1ba81c /dhcpctl
parentf824c26ece3147d93ec56e172c3e6646086ed1ee (diff)
downloadisc-dhcp-bdcaf7b95d9b5a409919e0f359e3c651a6f1e100.tar.gz
Incorporate Brian Murrell's new OMAPI DHCP client changes.
Diffstat (limited to 'dhcpctl')
-rw-r--r--dhcpctl/cltest.c62
1 files changed, 54 insertions, 8 deletions
diff --git a/dhcpctl/cltest.c b/dhcpctl/cltest.c
index b6f1cde9..4cbc9cf8 100644
--- a/dhcpctl/cltest.c
+++ b/dhcpctl/cltest.c
@@ -11,6 +11,8 @@
int main (int, char **);
+enum modes { up, down };
+
int main (argc, argv)
int argc;
char **argv;
@@ -21,6 +23,17 @@ int main (argc, argv)
dhcpctl_data_string cid;
dhcpctl_data_string result, groupname, identifier;
int i;
+ int mode;
+ char *action;
+
+ if (!strcmp (argv [1], "-u")) {
+ mode = up;
+ } else if (!strcmp (argv [1], "-d")) {
+ mode = down;
+ } else {
+ fprintf (stderr, "Unknown switch \"%s\"\n", argv [1]);
+ exit (1);
+ }
status = dhcpctl_initialize ();
if (status != ISC_R_SUCCESS) {
@@ -46,19 +59,52 @@ int main (argc, argv)
exit (1);
}
- status = dhcpctl_set_string_value (interface_handle, argv[1], "name");
+ status = dhcpctl_set_string_value (interface_handle, argv [2], "name");
if (status != ISC_R_SUCCESS) {
fprintf (stderr, "dhcpctl_set_value: %s\n",
isc_result_totext (status));
exit (1);
}
- status = dhcpctl_open_object (interface_handle, connection,
- DHCPCTL_CREATE | DHCPCTL_EXCL);
- if (status != ISC_R_SUCCESS) {
- fprintf (stderr, "dhcpctl_open_object: %s\n",
- isc_result_totext (status));
- exit (1);
+ if (mode == up) {
+ /* "up" the interface */
+ printf ("upping interface %s\n", argv [2]);
+ action = "create";
+ status = dhcpctl_open_object (interface_handle, connection,
+ DHCPCTL_CREATE | DHCPCTL_EXCL);
+ if (status != ISC_R_SUCCESS) {
+ fprintf (stderr, "dhcpctl_open_object: %s\n",
+ isc_result_totext (status));
+ exit (1);
+ }
+ } else {
+ /* down the interface */
+ printf ("downing interface %s\n", argv [2]);
+ action = "remove";
+ status = dhcpctl_open_object (interface_handle, connection, 0);
+ if (status != ISC_R_SUCCESS) {
+ fprintf (stderr, "dhcpctl_open_object: %s\n",
+ isc_result_totext (status));
+ exit (1);
+ }
+ status = dhcpctl_wait_for_completion (interface_handle,
+ &waitstatus);
+ if (status != ISC_R_SUCCESS) {
+ fprintf (stderr, "dhcpctl_wait_for_completion: %s\n",
+ isc_result_totext (status));
+ exit (1);
+ }
+ if (waitstatus != ISC_R_SUCCESS) {
+ fprintf (stderr, "dhcpctl_wait_for_completion: %s\n",
+ isc_result_totext (waitstatus));
+ exit (1);
+ }
+ status = dhcpctl_object_remove (connection, interface_handle);
+ if (status != ISC_R_SUCCESS) {
+ fprintf (stderr, "dhcpctl_open_object: %s\n",
+ isc_result_totext (status));
+ exit (1);
+ }
}
status = dhcpctl_wait_for_completion (interface_handle, &waitstatus);
@@ -68,7 +114,7 @@ int main (argc, argv)
exit (1);
}
if (waitstatus != ISC_R_SUCCESS) {
- fprintf (stderr, "interface object create: %s\n",
+ fprintf (stderr, "interface object %s: %s\n", action,
isc_result_totext (waitstatus));
exit (1);
}