6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/*
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * CDDL HEADER START
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * The contents of this file are subject to the terms of the
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * Common Development and Distribution License (the "License").
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * You may not use this file except in compliance with the License.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * or http://www.opensolaris.org/os/licensing.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * See the License for the specific language governing permissions
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * and limitations under the License.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * When distributing Covered Code, include this CDDL HEADER in each
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * If applicable, add the following below this CDDL HEADER, with the
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * fields enclosed by brackets "[]" replaced with your own identifying
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * information: Portions Copyright [yyyy] [name of copyright owner]
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * CDDL HEADER END
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/*
48fff0e3de5e66bd25183e5fcb5f172d19057078Renee Danson Sommerfeld * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
33f5ff17089e3a43e6e730bf80384c233123dbd9Milan Jurik * Copyright 2012 Milan Jurik. All rights reserved.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#include <assert.h>
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#include <stdio.h>
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#include <stdlib.h>
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#include <string.h>
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#include <sys/types.h>
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#include <libdlwlan.h>
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#include <libnvpair.h>
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#include "libnwam_impl.h"
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#include <libnwam_priv.h>
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#include <libnwam.h>
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/*
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * Internal implementation of libnwam in-memory objects and values. Objects
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * are nvlists.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyvoid
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_free(nwam_value_t value)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint_t i;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (value == NULL)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey switch (value->nwv_value_type) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_VALUE_TYPE_BOOLEAN:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(value->nwv_values.nwv_boolean);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_VALUE_TYPE_INT64:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(value->nwv_values.nwv_int64);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_VALUE_TYPE_UINT64:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(value->nwv_values.nwv_uint64);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_VALUE_TYPE_STRING:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey for (i = 0; i < value->nwv_value_numvalues; i++)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(value->nwv_values.nwv_string[i]);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(value->nwv_values.nwv_string);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(value);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_create(nwam_value_type_t value_type, void *values, uint_t numvalues,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_t *valuep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_t newvalue;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey boolean_t *values_boolean;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int64_t *values_int64;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint64_t *values_uint64;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey char **values_string;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int i, j;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_error_t err = NWAM_SUCCESS;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *valuep = NULL;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((newvalue = calloc(1, sizeof (struct nwam_value))) == NULL)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_NO_MEMORY);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey newvalue->nwv_value_type = value_type;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey newvalue->nwv_value_numvalues = numvalues;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey switch (value_type) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_VALUE_TYPE_BOOLEAN:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey values_boolean = values;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((newvalue->nwv_values.nwv_boolean =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey calloc(numvalues, sizeof (boolean_t))) == NULL) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(newvalue);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_NO_MEMORY);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey for (i = 0; i < numvalues; i++)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey newvalue->nwv_values.nwv_boolean[i] = values_boolean[i];
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_VALUE_TYPE_INT64:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey values_int64 = values;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((newvalue->nwv_values.nwv_int64 =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey calloc(numvalues, sizeof (int64_t))) == NULL) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(newvalue);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_NO_MEMORY);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey for (i = 0; i < numvalues; i++)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey newvalue->nwv_values.nwv_int64[i] = values_int64[i];
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_VALUE_TYPE_UINT64:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey values_uint64 = values;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((newvalue->nwv_values.nwv_uint64 =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey calloc(numvalues, sizeof (uint64_t))) == NULL) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(newvalue);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_NO_MEMORY);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey for (i = 0; i < numvalues; i++)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey newvalue->nwv_values.nwv_uint64[i] = values_uint64[i];
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_VALUE_TYPE_STRING:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey values_string = values;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((newvalue->nwv_values.nwv_string =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey calloc(numvalues, sizeof (char *))) == NULL) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(newvalue);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_NO_MEMORY);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey for (i = 0; i < numvalues; i++) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (strnlen(values_string[i], NWAM_MAX_VALUE_LEN) ==
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_MAX_VALUE_LEN) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey err = NWAM_ENTITY_INVALID_VALUE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey } else if ((newvalue->nwv_values.nwv_string[i] =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey strdup(values_string[i])) == NULL) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey err = NWAM_NO_MEMORY;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (err != NWAM_SUCCESS) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey for (j = 0; j < i; j++)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey newvalue->nwv_values.nwv_string[i]);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(newvalue->nwv_values.nwv_string);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(newvalue);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (err);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey default:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *valuep = newvalue;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_copy(nwam_value_t old, nwam_value_t *newp)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey void *values;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assert(old != NULL && newp != NULL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey switch (old->nwv_value_type) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_VALUE_TYPE_BOOLEAN:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey values = old->nwv_values.nwv_boolean;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_VALUE_TYPE_INT64:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey values = old->nwv_values.nwv_int64;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_VALUE_TYPE_UINT64:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey values = old->nwv_values.nwv_uint64;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_VALUE_TYPE_STRING:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey values = old->nwv_values.nwv_string;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey default:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_value_create(old->nwv_value_type, values,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey old->nwv_value_numvalues, newp));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_create_boolean_array(boolean_t *values, uint_t numvalues,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_t *valuep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_value_create(NWAM_VALUE_TYPE_BOOLEAN, values, numvalues,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey valuep));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_create_boolean(boolean_t value, nwam_value_t *valuep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_value_create_boolean_array(&value, 1, valuep));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_create_int64_array(int64_t *values, uint_t numvalues,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_t *valuep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_value_create(NWAM_VALUE_TYPE_INT64, values, numvalues,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey valuep));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_create_int64(int64_t value, nwam_value_t *valuep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_value_create_int64_array(&value, 1, valuep));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_create_uint64_array(uint64_t *values, uint_t numvalues,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_t *valuep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_value_create(NWAM_VALUE_TYPE_UINT64, values, numvalues,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey valuep));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_create_uint64(uint64_t value, nwam_value_t *valuep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_value_create_uint64_array(&value, 1, valuep));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_create_string_array(char **values, uint_t numvalues,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_t *valuep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_value_create(NWAM_VALUE_TYPE_STRING, values, numvalues,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey valuep));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_create_string(char *value, nwam_value_t *valuep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_value_create_string_array(&value, 1, valuep));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_get_boolean_array(nwam_value_t value, boolean_t **valuesp,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint_t *numvaluesp)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assert(value != NULL && numvaluesp != NULL && valuesp != NULL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *numvaluesp = value->nwv_value_numvalues;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *valuesp = value->nwv_values.nwv_boolean;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_get_boolean(nwam_value_t value, boolean_t *valuep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint_t numvalues;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey boolean_t *myvaluesp;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_error_t err;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey err = nwam_value_get_boolean_array(value, &myvaluesp, &numvalues);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (err != NWAM_SUCCESS)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (err);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (numvalues != 1)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_ENTITY_MULTIPLE_VALUES);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *valuep = myvaluesp[0];
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_get_int64_array(nwam_value_t value, int64_t **valuesp,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint_t *numvaluesp)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assert(value != NULL && numvaluesp != NULL && valuesp != NULL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *numvaluesp = value->nwv_value_numvalues;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *valuesp = value->nwv_values.nwv_int64;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_get_int64(nwam_value_t value, int64_t *valuep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint_t numvalues;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int64_t *myvaluesp;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_error_t err;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey err = nwam_value_get_int64_array(value, &myvaluesp, &numvalues);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (err != NWAM_SUCCESS)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (err);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (numvalues != 1)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_ENTITY_MULTIPLE_VALUES);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *valuep = myvaluesp[0];
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_get_uint64_array(nwam_value_t value, uint64_t **valuesp,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint_t *numvaluesp)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assert(value != NULL && numvaluesp != NULL && valuesp != NULL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *numvaluesp = value->nwv_value_numvalues;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *valuesp = value->nwv_values.nwv_uint64;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_get_uint64(nwam_value_t value, uint64_t *valuep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint_t numvalues;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint64_t *myvaluesp;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_error_t err;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey err = nwam_value_get_uint64_array(value, &myvaluesp, &numvalues);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (err != NWAM_SUCCESS)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (err);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (numvalues != 1)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_ENTITY_MULTIPLE_VALUES);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *valuep = myvaluesp[0];
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_get_string_array(nwam_value_t value, char ***valuesp,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint_t *numvaluesp)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assert(value != NULL && numvaluesp != NULL && valuesp != NULL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *numvaluesp = value->nwv_value_numvalues;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *valuesp = value->nwv_values.nwv_string;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_get_string(nwam_value_t value, char **valuep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint_t numvalues;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey char **myvaluesp;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_error_t err;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey err = nwam_value_get_string_array(value, &myvaluesp, &numvalues);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (err != NWAM_SUCCESS)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (err);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (numvalues != 1)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_ENTITY_MULTIPLE_VALUES);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *valuep = myvaluesp[0];
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_get_type(nwam_value_t value, nwam_value_type_t *typep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *typep = value->nwv_value_type;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_get_numvalues(nwam_value_t value, uint_t *numvaluesp)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *numvaluesp = value->nwv_value_numvalues;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/*
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * Generic object data functions. We hide nvlist implementation
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * from NCP, ENM and location implementations.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_alloc_object_list(void *list)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int nverr;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assert(list != NULL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((nverr = nvlist_alloc((nvlist_t **)list, NV_UNIQUE_NAME, 0)) != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyvoid
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_free_object_list(void *list)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
aab83bb83be7342f6cfccaed8d5fe0b2f404855dJosef 'Jeff' Sipek nvlist_free(list);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_dup_object_list(void *oldlist, void *newlist)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int nverr;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assert(oldlist != NULL && newlist != NULL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((nverr = nvlist_dup(oldlist, newlist, 0)) != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/* Add child object list to parent object list using property name childname */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_object_list_add_object_list(void *parentlist, char *childname,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey void *childlist)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nvlist_add_nvlist(parentlist,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey childname, childlist)));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/* Remove object list from parent object list */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_object_list_remove_object_list(void *parentlist, char *childname)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nvlist_remove_all(parentlist,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey childname)));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/*
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * Get next object list (nvlist) after lastname. Used to walk NCUs, ENMs and
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * locations, each of which is internally represented as an nvlist.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_next_object_list(void *parentlist, char *lastname, char **childnamep,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey void *childlistp)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nvpair_t *last = NULL, *next;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int nverr;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (lastname != NULL) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((nverr = nvlist_lookup_nvpair(parentlist, lastname, &last))
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((next = nvlist_next_nvpair(parentlist, last)) == NULL)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_LIST_END);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *childnamep = nvpair_name(next);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (nvpair_type(next) != DATA_TYPE_NVLIST)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_ERROR_INTERNAL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((nverr = nvpair_value_nvlist(next, childlistp)) != NWAM_SUCCESS)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/*
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * Pack nvlist into contiguous memory. If packed_listp is NULL, we just
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * return the size of the memory needed to do so.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_pack_object_list(void *list, char **packed_listp, size_t *packed_sizep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int nverr;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assert(list != NULL && packed_sizep != NULL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (packed_listp == NULL) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nverr = nvlist_size(list, packed_sizep, NV_ENCODE_XDR);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey } else {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nverr = nvlist_pack(list, packed_listp, packed_sizep,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NV_ENCODE_XDR, 0);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (nverr != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_unpack_object_list(char *packed_list, size_t packed_size,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey void *list)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int nverr;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assert(packed_list != NULL && list != NULL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *((nvlist_t **)list) = NULL;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nverr = nvlist_unpack(packed_list, packed_size, (nvlist_t **)list, 0);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (nverr != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/*
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * Functions to walk, set and get properties in nvlist, translating
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * between nwam_value_t and nvlist/nvpair representations.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_next_object_prop(void *list, char *lastname, char **namep,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_t *valuep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nvpair_t *last = NULL, *next;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int nverr;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (lastname != NULL) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((nverr = nvlist_lookup_nvpair(list, lastname, &last)) != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((next = nvlist_next_nvpair(list, last)) == NULL)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_LIST_END);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *namep = nvpair_name(next);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_get_prop_value(list, (const char *)*namep, valuep));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_get_prop_value(void *list, const char *name, nwam_value_t *valuep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nvpair_t *prop;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_error_t err;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int nverr;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey boolean_t *valbool;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int64_t *valint64;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint64_t *valuint64;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey char **valstr;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint_t numvalues;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assert(valuep != NULL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *valuep = NULL;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((nverr = nvlist_lookup_nvpair(list, name, &prop)) != 0) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey /* convert EINVAL to NOT_FOUND */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (nverr == EINVAL)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_ENTITY_NOT_FOUND);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey switch (nvpair_type(prop)) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case DATA_TYPE_BOOLEAN_ARRAY:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((nverr = nvpair_value_boolean_array(prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey &valbool, &numvalues)) != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((err = nwam_value_create_boolean_array(valbool, numvalues,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey valuep)) != NWAM_SUCCESS)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (err);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case DATA_TYPE_INT64_ARRAY:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((nverr = nvpair_value_int64_array(prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey &valint64, &numvalues)) != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((err = nwam_value_create_int64_array(valint64, numvalues,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey valuep)) != NWAM_SUCCESS)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (err);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case DATA_TYPE_UINT64_ARRAY:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((nverr = nvpair_value_uint64_array(prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey &valuint64, &numvalues)) != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((err = nwam_value_create_uint64_array(valuint64, numvalues,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey valuep)) != NWAM_SUCCESS)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (err);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case DATA_TYPE_STRING_ARRAY:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((nverr = nvpair_value_string_array(prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey &valstr, &numvalues)) != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((err = nwam_value_create_string_array(valstr, numvalues,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey valuep)) != NWAM_SUCCESS)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (err);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey default:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey /* Should not happen */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_ERROR_INTERNAL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_delete_prop(void *list, const char *name)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int nverr;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((nverr = nvlist_remove_all(list, name)) != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_set_prop_value(void *list, const char *propname, nwam_value_t value)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int nverr;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_error_t err;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_type_t type;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint_t numvalues;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey boolean_t *valbool;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int64_t *valint64;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint64_t *valuint64;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey char **valstr;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assert(list != NULL && value != NULL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((err = nwam_value_get_type(value, &type)) != NWAM_SUCCESS)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (err);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey switch (type) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_VALUE_TYPE_BOOLEAN:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((err = nwam_value_get_boolean_array(value, &valbool,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey &numvalues)) != NWAM_SUCCESS)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (err);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((nverr = nvlist_add_boolean_array(list, propname,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey valbool, numvalues)) != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_VALUE_TYPE_INT64:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((err = nwam_value_get_int64_array(value, &valint64,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey &numvalues)) != NWAM_SUCCESS)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (err);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((nverr = nvlist_add_int64_array(list, propname,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey valint64, numvalues)) != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_VALUE_TYPE_UINT64:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((err = nwam_value_get_uint64_array(value, &valuint64,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey &numvalues)) != NWAM_SUCCESS)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (err);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((nverr = nvlist_add_uint64_array(list, propname,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey valuint64, numvalues)) != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_VALUE_TYPE_STRING:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((err = nwam_value_get_string_array(value, &valstr,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey &numvalues)) != NWAM_SUCCESS)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (err);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((nverr = nvlist_add_string_array(list, propname,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey valstr, numvalues)) != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (nwam_errno_to_nwam_error(nverr));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey default:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/* Map uint64 values to their string counterparts */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeystruct nwam_value_entry {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *value_string;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint64_t value;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey};
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeystruct nwam_value_entry prop_activation_mode_value_entries[] =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_ACTIVATION_MODE_MANUAL_STRING, NWAM_ACTIVATION_MODE_MANUAL },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_ACTIVATION_MODE_SYSTEM_STRING, NWAM_ACTIVATION_MODE_SYSTEM },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_ACTIVATION_MODE_CONDITIONAL_ANY_STRING,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ACTIVATION_MODE_CONDITIONAL_ANY },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_ACTIVATION_MODE_CONDITIONAL_ALL_STRING,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ACTIVATION_MODE_CONDITIONAL_ALL },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_ACTIVATION_MODE_PRIORITIZED_STRING,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ACTIVATION_MODE_PRIORITIZED },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NULL, 0 }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey};
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeystruct nwam_value_entry ncu_prop_type_entries[] =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_NCU_TYPE_LINK_STRING, NWAM_NCU_TYPE_LINK },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_NCU_TYPE_INTERFACE_STRING, NWAM_NCU_TYPE_INTERFACE },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NULL, 0 }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey};
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeystruct nwam_value_entry ncu_prop_class_entries[] =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_NCU_CLASS_PHYS_STRING, NWAM_NCU_CLASS_PHYS },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_NCU_CLASS_IP_STRING, NWAM_NCU_CLASS_IP },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NULL, 0 }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey};
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeystruct nwam_value_entry ncu_prop_ip_version_entries[] =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_IP_VERSION_IPV4_STRING, IPV4_VERSION },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_IP_VERSION_IPV6_STRING, IPV6_VERSION },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NULL, 0 }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey};
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeystruct nwam_value_entry ncu_prop_ipv4_addrsrc_entries[] =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_ADDRSRC_DHCP_STRING, NWAM_ADDRSRC_DHCP },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_ADDRSRC_STATIC_STRING, NWAM_ADDRSRC_STATIC },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NULL, 0 }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey};
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeystruct nwam_value_entry ncu_prop_ipv6_addrsrc_entries[] =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_ADDRSRC_DHCP_STRING, NWAM_ADDRSRC_DHCP },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_ADDRSRC_STATIC_STRING, NWAM_ADDRSRC_STATIC },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_ADDRSRC_AUTOCONF_STRING, NWAM_ADDRSRC_AUTOCONF },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NULL, 0 }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey};
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeystruct nwam_value_entry ncu_prop_priority_mode_entries[] =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_PRIORITY_MODE_EXCLUSIVE_STRING, NWAM_PRIORITY_MODE_EXCLUSIVE },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_PRIORITY_MODE_SHARED_STRING, NWAM_PRIORITY_MODE_SHARED },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_PRIORITY_MODE_ALL_STRING, NWAM_PRIORITY_MODE_ALL },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NULL, 0 }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey};
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeystruct nwam_value_entry loc_prop_nameservices_entries[] =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_NAMESERVICES_DNS_STRING, NWAM_NAMESERVICES_DNS },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_NAMESERVICES_FILES_STRING, NWAM_NAMESERVICES_FILES },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_NAMESERVICES_NIS_STRING, NWAM_NAMESERVICES_NIS },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_NAMESERVICES_LDAP_STRING, NWAM_NAMESERVICES_LDAP },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NULL, 0 }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey};
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeystruct nwam_value_entry loc_prop_nameservice_configsrc_entries[] =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_CONFIGSRC_MANUAL_STRING, NWAM_CONFIGSRC_MANUAL },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_CONFIGSRC_DHCP_STRING, NWAM_CONFIGSRC_DHCP },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NULL, 0 }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey};
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeystruct nwam_value_entry known_wlan_prop_security_mode_entries[] =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { "none", DLADM_WLAN_SECMODE_NONE },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { "wep", DLADM_WLAN_SECMODE_WEP },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { "wpa", DLADM_WLAN_SECMODE_WPA },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NULL, 0 }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey};
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeystruct nwam_prop_value_entry {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *prop_name;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey struct nwam_value_entry *value_entries;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey} prop_value_entry_table[] =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_NCU_PROP_ACTIVATION_MODE, prop_activation_mode_value_entries },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_NCU_PROP_TYPE, ncu_prop_type_entries },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_NCU_PROP_CLASS, ncu_prop_class_entries },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_NCU_PROP_IP_VERSION, ncu_prop_ip_version_entries },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_NCU_PROP_IPV4_ADDRSRC, ncu_prop_ipv4_addrsrc_entries },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_NCU_PROP_IPV6_ADDRSRC, ncu_prop_ipv6_addrsrc_entries },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_NCU_PROP_PRIORITY_MODE, ncu_prop_priority_mode_entries },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_ENM_PROP_ACTIVATION_MODE, prop_activation_mode_value_entries },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_LOC_PROP_ACTIVATION_MODE, prop_activation_mode_value_entries },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_LOC_PROP_NAMESERVICES, loc_prop_nameservices_entries },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_LOC_PROP_DNS_NAMESERVICE_CONFIGSRC,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey loc_prop_nameservice_configsrc_entries },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_LOC_PROP_NIS_NAMESERVICE_CONFIGSRC,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey loc_prop_nameservice_configsrc_entries },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_LOC_PROP_LDAP_NAMESERVICE_CONFIGSRC,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey loc_prop_nameservice_configsrc_entries },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NWAM_KNOWN_WLAN_PROP_SECURITY_MODE,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey known_wlan_prop_security_mode_entries },
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey { NULL, NULL }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey};
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/*
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * Convert uint64 values for property propname into a string representing
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * that value. Used by enum values.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_uint64_get_value_string(const char *propname, uint64_t val,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char **valstrp)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int i, j;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int max = 0; /* largest enum value seen so far */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey struct nwam_value_entry *value_entries;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assert(propname != NULL && valstrp != NULL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey for (i = 0; prop_value_entry_table[i].prop_name != NULL; i++) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (strcmp(prop_value_entry_table[i].prop_name, propname) != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey continue;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey value_entries = prop_value_entry_table[i].value_entries;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey for (j = 0; value_entries[j].value_string != NULL; j++) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (value_entries[j].value == val) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *valstrp = value_entries[j].value_string;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey max = value_entries[j].value > max ?
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey value_entries[j].value : max;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey /*
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * If trying to get the string for an enum value that doesn't
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * exist, return NWAM_LIST_END. Otherwise, the input enum
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * value doesn't exist for the given property.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (val > max)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_LIST_END);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey else
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_ENTITY_INVALID_VALUE);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/*
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * Convert string to appropriate uint64 value.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_string_get_uint64(const char *propname, const char *valstr,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint64_t *valp)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int i, j;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey struct nwam_value_entry *value_entries;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assert(propname != NULL && valstr != NULL && valp != NULL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey for (i = 0; prop_value_entry_table[i].prop_name != NULL; i++) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (strcmp(prop_value_entry_table[i].prop_name, propname) != 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey continue;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey value_entries = prop_value_entry_table[i].value_entries;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey for (j = 0; value_entries[j].value_string != NULL; j++) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (strcasecmp(value_entries[j].value_string, valstr)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey == 0) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *valp = value_entries[j].value;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_ENTITY_INVALID_VALUE);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/* Conditional activation functions */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_condition_to_condition_string(nwam_condition_object_type_t object_type,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_condition_t condition, const char *object_name, char **stringp)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey char *object_type_string, *condition_string;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey char *string;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assert(stringp != NULL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *stringp = NULL;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey switch (object_type) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_NCP:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey object_type_string = NWAM_CONDITION_OBJECT_TYPE_NCP_STRING;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_NCU:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey object_type_string = NWAM_CONDITION_OBJECT_TYPE_NCU_STRING;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_ENM:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey object_type_string = NWAM_CONDITION_OBJECT_TYPE_ENM_STRING;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_LOC:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey object_type_string = NWAM_CONDITION_OBJECT_TYPE_LOC_STRING;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey object_type_string =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS_STRING;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey object_type_string =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN_STRING;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey object_type_string =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN_STRING;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_ESSID:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey object_type_string = NWAM_CONDITION_OBJECT_TYPE_ESSID_STRING;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_BSSID:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey object_type_string = NWAM_CONDITION_OBJECT_TYPE_BSSID_STRING;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey default:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey switch (condition) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_IS:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey condition_string = NWAM_CONDITION_IS_STRING;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_IS_NOT:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey condition_string = NWAM_CONDITION_IS_NOT_STRING;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_CONTAINS:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (object_type != NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN &&
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey object_type != NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN &&
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey object_type != NWAM_CONDITION_OBJECT_TYPE_ESSID)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey condition_string = NWAM_CONDITION_CONTAINS_STRING;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_DOES_NOT_CONTAIN:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (object_type != NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN &&
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey object_type != NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN &&
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey object_type != NWAM_CONDITION_OBJECT_TYPE_ESSID)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey condition_string = NWAM_CONDITION_DOES_NOT_CONTAIN_STRING;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_IS_IN_RANGE:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (object_type != NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey condition_string = NWAM_CONDITION_IS_IN_RANGE_STRING;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_IS_NOT_IN_RANGE:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (object_type != NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey condition_string = NWAM_CONDITION_IS_NOT_IN_RANGE_STRING;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey default:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((string = malloc(NWAM_MAX_VALUE_LEN)) == NULL)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_NO_MEMORY);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey switch (object_type) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_NCP:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_NCU:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_ENM:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_LOC:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey (void) snprintf(string, NWAM_MAX_VALUE_LEN,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey "%s %s %s active", object_type_string,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey object_name, condition_string);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *stringp = string;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_ESSID:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_BSSID:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey (void) snprintf(string, NWAM_MAX_VALUE_LEN,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey "%s %s %s", object_type_string,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey condition_string, object_name);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *stringp = string;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey default:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(string);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_condition_string_to_condition(const char *string,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_condition_object_type_t *object_typep,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_condition_t *conditionp, char **object_namep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey char *copy, *lasts;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey char *object_type_string, *object_name;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey char *condition_string, *active_string;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assert(string != NULL && object_typep != NULL && conditionp != NULL &&
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey object_namep != NULL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((copy = strdup(string)) == NULL)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_NO_MEMORY);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((object_type_string = strtok_r(copy, " \t", &lasts)) == NULL) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(copy);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (strcmp(object_type_string, NWAM_CONDITION_OBJECT_TYPE_NCP_STRING)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey == 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep = NWAM_CONDITION_OBJECT_TYPE_NCP;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey else if (strcmp(object_type_string,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_OBJECT_TYPE_NCU_STRING) == 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep = NWAM_CONDITION_OBJECT_TYPE_NCU;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey else if (strcmp(object_type_string,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_OBJECT_TYPE_ENM_STRING) == 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep = NWAM_CONDITION_OBJECT_TYPE_ENM;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey else if (strcmp(object_type_string,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_OBJECT_TYPE_LOC_STRING) == 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep = NWAM_CONDITION_OBJECT_TYPE_LOC;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey else if (strcmp(object_type_string,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS_STRING) == 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep = NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey else if (strcmp(object_type_string,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN_STRING) == 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep = NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey else if (strcmp(object_type_string,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN_STRING) == 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep = NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey else if (strcmp(object_type_string,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_OBJECT_TYPE_ESSID_STRING) == 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep = NWAM_CONDITION_OBJECT_TYPE_ESSID;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey else if (strcmp(object_type_string,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_OBJECT_TYPE_BSSID_STRING) == 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep = NWAM_CONDITION_OBJECT_TYPE_BSSID;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey else {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(copy);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (*object_typep == NWAM_CONDITION_OBJECT_TYPE_NCP ||
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep == NWAM_CONDITION_OBJECT_TYPE_NCU ||
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep == NWAM_CONDITION_OBJECT_TYPE_ENM ||
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep == NWAM_CONDITION_OBJECT_TYPE_LOC) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((object_name = strtok_r(NULL, " \t", &lasts)) == NULL) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(copy);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((*object_namep = strdup(object_name)) == NULL) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(copy);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_NO_MEMORY);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((condition_string = strtok_r(NULL, " \t", &lasts)) == NULL) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(copy);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (*object_namep != NULL)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(*object_namep);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (strcmp(condition_string, NWAM_CONDITION_IS_STRING) == 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *conditionp = NWAM_CONDITION_IS;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey else if (strcmp(condition_string, NWAM_CONDITION_IS_NOT_STRING) == 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *conditionp = NWAM_CONDITION_IS_NOT;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey else if (strcmp(condition_string, NWAM_CONDITION_CONTAINS_STRING) == 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *conditionp = NWAM_CONDITION_CONTAINS;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey else if (strcmp(condition_string,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_DOES_NOT_CONTAIN_STRING) == 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *conditionp = NWAM_CONDITION_DOES_NOT_CONTAIN;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey else if (strcmp(condition_string,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_IS_IN_RANGE_STRING) == 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *conditionp = NWAM_CONDITION_IS_IN_RANGE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey else if (strcmp(condition_string,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_IS_NOT_IN_RANGE_STRING) == 0)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *conditionp = NWAM_CONDITION_IS_NOT_IN_RANGE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey else {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(copy);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (*object_namep != NULL)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(*object_namep);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (*object_typep == NWAM_CONDITION_OBJECT_TYPE_NCP ||
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep == NWAM_CONDITION_OBJECT_TYPE_NCU ||
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep == NWAM_CONDITION_OBJECT_TYPE_ENM ||
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep == NWAM_CONDITION_OBJECT_TYPE_LOC) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((*conditionp != NWAM_CONDITION_IS &&
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *conditionp != NWAM_CONDITION_IS_NOT) ||
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey (active_string = strtok_r(NULL, " \t", &lasts)) == NULL ||
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey strcmp(active_string, NWAM_CONDITION_ACTIVE_STRING) != 0) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(copy);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(*object_namep);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey } else {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey switch (*conditionp) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_CONTAINS:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_DOES_NOT_CONTAIN:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (*object_typep !=
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN &&
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep !=
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN &&
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *object_typep != NWAM_CONDITION_OBJECT_TYPE_ESSID) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(copy);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(*object_namep);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_IS_IN_RANGE:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_IS_NOT_IN_RANGE:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if (*object_typep !=
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(copy);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(*object_namep);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((object_name = strtok_r(NULL, " \t", &lasts)) == NULL) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(copy);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(*object_namep);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey if ((*object_namep = strdup(object_name)) == NULL) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(copy);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(*object_namep);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_NO_MEMORY);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey free(copy);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_condition_rate(nwam_condition_object_type_t object_type,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_condition_t condition, uint64_t *ratep)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey{
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assert(ratep != NULL);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey *ratep = 0;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey switch (object_type) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_NCP:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_NCU:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_ENM:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_LOC:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey (*ratep)++;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey /* FALLTHRU */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey (*ratep)++;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey /* FALLTHRU */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey (*ratep)++;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey /* FALLTHRU */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey (*ratep)++;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey /* FALLTHRU */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_BSSID:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey (*ratep)++;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey /* FALLTHRU */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_OBJECT_TYPE_ESSID:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey (*ratep)++;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey default:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey switch (condition) {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_IS:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey (*ratep)++;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey /* FALLTHRU */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_CONTAINS:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_IS_IN_RANGE:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey (*ratep)++;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey /* FALLTHRU */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_DOES_NOT_CONTAIN:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_IS_NOT_IN_RANGE:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey (*ratep)++;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey /* FALLTHRU */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey case NWAM_CONDITION_IS_NOT:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey (*ratep)++;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey break;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey default:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_INVALID_ARG);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey }
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey return (NWAM_SUCCESS);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey}