Name Date Size #Lines LOC


COPYINGH A D14-Feb-202125.8 KiB505418

COPYING.descripH A D14-Feb-202123 21

ChangeLogH A D14-Feb-20212.1 KiB6359

READMEH A D14-Feb-20211.3 KiB3826

README.CVS.HOWTOH A D14-Feb-2021899 2314

README.authorsH A D14-Feb-202169 42

README.filesH A D14-Feb-20212.5 KiB5949

README.newsH A D14-Feb-2021575 2013

TODOH A D14-Feb-2021567 2312

base.hH A D14-Feb-20216.5 KiB199148

choose.hH A D14-Feb-20211.4 KiB4314

edge.cH A D14-Feb-20213 KiB11680

edge.hH A D14-Feb-20211.4 KiB399

mapfile-versH A D14-Feb-20211.9 KiB7368

migrate.cH A D14-Feb-20213.4 KiB12083

migrate.hH A D14-Feb-20211.3 KiB389

p2p.cH A D14-Feb-20212.3 KiB9158

p2p.hH A D14-Feb-20211.3 KiB389

pcost.cH A D14-Feb-20213.7 KiB13395

pcost.hH A D14-Feb-20211.3 KiB389

port.cH A D14-Feb-20216.7 KiB254183

port.hH A D14-Feb-20215.9 KiB186129

portinfo.cH A D14-Feb-202114.5 KiB504419

portinfo.hH A D14-Feb-20211.3 KiB4111

rolesel.cH A D14-Feb-20219.9 KiB401320

rolesel.hH A D14-Feb-20211.3 KiB4211

roletrns.cH A D14-Feb-202112.1 KiB432368

roletrns.hH A D14-Feb-20211.3 KiB388

statmch.cH A D14-Feb-20213.4 KiB12484

statmch.hH A D14-Feb-20213 KiB9049

stp_bpdu.hH A D14-Feb-20212.7 KiB9156

stp_in.cH A D14-Feb-202126 KiB1,027808

stp_in.hH A D14-Feb-20215.8 KiB228131

stp_to.hH A D14-Feb-20212 KiB4920

stp_vectors.hH A D14-Feb-20213 KiB9141

stpm.cH A D14-Feb-20218 KiB361256

stpm.hH A D14-Feb-20214.1 KiB12760

stpmgmt.cH A D14-Feb-20213.8 KiB162110

sttrans.cH A D14-Feb-20213.6 KiB14199

sttrans.hH A D14-Feb-20211.3 KiB399

times.cH A D14-Feb-20212.6 KiB8142

times.hH A D14-Feb-20211.6 KiB5117

topoch.cH A D14-Feb-20216.4 KiB228177

topoch.hH A D14-Feb-20211.3 KiB388

transmit.cH A D14-Feb-202110.5 KiB369300

transmit.hH A D14-Feb-20211.3 KiB399

uid_stp.hH A D14-Feb-20216 KiB203142

vector.cH A D14-Feb-20214.9 KiB184123

vector.hH A D14-Feb-20212.2 KiB8040


3The Rapid Spanning Tree Library project contains a  full  implementation
4of 802.1s as an library  with API.  There is two  processes,  using this
5library: 'bridge' & 'mngr'. First simulates RSTP bridge behavior, second
6is dedicated to link/unlink 'bridges' into virtual RSTP domain (VRSTPD).
7Both 'bridge' & 'mngr' has its own simple CLI like language of commands;
8these  commands  allow  to manage the VRSTPD.  There are  tools to trace
9state machine transitions and get traps about drastic changes.
11Purpose: studying, debugging, development.
13The library may be used in real bridges/routers while bounding to a real
14system depending environment.
16To run:
171. In one shell run 'mngr'
19You will get prompt of 'mngr'; type '?' and get full help of
20'mngr' commands.
222. In another shell run bridge instance.
24You will get prompt of 'bridge'; type '?' and get full help
25of bridge management commands.
273. You may (and should) run a number of bridge instances, each in its
28separate shell (this way you will be able manage them).
30For example, if there were two bridge instances, you may see examples
31of the dialog in files mngr.txt, B5055.txt and B5056.txt.
33Note: prompt both of 'mngr' and of 'bridge' instance contains time stamp,
34while all these process run onto the same computer, these time stamps
35are synchronized.


