removed apps
[luayats.git] / src / rstp / edge.c
blob617334c914fd1ecfa56c58a29b557331b25515fd
1 /************************************************************************
2 * RSTP library - Rapid Spanning Tree (802.1t, 802.1w)
3 * Copyright (C) 2001-2003 Optical Access
4 * Author: Alex Rozin
5 *
6 * This file is part of RSTP library.
7 *
8 * RSTP library is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU Lesser General Public License as published by the
10 * Free Software Foundation; version 2.1
12 * RSTP library is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
15 * General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public License
18 * along with RSTP library; see the file COPYING. If not, write to the Free
19 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20 * 02111-1307, USA.
21 **********************************************************************/
23 /* Note: this state mashine distinkts from described in P802.1t Clause 18. */
24 /* I am ready to discuss it */
26 /* NOTE: This machine is not used in 802.1D (leu) */
28 #define this _this
29 #include "base.h"
30 #include "stpm.h"
32 #define STATES { \
33 CHOOSE(DISABLED), \
34 CHOOSE(DETECTED), \
35 CHOOSE(DELEAYED), \
36 CHOOSE(RESOLVED), \
39 #define GET_STATE_NAME STP_edge_get_state_name
40 #include "choose.h"
42 #define DEFAULT_LINK_DELAY 3
44 void
45 STP_edge_enter_state (STATE_MACH_T *s)
47 register PORT_T *port = s->owner.port;
49 switch (s->State) {
50 case BEGIN:
51 break;
52 case DISABLED:
53 port->operEdge = port->adminEdge;
54 port->wasInitBpdu = False;
55 port->lnkWhile = 0;
56 port->portEnabled = False;
57 break;
58 case DETECTED:
59 port->portEnabled = True;
60 port->lnkWhile = port->LinkDelay;
61 port->operEdge = False;
62 break;
63 case DELEAYED:
64 break;
65 case RESOLVED:
66 if (! port->wasInitBpdu) {
67 port->operEdge = port->adminEdge;
69 break;
73 Bool
74 STP_edge_check_conditions (STATE_MACH_T *s)
76 register PORT_T *port = s->owner.port;
78 switch (s->State) {
79 case BEGIN:
80 return STP_hop_2_state (s, DISABLED);
81 case DISABLED:
82 if (port->adminEnable) {
83 return STP_hop_2_state (s, DETECTED);
85 break;
86 case DETECTED:
87 return STP_hop_2_state (s, DELEAYED);
88 case DELEAYED:
89 if (port->wasInitBpdu) {
90 #ifdef STP_DBG
91 if (s->debug)
92 stp_trace ("port %s 'edge' resolved by BPDU", port->port_name);
93 #endif
94 return STP_hop_2_state (s, RESOLVED);
97 if (! port->lnkWhile) {
98 #ifdef STP_DBG
99 if (s->debug)
100 stp_trace ("port %s 'edge' resolved by timer", port->port_name);
101 #endif
102 return STP_hop_2_state (s, RESOLVED);
105 if (! port->adminEnable) {
106 return STP_hop_2_state (s, DISABLED);
108 break;
109 case RESOLVED:
110 if (! port->adminEnable) {
111 return STP_hop_2_state (s, DISABLED);
113 break;
115 return False;