diff options
author | carlsonj <none@none> | 2007-04-25 11:54:45 -0700 |
---|---|---|
committer | carlsonj <none@none> | 2007-04-25 11:54:45 -0700 |
commit | cfb9c9abdc2696bc174bb10a3a28552dc917b98f (patch) | |
tree | 66f98c1f0a916d6eacc66a9141e1153208695386 /usr/src/lib/libdhcpagent | |
parent | 8cb045d062db356cee4eaacd954f772ab314f6f3 (diff) | |
download | illumos-gate-cfb9c9abdc2696bc174bb10a3a28552dc917b98f.tar.gz |
6396937 dhcpagent: cannot write /etc/dhcp/e1000g0.dhc
6514851 in.ndpd "giving up" message needs work
6524645 clear_lif_dhcp is too cautious
6525108 inconsistent handling of lists due to fix for CR 6209214
6528047 dhcp inform messages are sent with zero source
6541139 dhcpagent can leave timers running on drop
6541633 dhcpagent's route clean-up mechanism can misfire, removing default route
Diffstat (limited to 'usr/src/lib/libdhcpagent')
-rw-r--r-- | usr/src/lib/libdhcpagent/common/dhcpagent_ipc.c | 32 | ||||
-rw-r--r-- | usr/src/lib/libdhcpagent/common/dhcpagent_ipc.h | 2 | ||||
-rw-r--r-- | usr/src/lib/libdhcpagent/common/dhcpagent_util.c | 32 |
3 files changed, 27 insertions, 39 deletions
diff --git a/usr/src/lib/libdhcpagent/common/dhcpagent_ipc.c b/usr/src/lib/libdhcpagent/common/dhcpagent_ipc.c index 8a3ec18060..0d5cc7f8ff 100644 --- a/usr/src/lib/libdhcpagent/common/dhcpagent_ipc.c +++ b/usr/src/lib/libdhcpagent/common/dhcpagent_ipc.c @@ -76,6 +76,12 @@ static int dhcp_ipc_timed_read(int, void *, unsigned int, int *); static int getinfo_ifnames(const char *, dhcp_optnum_t *, DHCP_OPT **); static char *get_ifnames(int, int); +/* must be kept in sync with enum in dhcpagent_ipc.h */ +static const char *ipc_typestr[] = { + "drop", "extend", "ping", "release", "start", "status", + "inform", "get_tag" +}; + /* * dhcp_ipc_alloc_request(): allocates a dhcp_ipc_request_t of the given type * and interface, with a timeout of 0. @@ -636,6 +642,25 @@ dhcp_ipc_strerror(int error) } /* + * dhcp_string_to_request(): maps a string into a request code + * + * input: const char *: the string to map + * output: dhcp_ipc_type_t: the request code, or -1 if unknown + */ + +dhcp_ipc_type_t +dhcp_string_to_request(const char *request) +{ + unsigned int i; + + for (i = 0; i < DHCP_NIPC; i++) + if (strcmp(ipc_typestr[i], request) == 0) + return ((dhcp_ipc_type_t)i); + + return ((dhcp_ipc_type_t)-1); +} + +/* * dhcp_ipc_type_to_string(): maps an ipc command code into a human-readable * string * @@ -646,15 +671,10 @@ dhcp_ipc_strerror(int error) const char * dhcp_ipc_type_to_string(dhcp_ipc_type_t type) { - static const char *typestr[] = { - "drop", "extend", "ping", "release", "start", "status", - "inform", "get_tag" - }; - if (type < 0 || type >= DHCP_NIPC) return ("unknown"); else - return (typestr[(int)type]); + return (ipc_typestr[(int)type]); } /* diff --git a/usr/src/lib/libdhcpagent/common/dhcpagent_ipc.h b/usr/src/lib/libdhcpagent/common/dhcpagent_ipc.h index 91236a85bb..58f06c9d3f 100644 --- a/usr/src/lib/libdhcpagent/common/dhcpagent_ipc.h +++ b/usr/src/lib/libdhcpagent/common/dhcpagent_ipc.h @@ -85,7 +85,7 @@ typedef enum { * code in dhcpagent relies on the numeric values of these * requests -- but there's no sane reason to change them anyway. * - * If any commands are changed, added, or removed, see the typestr[] + * If any commands are changed, added, or removed, see the ipc_typestr[] * array in dhcpagent_ipc.c. */ diff --git a/usr/src/lib/libdhcpagent/common/dhcpagent_util.c b/usr/src/lib/libdhcpagent/common/dhcpagent_util.c index 61101bb66c..e6d95cd0d1 100644 --- a/usr/src/lib/libdhcpagent/common/dhcpagent_util.c +++ b/usr/src/lib/libdhcpagent/common/dhcpagent_util.c @@ -79,38 +79,6 @@ dhcp_state_to_string(DHCPSTATE state) } /* - * dhcp_string_to_request(): maps a string into a request code - * - * input: const char *: the string to map - * output: dhcp_ipc_type_t: the request code, or -1 if unknown - */ - -dhcp_ipc_type_t -dhcp_string_to_request(const char *request) -{ - static struct { - const char *string; - dhcp_ipc_type_t type; - } types[] = { - { "drop", DHCP_DROP }, - { "extend", DHCP_EXTEND }, - { "inform", DHCP_INFORM }, - { "ping", DHCP_PING }, - { "release", DHCP_RELEASE }, - { "start", DHCP_START }, - { "status", DHCP_STATUS } - }; - - unsigned int i; - - for (i = 0; i < (sizeof (types) / sizeof (*types)); i++) - if (strcmp(types[i].string, request) == 0) - return (types[i].type); - - return (-1); -} - -/* * dhcp_start_agent(): starts the agent if not already running * * input: int: number of seconds to wait for agent to start (-1 is forever) |