111767SAnurag.Maskey@Sun.COM /*
211767SAnurag.Maskey@Sun.COM * CDDL HEADER START
311767SAnurag.Maskey@Sun.COM *
411767SAnurag.Maskey@Sun.COM * The contents of this file are subject to the terms of the
511767SAnurag.Maskey@Sun.COM * Common Development and Distribution License (the "License").
611767SAnurag.Maskey@Sun.COM * You may not use this file except in compliance with the License.
711767SAnurag.Maskey@Sun.COM *
811767SAnurag.Maskey@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
911767SAnurag.Maskey@Sun.COM * or http://www.opensolaris.org/os/licensing.
1011767SAnurag.Maskey@Sun.COM * See the License for the specific language governing permissions
1111767SAnurag.Maskey@Sun.COM * and limitations under the License.
1211767SAnurag.Maskey@Sun.COM *
1311767SAnurag.Maskey@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each
1411767SAnurag.Maskey@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1511767SAnurag.Maskey@Sun.COM * If applicable, add the following below this CDDL HEADER, with the
1611767SAnurag.Maskey@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying
1711767SAnurag.Maskey@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner]
1811767SAnurag.Maskey@Sun.COM *
1911767SAnurag.Maskey@Sun.COM * CDDL HEADER END
2011767SAnurag.Maskey@Sun.COM */
2111767SAnurag.Maskey@Sun.COM
2211767SAnurag.Maskey@Sun.COM /*
23*13107SRenee.Sommerfeld@Oracle.COM * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
2411767SAnurag.Maskey@Sun.COM */
2511767SAnurag.Maskey@Sun.COM
2611767SAnurag.Maskey@Sun.COM #include <assert.h>
2711767SAnurag.Maskey@Sun.COM #include <stdio.h>
2811767SAnurag.Maskey@Sun.COM #include <stdlib.h>
2911767SAnurag.Maskey@Sun.COM #include <string.h>
3011767SAnurag.Maskey@Sun.COM #include <sys/types.h>
3111767SAnurag.Maskey@Sun.COM #include <libdlwlan.h>
3211767SAnurag.Maskey@Sun.COM #include <libnvpair.h>
3311767SAnurag.Maskey@Sun.COM
3411767SAnurag.Maskey@Sun.COM #include "libnwam_impl.h"
3511767SAnurag.Maskey@Sun.COM #include <libnwam_priv.h>
3611767SAnurag.Maskey@Sun.COM #include <libnwam.h>
3711767SAnurag.Maskey@Sun.COM
3811767SAnurag.Maskey@Sun.COM /*
3911767SAnurag.Maskey@Sun.COM * Internal implementation of libnwam in-memory objects and values. Objects
4011767SAnurag.Maskey@Sun.COM * are nvlists.
4111767SAnurag.Maskey@Sun.COM */
4211767SAnurag.Maskey@Sun.COM
4311767SAnurag.Maskey@Sun.COM void
nwam_value_free(nwam_value_t value)4411767SAnurag.Maskey@Sun.COM nwam_value_free(nwam_value_t value)
4511767SAnurag.Maskey@Sun.COM {
4611767SAnurag.Maskey@Sun.COM uint_t i;
4711767SAnurag.Maskey@Sun.COM
4811767SAnurag.Maskey@Sun.COM if (value == NULL)
4911767SAnurag.Maskey@Sun.COM return;
5011767SAnurag.Maskey@Sun.COM
5111767SAnurag.Maskey@Sun.COM switch (value->nwv_value_type) {
5211767SAnurag.Maskey@Sun.COM case NWAM_VALUE_TYPE_BOOLEAN:
5311767SAnurag.Maskey@Sun.COM free(value->nwv_values.nwv_boolean);
5411767SAnurag.Maskey@Sun.COM break;
5511767SAnurag.Maskey@Sun.COM case NWAM_VALUE_TYPE_INT64:
5611767SAnurag.Maskey@Sun.COM free(value->nwv_values.nwv_int64);
5711767SAnurag.Maskey@Sun.COM break;
5811767SAnurag.Maskey@Sun.COM case NWAM_VALUE_TYPE_UINT64:
5911767SAnurag.Maskey@Sun.COM free(value->nwv_values.nwv_uint64);
6011767SAnurag.Maskey@Sun.COM break;
6111767SAnurag.Maskey@Sun.COM case NWAM_VALUE_TYPE_STRING:
6211767SAnurag.Maskey@Sun.COM for (i = 0; i < value->nwv_value_numvalues; i++)
6311767SAnurag.Maskey@Sun.COM free(value->nwv_values.nwv_string[i]);
6411767SAnurag.Maskey@Sun.COM free(value->nwv_values.nwv_string);
6511767SAnurag.Maskey@Sun.COM break;
6611767SAnurag.Maskey@Sun.COM }
6711767SAnurag.Maskey@Sun.COM free(value);
6811767SAnurag.Maskey@Sun.COM }
6911767SAnurag.Maskey@Sun.COM
7011767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_create(nwam_value_type_t value_type,void * values,uint_t numvalues,nwam_value_t * valuep)7111767SAnurag.Maskey@Sun.COM nwam_value_create(nwam_value_type_t value_type, void *values, uint_t numvalues,
7211767SAnurag.Maskey@Sun.COM nwam_value_t *valuep)
7311767SAnurag.Maskey@Sun.COM {
7411767SAnurag.Maskey@Sun.COM nwam_value_t newvalue;
7511767SAnurag.Maskey@Sun.COM boolean_t *values_boolean;
7611767SAnurag.Maskey@Sun.COM int64_t *values_int64;
7711767SAnurag.Maskey@Sun.COM uint64_t *values_uint64;
7811767SAnurag.Maskey@Sun.COM char **values_string;
7911767SAnurag.Maskey@Sun.COM int i, j;
8011767SAnurag.Maskey@Sun.COM nwam_error_t err = NWAM_SUCCESS;
8111767SAnurag.Maskey@Sun.COM
8211767SAnurag.Maskey@Sun.COM *valuep = NULL;
8311767SAnurag.Maskey@Sun.COM
8411767SAnurag.Maskey@Sun.COM if ((newvalue = calloc(1, sizeof (struct nwam_value))) == NULL)
8511767SAnurag.Maskey@Sun.COM return (NWAM_NO_MEMORY);
8611767SAnurag.Maskey@Sun.COM
8711767SAnurag.Maskey@Sun.COM newvalue->nwv_value_type = value_type;
8811767SAnurag.Maskey@Sun.COM newvalue->nwv_value_numvalues = numvalues;
8911767SAnurag.Maskey@Sun.COM
9011767SAnurag.Maskey@Sun.COM switch (value_type) {
9111767SAnurag.Maskey@Sun.COM case NWAM_VALUE_TYPE_BOOLEAN:
9211767SAnurag.Maskey@Sun.COM values_boolean = values;
9311767SAnurag.Maskey@Sun.COM if ((newvalue->nwv_values.nwv_boolean =
9411767SAnurag.Maskey@Sun.COM calloc(numvalues, sizeof (boolean_t))) == NULL) {
9511767SAnurag.Maskey@Sun.COM free(newvalue);
9611767SAnurag.Maskey@Sun.COM return (NWAM_NO_MEMORY);
9711767SAnurag.Maskey@Sun.COM }
9811767SAnurag.Maskey@Sun.COM for (i = 0; i < numvalues; i++)
9911767SAnurag.Maskey@Sun.COM newvalue->nwv_values.nwv_boolean[i] = values_boolean[i];
10011767SAnurag.Maskey@Sun.COM break;
10111767SAnurag.Maskey@Sun.COM case NWAM_VALUE_TYPE_INT64:
10211767SAnurag.Maskey@Sun.COM values_int64 = values;
10311767SAnurag.Maskey@Sun.COM if ((newvalue->nwv_values.nwv_int64 =
10411767SAnurag.Maskey@Sun.COM calloc(numvalues, sizeof (int64_t))) == NULL) {
10511767SAnurag.Maskey@Sun.COM free(newvalue);
10611767SAnurag.Maskey@Sun.COM return (NWAM_NO_MEMORY);
10711767SAnurag.Maskey@Sun.COM }
10811767SAnurag.Maskey@Sun.COM for (i = 0; i < numvalues; i++)
10911767SAnurag.Maskey@Sun.COM newvalue->nwv_values.nwv_int64[i] = values_int64[i];
11011767SAnurag.Maskey@Sun.COM break;
11111767SAnurag.Maskey@Sun.COM case NWAM_VALUE_TYPE_UINT64:
11211767SAnurag.Maskey@Sun.COM values_uint64 = values;
11311767SAnurag.Maskey@Sun.COM if ((newvalue->nwv_values.nwv_uint64 =
11411767SAnurag.Maskey@Sun.COM calloc(numvalues, sizeof (uint64_t))) == NULL) {
11511767SAnurag.Maskey@Sun.COM free(newvalue);
11611767SAnurag.Maskey@Sun.COM return (NWAM_NO_MEMORY);
11711767SAnurag.Maskey@Sun.COM }
11811767SAnurag.Maskey@Sun.COM for (i = 0; i < numvalues; i++)
11911767SAnurag.Maskey@Sun.COM newvalue->nwv_values.nwv_uint64[i] = values_uint64[i];
12011767SAnurag.Maskey@Sun.COM break;
12111767SAnurag.Maskey@Sun.COM case NWAM_VALUE_TYPE_STRING:
12211767SAnurag.Maskey@Sun.COM values_string = values;
12311767SAnurag.Maskey@Sun.COM if ((newvalue->nwv_values.nwv_string =
12411767SAnurag.Maskey@Sun.COM calloc(numvalues, sizeof (char *))) == NULL) {
12511767SAnurag.Maskey@Sun.COM free(newvalue);
12611767SAnurag.Maskey@Sun.COM return (NWAM_NO_MEMORY);
12711767SAnurag.Maskey@Sun.COM }
12811767SAnurag.Maskey@Sun.COM for (i = 0; i < numvalues; i++) {
12911767SAnurag.Maskey@Sun.COM if (strnlen(values_string[i], NWAM_MAX_VALUE_LEN) ==
13011767SAnurag.Maskey@Sun.COM NWAM_MAX_VALUE_LEN) {
13111767SAnurag.Maskey@Sun.COM err = NWAM_ENTITY_INVALID_VALUE;
13211767SAnurag.Maskey@Sun.COM } else if ((newvalue->nwv_values.nwv_string[i] =
13311767SAnurag.Maskey@Sun.COM strdup(values_string[i])) == NULL) {
13411767SAnurag.Maskey@Sun.COM err = NWAM_NO_MEMORY;
13511767SAnurag.Maskey@Sun.COM }
13611767SAnurag.Maskey@Sun.COM if (err != NWAM_SUCCESS) {
13711767SAnurag.Maskey@Sun.COM for (j = 0; j < i; j++)
13811767SAnurag.Maskey@Sun.COM free(
13911767SAnurag.Maskey@Sun.COM newvalue->nwv_values.nwv_string[i]);
14011767SAnurag.Maskey@Sun.COM free(newvalue->nwv_values.nwv_string);
14111767SAnurag.Maskey@Sun.COM free(newvalue);
14211767SAnurag.Maskey@Sun.COM return (err);
14311767SAnurag.Maskey@Sun.COM }
14411767SAnurag.Maskey@Sun.COM }
14511767SAnurag.Maskey@Sun.COM break;
14611767SAnurag.Maskey@Sun.COM default:
14711767SAnurag.Maskey@Sun.COM break;
14811767SAnurag.Maskey@Sun.COM }
14911767SAnurag.Maskey@Sun.COM
15011767SAnurag.Maskey@Sun.COM *valuep = newvalue;
15111767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
15211767SAnurag.Maskey@Sun.COM }
15311767SAnurag.Maskey@Sun.COM
15411767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_copy(nwam_value_t old,nwam_value_t * newp)15511767SAnurag.Maskey@Sun.COM nwam_value_copy(nwam_value_t old, nwam_value_t *newp)
15611767SAnurag.Maskey@Sun.COM {
15711767SAnurag.Maskey@Sun.COM void *values;
15811767SAnurag.Maskey@Sun.COM
15911767SAnurag.Maskey@Sun.COM assert(old != NULL && newp != NULL);
16011767SAnurag.Maskey@Sun.COM
16111767SAnurag.Maskey@Sun.COM switch (old->nwv_value_type) {
16211767SAnurag.Maskey@Sun.COM case NWAM_VALUE_TYPE_BOOLEAN:
16311767SAnurag.Maskey@Sun.COM values = old->nwv_values.nwv_boolean;
16411767SAnurag.Maskey@Sun.COM break;
16511767SAnurag.Maskey@Sun.COM case NWAM_VALUE_TYPE_INT64:
16611767SAnurag.Maskey@Sun.COM values = old->nwv_values.nwv_int64;
16711767SAnurag.Maskey@Sun.COM break;
16811767SAnurag.Maskey@Sun.COM case NWAM_VALUE_TYPE_UINT64:
16911767SAnurag.Maskey@Sun.COM values = old->nwv_values.nwv_uint64;
17011767SAnurag.Maskey@Sun.COM break;
17111767SAnurag.Maskey@Sun.COM case NWAM_VALUE_TYPE_STRING:
17211767SAnurag.Maskey@Sun.COM values = old->nwv_values.nwv_string;
17311767SAnurag.Maskey@Sun.COM break;
17411767SAnurag.Maskey@Sun.COM default:
17511767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
17611767SAnurag.Maskey@Sun.COM }
17711767SAnurag.Maskey@Sun.COM return (nwam_value_create(old->nwv_value_type, values,
17811767SAnurag.Maskey@Sun.COM old->nwv_value_numvalues, newp));
17911767SAnurag.Maskey@Sun.COM }
18011767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_create_boolean_array(boolean_t * values,uint_t numvalues,nwam_value_t * valuep)18111767SAnurag.Maskey@Sun.COM nwam_value_create_boolean_array(boolean_t *values, uint_t numvalues,
18211767SAnurag.Maskey@Sun.COM nwam_value_t *valuep)
18311767SAnurag.Maskey@Sun.COM {
18411767SAnurag.Maskey@Sun.COM return (nwam_value_create(NWAM_VALUE_TYPE_BOOLEAN, values, numvalues,
18511767SAnurag.Maskey@Sun.COM valuep));
18611767SAnurag.Maskey@Sun.COM }
18711767SAnurag.Maskey@Sun.COM
18811767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_create_boolean(boolean_t value,nwam_value_t * valuep)18911767SAnurag.Maskey@Sun.COM nwam_value_create_boolean(boolean_t value, nwam_value_t *valuep)
19011767SAnurag.Maskey@Sun.COM {
19111767SAnurag.Maskey@Sun.COM return (nwam_value_create_boolean_array(&value, 1, valuep));
19211767SAnurag.Maskey@Sun.COM }
19311767SAnurag.Maskey@Sun.COM
19411767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_create_int64_array(int64_t * values,uint_t numvalues,nwam_value_t * valuep)19511767SAnurag.Maskey@Sun.COM nwam_value_create_int64_array(int64_t *values, uint_t numvalues,
19611767SAnurag.Maskey@Sun.COM nwam_value_t *valuep)
19711767SAnurag.Maskey@Sun.COM {
19811767SAnurag.Maskey@Sun.COM return (nwam_value_create(NWAM_VALUE_TYPE_INT64, values, numvalues,
19911767SAnurag.Maskey@Sun.COM valuep));
20011767SAnurag.Maskey@Sun.COM }
20111767SAnurag.Maskey@Sun.COM
20211767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_create_int64(int64_t value,nwam_value_t * valuep)20311767SAnurag.Maskey@Sun.COM nwam_value_create_int64(int64_t value, nwam_value_t *valuep)
20411767SAnurag.Maskey@Sun.COM {
20511767SAnurag.Maskey@Sun.COM return (nwam_value_create_int64_array(&value, 1, valuep));
20611767SAnurag.Maskey@Sun.COM }
20711767SAnurag.Maskey@Sun.COM
20811767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_create_uint64_array(uint64_t * values,uint_t numvalues,nwam_value_t * valuep)20911767SAnurag.Maskey@Sun.COM nwam_value_create_uint64_array(uint64_t *values, uint_t numvalues,
21011767SAnurag.Maskey@Sun.COM nwam_value_t *valuep)
21111767SAnurag.Maskey@Sun.COM {
21211767SAnurag.Maskey@Sun.COM return (nwam_value_create(NWAM_VALUE_TYPE_UINT64, values, numvalues,
21311767SAnurag.Maskey@Sun.COM valuep));
21411767SAnurag.Maskey@Sun.COM }
21511767SAnurag.Maskey@Sun.COM
21611767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_create_uint64(uint64_t value,nwam_value_t * valuep)21711767SAnurag.Maskey@Sun.COM nwam_value_create_uint64(uint64_t value, nwam_value_t *valuep)
21811767SAnurag.Maskey@Sun.COM {
21911767SAnurag.Maskey@Sun.COM return (nwam_value_create_uint64_array(&value, 1, valuep));
22011767SAnurag.Maskey@Sun.COM }
22111767SAnurag.Maskey@Sun.COM
22211767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_create_string_array(char ** values,uint_t numvalues,nwam_value_t * valuep)22311767SAnurag.Maskey@Sun.COM nwam_value_create_string_array(char **values, uint_t numvalues,
22411767SAnurag.Maskey@Sun.COM nwam_value_t *valuep)
22511767SAnurag.Maskey@Sun.COM {
22611767SAnurag.Maskey@Sun.COM return (nwam_value_create(NWAM_VALUE_TYPE_STRING, values, numvalues,
22711767SAnurag.Maskey@Sun.COM valuep));
22811767SAnurag.Maskey@Sun.COM }
22911767SAnurag.Maskey@Sun.COM
23011767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_create_string(char * value,nwam_value_t * valuep)23111767SAnurag.Maskey@Sun.COM nwam_value_create_string(char *value, nwam_value_t *valuep)
23211767SAnurag.Maskey@Sun.COM {
23311767SAnurag.Maskey@Sun.COM return (nwam_value_create_string_array(&value, 1, valuep));
23411767SAnurag.Maskey@Sun.COM }
23511767SAnurag.Maskey@Sun.COM
23611767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_get_boolean_array(nwam_value_t value,boolean_t ** valuesp,uint_t * numvaluesp)23711767SAnurag.Maskey@Sun.COM nwam_value_get_boolean_array(nwam_value_t value, boolean_t **valuesp,
23811767SAnurag.Maskey@Sun.COM uint_t *numvaluesp)
23911767SAnurag.Maskey@Sun.COM {
24011767SAnurag.Maskey@Sun.COM assert(value != NULL && numvaluesp != NULL && valuesp != NULL);
24111767SAnurag.Maskey@Sun.COM
24211767SAnurag.Maskey@Sun.COM *numvaluesp = value->nwv_value_numvalues;
24311767SAnurag.Maskey@Sun.COM *valuesp = value->nwv_values.nwv_boolean;
24411767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
24511767SAnurag.Maskey@Sun.COM }
24611767SAnurag.Maskey@Sun.COM
24711767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_get_boolean(nwam_value_t value,boolean_t * valuep)24811767SAnurag.Maskey@Sun.COM nwam_value_get_boolean(nwam_value_t value, boolean_t *valuep)
24911767SAnurag.Maskey@Sun.COM {
25011767SAnurag.Maskey@Sun.COM uint_t numvalues;
25111767SAnurag.Maskey@Sun.COM boolean_t *myvaluesp;
25211767SAnurag.Maskey@Sun.COM nwam_error_t err;
25311767SAnurag.Maskey@Sun.COM
25411767SAnurag.Maskey@Sun.COM err = nwam_value_get_boolean_array(value, &myvaluesp, &numvalues);
25511767SAnurag.Maskey@Sun.COM if (err != NWAM_SUCCESS)
25611767SAnurag.Maskey@Sun.COM return (err);
25711767SAnurag.Maskey@Sun.COM if (numvalues != 1)
25811767SAnurag.Maskey@Sun.COM return (NWAM_ENTITY_MULTIPLE_VALUES);
25911767SAnurag.Maskey@Sun.COM
26011767SAnurag.Maskey@Sun.COM *valuep = myvaluesp[0];
26111767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
26211767SAnurag.Maskey@Sun.COM }
26311767SAnurag.Maskey@Sun.COM
26411767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_get_int64_array(nwam_value_t value,int64_t ** valuesp,uint_t * numvaluesp)26511767SAnurag.Maskey@Sun.COM nwam_value_get_int64_array(nwam_value_t value, int64_t **valuesp,
26611767SAnurag.Maskey@Sun.COM uint_t *numvaluesp)
26711767SAnurag.Maskey@Sun.COM {
26811767SAnurag.Maskey@Sun.COM assert(value != NULL && numvaluesp != NULL && valuesp != NULL);
26911767SAnurag.Maskey@Sun.COM
27011767SAnurag.Maskey@Sun.COM *numvaluesp = value->nwv_value_numvalues;
27111767SAnurag.Maskey@Sun.COM *valuesp = value->nwv_values.nwv_int64;
27211767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
27311767SAnurag.Maskey@Sun.COM }
27411767SAnurag.Maskey@Sun.COM
27511767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_get_int64(nwam_value_t value,int64_t * valuep)27611767SAnurag.Maskey@Sun.COM nwam_value_get_int64(nwam_value_t value, int64_t *valuep)
27711767SAnurag.Maskey@Sun.COM {
27811767SAnurag.Maskey@Sun.COM uint_t numvalues;
27911767SAnurag.Maskey@Sun.COM int64_t *myvaluesp;
28011767SAnurag.Maskey@Sun.COM nwam_error_t err;
28111767SAnurag.Maskey@Sun.COM
28211767SAnurag.Maskey@Sun.COM err = nwam_value_get_int64_array(value, &myvaluesp, &numvalues);
28311767SAnurag.Maskey@Sun.COM if (err != NWAM_SUCCESS)
28411767SAnurag.Maskey@Sun.COM return (err);
28511767SAnurag.Maskey@Sun.COM if (numvalues != 1)
28611767SAnurag.Maskey@Sun.COM return (NWAM_ENTITY_MULTIPLE_VALUES);
28711767SAnurag.Maskey@Sun.COM
28811767SAnurag.Maskey@Sun.COM *valuep = myvaluesp[0];
28911767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
29011767SAnurag.Maskey@Sun.COM }
29111767SAnurag.Maskey@Sun.COM
29211767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_get_uint64_array(nwam_value_t value,uint64_t ** valuesp,uint_t * numvaluesp)29311767SAnurag.Maskey@Sun.COM nwam_value_get_uint64_array(nwam_value_t value, uint64_t **valuesp,
29411767SAnurag.Maskey@Sun.COM uint_t *numvaluesp)
29511767SAnurag.Maskey@Sun.COM {
29611767SAnurag.Maskey@Sun.COM assert(value != NULL && numvaluesp != NULL && valuesp != NULL);
29711767SAnurag.Maskey@Sun.COM
29811767SAnurag.Maskey@Sun.COM *numvaluesp = value->nwv_value_numvalues;
29911767SAnurag.Maskey@Sun.COM *valuesp = value->nwv_values.nwv_uint64;
30011767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
30111767SAnurag.Maskey@Sun.COM }
30211767SAnurag.Maskey@Sun.COM
30311767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_get_uint64(nwam_value_t value,uint64_t * valuep)30411767SAnurag.Maskey@Sun.COM nwam_value_get_uint64(nwam_value_t value, uint64_t *valuep)
30511767SAnurag.Maskey@Sun.COM {
30611767SAnurag.Maskey@Sun.COM uint_t numvalues;
30711767SAnurag.Maskey@Sun.COM uint64_t *myvaluesp;
30811767SAnurag.Maskey@Sun.COM nwam_error_t err;
30911767SAnurag.Maskey@Sun.COM
31011767SAnurag.Maskey@Sun.COM err = nwam_value_get_uint64_array(value, &myvaluesp, &numvalues);
31111767SAnurag.Maskey@Sun.COM if (err != NWAM_SUCCESS)
31211767SAnurag.Maskey@Sun.COM return (err);
31311767SAnurag.Maskey@Sun.COM if (numvalues != 1)
31411767SAnurag.Maskey@Sun.COM return (NWAM_ENTITY_MULTIPLE_VALUES);
31511767SAnurag.Maskey@Sun.COM
31611767SAnurag.Maskey@Sun.COM *valuep = myvaluesp[0];
31711767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
31811767SAnurag.Maskey@Sun.COM }
31911767SAnurag.Maskey@Sun.COM
32011767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_get_string_array(nwam_value_t value,char *** valuesp,uint_t * numvaluesp)32111767SAnurag.Maskey@Sun.COM nwam_value_get_string_array(nwam_value_t value, char ***valuesp,
32211767SAnurag.Maskey@Sun.COM uint_t *numvaluesp)
32311767SAnurag.Maskey@Sun.COM {
32411767SAnurag.Maskey@Sun.COM assert(value != NULL && numvaluesp != NULL && valuesp != NULL);
32511767SAnurag.Maskey@Sun.COM
32611767SAnurag.Maskey@Sun.COM *numvaluesp = value->nwv_value_numvalues;
32711767SAnurag.Maskey@Sun.COM *valuesp = value->nwv_values.nwv_string;
32811767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
32911767SAnurag.Maskey@Sun.COM }
33011767SAnurag.Maskey@Sun.COM
33111767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_get_string(nwam_value_t value,char ** valuep)33211767SAnurag.Maskey@Sun.COM nwam_value_get_string(nwam_value_t value, char **valuep)
33311767SAnurag.Maskey@Sun.COM {
33411767SAnurag.Maskey@Sun.COM uint_t numvalues;
33511767SAnurag.Maskey@Sun.COM char **myvaluesp;
33611767SAnurag.Maskey@Sun.COM nwam_error_t err;
33711767SAnurag.Maskey@Sun.COM
33811767SAnurag.Maskey@Sun.COM err = nwam_value_get_string_array(value, &myvaluesp, &numvalues);
33911767SAnurag.Maskey@Sun.COM if (err != NWAM_SUCCESS)
34011767SAnurag.Maskey@Sun.COM return (err);
34111767SAnurag.Maskey@Sun.COM if (numvalues != 1)
34211767SAnurag.Maskey@Sun.COM return (NWAM_ENTITY_MULTIPLE_VALUES);
34311767SAnurag.Maskey@Sun.COM
34411767SAnurag.Maskey@Sun.COM *valuep = myvaluesp[0];
34511767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
34611767SAnurag.Maskey@Sun.COM }
34711767SAnurag.Maskey@Sun.COM
34811767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_get_type(nwam_value_t value,nwam_value_type_t * typep)34911767SAnurag.Maskey@Sun.COM nwam_value_get_type(nwam_value_t value, nwam_value_type_t *typep)
35011767SAnurag.Maskey@Sun.COM {
35111767SAnurag.Maskey@Sun.COM *typep = value->nwv_value_type;
35211767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
35311767SAnurag.Maskey@Sun.COM }
35411767SAnurag.Maskey@Sun.COM
35511767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_get_numvalues(nwam_value_t value,uint_t * numvaluesp)35611767SAnurag.Maskey@Sun.COM nwam_value_get_numvalues(nwam_value_t value, uint_t *numvaluesp)
35711767SAnurag.Maskey@Sun.COM {
35811767SAnurag.Maskey@Sun.COM *numvaluesp = value->nwv_value_numvalues;
35911767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
36011767SAnurag.Maskey@Sun.COM }
36111767SAnurag.Maskey@Sun.COM
36211767SAnurag.Maskey@Sun.COM /*
36311767SAnurag.Maskey@Sun.COM * Generic object data functions. We hide nvlist implementation
36411767SAnurag.Maskey@Sun.COM * from NCP, ENM and location implementations.
36511767SAnurag.Maskey@Sun.COM */
36611767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_alloc_object_list(void * list)36711767SAnurag.Maskey@Sun.COM nwam_alloc_object_list(void *list)
36811767SAnurag.Maskey@Sun.COM {
36911767SAnurag.Maskey@Sun.COM int nverr;
37011767SAnurag.Maskey@Sun.COM
37111767SAnurag.Maskey@Sun.COM assert(list != NULL);
37211767SAnurag.Maskey@Sun.COM
37311767SAnurag.Maskey@Sun.COM if ((nverr = nvlist_alloc((nvlist_t **)list, NV_UNIQUE_NAME, 0)) != 0)
37411767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
37511767SAnurag.Maskey@Sun.COM
37611767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
37711767SAnurag.Maskey@Sun.COM }
37811767SAnurag.Maskey@Sun.COM
37911767SAnurag.Maskey@Sun.COM void
nwam_free_object_list(void * list)38011767SAnurag.Maskey@Sun.COM nwam_free_object_list(void *list)
38111767SAnurag.Maskey@Sun.COM {
38211767SAnurag.Maskey@Sun.COM if (list != NULL)
38311767SAnurag.Maskey@Sun.COM nvlist_free(list);
38411767SAnurag.Maskey@Sun.COM }
38511767SAnurag.Maskey@Sun.COM
38611767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_dup_object_list(void * oldlist,void * newlist)38711767SAnurag.Maskey@Sun.COM nwam_dup_object_list(void *oldlist, void *newlist)
38811767SAnurag.Maskey@Sun.COM {
38911767SAnurag.Maskey@Sun.COM int nverr;
39011767SAnurag.Maskey@Sun.COM
39111767SAnurag.Maskey@Sun.COM assert(oldlist != NULL && newlist != NULL);
39211767SAnurag.Maskey@Sun.COM
39311767SAnurag.Maskey@Sun.COM if ((nverr = nvlist_dup(oldlist, newlist, 0)) != 0)
39411767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
39511767SAnurag.Maskey@Sun.COM
39611767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
39711767SAnurag.Maskey@Sun.COM }
39811767SAnurag.Maskey@Sun.COM
39911767SAnurag.Maskey@Sun.COM /* Add child object list to parent object list using property name childname */
40011767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_object_list_add_object_list(void * parentlist,char * childname,void * childlist)40111767SAnurag.Maskey@Sun.COM nwam_object_list_add_object_list(void *parentlist, char *childname,
40211767SAnurag.Maskey@Sun.COM void *childlist)
40311767SAnurag.Maskey@Sun.COM {
40411767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nvlist_add_nvlist(parentlist,
40511767SAnurag.Maskey@Sun.COM childname, childlist)));
40611767SAnurag.Maskey@Sun.COM }
40711767SAnurag.Maskey@Sun.COM
40811767SAnurag.Maskey@Sun.COM /* Remove object list from parent object list */
40911767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_object_list_remove_object_list(void * parentlist,char * childname)41011767SAnurag.Maskey@Sun.COM nwam_object_list_remove_object_list(void *parentlist, char *childname)
41111767SAnurag.Maskey@Sun.COM {
41211767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nvlist_remove_all(parentlist,
41311767SAnurag.Maskey@Sun.COM childname)));
41411767SAnurag.Maskey@Sun.COM }
41511767SAnurag.Maskey@Sun.COM
41611767SAnurag.Maskey@Sun.COM /*
41711767SAnurag.Maskey@Sun.COM * Get next object list (nvlist) after lastname. Used to walk NCUs, ENMs and
41811767SAnurag.Maskey@Sun.COM * locations, each of which is internally represented as an nvlist.
41911767SAnurag.Maskey@Sun.COM */
42011767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_next_object_list(void * parentlist,char * lastname,char ** childnamep,void * childlistp)42111767SAnurag.Maskey@Sun.COM nwam_next_object_list(void *parentlist, char *lastname, char **childnamep,
42211767SAnurag.Maskey@Sun.COM void *childlistp)
42311767SAnurag.Maskey@Sun.COM {
42411767SAnurag.Maskey@Sun.COM nvpair_t *last = NULL, *next;
42511767SAnurag.Maskey@Sun.COM int nverr;
42611767SAnurag.Maskey@Sun.COM
42711767SAnurag.Maskey@Sun.COM if (lastname != NULL) {
42811767SAnurag.Maskey@Sun.COM if ((nverr = nvlist_lookup_nvpair(parentlist, lastname, &last))
42911767SAnurag.Maskey@Sun.COM != 0)
43011767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
43111767SAnurag.Maskey@Sun.COM }
43211767SAnurag.Maskey@Sun.COM if ((next = nvlist_next_nvpair(parentlist, last)) == NULL)
43311767SAnurag.Maskey@Sun.COM return (NWAM_LIST_END);
43411767SAnurag.Maskey@Sun.COM
43511767SAnurag.Maskey@Sun.COM *childnamep = nvpair_name(next);
43611767SAnurag.Maskey@Sun.COM
43711767SAnurag.Maskey@Sun.COM if (nvpair_type(next) != DATA_TYPE_NVLIST)
43811767SAnurag.Maskey@Sun.COM return (NWAM_ERROR_INTERNAL);
43911767SAnurag.Maskey@Sun.COM
44011767SAnurag.Maskey@Sun.COM if ((nverr = nvpair_value_nvlist(next, childlistp)) != NWAM_SUCCESS)
44111767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
44211767SAnurag.Maskey@Sun.COM
44311767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
44411767SAnurag.Maskey@Sun.COM }
44511767SAnurag.Maskey@Sun.COM
44611767SAnurag.Maskey@Sun.COM /*
44711767SAnurag.Maskey@Sun.COM * Pack nvlist into contiguous memory. If packed_listp is NULL, we just
44811767SAnurag.Maskey@Sun.COM * return the size of the memory needed to do so.
44911767SAnurag.Maskey@Sun.COM */
45011767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_pack_object_list(void * list,char ** packed_listp,size_t * packed_sizep)45111767SAnurag.Maskey@Sun.COM nwam_pack_object_list(void *list, char **packed_listp, size_t *packed_sizep)
45211767SAnurag.Maskey@Sun.COM {
45311767SAnurag.Maskey@Sun.COM int nverr;
45411767SAnurag.Maskey@Sun.COM
45511767SAnurag.Maskey@Sun.COM assert(list != NULL && packed_sizep != NULL);
45611767SAnurag.Maskey@Sun.COM
45711767SAnurag.Maskey@Sun.COM if (packed_listp == NULL) {
45811767SAnurag.Maskey@Sun.COM nverr = nvlist_size(list, packed_sizep, NV_ENCODE_XDR);
45911767SAnurag.Maskey@Sun.COM } else {
46011767SAnurag.Maskey@Sun.COM nverr = nvlist_pack(list, packed_listp, packed_sizep,
46111767SAnurag.Maskey@Sun.COM NV_ENCODE_XDR, 0);
46211767SAnurag.Maskey@Sun.COM }
46311767SAnurag.Maskey@Sun.COM
46411767SAnurag.Maskey@Sun.COM if (nverr != 0)
46511767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
46611767SAnurag.Maskey@Sun.COM
46711767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
46811767SAnurag.Maskey@Sun.COM }
46911767SAnurag.Maskey@Sun.COM
47011767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_unpack_object_list(char * packed_list,size_t packed_size,void * list)47111767SAnurag.Maskey@Sun.COM nwam_unpack_object_list(char *packed_list, size_t packed_size,
47211767SAnurag.Maskey@Sun.COM void *list)
47311767SAnurag.Maskey@Sun.COM {
47411767SAnurag.Maskey@Sun.COM int nverr;
47511767SAnurag.Maskey@Sun.COM
47611767SAnurag.Maskey@Sun.COM assert(packed_list != NULL && list != NULL);
47711767SAnurag.Maskey@Sun.COM
47811767SAnurag.Maskey@Sun.COM *((nvlist_t **)list) = NULL;
47911767SAnurag.Maskey@Sun.COM
48011767SAnurag.Maskey@Sun.COM nverr = nvlist_unpack(packed_list, packed_size, (nvlist_t **)list, 0);
48111767SAnurag.Maskey@Sun.COM
48211767SAnurag.Maskey@Sun.COM if (nverr != 0)
48311767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
48411767SAnurag.Maskey@Sun.COM
48511767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
48611767SAnurag.Maskey@Sun.COM }
48711767SAnurag.Maskey@Sun.COM
48811767SAnurag.Maskey@Sun.COM /*
48911767SAnurag.Maskey@Sun.COM * Functions to walk, set and get properties in nvlist, translating
49011767SAnurag.Maskey@Sun.COM * between nwam_value_t and nvlist/nvpair representations.
49111767SAnurag.Maskey@Sun.COM */
49211767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_next_object_prop(void * list,char * lastname,char ** namep,nwam_value_t * valuep)49311767SAnurag.Maskey@Sun.COM nwam_next_object_prop(void *list, char *lastname, char **namep,
49411767SAnurag.Maskey@Sun.COM nwam_value_t *valuep)
49511767SAnurag.Maskey@Sun.COM {
49611767SAnurag.Maskey@Sun.COM nvpair_t *last = NULL, *next;
49711767SAnurag.Maskey@Sun.COM int nverr;
49811767SAnurag.Maskey@Sun.COM
49911767SAnurag.Maskey@Sun.COM if (lastname != NULL) {
50011767SAnurag.Maskey@Sun.COM if ((nverr = nvlist_lookup_nvpair(list, lastname, &last)) != 0)
50111767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
50211767SAnurag.Maskey@Sun.COM }
50311767SAnurag.Maskey@Sun.COM if ((next = nvlist_next_nvpair(list, last)) == NULL)
50411767SAnurag.Maskey@Sun.COM return (NWAM_LIST_END);
50511767SAnurag.Maskey@Sun.COM
50611767SAnurag.Maskey@Sun.COM *namep = nvpair_name(next);
50711767SAnurag.Maskey@Sun.COM
50811767SAnurag.Maskey@Sun.COM return (nwam_get_prop_value(list, (const char *)*namep, valuep));
50911767SAnurag.Maskey@Sun.COM }
51011767SAnurag.Maskey@Sun.COM
51111767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_get_prop_value(void * list,const char * name,nwam_value_t * valuep)51211767SAnurag.Maskey@Sun.COM nwam_get_prop_value(void *list, const char *name, nwam_value_t *valuep)
51311767SAnurag.Maskey@Sun.COM {
51411767SAnurag.Maskey@Sun.COM nvpair_t *prop;
51511767SAnurag.Maskey@Sun.COM nwam_error_t err;
51611767SAnurag.Maskey@Sun.COM int nverr;
51711767SAnurag.Maskey@Sun.COM boolean_t *valbool;
51811767SAnurag.Maskey@Sun.COM int64_t *valint64;
51911767SAnurag.Maskey@Sun.COM uint64_t *valuint64;
52011767SAnurag.Maskey@Sun.COM char **valstr;
52111767SAnurag.Maskey@Sun.COM uint_t numvalues;
52211767SAnurag.Maskey@Sun.COM
52311767SAnurag.Maskey@Sun.COM assert(valuep != NULL);
52411767SAnurag.Maskey@Sun.COM
52511767SAnurag.Maskey@Sun.COM *valuep = NULL;
52611767SAnurag.Maskey@Sun.COM
52711767SAnurag.Maskey@Sun.COM if ((nverr = nvlist_lookup_nvpair(list, name, &prop)) != 0) {
52811767SAnurag.Maskey@Sun.COM /* convert EINVAL to NOT_FOUND */
52911767SAnurag.Maskey@Sun.COM if (nverr == EINVAL)
53011767SAnurag.Maskey@Sun.COM return (NWAM_ENTITY_NOT_FOUND);
53111767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
53211767SAnurag.Maskey@Sun.COM }
53311767SAnurag.Maskey@Sun.COM
53411767SAnurag.Maskey@Sun.COM switch (nvpair_type(prop)) {
53511767SAnurag.Maskey@Sun.COM case DATA_TYPE_BOOLEAN_ARRAY:
53611767SAnurag.Maskey@Sun.COM if ((nverr = nvpair_value_boolean_array(prop,
53711767SAnurag.Maskey@Sun.COM &valbool, &numvalues)) != 0)
53811767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
53911767SAnurag.Maskey@Sun.COM if ((err = nwam_value_create_boolean_array(valbool, numvalues,
54011767SAnurag.Maskey@Sun.COM valuep)) != NWAM_SUCCESS)
54111767SAnurag.Maskey@Sun.COM return (err);
54211767SAnurag.Maskey@Sun.COM break;
54311767SAnurag.Maskey@Sun.COM case DATA_TYPE_INT64_ARRAY:
54411767SAnurag.Maskey@Sun.COM if ((nverr = nvpair_value_int64_array(prop,
54511767SAnurag.Maskey@Sun.COM &valint64, &numvalues)) != 0)
54611767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
54711767SAnurag.Maskey@Sun.COM if ((err = nwam_value_create_int64_array(valint64, numvalues,
54811767SAnurag.Maskey@Sun.COM valuep)) != NWAM_SUCCESS)
54911767SAnurag.Maskey@Sun.COM return (err);
55011767SAnurag.Maskey@Sun.COM break;
55111767SAnurag.Maskey@Sun.COM case DATA_TYPE_UINT64_ARRAY:
55211767SAnurag.Maskey@Sun.COM if ((nverr = nvpair_value_uint64_array(prop,
55311767SAnurag.Maskey@Sun.COM &valuint64, &numvalues)) != 0)
55411767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
55511767SAnurag.Maskey@Sun.COM if ((err = nwam_value_create_uint64_array(valuint64, numvalues,
55611767SAnurag.Maskey@Sun.COM valuep)) != NWAM_SUCCESS)
55711767SAnurag.Maskey@Sun.COM return (err);
55811767SAnurag.Maskey@Sun.COM break;
55911767SAnurag.Maskey@Sun.COM case DATA_TYPE_STRING_ARRAY:
56011767SAnurag.Maskey@Sun.COM if ((nverr = nvpair_value_string_array(prop,
56111767SAnurag.Maskey@Sun.COM &valstr, &numvalues)) != 0)
56211767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
56311767SAnurag.Maskey@Sun.COM if ((err = nwam_value_create_string_array(valstr, numvalues,
56411767SAnurag.Maskey@Sun.COM valuep)) != NWAM_SUCCESS)
56511767SAnurag.Maskey@Sun.COM return (err);
56611767SAnurag.Maskey@Sun.COM break;
56711767SAnurag.Maskey@Sun.COM default:
56811767SAnurag.Maskey@Sun.COM /* Should not happen */
56911767SAnurag.Maskey@Sun.COM return (NWAM_ERROR_INTERNAL);
57011767SAnurag.Maskey@Sun.COM }
57111767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
57211767SAnurag.Maskey@Sun.COM }
57311767SAnurag.Maskey@Sun.COM
57411767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_delete_prop(void * list,const char * name)57511767SAnurag.Maskey@Sun.COM nwam_delete_prop(void *list, const char *name)
57611767SAnurag.Maskey@Sun.COM {
57711767SAnurag.Maskey@Sun.COM int nverr;
57811767SAnurag.Maskey@Sun.COM
57911767SAnurag.Maskey@Sun.COM if ((nverr = nvlist_remove_all(list, name)) != 0)
58011767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
58111767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
58211767SAnurag.Maskey@Sun.COM }
58311767SAnurag.Maskey@Sun.COM
58411767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_set_prop_value(void * list,const char * propname,nwam_value_t value)58511767SAnurag.Maskey@Sun.COM nwam_set_prop_value(void *list, const char *propname, nwam_value_t value)
58611767SAnurag.Maskey@Sun.COM {
58711767SAnurag.Maskey@Sun.COM int nverr;
58811767SAnurag.Maskey@Sun.COM nwam_error_t err;
58911767SAnurag.Maskey@Sun.COM nwam_value_type_t type;
59011767SAnurag.Maskey@Sun.COM uint_t numvalues;
59111767SAnurag.Maskey@Sun.COM boolean_t *valbool;
59211767SAnurag.Maskey@Sun.COM int64_t *valint64;
59311767SAnurag.Maskey@Sun.COM uint64_t *valuint64;
59411767SAnurag.Maskey@Sun.COM char **valstr;
59511767SAnurag.Maskey@Sun.COM
59611767SAnurag.Maskey@Sun.COM assert(list != NULL && value != NULL);
59711767SAnurag.Maskey@Sun.COM
59811767SAnurag.Maskey@Sun.COM if ((err = nwam_value_get_type(value, &type)) != NWAM_SUCCESS)
59911767SAnurag.Maskey@Sun.COM return (err);
60011767SAnurag.Maskey@Sun.COM
60111767SAnurag.Maskey@Sun.COM switch (type) {
60211767SAnurag.Maskey@Sun.COM case NWAM_VALUE_TYPE_BOOLEAN:
60311767SAnurag.Maskey@Sun.COM if ((err = nwam_value_get_boolean_array(value, &valbool,
60411767SAnurag.Maskey@Sun.COM &numvalues)) != NWAM_SUCCESS)
60511767SAnurag.Maskey@Sun.COM return (err);
60611767SAnurag.Maskey@Sun.COM if ((nverr = nvlist_add_boolean_array(list, propname,
60711767SAnurag.Maskey@Sun.COM valbool, numvalues)) != 0)
60811767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
60911767SAnurag.Maskey@Sun.COM break;
61011767SAnurag.Maskey@Sun.COM case NWAM_VALUE_TYPE_INT64:
61111767SAnurag.Maskey@Sun.COM if ((err = nwam_value_get_int64_array(value, &valint64,
61211767SAnurag.Maskey@Sun.COM &numvalues)) != NWAM_SUCCESS)
61311767SAnurag.Maskey@Sun.COM return (err);
61411767SAnurag.Maskey@Sun.COM if ((nverr = nvlist_add_int64_array(list, propname,
61511767SAnurag.Maskey@Sun.COM valint64, numvalues)) != 0)
61611767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
61711767SAnurag.Maskey@Sun.COM break;
61811767SAnurag.Maskey@Sun.COM case NWAM_VALUE_TYPE_UINT64:
61911767SAnurag.Maskey@Sun.COM if ((err = nwam_value_get_uint64_array(value, &valuint64,
62011767SAnurag.Maskey@Sun.COM &numvalues)) != NWAM_SUCCESS)
62111767SAnurag.Maskey@Sun.COM return (err);
62211767SAnurag.Maskey@Sun.COM if ((nverr = nvlist_add_uint64_array(list, propname,
62311767SAnurag.Maskey@Sun.COM valuint64, numvalues)) != 0)
62411767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
62511767SAnurag.Maskey@Sun.COM break;
62611767SAnurag.Maskey@Sun.COM case NWAM_VALUE_TYPE_STRING:
62711767SAnurag.Maskey@Sun.COM if ((err = nwam_value_get_string_array(value, &valstr,
62811767SAnurag.Maskey@Sun.COM &numvalues)) != NWAM_SUCCESS)
62911767SAnurag.Maskey@Sun.COM return (err);
63011767SAnurag.Maskey@Sun.COM if ((nverr = nvlist_add_string_array(list, propname,
63111767SAnurag.Maskey@Sun.COM valstr, numvalues)) != 0)
63211767SAnurag.Maskey@Sun.COM return (nwam_errno_to_nwam_error(nverr));
63311767SAnurag.Maskey@Sun.COM break;
63411767SAnurag.Maskey@Sun.COM default:
63511767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
63611767SAnurag.Maskey@Sun.COM }
63711767SAnurag.Maskey@Sun.COM
63811767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
63911767SAnurag.Maskey@Sun.COM }
64011767SAnurag.Maskey@Sun.COM
64111767SAnurag.Maskey@Sun.COM /* Map uint64 values to their string counterparts */
64211767SAnurag.Maskey@Sun.COM
64311767SAnurag.Maskey@Sun.COM struct nwam_value_entry {
64411767SAnurag.Maskey@Sun.COM const char *value_string;
64511767SAnurag.Maskey@Sun.COM uint64_t value;
64611767SAnurag.Maskey@Sun.COM };
64711767SAnurag.Maskey@Sun.COM
64811767SAnurag.Maskey@Sun.COM struct nwam_value_entry prop_activation_mode_value_entries[] =
64911767SAnurag.Maskey@Sun.COM {
65011767SAnurag.Maskey@Sun.COM { NWAM_ACTIVATION_MODE_MANUAL_STRING, NWAM_ACTIVATION_MODE_MANUAL },
65111767SAnurag.Maskey@Sun.COM { NWAM_ACTIVATION_MODE_SYSTEM_STRING, NWAM_ACTIVATION_MODE_SYSTEM },
65211767SAnurag.Maskey@Sun.COM { NWAM_ACTIVATION_MODE_CONDITIONAL_ANY_STRING,
65311767SAnurag.Maskey@Sun.COM NWAM_ACTIVATION_MODE_CONDITIONAL_ANY },
65411767SAnurag.Maskey@Sun.COM { NWAM_ACTIVATION_MODE_CONDITIONAL_ALL_STRING,
65511767SAnurag.Maskey@Sun.COM NWAM_ACTIVATION_MODE_CONDITIONAL_ALL },
65611767SAnurag.Maskey@Sun.COM { NWAM_ACTIVATION_MODE_PRIORITIZED_STRING,
65711767SAnurag.Maskey@Sun.COM NWAM_ACTIVATION_MODE_PRIORITIZED },
65811767SAnurag.Maskey@Sun.COM { NULL, 0 }
65911767SAnurag.Maskey@Sun.COM };
66011767SAnurag.Maskey@Sun.COM
66111767SAnurag.Maskey@Sun.COM struct nwam_value_entry ncu_prop_type_entries[] =
66211767SAnurag.Maskey@Sun.COM {
66311767SAnurag.Maskey@Sun.COM { NWAM_NCU_TYPE_LINK_STRING, NWAM_NCU_TYPE_LINK },
66411767SAnurag.Maskey@Sun.COM { NWAM_NCU_TYPE_INTERFACE_STRING, NWAM_NCU_TYPE_INTERFACE },
66511767SAnurag.Maskey@Sun.COM { NULL, 0 }
66611767SAnurag.Maskey@Sun.COM };
66711767SAnurag.Maskey@Sun.COM
66811767SAnurag.Maskey@Sun.COM struct nwam_value_entry ncu_prop_class_entries[] =
66911767SAnurag.Maskey@Sun.COM {
67011767SAnurag.Maskey@Sun.COM { NWAM_NCU_CLASS_PHYS_STRING, NWAM_NCU_CLASS_PHYS },
67111767SAnurag.Maskey@Sun.COM { NWAM_NCU_CLASS_IP_STRING, NWAM_NCU_CLASS_IP },
67211767SAnurag.Maskey@Sun.COM { NULL, 0 }
67311767SAnurag.Maskey@Sun.COM };
67411767SAnurag.Maskey@Sun.COM
67511767SAnurag.Maskey@Sun.COM struct nwam_value_entry ncu_prop_ip_version_entries[] =
67611767SAnurag.Maskey@Sun.COM {
67711767SAnurag.Maskey@Sun.COM { NWAM_IP_VERSION_IPV4_STRING, IPV4_VERSION },
67811767SAnurag.Maskey@Sun.COM { NWAM_IP_VERSION_IPV6_STRING, IPV6_VERSION },
67911767SAnurag.Maskey@Sun.COM { NULL, 0 }
68011767SAnurag.Maskey@Sun.COM };
68111767SAnurag.Maskey@Sun.COM
68211767SAnurag.Maskey@Sun.COM struct nwam_value_entry ncu_prop_ipv4_addrsrc_entries[] =
68311767SAnurag.Maskey@Sun.COM {
68411767SAnurag.Maskey@Sun.COM { NWAM_ADDRSRC_DHCP_STRING, NWAM_ADDRSRC_DHCP },
68511767SAnurag.Maskey@Sun.COM { NWAM_ADDRSRC_STATIC_STRING, NWAM_ADDRSRC_STATIC },
68611767SAnurag.Maskey@Sun.COM { NULL, 0 }
68711767SAnurag.Maskey@Sun.COM };
68811767SAnurag.Maskey@Sun.COM
68911767SAnurag.Maskey@Sun.COM struct nwam_value_entry ncu_prop_ipv6_addrsrc_entries[] =
69011767SAnurag.Maskey@Sun.COM {
69111767SAnurag.Maskey@Sun.COM { NWAM_ADDRSRC_DHCP_STRING, NWAM_ADDRSRC_DHCP },
69211767SAnurag.Maskey@Sun.COM { NWAM_ADDRSRC_STATIC_STRING, NWAM_ADDRSRC_STATIC },
69311767SAnurag.Maskey@Sun.COM { NWAM_ADDRSRC_AUTOCONF_STRING, NWAM_ADDRSRC_AUTOCONF },
69411767SAnurag.Maskey@Sun.COM { NULL, 0 }
69511767SAnurag.Maskey@Sun.COM };
69611767SAnurag.Maskey@Sun.COM
69711767SAnurag.Maskey@Sun.COM struct nwam_value_entry ncu_prop_priority_mode_entries[] =
69811767SAnurag.Maskey@Sun.COM {
69911767SAnurag.Maskey@Sun.COM { NWAM_PRIORITY_MODE_EXCLUSIVE_STRING, NWAM_PRIORITY_MODE_EXCLUSIVE },
70011767SAnurag.Maskey@Sun.COM { NWAM_PRIORITY_MODE_SHARED_STRING, NWAM_PRIORITY_MODE_SHARED },
70111767SAnurag.Maskey@Sun.COM { NWAM_PRIORITY_MODE_ALL_STRING, NWAM_PRIORITY_MODE_ALL },
70211767SAnurag.Maskey@Sun.COM { NULL, 0 }
70311767SAnurag.Maskey@Sun.COM };
70411767SAnurag.Maskey@Sun.COM
70511767SAnurag.Maskey@Sun.COM struct nwam_value_entry loc_prop_nameservices_entries[] =
70611767SAnurag.Maskey@Sun.COM {
70711767SAnurag.Maskey@Sun.COM { NWAM_NAMESERVICES_DNS_STRING, NWAM_NAMESERVICES_DNS },
70811767SAnurag.Maskey@Sun.COM { NWAM_NAMESERVICES_FILES_STRING, NWAM_NAMESERVICES_FILES },
70911767SAnurag.Maskey@Sun.COM { NWAM_NAMESERVICES_NIS_STRING, NWAM_NAMESERVICES_NIS },
71011767SAnurag.Maskey@Sun.COM { NWAM_NAMESERVICES_LDAP_STRING, NWAM_NAMESERVICES_LDAP },
71111767SAnurag.Maskey@Sun.COM { NULL, 0 }
71211767SAnurag.Maskey@Sun.COM };
71311767SAnurag.Maskey@Sun.COM
71411767SAnurag.Maskey@Sun.COM struct nwam_value_entry loc_prop_nameservice_configsrc_entries[] =
71511767SAnurag.Maskey@Sun.COM {
71611767SAnurag.Maskey@Sun.COM { NWAM_CONFIGSRC_MANUAL_STRING, NWAM_CONFIGSRC_MANUAL },
71711767SAnurag.Maskey@Sun.COM { NWAM_CONFIGSRC_DHCP_STRING, NWAM_CONFIGSRC_DHCP },
71811767SAnurag.Maskey@Sun.COM { NULL, 0 }
71911767SAnurag.Maskey@Sun.COM };
72011767SAnurag.Maskey@Sun.COM
72111767SAnurag.Maskey@Sun.COM struct nwam_value_entry known_wlan_prop_security_mode_entries[] =
72211767SAnurag.Maskey@Sun.COM {
72311767SAnurag.Maskey@Sun.COM { "none", DLADM_WLAN_SECMODE_NONE },
72411767SAnurag.Maskey@Sun.COM { "wep", DLADM_WLAN_SECMODE_WEP },
72511767SAnurag.Maskey@Sun.COM { "wpa", DLADM_WLAN_SECMODE_WPA },
72611767SAnurag.Maskey@Sun.COM { NULL, 0 }
72711767SAnurag.Maskey@Sun.COM };
72811767SAnurag.Maskey@Sun.COM
72911767SAnurag.Maskey@Sun.COM struct nwam_prop_value_entry {
73011767SAnurag.Maskey@Sun.COM const char *prop_name;
73111767SAnurag.Maskey@Sun.COM struct nwam_value_entry *value_entries;
73211767SAnurag.Maskey@Sun.COM } prop_value_entry_table[] =
73311767SAnurag.Maskey@Sun.COM {
73411767SAnurag.Maskey@Sun.COM { NWAM_NCU_PROP_ACTIVATION_MODE, prop_activation_mode_value_entries },
73511767SAnurag.Maskey@Sun.COM { NWAM_NCU_PROP_TYPE, ncu_prop_type_entries },
73611767SAnurag.Maskey@Sun.COM { NWAM_NCU_PROP_CLASS, ncu_prop_class_entries },
73711767SAnurag.Maskey@Sun.COM { NWAM_NCU_PROP_IP_VERSION, ncu_prop_ip_version_entries },
73811767SAnurag.Maskey@Sun.COM { NWAM_NCU_PROP_IPV4_ADDRSRC, ncu_prop_ipv4_addrsrc_entries },
73911767SAnurag.Maskey@Sun.COM { NWAM_NCU_PROP_IPV6_ADDRSRC, ncu_prop_ipv6_addrsrc_entries },
74011767SAnurag.Maskey@Sun.COM { NWAM_NCU_PROP_PRIORITY_MODE, ncu_prop_priority_mode_entries },
74111767SAnurag.Maskey@Sun.COM { NWAM_ENM_PROP_ACTIVATION_MODE, prop_activation_mode_value_entries },
74211767SAnurag.Maskey@Sun.COM { NWAM_LOC_PROP_ACTIVATION_MODE, prop_activation_mode_value_entries },
74311767SAnurag.Maskey@Sun.COM { NWAM_LOC_PROP_NAMESERVICES, loc_prop_nameservices_entries },
74411767SAnurag.Maskey@Sun.COM { NWAM_LOC_PROP_DNS_NAMESERVICE_CONFIGSRC,
74511767SAnurag.Maskey@Sun.COM loc_prop_nameservice_configsrc_entries },
74611767SAnurag.Maskey@Sun.COM { NWAM_LOC_PROP_NIS_NAMESERVICE_CONFIGSRC,
74711767SAnurag.Maskey@Sun.COM loc_prop_nameservice_configsrc_entries },
74811767SAnurag.Maskey@Sun.COM { NWAM_LOC_PROP_LDAP_NAMESERVICE_CONFIGSRC,
74911767SAnurag.Maskey@Sun.COM loc_prop_nameservice_configsrc_entries },
75011767SAnurag.Maskey@Sun.COM { NWAM_KNOWN_WLAN_PROP_SECURITY_MODE,
75111767SAnurag.Maskey@Sun.COM known_wlan_prop_security_mode_entries },
75211767SAnurag.Maskey@Sun.COM { NULL, NULL }
75311767SAnurag.Maskey@Sun.COM };
75411767SAnurag.Maskey@Sun.COM
75511767SAnurag.Maskey@Sun.COM /*
75611767SAnurag.Maskey@Sun.COM * Convert uint64 values for property propname into a string representing
75711767SAnurag.Maskey@Sun.COM * that value. Used by enum values.
75811767SAnurag.Maskey@Sun.COM */
75911767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_uint64_get_value_string(const char * propname,uint64_t val,const char ** valstrp)76011767SAnurag.Maskey@Sun.COM nwam_uint64_get_value_string(const char *propname, uint64_t val,
76111767SAnurag.Maskey@Sun.COM const char **valstrp)
76211767SAnurag.Maskey@Sun.COM {
76311767SAnurag.Maskey@Sun.COM int i, j;
76411767SAnurag.Maskey@Sun.COM int max = 0; /* largest enum value seen so far */
76511767SAnurag.Maskey@Sun.COM struct nwam_value_entry *value_entries;
76611767SAnurag.Maskey@Sun.COM
76711767SAnurag.Maskey@Sun.COM assert(propname != NULL && valstrp != NULL);
76811767SAnurag.Maskey@Sun.COM
76911767SAnurag.Maskey@Sun.COM for (i = 0; prop_value_entry_table[i].prop_name != NULL; i++) {
77011767SAnurag.Maskey@Sun.COM if (strcmp(prop_value_entry_table[i].prop_name, propname) != 0)
77111767SAnurag.Maskey@Sun.COM continue;
77211767SAnurag.Maskey@Sun.COM
77311767SAnurag.Maskey@Sun.COM value_entries = prop_value_entry_table[i].value_entries;
77411767SAnurag.Maskey@Sun.COM
77511767SAnurag.Maskey@Sun.COM for (j = 0; value_entries[j].value_string != NULL; j++) {
77611767SAnurag.Maskey@Sun.COM if (value_entries[j].value == val) {
77711767SAnurag.Maskey@Sun.COM *valstrp = value_entries[j].value_string;
77811767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
77911767SAnurag.Maskey@Sun.COM }
78011767SAnurag.Maskey@Sun.COM max = value_entries[j].value > max ?
78111767SAnurag.Maskey@Sun.COM value_entries[j].value : max;
78211767SAnurag.Maskey@Sun.COM }
78311767SAnurag.Maskey@Sun.COM /*
78411767SAnurag.Maskey@Sun.COM * If trying to get the string for an enum value that doesn't
78511767SAnurag.Maskey@Sun.COM * exist, return NWAM_LIST_END. Otherwise, the input enum
78611767SAnurag.Maskey@Sun.COM * value doesn't exist for the given property.
78711767SAnurag.Maskey@Sun.COM */
78811767SAnurag.Maskey@Sun.COM if (val > max)
78911767SAnurag.Maskey@Sun.COM return (NWAM_LIST_END);
79011767SAnurag.Maskey@Sun.COM else
79111767SAnurag.Maskey@Sun.COM return (NWAM_ENTITY_INVALID_VALUE);
79211767SAnurag.Maskey@Sun.COM }
79311767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
79411767SAnurag.Maskey@Sun.COM }
79511767SAnurag.Maskey@Sun.COM
79611767SAnurag.Maskey@Sun.COM /*
79711767SAnurag.Maskey@Sun.COM * Convert string to appropriate uint64 value.
79811767SAnurag.Maskey@Sun.COM */
79911767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_value_string_get_uint64(const char * propname,const char * valstr,uint64_t * valp)80011767SAnurag.Maskey@Sun.COM nwam_value_string_get_uint64(const char *propname, const char *valstr,
80111767SAnurag.Maskey@Sun.COM uint64_t *valp)
80211767SAnurag.Maskey@Sun.COM {
80311767SAnurag.Maskey@Sun.COM int i, j;
80411767SAnurag.Maskey@Sun.COM struct nwam_value_entry *value_entries;
80511767SAnurag.Maskey@Sun.COM
80611767SAnurag.Maskey@Sun.COM assert(propname != NULL && valstr != NULL && valp != NULL);
80711767SAnurag.Maskey@Sun.COM
80811767SAnurag.Maskey@Sun.COM for (i = 0; prop_value_entry_table[i].prop_name != NULL; i++) {
80911767SAnurag.Maskey@Sun.COM if (strcmp(prop_value_entry_table[i].prop_name, propname) != 0)
81011767SAnurag.Maskey@Sun.COM continue;
81111767SAnurag.Maskey@Sun.COM
81211767SAnurag.Maskey@Sun.COM value_entries = prop_value_entry_table[i].value_entries;
81311767SAnurag.Maskey@Sun.COM
81411767SAnurag.Maskey@Sun.COM for (j = 0; value_entries[j].value_string != NULL; j++) {
81511767SAnurag.Maskey@Sun.COM if (strcasecmp(value_entries[j].value_string, valstr)
81611767SAnurag.Maskey@Sun.COM == 0) {
81711767SAnurag.Maskey@Sun.COM *valp = value_entries[j].value;
81811767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
81911767SAnurag.Maskey@Sun.COM }
82011767SAnurag.Maskey@Sun.COM }
82111767SAnurag.Maskey@Sun.COM return (NWAM_ENTITY_INVALID_VALUE);
82211767SAnurag.Maskey@Sun.COM }
82311767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
82411767SAnurag.Maskey@Sun.COM }
82511767SAnurag.Maskey@Sun.COM
82611767SAnurag.Maskey@Sun.COM /* Conditional activation functions */
82711767SAnurag.Maskey@Sun.COM
82811767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_condition_to_condition_string(nwam_condition_object_type_t object_type,nwam_condition_t condition,const char * object_name,char ** stringp)82911767SAnurag.Maskey@Sun.COM nwam_condition_to_condition_string(nwam_condition_object_type_t object_type,
83011767SAnurag.Maskey@Sun.COM nwam_condition_t condition, const char *object_name, char **stringp)
83111767SAnurag.Maskey@Sun.COM {
83211767SAnurag.Maskey@Sun.COM char *object_type_string, *condition_string;
83311767SAnurag.Maskey@Sun.COM char *string;
83411767SAnurag.Maskey@Sun.COM
83511767SAnurag.Maskey@Sun.COM assert(stringp != NULL);
83611767SAnurag.Maskey@Sun.COM
83711767SAnurag.Maskey@Sun.COM *stringp = NULL;
83811767SAnurag.Maskey@Sun.COM
83911767SAnurag.Maskey@Sun.COM switch (object_type) {
84011767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_NCP:
84111767SAnurag.Maskey@Sun.COM object_type_string = NWAM_CONDITION_OBJECT_TYPE_NCP_STRING;
84211767SAnurag.Maskey@Sun.COM break;
84311767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_NCU:
84411767SAnurag.Maskey@Sun.COM object_type_string = NWAM_CONDITION_OBJECT_TYPE_NCU_STRING;
84511767SAnurag.Maskey@Sun.COM break;
84611767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_ENM:
84711767SAnurag.Maskey@Sun.COM object_type_string = NWAM_CONDITION_OBJECT_TYPE_ENM_STRING;
84811767SAnurag.Maskey@Sun.COM break;
84911767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_LOC:
85011767SAnurag.Maskey@Sun.COM object_type_string = NWAM_CONDITION_OBJECT_TYPE_LOC_STRING;
85111767SAnurag.Maskey@Sun.COM break;
85211767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS:
85311767SAnurag.Maskey@Sun.COM object_type_string =
85411767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS_STRING;
85511767SAnurag.Maskey@Sun.COM break;
85611767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN:
85711767SAnurag.Maskey@Sun.COM object_type_string =
85811767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN_STRING;
85911767SAnurag.Maskey@Sun.COM break;
86011767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN:
86111767SAnurag.Maskey@Sun.COM object_type_string =
86211767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN_STRING;
86311767SAnurag.Maskey@Sun.COM break;
86411767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_ESSID:
86511767SAnurag.Maskey@Sun.COM object_type_string = NWAM_CONDITION_OBJECT_TYPE_ESSID_STRING;
86611767SAnurag.Maskey@Sun.COM break;
86711767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_BSSID:
86811767SAnurag.Maskey@Sun.COM object_type_string = NWAM_CONDITION_OBJECT_TYPE_BSSID_STRING;
86911767SAnurag.Maskey@Sun.COM break;
87011767SAnurag.Maskey@Sun.COM default:
87111767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
87211767SAnurag.Maskey@Sun.COM
87311767SAnurag.Maskey@Sun.COM }
87411767SAnurag.Maskey@Sun.COM switch (condition) {
87511767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_IS:
87611767SAnurag.Maskey@Sun.COM condition_string = NWAM_CONDITION_IS_STRING;
87711767SAnurag.Maskey@Sun.COM break;
87811767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_IS_NOT:
87911767SAnurag.Maskey@Sun.COM condition_string = NWAM_CONDITION_IS_NOT_STRING;
88011767SAnurag.Maskey@Sun.COM break;
88111767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_CONTAINS:
88211767SAnurag.Maskey@Sun.COM if (object_type != NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN &&
88311767SAnurag.Maskey@Sun.COM object_type != NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN &&
88411767SAnurag.Maskey@Sun.COM object_type != NWAM_CONDITION_OBJECT_TYPE_ESSID)
88511767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
88611767SAnurag.Maskey@Sun.COM condition_string = NWAM_CONDITION_CONTAINS_STRING;
88711767SAnurag.Maskey@Sun.COM break;
88811767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_DOES_NOT_CONTAIN:
88911767SAnurag.Maskey@Sun.COM if (object_type != NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN &&
89011767SAnurag.Maskey@Sun.COM object_type != NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN &&
89111767SAnurag.Maskey@Sun.COM object_type != NWAM_CONDITION_OBJECT_TYPE_ESSID)
89211767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
89311767SAnurag.Maskey@Sun.COM
89411767SAnurag.Maskey@Sun.COM condition_string = NWAM_CONDITION_DOES_NOT_CONTAIN_STRING;
89511767SAnurag.Maskey@Sun.COM break;
89611767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_IS_IN_RANGE:
89711767SAnurag.Maskey@Sun.COM if (object_type != NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS)
89811767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
89911767SAnurag.Maskey@Sun.COM condition_string = NWAM_CONDITION_IS_IN_RANGE_STRING;
90011767SAnurag.Maskey@Sun.COM break;
90111767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_IS_NOT_IN_RANGE:
90211767SAnurag.Maskey@Sun.COM if (object_type != NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS)
90311767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
90411767SAnurag.Maskey@Sun.COM condition_string = NWAM_CONDITION_IS_NOT_IN_RANGE_STRING;
90511767SAnurag.Maskey@Sun.COM break;
90611767SAnurag.Maskey@Sun.COM default:
90711767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
90811767SAnurag.Maskey@Sun.COM break;
90911767SAnurag.Maskey@Sun.COM }
91011767SAnurag.Maskey@Sun.COM if ((string = malloc(NWAM_MAX_VALUE_LEN)) == NULL)
91111767SAnurag.Maskey@Sun.COM return (NWAM_NO_MEMORY);
91211767SAnurag.Maskey@Sun.COM switch (object_type) {
91311767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_NCP:
91411767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_NCU:
91511767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_ENM:
91611767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_LOC:
91711767SAnurag.Maskey@Sun.COM (void) snprintf(string, NWAM_MAX_VALUE_LEN,
91811767SAnurag.Maskey@Sun.COM "%s %s %s active", object_type_string,
91911767SAnurag.Maskey@Sun.COM object_name, condition_string);
92011767SAnurag.Maskey@Sun.COM *stringp = string;
92111767SAnurag.Maskey@Sun.COM break;
92211767SAnurag.Maskey@Sun.COM
92311767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS:
92411767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN:
92511767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN:
92611767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_ESSID:
92711767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_BSSID:
92811767SAnurag.Maskey@Sun.COM (void) snprintf(string, NWAM_MAX_VALUE_LEN,
92911767SAnurag.Maskey@Sun.COM "%s %s %s", object_type_string,
93011767SAnurag.Maskey@Sun.COM condition_string, object_name);
93111767SAnurag.Maskey@Sun.COM *stringp = string;
93211767SAnurag.Maskey@Sun.COM break;
93311767SAnurag.Maskey@Sun.COM
93411767SAnurag.Maskey@Sun.COM default:
93511767SAnurag.Maskey@Sun.COM free(string);
93611767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
93711767SAnurag.Maskey@Sun.COM
93811767SAnurag.Maskey@Sun.COM }
93911767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
94011767SAnurag.Maskey@Sun.COM }
94111767SAnurag.Maskey@Sun.COM
94211767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_condition_string_to_condition(const char * string,nwam_condition_object_type_t * object_typep,nwam_condition_t * conditionp,char ** object_namep)94311767SAnurag.Maskey@Sun.COM nwam_condition_string_to_condition(const char *string,
94411767SAnurag.Maskey@Sun.COM nwam_condition_object_type_t *object_typep,
94511767SAnurag.Maskey@Sun.COM nwam_condition_t *conditionp, char **object_namep)
94611767SAnurag.Maskey@Sun.COM {
94711767SAnurag.Maskey@Sun.COM char *copy, *lasts;
94811767SAnurag.Maskey@Sun.COM char *object_type_string, *object_name;
94911767SAnurag.Maskey@Sun.COM char *condition_string, *active_string;
95011767SAnurag.Maskey@Sun.COM
95111767SAnurag.Maskey@Sun.COM assert(string != NULL && object_typep != NULL && conditionp != NULL &&
95211767SAnurag.Maskey@Sun.COM object_namep != NULL);
95311767SAnurag.Maskey@Sun.COM
95411767SAnurag.Maskey@Sun.COM if ((copy = strdup(string)) == NULL)
95511767SAnurag.Maskey@Sun.COM return (NWAM_NO_MEMORY);
95611767SAnurag.Maskey@Sun.COM
95711767SAnurag.Maskey@Sun.COM if ((object_type_string = strtok_r(copy, " \t", &lasts)) == NULL) {
95811767SAnurag.Maskey@Sun.COM free(copy);
95911767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
96011767SAnurag.Maskey@Sun.COM }
96111767SAnurag.Maskey@Sun.COM
96211767SAnurag.Maskey@Sun.COM if (strcmp(object_type_string, NWAM_CONDITION_OBJECT_TYPE_NCP_STRING)
96311767SAnurag.Maskey@Sun.COM == 0)
96411767SAnurag.Maskey@Sun.COM *object_typep = NWAM_CONDITION_OBJECT_TYPE_NCP;
96511767SAnurag.Maskey@Sun.COM else if (strcmp(object_type_string,
96611767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_NCU_STRING) == 0)
96711767SAnurag.Maskey@Sun.COM *object_typep = NWAM_CONDITION_OBJECT_TYPE_NCU;
96811767SAnurag.Maskey@Sun.COM else if (strcmp(object_type_string,
96911767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_ENM_STRING) == 0)
97011767SAnurag.Maskey@Sun.COM *object_typep = NWAM_CONDITION_OBJECT_TYPE_ENM;
97111767SAnurag.Maskey@Sun.COM else if (strcmp(object_type_string,
97211767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_LOC_STRING) == 0)
97311767SAnurag.Maskey@Sun.COM *object_typep = NWAM_CONDITION_OBJECT_TYPE_LOC;
97411767SAnurag.Maskey@Sun.COM else if (strcmp(object_type_string,
97511767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS_STRING) == 0)
97611767SAnurag.Maskey@Sun.COM *object_typep = NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS;
97711767SAnurag.Maskey@Sun.COM else if (strcmp(object_type_string,
97811767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN_STRING) == 0)
97911767SAnurag.Maskey@Sun.COM *object_typep = NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN;
98011767SAnurag.Maskey@Sun.COM else if (strcmp(object_type_string,
98111767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN_STRING) == 0)
98211767SAnurag.Maskey@Sun.COM *object_typep = NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN;
98311767SAnurag.Maskey@Sun.COM else if (strcmp(object_type_string,
98411767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_ESSID_STRING) == 0)
98511767SAnurag.Maskey@Sun.COM *object_typep = NWAM_CONDITION_OBJECT_TYPE_ESSID;
98611767SAnurag.Maskey@Sun.COM else if (strcmp(object_type_string,
98711767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_BSSID_STRING) == 0)
98811767SAnurag.Maskey@Sun.COM *object_typep = NWAM_CONDITION_OBJECT_TYPE_BSSID;
98911767SAnurag.Maskey@Sun.COM else {
99011767SAnurag.Maskey@Sun.COM free(copy);
99111767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
99211767SAnurag.Maskey@Sun.COM }
99311767SAnurag.Maskey@Sun.COM
99411767SAnurag.Maskey@Sun.COM if (*object_typep == NWAM_CONDITION_OBJECT_TYPE_NCP ||
99511767SAnurag.Maskey@Sun.COM *object_typep == NWAM_CONDITION_OBJECT_TYPE_NCU ||
99611767SAnurag.Maskey@Sun.COM *object_typep == NWAM_CONDITION_OBJECT_TYPE_ENM ||
99711767SAnurag.Maskey@Sun.COM *object_typep == NWAM_CONDITION_OBJECT_TYPE_LOC) {
99811767SAnurag.Maskey@Sun.COM if ((object_name = strtok_r(NULL, " \t", &lasts)) == NULL) {
99911767SAnurag.Maskey@Sun.COM free(copy);
100011767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
100111767SAnurag.Maskey@Sun.COM }
100211767SAnurag.Maskey@Sun.COM if ((*object_namep = strdup(object_name)) == NULL) {
100311767SAnurag.Maskey@Sun.COM free(copy);
100411767SAnurag.Maskey@Sun.COM return (NWAM_NO_MEMORY);
100511767SAnurag.Maskey@Sun.COM }
100611767SAnurag.Maskey@Sun.COM
100711767SAnurag.Maskey@Sun.COM }
100811767SAnurag.Maskey@Sun.COM
100911767SAnurag.Maskey@Sun.COM if ((condition_string = strtok_r(NULL, " \t", &lasts)) == NULL) {
101011767SAnurag.Maskey@Sun.COM free(copy);
101111767SAnurag.Maskey@Sun.COM if (*object_namep != NULL)
101211767SAnurag.Maskey@Sun.COM free(*object_namep);
101311767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
101411767SAnurag.Maskey@Sun.COM }
101511767SAnurag.Maskey@Sun.COM if (strcmp(condition_string, NWAM_CONDITION_IS_STRING) == 0)
101611767SAnurag.Maskey@Sun.COM *conditionp = NWAM_CONDITION_IS;
101711767SAnurag.Maskey@Sun.COM else if (strcmp(condition_string, NWAM_CONDITION_IS_NOT_STRING) == 0)
101811767SAnurag.Maskey@Sun.COM *conditionp = NWAM_CONDITION_IS_NOT;
101911767SAnurag.Maskey@Sun.COM else if (strcmp(condition_string, NWAM_CONDITION_CONTAINS_STRING) == 0)
102011767SAnurag.Maskey@Sun.COM *conditionp = NWAM_CONDITION_CONTAINS;
102111767SAnurag.Maskey@Sun.COM else if (strcmp(condition_string,
102211767SAnurag.Maskey@Sun.COM NWAM_CONDITION_DOES_NOT_CONTAIN_STRING) == 0)
102311767SAnurag.Maskey@Sun.COM *conditionp = NWAM_CONDITION_DOES_NOT_CONTAIN;
102411767SAnurag.Maskey@Sun.COM else if (strcmp(condition_string,
102511767SAnurag.Maskey@Sun.COM NWAM_CONDITION_IS_IN_RANGE_STRING) == 0)
102611767SAnurag.Maskey@Sun.COM *conditionp = NWAM_CONDITION_IS_IN_RANGE;
102711767SAnurag.Maskey@Sun.COM else if (strcmp(condition_string,
102811767SAnurag.Maskey@Sun.COM NWAM_CONDITION_IS_NOT_IN_RANGE_STRING) == 0)
102911767SAnurag.Maskey@Sun.COM *conditionp = NWAM_CONDITION_IS_NOT_IN_RANGE;
103011767SAnurag.Maskey@Sun.COM else {
103111767SAnurag.Maskey@Sun.COM free(copy);
103211767SAnurag.Maskey@Sun.COM if (*object_namep != NULL)
103311767SAnurag.Maskey@Sun.COM free(*object_namep);
103411767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
103511767SAnurag.Maskey@Sun.COM }
103611767SAnurag.Maskey@Sun.COM
103711767SAnurag.Maskey@Sun.COM if (*object_typep == NWAM_CONDITION_OBJECT_TYPE_NCP ||
103811767SAnurag.Maskey@Sun.COM *object_typep == NWAM_CONDITION_OBJECT_TYPE_NCU ||
103911767SAnurag.Maskey@Sun.COM *object_typep == NWAM_CONDITION_OBJECT_TYPE_ENM ||
104011767SAnurag.Maskey@Sun.COM *object_typep == NWAM_CONDITION_OBJECT_TYPE_LOC) {
104111767SAnurag.Maskey@Sun.COM if ((*conditionp != NWAM_CONDITION_IS &&
104211767SAnurag.Maskey@Sun.COM *conditionp != NWAM_CONDITION_IS_NOT) ||
104311767SAnurag.Maskey@Sun.COM (active_string = strtok_r(NULL, " \t", &lasts)) == NULL ||
104411767SAnurag.Maskey@Sun.COM strcmp(active_string, NWAM_CONDITION_ACTIVE_STRING) != 0) {
104511767SAnurag.Maskey@Sun.COM free(copy);
104611767SAnurag.Maskey@Sun.COM free(*object_namep);
104711767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
104811767SAnurag.Maskey@Sun.COM }
104911767SAnurag.Maskey@Sun.COM } else {
105011767SAnurag.Maskey@Sun.COM switch (*conditionp) {
105111767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_CONTAINS:
105211767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_DOES_NOT_CONTAIN:
105311767SAnurag.Maskey@Sun.COM if (*object_typep !=
105411767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN &&
105511767SAnurag.Maskey@Sun.COM *object_typep !=
105611767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN &&
105711767SAnurag.Maskey@Sun.COM *object_typep != NWAM_CONDITION_OBJECT_TYPE_ESSID) {
105811767SAnurag.Maskey@Sun.COM free(copy);
105911767SAnurag.Maskey@Sun.COM free(*object_namep);
106011767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
106111767SAnurag.Maskey@Sun.COM }
106211767SAnurag.Maskey@Sun.COM break;
106311767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_IS_IN_RANGE:
106411767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_IS_NOT_IN_RANGE:
106511767SAnurag.Maskey@Sun.COM if (*object_typep !=
106611767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS) {
106711767SAnurag.Maskey@Sun.COM free(copy);
106811767SAnurag.Maskey@Sun.COM free(*object_namep);
106911767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
107011767SAnurag.Maskey@Sun.COM }
107111767SAnurag.Maskey@Sun.COM break;
107211767SAnurag.Maskey@Sun.COM }
107311767SAnurag.Maskey@Sun.COM
107411767SAnurag.Maskey@Sun.COM if ((object_name = strtok_r(NULL, " \t", &lasts)) == NULL) {
107511767SAnurag.Maskey@Sun.COM free(copy);
107611767SAnurag.Maskey@Sun.COM free(*object_namep);
107711767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
107811767SAnurag.Maskey@Sun.COM }
107911767SAnurag.Maskey@Sun.COM if ((*object_namep = strdup(object_name)) == NULL) {
108011767SAnurag.Maskey@Sun.COM free(copy);
108111767SAnurag.Maskey@Sun.COM free(*object_namep);
108211767SAnurag.Maskey@Sun.COM return (NWAM_NO_MEMORY);
108311767SAnurag.Maskey@Sun.COM }
108411767SAnurag.Maskey@Sun.COM }
108511767SAnurag.Maskey@Sun.COM
108611767SAnurag.Maskey@Sun.COM free(copy);
108711767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
108811767SAnurag.Maskey@Sun.COM }
108911767SAnurag.Maskey@Sun.COM
109011767SAnurag.Maskey@Sun.COM nwam_error_t
nwam_condition_rate(nwam_condition_object_type_t object_type,nwam_condition_t condition,uint64_t * ratep)109111767SAnurag.Maskey@Sun.COM nwam_condition_rate(nwam_condition_object_type_t object_type,
109211767SAnurag.Maskey@Sun.COM nwam_condition_t condition, uint64_t *ratep)
109311767SAnurag.Maskey@Sun.COM {
109411767SAnurag.Maskey@Sun.COM assert(ratep != NULL);
109511767SAnurag.Maskey@Sun.COM
109611767SAnurag.Maskey@Sun.COM *ratep = 0;
109711767SAnurag.Maskey@Sun.COM
109811767SAnurag.Maskey@Sun.COM switch (object_type) {
109911767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_NCP:
110011767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_NCU:
110111767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_ENM:
110211767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_LOC:
110311767SAnurag.Maskey@Sun.COM (*ratep)++;
110411767SAnurag.Maskey@Sun.COM /* FALLTHRU */
110511767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN:
110611767SAnurag.Maskey@Sun.COM (*ratep)++;
110711767SAnurag.Maskey@Sun.COM /* FALLTHRU */
110811767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN:
110911767SAnurag.Maskey@Sun.COM (*ratep)++;
111011767SAnurag.Maskey@Sun.COM /* FALLTHRU */
111111767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS:
111211767SAnurag.Maskey@Sun.COM (*ratep)++;
111311767SAnurag.Maskey@Sun.COM /* FALLTHRU */
111411767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_BSSID:
111511767SAnurag.Maskey@Sun.COM (*ratep)++;
111611767SAnurag.Maskey@Sun.COM /* FALLTHRU */
111711767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_OBJECT_TYPE_ESSID:
111811767SAnurag.Maskey@Sun.COM (*ratep)++;
111911767SAnurag.Maskey@Sun.COM break;
112011767SAnurag.Maskey@Sun.COM default:
112111767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
112211767SAnurag.Maskey@Sun.COM }
112311767SAnurag.Maskey@Sun.COM
112411767SAnurag.Maskey@Sun.COM switch (condition) {
112511767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_IS:
112611767SAnurag.Maskey@Sun.COM (*ratep)++;
112711767SAnurag.Maskey@Sun.COM /* FALLTHRU */
112811767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_CONTAINS:
112911767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_IS_IN_RANGE:
113011767SAnurag.Maskey@Sun.COM (*ratep)++;
113111767SAnurag.Maskey@Sun.COM /* FALLTHRU */
113211767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_DOES_NOT_CONTAIN:
113311767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_IS_NOT_IN_RANGE:
113411767SAnurag.Maskey@Sun.COM (*ratep)++;
113511767SAnurag.Maskey@Sun.COM /* FALLTHRU */
113611767SAnurag.Maskey@Sun.COM case NWAM_CONDITION_IS_NOT:
113711767SAnurag.Maskey@Sun.COM (*ratep)++;
113811767SAnurag.Maskey@Sun.COM break;
113911767SAnurag.Maskey@Sun.COM default:
114011767SAnurag.Maskey@Sun.COM return (NWAM_INVALID_ARG);
114111767SAnurag.Maskey@Sun.COM }
114211767SAnurag.Maskey@Sun.COM return (NWAM_SUCCESS);
114311767SAnurag.Maskey@Sun.COM }
1144