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