xref: /illumos-gate/usr/src/lib/librstp/common/stp_in.h (revision 55fea89d)
1*55fea89dSDan Cross /************************************************************************
2*55fea89dSDan Cross  * RSTP library - Rapid Spanning Tree (802.1t, 802.1w)
3*55fea89dSDan Cross  * Copyright (C) 2001-2003 Optical Access
4*55fea89dSDan Cross  * Author: Alex Rozin
5*55fea89dSDan Cross  *
6*55fea89dSDan Cross  * This file is part of RSTP library.
7*55fea89dSDan Cross  *
8*55fea89dSDan Cross  * RSTP library is free software; you can redistribute it and/or modify it
9*55fea89dSDan Cross  * under the terms of the GNU Lesser General Public License as published by the
10*55fea89dSDan Cross  * Free Software Foundation; version 2.1
11*55fea89dSDan Cross  *
12*55fea89dSDan Cross  * RSTP library is distributed in the hope that it will be useful, but
13*55fea89dSDan Cross  * WITHOUT ANY WARRANTY; without even the implied warranty of
14*55fea89dSDan Cross  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
15*55fea89dSDan Cross  * General Public License for more details.
16*55fea89dSDan Cross  *
17*55fea89dSDan Cross  * You should have received a copy of the GNU Lesser General Public License
18*55fea89dSDan Cross  * along with RSTP library; see the file COPYING.  If not, write to the Free
19*55fea89dSDan Cross  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20*55fea89dSDan Cross  * 02111-1307, USA.
214eaa4710SRishi Srivatsavai  **********************************************************************/
224eaa4710SRishi Srivatsavai 
234eaa4710SRishi Srivatsavai  /* This file contains prototypes for API from an operation
244eaa4710SRishi Srivatsavai     system to the RSTP */
25*55fea89dSDan Cross 
264eaa4710SRishi Srivatsavai #ifndef _STP_API_H__
274eaa4710SRishi Srivatsavai #define _STP_API_H__
284eaa4710SRishi Srivatsavai 
294eaa4710SRishi Srivatsavai #include <sys/types.h>
304eaa4710SRishi Srivatsavai 
314eaa4710SRishi Srivatsavai #define STP_DBG 1
324eaa4710SRishi Srivatsavai 
334eaa4710SRishi Srivatsavai /************************
344eaa4710SRishi Srivatsavai  * Common base constants
354eaa4710SRishi Srivatsavai  ************************/
364eaa4710SRishi Srivatsavai 
374eaa4710SRishi Srivatsavai #ifndef INOUT
384eaa4710SRishi Srivatsavai #  define IN      /* consider as comments near 'input' parameters */
394eaa4710SRishi Srivatsavai #  define OUT     /* consider as comments near 'output' parameters */
404eaa4710SRishi Srivatsavai #  define INOUT   /* consider as comments near 'input/output' parameters */
414eaa4710SRishi Srivatsavai #endif
424eaa4710SRishi Srivatsavai 
434eaa4710SRishi Srivatsavai #ifndef Zero
444eaa4710SRishi Srivatsavai #  define Zero        0
454eaa4710SRishi Srivatsavai #  define One         1
464eaa4710SRishi Srivatsavai #endif
474eaa4710SRishi Srivatsavai 
484eaa4710SRishi Srivatsavai #ifndef Bool
494eaa4710SRishi Srivatsavai #  define Bool        int
504eaa4710SRishi Srivatsavai #  define False       0
514eaa4710SRishi Srivatsavai #  define True        1
524eaa4710SRishi Srivatsavai #endif
534eaa4710SRishi Srivatsavai 
544eaa4710SRishi Srivatsavai /********************************************
554eaa4710SRishi Srivatsavai  * constants: default values and linitations
564eaa4710SRishi Srivatsavai  *********************************************/
57*55fea89dSDan Cross 
584eaa4710SRishi Srivatsavai /* bridge configuration */
594eaa4710SRishi Srivatsavai 
604eaa4710SRishi Srivatsavai #define DEF_BR_PRIO 32768
614eaa4710SRishi Srivatsavai #define MIN_BR_PRIO 0
624eaa4710SRishi Srivatsavai #define MAX_BR_PRIO 61440
634eaa4710SRishi Srivatsavai 
644eaa4710SRishi Srivatsavai #define DEF_BR_HELLOT   2
654eaa4710SRishi Srivatsavai #define MIN_BR_HELLOT   1
664eaa4710SRishi Srivatsavai #define MAX_BR_HELLOT   10
674eaa4710SRishi Srivatsavai 
684eaa4710SRishi Srivatsavai #define DEF_BR_MAXAGE   20
694eaa4710SRishi Srivatsavai #define MIN_BR_MAXAGE   6
704eaa4710SRishi Srivatsavai #define MAX_BR_MAXAGE   40
714eaa4710SRishi Srivatsavai 
724eaa4710SRishi Srivatsavai #define DEF_BR_FWDELAY  15
734eaa4710SRishi Srivatsavai #define MIN_BR_FWDELAY  4
744eaa4710SRishi Srivatsavai #define MAX_BR_FWDELAY  30
754eaa4710SRishi Srivatsavai 
764eaa4710SRishi Srivatsavai #define	IEEE_TIMER_SCALE	256
774eaa4710SRishi Srivatsavai 
784eaa4710SRishi Srivatsavai /* Note that this works with unscaled values */
794eaa4710SRishi Srivatsavai #define	CHECK_BRIDGE_CONFIG(cfg) \
804eaa4710SRishi Srivatsavai 	(2 * (cfg.forward_delay - 1) >= cfg.max_age && \
814eaa4710SRishi Srivatsavai 	cfg.max_age >= 2 * (cfg.hello_time + 1))
824eaa4710SRishi Srivatsavai 
834eaa4710SRishi Srivatsavai /*
844eaa4710SRishi Srivatsavai  * These macros provide limits and tests for displaying comprehensible errors.
854eaa4710SRishi Srivatsavai  */
864eaa4710SRishi Srivatsavai #define	NO_MAXAGE(cfg) ((cfg.forward_delay - 1) < (cfg.hello_time + 1))
874eaa4710SRishi Srivatsavai #define	MIN_FWDELAY_NOM(cfg)	\
884eaa4710SRishi Srivatsavai 	(cfg.hello_time < MIN_BR_FWDELAY - 2 ? MIN_BR_FWDELAY : \
894eaa4710SRishi Srivatsavai 	cfg.hello_time + 2)
904eaa4710SRishi Srivatsavai #define	MAX_HELLOTIME_NOM(cfg)	\
914eaa4710SRishi Srivatsavai 	(cfg.forward_delay > MAX_BR_HELLOT + 2 ? MAX_BR_HELLOT : \
924eaa4710SRishi Srivatsavai 	cfg.forward_delay - 2)
934eaa4710SRishi Srivatsavai 
944eaa4710SRishi Srivatsavai #define	SMALL_MAXAGE(cfg)	(cfg.max_age < 2 * (cfg.hello_time + 1))
954eaa4710SRishi Srivatsavai #define	MIN_MAXAGE(cfg)	\
964eaa4710SRishi Srivatsavai 	(cfg.hello_time < (MIN_BR_MAXAGE / 2 - 1) ? MIN_BR_MAXAGE : \
974eaa4710SRishi Srivatsavai 	(2 * (cfg.hello_time + 1)))
984eaa4710SRishi Srivatsavai #define	MAX_HELLOTIME(cfg)	\
994eaa4710SRishi Srivatsavai 	(cfg.max_age > 2 * (MAX_BR_HELLOT + 1) ? MAX_BR_HELLOT : \
1004eaa4710SRishi Srivatsavai 	(cfg.max_age / 2 - 1))
1014eaa4710SRishi Srivatsavai 
1024eaa4710SRishi Srivatsavai #define	MIN_FWDELAY(cfg)	(cfg.max_age / 2 + 1)
1034eaa4710SRishi Srivatsavai #define	MAX_MAXAGE(cfg)	\
1044eaa4710SRishi Srivatsavai 	(cfg.forward_delay > (MAX_BR_MAXAGE / 2 + 1) ? MAX_BR_MAXAGE : \
1054eaa4710SRishi Srivatsavai 	(2 * (cfg.forward_delay - 1)))
1064eaa4710SRishi Srivatsavai 
1074eaa4710SRishi Srivatsavai #define	CAPPED_MAXAGE(cfg)	(cfg.forward_delay < (MAX_BR_MAXAGE / 2 + 1))
1084eaa4710SRishi Srivatsavai #define	FLOORED_MAXAGE(cfg)	(cfg.hello_time > (MIN_BR_MAXAGE / 2 - 1))
1094eaa4710SRishi Srivatsavai 
1104eaa4710SRishi Srivatsavai #define DEF_FORCE_VERS  2 /* NORMAL_RSTP */
1114eaa4710SRishi Srivatsavai 
1124eaa4710SRishi Srivatsavai /* port configuration */
1134eaa4710SRishi Srivatsavai 
1144eaa4710SRishi Srivatsavai #define DEF_PORT_PRIO   128
1154eaa4710SRishi Srivatsavai #define MIN_PORT_PRIO   0
1164eaa4710SRishi Srivatsavai #define MAX_PORT_PRIO   240 /* in steps of 16 */
1174eaa4710SRishi Srivatsavai 
1184eaa4710SRishi Srivatsavai #define DEF_ADMIN_NON_STP   False
1194eaa4710SRishi Srivatsavai #define DEF_ADMIN_EDGE      True
1204eaa4710SRishi Srivatsavai #define DEF_LINK_DELAY      3 /* see edge.c */
1214eaa4710SRishi Srivatsavai #define DEF_P2P         P2P_AUTO
1224eaa4710SRishi Srivatsavai 
1234eaa4710SRishi Srivatsavai #include <uid_stp.h>
1244eaa4710SRishi Srivatsavai #include <stp_bpdu.h>
1254eaa4710SRishi Srivatsavai 
1264eaa4710SRishi Srivatsavai #ifndef __STPM_T__
1274eaa4710SRishi Srivatsavai #define __STPM_T__
1284eaa4710SRishi Srivatsavai struct stpm_t;
1294eaa4710SRishi Srivatsavai typedef struct stpm_t STPM_T;
1304eaa4710SRishi Srivatsavai #endif
1314eaa4710SRishi Srivatsavai #ifndef __STP_VECTORS_T__
1324eaa4710SRishi Srivatsavai #define __STP_VECTORS_T__
1334eaa4710SRishi Srivatsavai struct stp_vectors;
1344eaa4710SRishi Srivatsavai typedef struct stp_vectors STP_VECTORS_T;
1354eaa4710SRishi Srivatsavai #endif
1364eaa4710SRishi Srivatsavai 
1374eaa4710SRishi Srivatsavai /* Section 1: Create/Delete/Start/Stop the RSTP instance */
1384eaa4710SRishi Srivatsavai 
1394eaa4710SRishi Srivatsavai void /* init the engine */
1404eaa4710SRishi Srivatsavai STP_IN_init (STP_VECTORS_T *vectors);
1414eaa4710SRishi Srivatsavai 
1424eaa4710SRishi Srivatsavai int
1434eaa4710SRishi Srivatsavai STP_IN_stpm_create (int vlan_id, char* name);
1444eaa4710SRishi Srivatsavai 
1454eaa4710SRishi Srivatsavai int
1464eaa4710SRishi Srivatsavai STP_IN_stpm_delete (int vlan_id);
1474eaa4710SRishi Srivatsavai 
1484eaa4710SRishi Srivatsavai int
1494eaa4710SRishi Srivatsavai STP_IN_port_add (int vlan_id, int port_index);
1504eaa4710SRishi Srivatsavai 
1514eaa4710SRishi Srivatsavai int
1524eaa4710SRishi Srivatsavai STP_IN_port_remove (int vlan_id, int port_index);
1534eaa4710SRishi Srivatsavai 
1544eaa4710SRishi Srivatsavai int
1554eaa4710SRishi Srivatsavai STP_IN_stop_all (void);
1564eaa4710SRishi Srivatsavai 
1574eaa4710SRishi Srivatsavai int
1584eaa4710SRishi Srivatsavai STP_IN_delete_all (void);
1594eaa4710SRishi Srivatsavai 
1604eaa4710SRishi Srivatsavai /* Section 2. "Get" management */
1614eaa4710SRishi Srivatsavai 
1624eaa4710SRishi Srivatsavai Bool
1634eaa4710SRishi Srivatsavai STP_IN_get_is_stpm_enabled (int vlan_id);
1644eaa4710SRishi Srivatsavai 
1654eaa4710SRishi Srivatsavai int
1664eaa4710SRishi Srivatsavai STP_IN_stpm_get_vlan_id_by_name (char* name, int* vlan_id);
1674eaa4710SRishi Srivatsavai 
1684eaa4710SRishi Srivatsavai int
1694eaa4710SRishi Srivatsavai STP_IN_stpm_get_name_by_vlan_id (int vlan_id, char* name, size_t buffsize);
1704eaa4710SRishi Srivatsavai 
1714eaa4710SRishi Srivatsavai const char*
1724eaa4710SRishi Srivatsavai STP_IN_get_error_explanation (int rstp_err_no);
1734eaa4710SRishi Srivatsavai 
1744eaa4710SRishi Srivatsavai int
1754eaa4710SRishi Srivatsavai STP_IN_stpm_get_cfg (int vlan_id, UID_STP_CFG_T* uid_cfg);
1764eaa4710SRishi Srivatsavai 
1774eaa4710SRishi Srivatsavai int
1784eaa4710SRishi Srivatsavai STP_IN_stpm_get_state (int vlan_id, UID_STP_STATE_T* entry);
1794eaa4710SRishi Srivatsavai 
1804eaa4710SRishi Srivatsavai int
1814eaa4710SRishi Srivatsavai STP_IN_port_get_cfg (int vlan_id, int port_index, UID_STP_PORT_CFG_T* uid_cfg);
1824eaa4710SRishi Srivatsavai 
1834eaa4710SRishi Srivatsavai int
1844eaa4710SRishi Srivatsavai STP_IN_port_get_state (int vlan_id, UID_STP_PORT_STATE_T* entry);
1854eaa4710SRishi Srivatsavai 
1864eaa4710SRishi Srivatsavai const char *
1874eaa4710SRishi Srivatsavai STP_IN_state2str(RSTP_PORT_STATE);
1884eaa4710SRishi Srivatsavai 
1894eaa4710SRishi Srivatsavai /* Section 3. "Set" management */
1904eaa4710SRishi Srivatsavai 
1914eaa4710SRishi Srivatsavai int
1924eaa4710SRishi Srivatsavai STP_IN_stpm_set_cfg (int vlan_id,
1934eaa4710SRishi Srivatsavai                      UID_STP_CFG_T* uid_cfg);
1944eaa4710SRishi Srivatsavai 
1954eaa4710SRishi Srivatsavai int
1964eaa4710SRishi Srivatsavai STP_IN_port_set_cfg (int vlan_id, int port_index,
1974eaa4710SRishi Srivatsavai                      UID_STP_PORT_CFG_T* uid_cfg);
1984eaa4710SRishi Srivatsavai 
1994eaa4710SRishi Srivatsavai #ifdef STP_DBG
2004eaa4710SRishi Srivatsavai int STP_IN_dbg_set_port_trace (char *mach_name, int enadis,
2014eaa4710SRishi Srivatsavai     int vlan_id, int port_index);
2024eaa4710SRishi Srivatsavai #endif
2034eaa4710SRishi Srivatsavai 
2044eaa4710SRishi Srivatsavai /* Section 4. RSTP functionality events */
2054eaa4710SRishi Srivatsavai 
206*55fea89dSDan Cross int
2074eaa4710SRishi Srivatsavai STP_IN_one_second (void);
2084eaa4710SRishi Srivatsavai 
2094eaa4710SRishi Srivatsavai int /* for Link UP/DOWN */
2104eaa4710SRishi Srivatsavai STP_IN_enable_port (int port_index, Bool enable);
2114eaa4710SRishi Srivatsavai 
2124eaa4710SRishi Srivatsavai int /* call it, when port speed has been changed, speed in Kb/s  */
2134eaa4710SRishi Srivatsavai STP_IN_changed_port_speed (int port_index, long speed);
2144eaa4710SRishi Srivatsavai 
2154eaa4710SRishi Srivatsavai int /* call it, when current port duplex mode has been changed  */
2164eaa4710SRishi Srivatsavai STP_IN_changed_port_duplex (int port_index);
2174eaa4710SRishi Srivatsavai 
2184eaa4710SRishi Srivatsavai int
2194eaa4710SRishi Srivatsavai STP_IN_check_bpdu_header (BPDU_T* bpdu, size_t len);
2204eaa4710SRishi Srivatsavai 
2214eaa4710SRishi Srivatsavai int
2224eaa4710SRishi Srivatsavai STP_IN_rx_bpdu (int vlan_id, int port_index, BPDU_T* bpdu, size_t len);
2234eaa4710SRishi Srivatsavai 
2244eaa4710SRishi Srivatsavai void
2254eaa4710SRishi Srivatsavai STP_IN_get_bridge_id(int vlan_id, unsigned short *priority, unsigned char *mac);
2264eaa4710SRishi Srivatsavai 
2274eaa4710SRishi Srivatsavai #endif /* _STP_API_H__ */
228