2N/A/*
2N/A * CDDL HEADER START
2N/A *
2N/A * The contents of this file are subject to the terms of the
2N/A * Common Development and Distribution License (the "License").
2N/A * You may not use this file except in compliance with the License.
2N/A *
2N/A * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2N/A * or http://www.opensolaris.org/os/licensing.
2N/A * See the License for the specific language governing permissions
2N/A * and limitations under the License.
2N/A *
2N/A * When distributing Covered Code, include this CDDL HEADER in each
2N/A * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2N/A * If applicable, add the following below this CDDL HEADER, with the
2N/A * fields enclosed by brackets "[]" replaced with your own identifying
2N/A * information: Portions Copyright [yyyy] [name of copyright owner]
2N/A *
2N/A * CDDL HEADER END
2N/A */
2N/A/*
2N/A * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
2N/A */
2N/A
2N/A#ifndef _LIBDLBRIDGE_H
2N/A#define _LIBDLBRIDGE_H
2N/A
2N/A/*
2N/A * This file includes structures, macros and routines used by bridge
2N/A * administration.
2N/A */
2N/A
2N/A#include <sys/types.h>
2N/A#include <libdladm.h>
2N/A#include <uid_stp.h>
2N/A#include <net/bridge.h>
2N/A#include <net/trill.h>
2N/A#include <paths.h>
2N/A
2N/A#ifdef __cplusplus
2N/Aextern "C" {
2N/A#endif
2N/A
2N/Atypedef enum {
2N/A DLADM_BRIDGE_PROT_UNKNOWN = 0, /* internal only */
2N/A DLADM_BRIDGE_PROT_STP,
2N/A DLADM_BRIDGE_PROT_TRILL
2N/A} dladm_bridge_prot_t;
2N/A
2N/A/* Utility functions to accept bridge protection options */
2N/Aextern dladm_status_t dladm_bridge_str2prot(const char *,
2N/A dladm_bridge_prot_t *);
2N/Aextern const char *dladm_bridge_prot2str(dladm_bridge_prot_t);
2N/A
2N/A/* Retrieve bridge properties from SMF */
2N/Aextern dladm_status_t dladm_bridge_get_properties(const char *,
2N/A UID_STP_CFG_T *, dladm_bridge_prot_t *);
2N/Aextern dladm_status_t dladm_bridge_run_properties(const char *,
2N/A UID_STP_CFG_T *, dladm_bridge_prot_t *);
2N/A
2N/A/* Create new bridge and configure SMF properties */
2N/Aextern dladm_status_t dladm_bridge_configure(dladm_handle_t, const char *,
2N/A const UID_STP_CFG_T *, dladm_bridge_prot_t, uint32_t);
2N/A
2N/A/* Enable a newly created bridge in SMF */
2N/Aextern dladm_status_t dladm_bridge_enable(const char *);
2N/A/* Delete a previously created bridge */
2N/Aextern dladm_status_t dladm_bridge_delete(dladm_handle_t, const char *,
2N/A uint32_t);
2N/A
2N/A/* Bring up a persistently created bridge */
2N/Aextern dladm_status_t dladm_bridge_up(dladm_handle_t, datalink_id_t);
2N/A/* Bring down a running bridge */
2N/Aextern dladm_status_t dladm_bridge_down(dladm_handle_t, datalink_id_t);
2N/A
2N/A/* Retrieve bridge state from running bridge daemon and get bridge port list */
2N/Aextern dladm_status_t dladm_bridge_state(const char *, UID_STP_STATE_T *);
2N/Aextern datalink_id_t *dladm_bridge_get_portlist(const char *, uint_t *);
2N/Aextern void dladm_bridge_free_portlist(datalink_id_t *);
2N/A
2N/A/* Set/remove bridge link membership and retreive bridge from member link */
2N/Aextern dladm_status_t dladm_bridge_setlink(dladm_handle_t, datalink_id_t,
2N/A const char *);
2N/Aextern dladm_status_t dladm_bridge_getlink(dladm_handle_t, datalink_id_t,
2N/A char *, size_t);
2N/A
2N/A/* Retrieve bridge port status */
2N/Aextern dladm_status_t dladm_bridge_link_state(dladm_handle_t, datalink_id_t,
2N/A UID_STP_PORT_STATE_T *);
2N/A/* Check valid bridge name */
2N/Aextern boolean_t dladm_valid_bridgename(const char *);
2N/A/* Convert bridge observability node name to bridge name */
2N/Aextern boolean_t dladm_observe_to_bridge(char *);
2N/A/* Retrieve bridge forwarding table entries */
2N/Aextern bridge_listfwd_t *dladm_bridge_get_fwdtable(dladm_handle_t, const char *,
2N/A uint_t *);
2N/Aextern void dladm_bridge_free_fwdtable(bridge_listfwd_t *);
2N/A
2N/A/* Retrive TRILL nicknames list */
2N/Aextern trill_listnick_t *dladm_bridge_get_trillnick(const char *, uint_t *);
2N/Aextern void dladm_bridge_free_trillnick(trill_listnick_t *);
2N/A/* Store and retrieve TRILL nickname from TRILL SMF service configuration */
2N/Aextern uint16_t dladm_bridge_get_nick(const char *);
2N/Aextern void dladm_bridge_set_nick(const char *, uint16_t);
2N/A/* Retrieve undocumented private properties from bridge SMF service config */
2N/Aextern dladm_status_t dladm_bridge_get_privprop(const char *,
2N/A boolean_t *, uint32_t *);
2N/A
2N/A/* Internal to libdladm */
2N/Aextern dladm_status_t dladm_bridge_get_port_cfg(dladm_handle_t, datalink_id_t,
2N/A int, int *);
2N/Aextern dladm_status_t dladm_bridge_get_forwarding(dladm_handle_t,
2N/A datalink_id_t, uint_t *);
2N/Aextern dladm_status_t dladm_bridge_refresh(dladm_handle_t, datalink_id_t);
2N/A
2N/A/* Bridge connection; used only between libdladm and bridged for status */
2N/A#define DOOR_DIRNAME _PATH_SYSVOL "/bridge_door"
2N/Atypedef enum bridge_door_type_e {
2N/A bdcBridgeGetConfig,
2N/A bdcBridgeGetState,
2N/A bdcBridgeGetPorts,
2N/A bdcBridgeGetRefreshCount,
2N/A bdcPortGetConfig,
2N/A bdcPortGetState,
2N/A bdcPortGetForwarding
2N/A} bridge_door_type_t;
2N/A
2N/Atypedef struct bridge_door_cmd_s {
2N/A bridge_door_type_t bdc_type;
2N/A datalink_id_t bdc_linkid;
2N/A} bridge_door_cmd_t;
2N/A
2N/Atypedef struct bridge_door_cfg_s {
2N/A UID_STP_CFG_T bdcf_cfg;
2N/A dladm_bridge_prot_t bdcf_prot;
2N/A} bridge_door_cfg_t;
2N/A
2N/A#ifdef __cplusplus
2N/A}
2N/A#endif
2N/A
2N/A#endif /* _LIBDLBRIDGE_H */