1
0
mirror of https://gitee.com/willfree/mlsr.git synced 2026-06-08 01:49:27 +08:00
Files
mlsr/route/RoutingTablePoolEntry.go
T
2022-06-14 17:29:41 +08:00

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
}