1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
/*
* 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 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _LIBDLBRIDGE_H
#define _LIBDLBRIDGE_H
/*
* This file includes structures, macros and routines used by bridge
* administration.
*/
#include <sys/types.h>
#include <libdladm.h>
#include <uid_stp.h>
#include <net/bridge.h>
#include <net/trill.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
DLADM_BRIDGE_PROT_UNKNOWN = 0, /* internal only */
DLADM_BRIDGE_PROT_STP,
DLADM_BRIDGE_PROT_TRILL
} dladm_bridge_prot_t;
/* Utility functions to accept bridge protection options */
extern dladm_status_t dladm_bridge_str2prot(const char *,
dladm_bridge_prot_t *);
extern const char *dladm_bridge_prot2str(dladm_bridge_prot_t);
/* Retrieve bridge properties from SMF */
extern dladm_status_t dladm_bridge_get_properties(const char *,
UID_STP_CFG_T *, dladm_bridge_prot_t *);
extern dladm_status_t dladm_bridge_run_properties(const char *,
UID_STP_CFG_T *, dladm_bridge_prot_t *);
/* Create new bridge and configure SMF properties */
extern dladm_status_t dladm_bridge_configure(dladm_handle_t, const char *,
const UID_STP_CFG_T *, dladm_bridge_prot_t, uint32_t);
/* Enable a newly created bridge in SMF */
extern dladm_status_t dladm_bridge_enable(const char *);
/* Delete a previously created bridge */
extern dladm_status_t dladm_bridge_delete(dladm_handle_t, const char *,
uint32_t);
/* Retrieve bridge state from running bridge daemon and get bridge port list */
extern dladm_status_t dladm_bridge_state(const char *, UID_STP_STATE_T *);
extern datalink_id_t *dladm_bridge_get_portlist(const char *, uint_t *);
extern void dladm_bridge_free_portlist(datalink_id_t *);
/* Set/remove bridge link membership and retreive bridge from member link */
extern dladm_status_t dladm_bridge_setlink(dladm_handle_t, datalink_id_t,
const char *);
extern dladm_status_t dladm_bridge_getlink(dladm_handle_t, datalink_id_t,
char *, size_t);
/* Retrieve bridge port status */
extern dladm_status_t dladm_bridge_link_state(dladm_handle_t, datalink_id_t,
UID_STP_PORT_STATE_T *);
/* Check valid bridge name */
extern boolean_t dladm_valid_bridgename(const char *);
/* Convert bridge observability node name to bridge name */
extern boolean_t dladm_observe_to_bridge(char *);
/* Retrieve bridge forwarding table entries */
extern bridge_listfwd_t *dladm_bridge_get_fwdtable(dladm_handle_t, const char *,
uint_t *);
extern void dladm_bridge_free_fwdtable(bridge_listfwd_t *);
/* Retrive TRILL nicknames list */
extern trill_listnick_t *dladm_bridge_get_trillnick(const char *, uint_t *);
extern void dladm_bridge_free_trillnick(trill_listnick_t *);
/* Store and retrieve TRILL nickname from TRILL SMF service configuration */
extern uint16_t dladm_bridge_get_nick(const char *);
extern void dladm_bridge_set_nick(const char *, uint16_t);
/* Retrieve undocumented private properties from bridge SMF service config */
extern dladm_status_t dladm_bridge_get_privprop(const char *,
boolean_t *, uint32_t *);
/* Internal to libdladm */
extern dladm_status_t dladm_bridge_get_port_cfg(dladm_handle_t, datalink_id_t,
int, int *);
extern dladm_status_t dladm_bridge_get_forwarding(dladm_handle_t,
datalink_id_t, uint_t *);
extern dladm_status_t dladm_bridge_refresh(dladm_handle_t, datalink_id_t);
/* Bridge connection; used only between libdladm and bridged for status */
#define DOOR_DIRNAME "/var/run/bridge_door"
typedef enum bridge_door_type_e {
bdcBridgeGetConfig,
bdcBridgeGetState,
bdcBridgeGetPorts,
bdcBridgeGetRefreshCount,
bdcPortGetConfig,
bdcPortGetState,
bdcPortGetForwarding
} bridge_door_type_t;
typedef struct bridge_door_cmd_s {
bridge_door_type_t bdc_type;
datalink_id_t bdc_linkid;
} bridge_door_cmd_t;
typedef struct bridge_door_cfg_s {
UID_STP_CFG_T bdcf_cfg;
dladm_bridge_prot_t bdcf_prot;
} bridge_door_cfg_t;
#ifdef __cplusplus
}
#endif
#endif /* _LIBDLBRIDGE_H */
|