From d6c79db4cb89aadede1fd6bc6ed1afbeaaab6aa6 Mon Sep 17 00:00:00 2001 From: free will <2647778488@qq.com> Date: Fri, 10 Jun 2022 15:14:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E8=B7=AF=E7=94=B1=E8=A1=A8?= =?UTF-8?q?=E6=B1=A0=E6=9D=A1=E7=9B=AE=E3=80=81=E5=90=8D=E7=A7=B0=E5=89=8D?= =?UTF-8?q?=E7=BC=80=E8=A1=A8=E6=9D=A1=E7=9B=AE=E3=80=81=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E5=89=8D=E7=BC=80=E8=A1=A8=E4=B8=89=E4=B8=AA=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E4=BD=93=EF=BC=8C=E5=B9=B6=E5=AE=9E=E7=8E=B0=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E8=A1=A8=E6=B1=A0=E6=9D=A1=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- route/NamePrefixTable.go | 31 ++++++++++ route/NamePrefixTableEntry.go | 22 ++++++- route/RoutingTablePoolEntry.go | 105 +++++++++++++++++++++++++++++++++ 3 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 route/NamePrefixTable.go create mode 100644 route/RoutingTablePoolEntry.go diff --git a/route/NamePrefixTable.go b/route/NamePrefixTable.go new file mode 100644 index 0000000..a092bfd --- /dev/null +++ b/route/NamePrefixTable.go @@ -0,0 +1,31 @@ +// Package route +// @Author: Wang Feng +// @Description: +// @Version: 0.1.0 +// @Date: 2022/6/10 11:16 +// @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室 +// + +package route + +import ( + "container/list" + "minlib/component" +) + +// +// NamePrefixTable +// @Description: 名称前缀表 +// +type NamePrefixTable struct { + // 路由表池:存储“目的路由器标识->RTPE”的映射 + // 相当于存储了所有拥有前缀的路由表项,并包含每个路由表项对应的前缀列表信息,以及该前缀列表长度useCount + m_rtpool map[*component.Identifier]*RoutingTablePoolEntry + // 名称前缀表项列表 + nptEntryList list.List + // 该名称前缀表所属的本机路由器标识 + m_ownRouterName *component.Identifier + // 路由表。包含路由计算器计算出来的每个路由表标识及其对应的下一跳列表 + m_routingTable *RoutingTable + // todo fib +} diff --git a/route/NamePrefixTableEntry.go b/route/NamePrefixTableEntry.go index db86a1b..daed3f9 100644 --- a/route/NamePrefixTableEntry.go +++ b/route/NamePrefixTableEntry.go @@ -8,9 +8,29 @@ package route -import "minlib/component" +import ( + "container/list" + "minlib/component" +) +// +// NamePrefixTableEntry +// @Description: 名称前缀表项 +// type NamePrefixTableEntry struct { + // 名称前缀 m_namePrefix *component.Identifier + + // 保存路由表池项列表。 + // 这是因为,由于支持网内缓存,一个名称前缀可能对应多个路由器标识符。 + // 名称前缀标项,和路由表项,是多对多的关系。 + m_rteList list.List + // 下一跳列表 NextHopList } + +func (e *NamePrefixTableEntry) TestList() { + e.m_rteList.Init() + rtpe := new(RoutingTablePoolEntry) + e.m_rteList.PushBack(rtpe) +} diff --git a/route/RoutingTablePoolEntry.go b/route/RoutingTablePoolEntry.go new file mode 100644 index 0000000..88feeb3 --- /dev/null +++ b/route/RoutingTablePoolEntry.go @@ -0,0 +1,105 @@ +// 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 + // 记录使用本池条目的所有名称前缀 + NamePrefixTableEntries map[*component.Identifier]*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 +} + +// +// 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 +}