]> git.ipfire.org Git - people/ms/rstp.git/blob - rstplib/stp_to.c
RSTP testing - PATCH: source MAC address of BPDU
[people/ms/rstp.git] / rstplib / stp_to.c
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
11 *
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.
16 *
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 **********************************************************************/
22
23 /* This file contains system dependent API
24 from the RStp to a operation system (see stp_to.h) */
25
26 /* stp_to API for Linux */
27
28 #include <stddef.h>
29 #include <stdio.h>
30 #include <stdarg.h>
31 #include <time.h>
32 #include <unistd.h>
33
34 #include "base.h"
35 #include "stpm.h"
36 #include "stp_in.h"
37 #include "stp_to.h"
38
39 extern BITMAP_T enabled_ports;
40
41 /*************
42 void
43 stp_trace (const char *format, ...)
44 {
45 #define MAX_MSG_LEN 128
46 char msg[MAX_MSG_LEN];
47 va_list args;
48
49 va_start(args, format);
50 vsnprintf (msg, MAX_MSG_LEN-1, format, args);
51 printf ("%s\n", msg);
52 va_end(args);
53
54 }
55 ***********/
56
57 #ifdef STRONGLY_SPEC_802_1W
58 int
59 STP_OUT_set_learning (int port_index, int vlan_id, int enable)
60 {
61 return STP_OK;
62 }
63
64 int
65 STP_OUT_set_forwarding (int port_index, int vlan_id, int enable)
66 {
67 return STP_OK;
68 }
69 #else
70 /*
71 * In many kinds of hardware the state of ports may
72 * be changed with another method
73 */
74 int
75 STP_OUT_set_port_state (IN int port_index, IN int vlan_id,
76 IN RSTP_PORT_STATE state)
77 {
78 return STP_OK;
79 //return AR_INT_STP_set_port_state (port_index, vlan_id, state);
80 }
81 #endif
82
83
84 void
85 STP_OUT_get_port_mac (int port_index, unsigned char *mac)
86 {
87 static long pid = -1;
88 static unsigned char mac_beg[] = {'\0', '\0', '\0', '\0', '\0', '\0'};
89
90 if (pid < 0) {
91 pid = getpid ();
92 memcpy (mac_beg + 1, &pid, 4);
93 }
94 memcpy (mac, mac_beg, 5);
95 mac[5] = port_index;
96 //memcpy (mac, STP_MAIN_get_port_mac (port_index), 6);
97 }
98
99 int /* 1- Up, 0- Down */
100 STP_OUT_get_port_link_status (int port_index)
101 {
102 if (BitmapGetBit (&enabled_ports, (port_index - 1))) return 1;
103 return 0;
104 }
105
106 int
107 STP_OUT_flush_lt (IN int port_index, IN int vlan_id, LT_FLASH_TYPE_T type, char* reason)
108 {
109 /****
110 stp_trace("clearFDB (%d, %s, '%s')",
111 port_index,
112 (type == LT_FLASH_ALL_PORTS_EXCLUDE_THIS) ? "Exclude" : "Only",
113 reason);
114 ****/
115
116 return STP_OK;
117 }
118
119 int
120 STP_OUT_set_hardware_mode (int vlan_id, UID_STP_MODE_T mode)
121 {
122 return STP_OK;
123 //return AR_INT_STP_set_mode (vlan_id, mode);
124 }
125
126
127 int
128 STP_OUT_tx_bpdu (int port_index, int vlan_id,
129 unsigned char *bpdu, size_t bpdu_len)
130 {
131 extern int bridge_tx_bpdu (int port_index, unsigned char *bpdu, size_t bpdu_len);
132 return bridge_tx_bpdu (port_index, bpdu, bpdu_len);
133 }
134
135 const char *
136 STP_OUT_get_port_name (IN int port_index)
137 {
138 static char tmp[4];
139 sprintf (tmp, "p%02d", (int) port_index);
140 return tmp;
141 //return port2str (port_index, &sys_config);
142 }
143
144 unsigned long
145 STP_OUT_get_deafult_port_path_cost (IN unsigned int portNo)
146 {
147 return 20000;
148 }
149
150 unsigned long STP_OUT_get_port_oper_speed (unsigned int portNo)
151 {
152 if (portNo <= 2)
153 return 1000000L;
154 else
155 return 1000L;
156 }
157
158 int /* 1- Full, 0- Half */
159 STP_OUT_get_duplex (IN int port_index)
160 {
161 return 1;
162 }
163
164 int
165 STP_OUT_get_init_stpm_cfg (IN int vlan_id,
166 INOUT UID_STP_CFG_T* cfg)
167 {
168 cfg->bridge_priority = DEF_BR_PRIO;
169 cfg->max_age = DEF_BR_MAXAGE;
170 cfg->hello_time = DEF_BR_HELLOT;
171 cfg->forward_delay = DEF_BR_FWDELAY;
172 cfg->force_version = NORMAL_RSTP;
173
174 return STP_OK;
175 }
176
177
178 int
179 STP_OUT_get_init_port_cfg (IN int vlan_id,
180 IN int port_index,
181 INOUT UID_STP_PORT_CFG_T* cfg)
182 {
183 cfg->port_priority = DEF_PORT_PRIO;
184 cfg->admin_non_stp = DEF_ADMIN_NON_STP;
185 cfg->admin_edge = DEF_ADMIN_EDGE;
186 cfg->admin_port_path_cost = ADMIN_PORT_PATH_COST_AUTO;
187 cfg->admin_point2point = DEF_P2P;
188
189 return STP_OK;
190 }
191
192
193