diff options
Diffstat (limited to 'usr/src/lib/libdladm/common/libdladm.c')
-rw-r--r-- | usr/src/lib/libdladm/common/libdladm.c | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/usr/src/lib/libdladm/common/libdladm.c b/usr/src/lib/libdladm/common/libdladm.c index 37823ce913..1452e6de01 100644 --- a/usr/src/lib/libdladm/common/libdladm.c +++ b/usr/src/lib/libdladm/common/libdladm.c @@ -20,7 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2015, Joyent, Inc. + * Copyright (c) 2016, Joyent, Inc. */ #include <unistd.h> @@ -99,6 +99,18 @@ static link_protect_t link_protect_types[] = { }; #define LPTYPES (sizeof (link_protect_types) / sizeof (link_protect_t)) +typedef struct { + uint32_t ld_type; + char *ld_name; +} link_dynamic_t; + +static link_dynamic_t link_dynamic_types[] = { + { MPT_DYN_DHCPV4, "dhcpv4" }, + { MPT_DYN_DHCPV6, "dhcpv6" }, + { MPT_DYN_SLAAC, "slaac" }, +}; +#define DYNTYPES (sizeof (link_dynamic_types) / sizeof (link_dynamic_t)) + dladm_status_t dladm_open(dladm_handle_t *handle) { @@ -945,6 +957,47 @@ dladm_protect2str(uint32_t ptype, char *buf) } /* + * Convert dynamic address method string to a value. + */ +dladm_status_t +dladm_str2dynamic(char *token, uint32_t *dtype) +{ + link_dynamic_t *ld; + int i; + + for (i = 0; i < DYNTYPES; i++) { + ld = &link_dynamic_types[i]; + if (strcmp(token, ld->ld_name) == 0) { + *dtype = ld->ld_type; + return (DLADM_STATUS_OK); + } + } + return (DLADM_STATUS_BADVAL); +} + + +/* + * Convert dynamic address method value to a string. + */ +const char * +dladm_dynamic2str(uint32_t dtype, char *buf) +{ + const char *s = "--"; + link_dynamic_t *ld; + int i; + + for (i = 0; i < DYNTYPES; i++) { + ld = &link_dynamic_types[i]; + if (ld->ld_type == dtype) { + s = ld->ld_name; + break; + } + } + (void) snprintf(buf, DLADM_STRSIZE, "%s", dgettext(TEXT_DOMAIN, s)); + return (buf); +} + +/* * Convert an IPv4 address to/from a string. */ const char * @@ -1086,7 +1139,7 @@ fail: */ dladm_status_t dladm_strs2range(char **prop_val, uint_t val_cnt, - mac_propval_type_t type, mac_propval_range_t **range) + mac_propval_type_t type, mac_propval_range_t **range) { int i; char *endp; |