libdlflow_impl.h revision da14cebe459d3275048785f25bd869cb09b5307f
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _LIBDLFLOW_IMPL_H
#define _LIBDLFLOW_IMPL_H
#include <sys/types.h>
#include <sys/param.h>
#include <sys/mac.h>
#include <libdladm.h>
#ifdef __cplusplus
extern "C" {
#endif
struct fprop_desc;
struct fattr_desc;
typedef dladm_status_t fpd_getf_t(const char *, char **, uint_t *);
typedef dladm_status_t fpd_setf_t(const char *, val_desc_t *, uint_t);
typedef dladm_status_t fpd_checkf_t(struct fprop_desc *, char **,
uint_t, val_desc_t **);
typedef struct fprop_desc {
char *pd_name;
val_desc_t pd_defval;
val_desc_t *pd_modval;
uint_t pd_nmodval;
boolean_t pd_temponly;
fpd_setf_t *pd_set;
fpd_getf_t *pd_getmod;
fpd_getf_t *pd_get;
fpd_checkf_t *pd_check;
} fprop_desc_t;
typedef struct prop_table {
fprop_desc_t *pt_table;
uint_t pt_size;
} prop_table_t;
typedef enum {
DLADM_PROP_VAL_CURRENT = 1,
DLADM_PROP_VAL_DEFAULT,
DLADM_PROP_VAL_MODIFIABLE,
DLADM_PROP_VAL_PERSISTENT
} prop_type_t;
typedef dladm_status_t fad_checkf_t(char *, flow_desc_t *);
extern dladm_status_t do_check_ip_addr(char *, boolean_t, flow_desc_t *);
extern dladm_status_t do_check_dsfield(char *, flow_desc_t *);
typedef struct fattr_desc {
const char *ad_name;
fad_checkf_t *ad_check;
} fattr_desc_t;
extern dladm_status_t i_dladm_get_prop_temp(const char *, prop_type_t,
const char *, char **, uint_t *, prop_table_t *);
extern dladm_status_t i_dladm_set_prop_temp(const char *, const char *,
char **, uint_t, uint_t, char **, prop_table_t *);
extern boolean_t i_dladm_is_prop_temponly(const char *prop_name,
char **, prop_table_t *);
/*
* Data structures used for implementing persistent properties
*/
typedef struct prop_val {
const char *lv_name;
struct prop_val *lv_nextval;
} prop_val_t;
typedef struct prop_db_info {
const char *li_name;
struct prop_db_info *li_nextprop;
struct prop_val *li_val;
} prop_db_info_t;
typedef struct prop_db_state prop_db_state_t;
typedef boolean_t (*prop_db_op_t)(prop_db_state_t *,
char *, prop_db_info_t *, dladm_status_t *);
typedef dladm_status_t (*prop_db_initop_t)(const char *, const char *,
char **, uint_t, uint_t, char **);
struct prop_db_state {
prop_db_op_t ls_op;
const char *ls_name;
const char *ls_propname;
char **ls_propval;
uint_t *ls_valcntp;
prop_db_initop_t ls_initop;
};
extern boolean_t process_prop_set(prop_db_state_t *lsp, char *buf,
prop_db_info_t *listp, dladm_status_t *statusp);
extern boolean_t process_prop_get(prop_db_state_t *lsp, char *buf,
prop_db_info_t *listp, dladm_status_t *statusp);
extern boolean_t process_prop_init(prop_db_state_t *lsp, char *buf,
prop_db_info_t *listp, dladm_status_t *statusp);
extern dladm_status_t process_prop_db(void *arg, FILE *fp, FILE *nfp);
extern dladm_status_t i_dladm_init_flowprop_db(void);
extern dladm_status_t i_dladm_set_flow_proplist_db(char *,
dladm_arg_list_t *);
extern dladm_status_t i_dladm_flow_check_restriction(datalink_id_t,
flow_desc_t *, mac_resource_props_t *, boolean_t);
extern dladm_status_t dladm_flow_attrlist_extract(dladm_arg_list_t *,
flow_desc_t *);
#ifdef __cplusplus
}
#endif
#endif /* _LIBDLFLOW_IMPL_H */