From 7122614c1f212cecc380a47521c5e07ceaf9e084 Mon Sep 17 00:00:00 2001 From: butwedo <31840703+butwedo@users.noreply.github.com> Date: Thu, 30 Dec 2021 16:20:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0nexthop=20(#1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add files via upload * Delete router.go * update nexthop * Update router.go Co-authored-by: 源文雨 <41315874+fumiama@users.noreply.github.com> --- gold/link/router.go | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/gold/link/router.go b/gold/link/router.go index 9bdbce3..cd999b1 100644 --- a/gold/link/router.go +++ b/gold/link/router.go @@ -40,11 +40,28 @@ func (r *Router) SetDefault(l *Link) { } // NextHop 得到前往 ip 的下一跳的 link -func (r *Router) NextHop(cidr string) *Link { - logrus.Infoln("[router] search for cidr", cidr) +func (r *Router) NextHop(ip string) *Link { + ipb := net.ParseIP(ip) + logrus.Infoln("[router] search for ip", ipb) + if ipb == nil { + return nil + } + // TODO: 遍历 r.table,得到正确的下一跳 // 注意使用 r.mu 读写锁避免竞争 - return r.table[cidr] + r.mu.RLock() + defer r.mu.RUnlock() + + for c, l := range r.table { + _, cdr, err := net.ParseCIDR(c) + if err == nil { + if cdr.Contains(ipb) { + return l + } + } + } + + return nil } // SetItem 添加一条表项