1Anonymous CVS Access
3This project's SourceForge CVS repository can be checked out through
4anonymous (pserver) CVS with the following instruction set. The module
5you wish to check out must be specified as the modulename. When prompted
6for a password for anonymous, simply press the Enter key.
8cvs login
10cvs -z3 co modulename
12Updates from within the module's directory do not need the -d parameter.
14Developer CVS Access via SSH
16Only project developers can access the CVS tree via this method. SSH1 must
17be installed on your client machine. Substitute modulename and developername
18with the proper values. Enter your site password when prompted.
20export CVS_RSH=ssh
22cvs -z3 co modulename


1Alex Rozin <>
2Michael Rozhavsky <>


1This guide describes the list of the files of the project.
4There are two target binaries: mngr & bridge
5o The first  is  a simplest  tools  to  connect/disconnect
6  bridges and  check  their current connection.  These its
7  functions are managed from command line simple  language
8  and use the library libcli.a (see below). Beside it mngr
9  serves to transport BPDU messages between  bridges;  for
10  this purpose mngr uses the library libuid.a
11  The source code of the mngr: file mngr.c
13o The second is a simulation of virtual  RSTP  bridge.  It
14  accepts two types of messages: UID_CNTRL & UID_BPDU (see
15  file uid.h).  This program  is  linked with the same two
16  libraries libcli.a & libuid.a;  beside  it uses a system
17  independent librstp.a: implementation of Rapid  Spanning
18  Tree (802.1w) - see below.
19  The source code of the bridge: files bridge.c,stp_cli.c,
20  stp_to.c
21    * bridge.c - simulates the main bridge behavior
22    * stp_cli.c - consists from command line functions
23    * stp_to.c - API, that librstp.a uses for its purposes.
24  The management communication between bridge and librstp.a
25  uses structures and definitions from the header uid_stp.h
27o libcli.a - library for command line features. It has only
28  one file cli.c, the API is described in the header cli.h.
30o libuid.a - the 'transport' library: the source code you
31  may find in the file uid_sock.c and in the two headers:
32  uid.h & uid_sock.h
34o (so far, so good) librstp.a - it is a heart of the project
35  Actually, it implements 802.1w state machines. Files
36  stpm.c - the RSTP instance (some reflection of Port0)
37  port.c - the RSTP port instance
38  portinfo.c - Port Information State Machine, 17.21
39  rolesel.c - Port Role Selection State Machine, 17.22
40  roletrns.c - Port Role Transition State Machine, 17.23
41  sttrans.c - Port State Transition State Machine, 17.24
42  topoch.c - Topology Change State Machine, 17.25
43  migrate.c - Port Protocol Migration State Machine, 17.26
44  transmit.c - Port Transmit State Machine 17.27
45  pcost.c - Path Cost Resolution State Machine
46  edge.c - operEdge Port Resolution State Machine
47  p2p.c - operPointToPoit Resolution State Machine
48  statmch.c - generic state machine implementation
49  vector.c - Priority Vectors manipulations
50  times.c - Times manipulations
51  stp_in.c - API for calls from outside.
52  sttrans.c - API for calls from outside (dedicated for creation
53              deleting, starting & stopping the RSTP instance) less
54              relevant to the project.

1- All per Port variables have been moved from the State
2  Machines into the Port instance (it made the state
3  machines much more clear)
5- In libcli.a instead of stupid fgets() function we use
6  now readline (thanks to Michel Roshavsky)
8- 'mcheck' support
10- 'nonStp' support (I know, that it is out the standard,
11  but it seems to be useful (see a discussion on
13  and our customers demand it
15- The function rolesel.c has been drastically fixed, IMHO
16  closer to the standard
18- Nicer output