4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
27 * Functions to maintain a table of datalink configuration information.
30 #ifndef _DLMGMT_IMPL_H
31 #define _DLMGMT_IMPL_H
38 #include <libdllink.h>
42 * datalink attribute structure
44 typedef struct dlmgmt_linkattr_s
{
45 struct dlmgmt_linkattr_s
*lp_next
;
46 struct dlmgmt_linkattr_s
*lp_prev
;
47 char lp_name
[MAXLINKATTRLEN
];
49 dladm_datatype_t lp_type
;
51 boolean_t lp_linkprop
;
57 typedef struct dlmgmt_link_s
{
58 dlmgmt_linkattr_t
*ll_head
;
59 char ll_link
[MAXLINKNAMELEN
];
60 datalink_class_t ll_class
;
62 datalink_id_t ll_linkid
;
65 avl_node_t ll_name_node
;
66 avl_node_t ll_id_node
;
67 avl_node_t ll_loan_node
;
69 uint32_t ll_gen
; /* generation number */
73 * datalink configuration request structure
75 typedef struct dlmgmt_dlconf_s
{
76 dlmgmt_linkattr_t
*ld_head
;
77 char ld_link
[MAXLINKNAMELEN
];
78 datalink_id_t ld_linkid
;
79 datalink_class_t ld_class
;
87 extern boolean_t debug
;
88 extern const char *progname
;
89 extern char cachefile
[];
90 extern dladm_handle_t dld_handle
;
91 extern datalink_id_t dlmgmt_nextlinkid
;
92 extern avl_tree_t dlmgmt_name_avl
;
93 extern avl_tree_t dlmgmt_id_avl
;
94 extern avl_tree_t dlmgmt_loan_avl
;
95 extern avl_tree_t dlmgmt_dlconf_avl
;
97 boolean_t
linkattr_equal(dlmgmt_linkattr_t
**, const char *, void *,
99 dlmgmt_linkattr_t
*linkattr_find(dlmgmt_linkattr_t
*, const char *);
100 void linkattr_unset(dlmgmt_linkattr_t
**, const char *);
101 int linkattr_set(dlmgmt_linkattr_t
**, const char *, void *,
102 size_t, dladm_datatype_t
);
103 int linkattr_get(dlmgmt_linkattr_t
**, const char *, void **,
104 size_t *, dladm_datatype_t
*);
105 void linkattr_destroy(dlmgmt_link_t
*);
107 void link_destroy(dlmgmt_link_t
*);
108 int link_activate(dlmgmt_link_t
*);
109 boolean_t
link_is_visible(dlmgmt_link_t
*, zoneid_t
);
110 dlmgmt_link_t
*link_by_id(datalink_id_t
, zoneid_t
);
111 dlmgmt_link_t
*link_by_name(const char *, zoneid_t
);
112 int dlmgmt_create_common(const char *, datalink_class_t
,
113 uint32_t, zoneid_t
, uint32_t, dlmgmt_link_t
**);
114 int dlmgmt_destroy_common(dlmgmt_link_t
*, uint32_t);
115 int dlmgmt_getattr_common(dlmgmt_linkattr_t
**, const char *,
116 dlmgmt_getattr_retval_t
*);
118 void dlmgmt_advance(dlmgmt_link_t
*);
119 void dlmgmt_table_lock(boolean_t
);
120 void dlmgmt_table_unlock();
122 int dlconf_create(const char *, datalink_id_t
, datalink_class_t
,
123 uint32_t, zoneid_t
, dlmgmt_dlconf_t
**);
124 void dlconf_destroy(dlmgmt_dlconf_t
*);
125 void dlmgmt_advance_dlconfid(dlmgmt_dlconf_t
*);
126 void dlmgmt_dlconf_table_lock(boolean_t
);
127 void dlmgmt_dlconf_table_unlock(void);
129 int dlmgmt_generate_name(const char *, char *, size_t, zoneid_t
);
131 void dlmgmt_linktable_init(void);
132 void dlmgmt_linktable_fini(void);
134 int dlmgmt_zone_init(zoneid_t
);
135 int dlmgmt_elevate_privileges(void);
136 int dlmgmt_drop_privileges();
137 void dlmgmt_handler(void *, char *, size_t, door_desc_t
*, uint_t
);
138 void dlmgmt_log(int, const char *, ...);
139 int dlmgmt_write_db_entry(const char *, dlmgmt_link_t
*, uint32_t);
140 int dlmgmt_delete_db_entry(dlmgmt_link_t
*, uint32_t);
141 int dlmgmt_db_init(zoneid_t
);
142 void dlmgmt_db_fini(zoneid_t
);
148 #endif /* _DLMGMT_IMPL_H */