mirror of
https://gitee.com/willfree/mlsr.git
synced 2026-06-08 01:49:27 +08:00
128 lines
2.8 KiB
Go
128 lines
2.8 KiB
Go
// Package route
|
|
// @Author: Wang Feng
|
|
// @Description:
|
|
// @Version: 0.1.0
|
|
// @Date: 2022/6/10 11:02
|
|
// @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
|
|
//
|
|
|
|
package route
|
|
|
|
import (
|
|
"minlib/component"
|
|
)
|
|
|
|
//
|
|
// RoutingTablePoolEntry
|
|
// @Description: 路由表池条目。
|
|
//
|
|
type RoutingTablePoolEntry struct {
|
|
RoutingTableEntry
|
|
// 记录使用本池条目的所有名称前缀 NamePrefix-名称前缀表项
|
|
NamePrefixTableEntries map[string]*NamePrefixTableEntry
|
|
m_useCount uint64 // 记录本条目被多少条名称前缀所使用
|
|
}
|
|
|
|
//
|
|
// Init
|
|
// @Description: 初始化目的路由器
|
|
// @receiver pe
|
|
// @param dest
|
|
//
|
|
func (pe *RoutingTablePoolEntry) Init(dest *component.Identifier) {
|
|
pe.m_destination = dest
|
|
pe.m_useCount = 1
|
|
}
|
|
|
|
//
|
|
// InitRTE
|
|
// @Description: 初始化路由表项和使用数
|
|
// @receiver pe
|
|
// @param rte
|
|
// @param useCount
|
|
//
|
|
func (pe *RoutingTablePoolEntry) InitRTE(rte *RoutingTableEntry, useCount uint64) {
|
|
pe.m_destination = rte.m_destination
|
|
pe.nextHops = rte.GetNextHops()
|
|
pe.m_useCount = useCount
|
|
}
|
|
|
|
//
|
|
// InitDest
|
|
// @Description: 初始化目的路由器和使用数
|
|
// @receiver pe
|
|
// @param dest
|
|
// @param useCount
|
|
//
|
|
func (pe *RoutingTablePoolEntry) InitDest(dest *component.Identifier, useCount uint64) {
|
|
pe.m_destination = dest
|
|
pe.m_useCount = useCount
|
|
}
|
|
|
|
//
|
|
// IsEqual
|
|
// @Description: 判断两个路由表池条目是否相等
|
|
// @receiver pe
|
|
// @param npe
|
|
// @return bool
|
|
//
|
|
func (pe *RoutingTablePoolEntry) IsEqual(npe *RoutingTablePoolEntry) bool {
|
|
if pe.GetDestination().ToUri() == npe.GetDestination().ToUri() &&
|
|
pe.NextHopList.Size() == pe.NextHopList.Size() {
|
|
b := true
|
|
for i := 0; i < pe.NextHopList.Size(); i++ {
|
|
if pe.GetNextHops()[i].LogicFaceUri() != npe.GetNextHops()[i].LogicFaceUri() ||
|
|
pe.GetNextHops()[i].RouteCost.RouteCost() != npe.GetNextHops()[i].RouteCost.RouteCost() {
|
|
b = false
|
|
}
|
|
}
|
|
return b
|
|
}
|
|
return false
|
|
}
|
|
|
|
//
|
|
// GetUseCount
|
|
// @Description: 获取使用数
|
|
// @receiver pe
|
|
// @return uint64
|
|
//
|
|
func (pe *RoutingTablePoolEntry) GetUseCount() uint64 {
|
|
return pe.m_useCount
|
|
}
|
|
|
|
//
|
|
// IncrementUseCount
|
|
// @Description: 使用数加一,并返回
|
|
// @receiver pe
|
|
// @return uint64
|
|
//
|
|
func (pe *RoutingTablePoolEntry) IncrementUseCount() uint64 {
|
|
pe.m_useCount++
|
|
return pe.m_useCount
|
|
}
|
|
|
|
//
|
|
// DecrementUseCount
|
|
// @Description: 使用数减一,并返回
|
|
// @receiver pe
|
|
// @return uint64
|
|
//
|
|
func (pe *RoutingTablePoolEntry) DecrementUseCount() uint64 {
|
|
if pe.m_useCount != 0 {
|
|
pe.m_useCount--
|
|
return pe.m_useCount
|
|
}
|
|
return 0
|
|
}
|
|
|
|
//
|
|
// SetNexthopList
|
|
// @Description: 设置下一跳列表
|
|
// @receiver pe
|
|
// @param list
|
|
//
|
|
func (pe *RoutingTablePoolEntry) SetNexthopList(list NextHopList) {
|
|
pe.NextHopList = list
|
|
}
|