// 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 }