1、基于已有代码,实现生成树运行机制,对于给定拓扑 four_node_ring.py
,计算输出相应状态下的最小生成树拓扑
2、自己构造一个不少于 7 个节点,冗余链路不少于 2 条的拓扑,使用 stp 程序计算输出最小生成树拓扑
已有的代码框机已经解决了 STP 通信等问题,本设计需要解决的问题为处理收到的包,并根据收到的对于端口的 config,与本端口和本端口对应节点的 config 进行比较,来更新本端口和本节点的 config。
代码实现的部分在代码框架中即需要实现 stp_handle_config_packet
函数。
本设计的对应代码如下:
static void stp_handle_config_packet(stp_t *stp, stp_port_t *p,
struct stp_config *config) {
if (recv_has_higher_pirority(p, config)) {
update_port_config(p, config);
update_root(stp, config);
update_other_ports(stp);
if(!stp_is_root_switch(stp)) {
stp_stop_timer(&stp->hello_timer);
stp_send_config(stp);
}
}
}
意思是,本端口处理收到 stp_config
时:
首先比较本端口和发送端口的优先级。
倘若优先级更高则进行以下处理:
对于所有指定端口,更新其认为的根节点和路径开销。
另外,如果一个端口为非指定端口,且其 Config 较网段内其他端口优先级更高,那么该端口成为指定端口。(本功能无需在此函数中添加额外代码即可实现)
本设计的测试结果如下:
可以看出该 4 节点的测试成功。
本设计的测试结果如下:
reference
的结果如下:
根据比对,本设计的结果与 reference 的结果相同,即实验成功。