14eaa4710SRishi Srivatsavai /************************************************************************
24eaa4710SRishi Srivatsavai  * RSTP library - Rapid Spanning Tree (802.1t, 802.1w)
34eaa4710SRishi Srivatsavai  * Copyright (C) 2001-2003 Optical Access
44eaa4710SRishi Srivatsavai  * Author: Alex Rozin
54eaa4710SRishi Srivatsavai  *
64eaa4710SRishi Srivatsavai  * This file is part of RSTP library.
74eaa4710SRishi Srivatsavai  *
84eaa4710SRishi Srivatsavai  * RSTP library is free software; you can redistribute it and/or modify it
94eaa4710SRishi Srivatsavai  * under the terms of the GNU Lesser General Public License as published by the
104eaa4710SRishi Srivatsavai  * Free Software Foundation; version 2.1
114eaa4710SRishi Srivatsavai  *
124eaa4710SRishi Srivatsavai  * RSTP library is distributed in the hope that it will be useful, but
134eaa4710SRishi Srivatsavai  * WITHOUT ANY WARRANTY; without even the implied warranty of
144eaa4710SRishi Srivatsavai  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
154eaa4710SRishi Srivatsavai  * General Public License for more details.
164eaa4710SRishi Srivatsavai  *
174eaa4710SRishi Srivatsavai  * You should have received a copy of the GNU Lesser General Public License
184eaa4710SRishi Srivatsavai  * along with RSTP library; see the file COPYING.  If not, write to the Free
194eaa4710SRishi Srivatsavai  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
204eaa4710SRishi Srivatsavai  * 02111-1307, USA.
214eaa4710SRishi Srivatsavai  **********************************************************************/
224eaa4710SRishi Srivatsavai 
234eaa4710SRishi Srivatsavai /* External management communication API definitions */
244eaa4710SRishi Srivatsavai 
254eaa4710SRishi Srivatsavai #ifndef _UID_STP_H__
264eaa4710SRishi Srivatsavai #define _UID_STP_H__
274eaa4710SRishi Srivatsavai 
284eaa4710SRishi Srivatsavai #define STP_DBG 1
294eaa4710SRishi Srivatsavai 
304eaa4710SRishi Srivatsavai #define NAME_LEN    20
314eaa4710SRishi Srivatsavai 
324eaa4710SRishi Srivatsavai typedef enum {
334eaa4710SRishi Srivatsavai   STP_DISABLED,
344eaa4710SRishi Srivatsavai   STP_ENABLED
354eaa4710SRishi Srivatsavai } UID_STP_MODE_T;
364eaa4710SRishi Srivatsavai 
374eaa4710SRishi Srivatsavai typedef struct {
384eaa4710SRishi Srivatsavai   unsigned short  prio;
394eaa4710SRishi Srivatsavai   unsigned char   addr[6];
404eaa4710SRishi Srivatsavai } UID_BRIDGE_ID_T;
414eaa4710SRishi Srivatsavai 
424eaa4710SRishi Srivatsavai typedef struct {
434eaa4710SRishi Srivatsavai   char      vlan_name[NAME_LEN]; /* name of the VLAN, key of the bridge */
444eaa4710SRishi Srivatsavai   char      action; /* 1-create, 0- delete */
454eaa4710SRishi Srivatsavai } UID_STP_BR_CTRL_T;
464eaa4710SRishi Srivatsavai 
474eaa4710SRishi Srivatsavai #define BR_CFG_STATE        (1L << 0)
484eaa4710SRishi Srivatsavai #define BR_CFG_PRIO         (1L << 1)
494eaa4710SRishi Srivatsavai #define BR_CFG_AGE          (1L << 2)
504eaa4710SRishi Srivatsavai #define BR_CFG_HELLO        (1L << 3)
514eaa4710SRishi Srivatsavai #define BR_CFG_DELAY        (1L << 4)
524eaa4710SRishi Srivatsavai #define BR_CFG_FORCE_VER    (1L << 5)
534eaa4710SRishi Srivatsavai #define BR_CFG_AGE_MODE     (1L << 6)
544eaa4710SRishi Srivatsavai #define BR_CFG_AGE_TIME     (1L << 7)
554eaa4710SRishi Srivatsavai #define BR_CFG_HOLD_TIME    (1L << 8)
564eaa4710SRishi Srivatsavai #define BR_CFG_ALL BR_CFG_STATE     | \
574eaa4710SRishi Srivatsavai                    BR_CFG_PRIO      | \
584eaa4710SRishi Srivatsavai                    BR_CFG_AGE       | \
594eaa4710SRishi Srivatsavai                    BR_CFG_HELLO     | \
604eaa4710SRishi Srivatsavai                    BR_CFG_DELAY     | \
614eaa4710SRishi Srivatsavai                    BR_CFG_FORCE_VER | \
624eaa4710SRishi Srivatsavai                    BR_CFG_AGE_MODE  | \
634eaa4710SRishi Srivatsavai                    BR_CFG_AGE_TIME  | \
644eaa4710SRishi Srivatsavai                    BR_CFG_HOLD_TIME
654eaa4710SRishi Srivatsavai 
664eaa4710SRishi Srivatsavai typedef struct {
674eaa4710SRishi Srivatsavai   /* service data */
684eaa4710SRishi Srivatsavai   unsigned long     field_mask; /* which fields to change */
694eaa4710SRishi Srivatsavai   UID_STP_MODE_T    stp_enabled;
704eaa4710SRishi Srivatsavai   char              vlan_name[NAME_LEN]; /* name of the VLAN, key of the bridge */
714eaa4710SRishi Srivatsavai 
724eaa4710SRishi Srivatsavai   /* protocol data */
734eaa4710SRishi Srivatsavai   int           bridge_priority;
744eaa4710SRishi Srivatsavai   int           max_age;
754eaa4710SRishi Srivatsavai   int           hello_time;
764eaa4710SRishi Srivatsavai   int           forward_delay;
774eaa4710SRishi Srivatsavai   int           force_version;
784eaa4710SRishi Srivatsavai   int           hold_time;
794eaa4710SRishi Srivatsavai } UID_STP_CFG_T;
804eaa4710SRishi Srivatsavai 
814eaa4710SRishi Srivatsavai typedef struct {
824eaa4710SRishi Srivatsavai   /* service data */
834eaa4710SRishi Srivatsavai   char              vlan_name[NAME_LEN]; /* name of the VLAN, key of the bridge */
844eaa4710SRishi Srivatsavai   unsigned long     vlan_id;
854eaa4710SRishi Srivatsavai   UID_STP_MODE_T    stp_enabled;
864eaa4710SRishi Srivatsavai 
874eaa4710SRishi Srivatsavai   /* protocol data */
884eaa4710SRishi Srivatsavai   UID_BRIDGE_ID_T   designated_root;
894eaa4710SRishi Srivatsavai   unsigned long     root_path_cost;
904eaa4710SRishi Srivatsavai 
914eaa4710SRishi Srivatsavai   unsigned long     timeSince_Topo_Change; /* 14.8.1.1.3.b: TBD */
924eaa4710SRishi Srivatsavai   unsigned long     Topo_Change_Count;     /* 14.8.1.1.3.c: TBD */
934eaa4710SRishi Srivatsavai   unsigned char     Topo_Change;           /* 14.8.1.1.3.d: TBD */
944eaa4710SRishi Srivatsavai 
954eaa4710SRishi Srivatsavai   unsigned short    root_port;
964eaa4710SRishi Srivatsavai   int               max_age;
974eaa4710SRishi Srivatsavai   int               hello_time;
984eaa4710SRishi Srivatsavai   int               forward_delay;
994eaa4710SRishi Srivatsavai   UID_BRIDGE_ID_T   bridge_id;
1004eaa4710SRishi Srivatsavai } UID_STP_STATE_T;
1014eaa4710SRishi Srivatsavai 
1024eaa4710SRishi Srivatsavai typedef enum {
1034eaa4710SRishi Srivatsavai   UID_PORT_DISABLED = 0,
1044eaa4710SRishi Srivatsavai   UID_PORT_DISCARDING,
1054eaa4710SRishi Srivatsavai   UID_PORT_LEARNING,
1064eaa4710SRishi Srivatsavai   UID_PORT_FORWARDING,
1074eaa4710SRishi Srivatsavai   UID_PORT_NON_STP,
1084eaa4710SRishi Srivatsavai   UID_PORT_BADSDU
1094eaa4710SRishi Srivatsavai } RSTP_PORT_STATE;
1104eaa4710SRishi Srivatsavai 
1114eaa4710SRishi Srivatsavai typedef unsigned short  UID_PORT_ID;
1124eaa4710SRishi Srivatsavai 
1134eaa4710SRishi Srivatsavai typedef enum {
1144eaa4710SRishi Srivatsavai   P2P_FORCE_TRUE,
1154eaa4710SRishi Srivatsavai   P2P_FORCE_FALSE,
1164eaa4710SRishi Srivatsavai   P2P_AUTO
1174eaa4710SRishi Srivatsavai } ADMIN_P2P_T;
1184eaa4710SRishi Srivatsavai 
1194eaa4710SRishi Srivatsavai #define PT_CFG_STATE    (1L << 0)
1204eaa4710SRishi Srivatsavai #define PT_CFG_COST     (1L << 1)
1214eaa4710SRishi Srivatsavai #define PT_CFG_PRIO     (1L << 2)
1224eaa4710SRishi Srivatsavai #define PT_CFG_P2P      (1L << 3)
1234eaa4710SRishi Srivatsavai #define PT_CFG_EDGE     (1L << 4)
1244eaa4710SRishi Srivatsavai #define PT_CFG_MCHECK   (1L << 5)
1254eaa4710SRishi Srivatsavai #define PT_CFG_NON_STP  (1L << 6)
1264eaa4710SRishi Srivatsavai #ifdef STP_DBG
1274eaa4710SRishi Srivatsavai #define PT_CFG_DBG_SKIP_RX (1L << 16)
1284eaa4710SRishi Srivatsavai #define PT_CFG_DBG_SKIP_TX (1L << 17)
1294eaa4710SRishi Srivatsavai #endif
1304eaa4710SRishi Srivatsavai 
1314eaa4710SRishi Srivatsavai #define PT_CFG_ALL PT_CFG_STATE  | \
1324eaa4710SRishi Srivatsavai                    PT_CFG_COST   | \
1334eaa4710SRishi Srivatsavai                    PT_CFG_PRIO   | \
1344eaa4710SRishi Srivatsavai                    PT_CFG_P2P    | \
1354eaa4710SRishi Srivatsavai                    PT_CFG_EDGE   | \
1364eaa4710SRishi Srivatsavai                    PT_CFG_MCHECK | \
137*55fea89dSDan Cross                    PT_CFG_NON_STP
1384eaa4710SRishi Srivatsavai 
1394eaa4710SRishi Srivatsavai #define ADMIN_PORT_PATH_COST_AUTO   0
1404eaa4710SRishi Srivatsavai 
1414eaa4710SRishi Srivatsavai typedef struct {
1424eaa4710SRishi Srivatsavai   /* service data */
1434eaa4710SRishi Srivatsavai   unsigned long field_mask; /* which fields to change */
1444eaa4710SRishi Srivatsavai   char          vlan_name[NAME_LEN]; /* name of the VLAN, key of the bridge */
1454eaa4710SRishi Srivatsavai 
1464eaa4710SRishi Srivatsavai   /* protocol data */
1474eaa4710SRishi Srivatsavai   int           port_priority;
1484eaa4710SRishi Srivatsavai   unsigned long admin_port_path_cost; /* ADMIN_PORT_PATH_COST_AUTO - auto sence */
1494eaa4710SRishi Srivatsavai   ADMIN_P2P_T   admin_point2point;
1504eaa4710SRishi Srivatsavai   unsigned char admin_edge;
1514eaa4710SRishi Srivatsavai   unsigned char admin_non_stp; /* 1- doesn't participate in STP, 1 - regular */
1524eaa4710SRishi Srivatsavai #ifdef STP_DBG
1534eaa4710SRishi Srivatsavai   unsigned int	skip_rx;
1544eaa4710SRishi Srivatsavai   unsigned int	skip_tx;
1554eaa4710SRishi Srivatsavai #endif
1564eaa4710SRishi Srivatsavai 
1574eaa4710SRishi Srivatsavai } UID_STP_PORT_CFG_T;
1584eaa4710SRishi Srivatsavai 
1594eaa4710SRishi Srivatsavai typedef struct {
1604eaa4710SRishi Srivatsavai   /* service data */
1614eaa4710SRishi Srivatsavai   char              vlan_name[NAME_LEN]; /* name of the VLAN, key of the bridge */
1624eaa4710SRishi Srivatsavai   unsigned int      port_no; /* key of the entry */
1634eaa4710SRishi Srivatsavai 
1644eaa4710SRishi Srivatsavai   /* protocol data */
1654eaa4710SRishi Srivatsavai   UID_PORT_ID       port_id;
1664eaa4710SRishi Srivatsavai   RSTP_PORT_STATE   state;
1674eaa4710SRishi Srivatsavai   unsigned long     path_cost;
1684eaa4710SRishi Srivatsavai 
1694eaa4710SRishi Srivatsavai   UID_BRIDGE_ID_T   designated_root;
1704eaa4710SRishi Srivatsavai   unsigned long     designated_cost;
1714eaa4710SRishi Srivatsavai   UID_BRIDGE_ID_T   designated_bridge;
1724eaa4710SRishi Srivatsavai   UID_PORT_ID       designated_port;
1734eaa4710SRishi Srivatsavai 
1744eaa4710SRishi Srivatsavai #if 0
1754eaa4710SRishi Srivatsavai   int               infoIs;
1764eaa4710SRishi Srivatsavai   unsigned short    handshake_flags;
1774eaa4710SRishi Srivatsavai #endif
1784eaa4710SRishi Srivatsavai 
1794eaa4710SRishi Srivatsavai   unsigned long     rx_cfg_bpdu_cnt;
1804eaa4710SRishi Srivatsavai   unsigned long     rx_rstp_bpdu_cnt;
1814eaa4710SRishi Srivatsavai   unsigned long     rx_tcn_bpdu_cnt;
1824eaa4710SRishi Srivatsavai   int               fdWhile;      /* 17.15.1 */
1834eaa4710SRishi Srivatsavai   int               helloWhen;    /* 17.15.2 */
1844eaa4710SRishi Srivatsavai   int               mdelayWhile;  /* 17.15.3 */
1854eaa4710SRishi Srivatsavai   int               rbWhile;      /* 17.15.4 */
1864eaa4710SRishi Srivatsavai   int               rcvdInfoWhile;/* 17.15.5 */
1874eaa4710SRishi Srivatsavai   int               rrWhile;      /* 17.15.6 */
1884eaa4710SRishi Srivatsavai   int               tcWhile;      /* 17.15.7 */
1894eaa4710SRishi Srivatsavai   int               txCount;      /* 17.18.40 */
1904eaa4710SRishi Srivatsavai   int               lnkWhile;
1914eaa4710SRishi Srivatsavai 
1924eaa4710SRishi Srivatsavai   unsigned long     uptime;       /* 14.8.2.1.3.a */
1934eaa4710SRishi Srivatsavai   unsigned long     oper_port_path_cost;
1944eaa4710SRishi Srivatsavai   unsigned char     role;
1954eaa4710SRishi Srivatsavai   unsigned char     oper_point2point;
1964eaa4710SRishi Srivatsavai   unsigned char     oper_edge;
1974eaa4710SRishi Srivatsavai   unsigned char     oper_stp_neigb;
1984eaa4710SRishi Srivatsavai   unsigned char     top_change_ack;
1994eaa4710SRishi Srivatsavai   unsigned char     tc;
2004eaa4710SRishi Srivatsavai } UID_STP_PORT_STATE_T;
2014eaa4710SRishi Srivatsavai 
2024eaa4710SRishi Srivatsavai #endif
203