OpenSolaris_b135/lib/librstp/common/uid_stp.h
/************************************************************************
* RSTP library - Rapid Spanning Tree (802.1t, 802.1w)
* Copyright (C) 2001-2003 Optical Access
* Author: Alex Rozin
*
* This file is part of RSTP library.
*
* RSTP library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation; version 2.1
*
* RSTP library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
* General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with RSTP library; see the file COPYING. If not, write to the Free
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
**********************************************************************/
/* External management communication API definitions */
#ifndef _UID_STP_H__
#define _UID_STP_H__
#define STP_DBG 1
#define NAME_LEN 20
typedef enum {
STP_DISABLED,
STP_ENABLED
} UID_STP_MODE_T;
typedef struct {
unsigned short prio;
unsigned char addr[6];
} UID_BRIDGE_ID_T;
typedef struct {
char vlan_name[NAME_LEN]; /* name of the VLAN, key of the bridge */
char action; /* 1-create, 0- delete */
} UID_STP_BR_CTRL_T;
#define BR_CFG_STATE (1L << 0)
#define BR_CFG_PRIO (1L << 1)
#define BR_CFG_AGE (1L << 2)
#define BR_CFG_HELLO (1L << 3)
#define BR_CFG_DELAY (1L << 4)
#define BR_CFG_FORCE_VER (1L << 5)
#define BR_CFG_AGE_MODE (1L << 6)
#define BR_CFG_AGE_TIME (1L << 7)
#define BR_CFG_HOLD_TIME (1L << 8)
#define BR_CFG_ALL BR_CFG_STATE | \
BR_CFG_PRIO | \
BR_CFG_AGE | \
BR_CFG_HELLO | \
BR_CFG_DELAY | \
BR_CFG_FORCE_VER | \
BR_CFG_AGE_MODE | \
BR_CFG_AGE_TIME | \
BR_CFG_HOLD_TIME
typedef struct {
/* service data */
unsigned long field_mask; /* which fields to change */
UID_STP_MODE_T stp_enabled;
char vlan_name[NAME_LEN]; /* name of the VLAN, key of the bridge */
/* protocol data */
int bridge_priority;
int max_age;
int hello_time;
int forward_delay;
int force_version;
int hold_time;
} UID_STP_CFG_T;
typedef struct {
/* service data */
char vlan_name[NAME_LEN]; /* name of the VLAN, key of the bridge */
unsigned long vlan_id;
UID_STP_MODE_T stp_enabled;
/* protocol data */
UID_BRIDGE_ID_T designated_root;
unsigned long root_path_cost;
unsigned long timeSince_Topo_Change; /* 14.8.1.1.3.b: TBD */
unsigned long Topo_Change_Count; /* 14.8.1.1.3.c: TBD */
unsigned char Topo_Change; /* 14.8.1.1.3.d: TBD */
unsigned short root_port;
int max_age;
int hello_time;
int forward_delay;
UID_BRIDGE_ID_T bridge_id;
} UID_STP_STATE_T;
typedef enum {
UID_PORT_DISABLED = 0,
UID_PORT_DISCARDING,
UID_PORT_LEARNING,
UID_PORT_FORWARDING,
UID_PORT_NON_STP,
UID_PORT_BADSDU
} RSTP_PORT_STATE;
typedef unsigned short UID_PORT_ID;
typedef enum {
P2P_FORCE_TRUE,
P2P_FORCE_FALSE,
P2P_AUTO
} ADMIN_P2P_T;
#define PT_CFG_STATE (1L << 0)
#define PT_CFG_COST (1L << 1)
#define PT_CFG_PRIO (1L << 2)
#define PT_CFG_P2P (1L << 3)
#define PT_CFG_EDGE (1L << 4)
#define PT_CFG_MCHECK (1L << 5)
#define PT_CFG_NON_STP (1L << 6)
#ifdef STP_DBG
#define PT_CFG_DBG_SKIP_RX (1L << 16)
#define PT_CFG_DBG_SKIP_TX (1L << 17)
#endif
#define PT_CFG_ALL PT_CFG_STATE | \
PT_CFG_COST | \
PT_CFG_PRIO | \
PT_CFG_P2P | \
PT_CFG_EDGE | \
PT_CFG_MCHECK | \
PT_CFG_NON_STP
#define ADMIN_PORT_PATH_COST_AUTO 0
typedef struct {
/* service data */
unsigned long field_mask; /* which fields to change */
char vlan_name[NAME_LEN]; /* name of the VLAN, key of the bridge */
/* protocol data */
int port_priority;
unsigned long admin_port_path_cost; /* ADMIN_PORT_PATH_COST_AUTO - auto sence */
ADMIN_P2P_T admin_point2point;
unsigned char admin_edge;
unsigned char admin_non_stp; /* 1- doesn't participate in STP, 1 - regular */
#ifdef STP_DBG
unsigned int skip_rx;
unsigned int skip_tx;
#endif
} UID_STP_PORT_CFG_T;
typedef struct {
/* service data */
char vlan_name[NAME_LEN]; /* name of the VLAN, key of the bridge */
unsigned int port_no; /* key of the entry */
/* protocol data */
UID_PORT_ID port_id;
RSTP_PORT_STATE state;
unsigned long path_cost;
UID_BRIDGE_ID_T designated_root;
unsigned long designated_cost;
UID_BRIDGE_ID_T designated_bridge;
UID_PORT_ID designated_port;
#if 0
int infoIs;
unsigned short handshake_flags;
#endif
unsigned long rx_cfg_bpdu_cnt;
unsigned long rx_rstp_bpdu_cnt;
unsigned long rx_tcn_bpdu_cnt;
int fdWhile; /* 17.15.1 */
int helloWhen; /* 17.15.2 */
int mdelayWhile; /* 17.15.3 */
int rbWhile; /* 17.15.4 */
int rcvdInfoWhile;/* 17.15.5 */
int rrWhile; /* 17.15.6 */
int tcWhile; /* 17.15.7 */
int txCount; /* 17.18.40 */
int lnkWhile;
unsigned long uptime; /* 14.8.2.1.3.a */
unsigned long oper_port_path_cost;
unsigned char role;
unsigned char oper_point2point;
unsigned char oper_edge;
unsigned char oper_stp_neigb;
unsigned char top_change_ack;
unsigned char tc;
} UID_STP_PORT_STATE_T;
#endif