summaryrefslogtreecommitdiffhomepage
path: root/table/table_manager.go
diff options
context:
space:
mode:
authorISHIDA Wataru <ishida.wataru@lab.ntt.co.jp>2015-12-02 16:01:47 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2015-12-02 16:02:21 +0900
commita36c84c510bd7cde344e6cbabd043153e4a0196c (patch)
treec9a529ea365def97af86cd5aba6d315aed6671ab /table/table_manager.go
parentb83d3cc802cdaa69b8c77b6db54aa8fe4e472ba7 (diff)
make adj-rib implementation more clear and efficient
Signed-off-by: ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp>
Diffstat (limited to 'table/table_manager.go')
-rw-r--r--table/table_manager.go118
1 files changed, 0 insertions, 118 deletions
diff --git a/table/table_manager.go b/table/table_manager.go
index 03d8ed83..637299b9 100644
--- a/table/table_manager.go
+++ b/table/table_manager.go
@@ -21,7 +21,6 @@ import (
log "github.com/Sirupsen/logrus"
"github.com/osrg/gobgp/packet"
"net"
- "reflect"
"time"
)
@@ -489,120 +488,3 @@ func (manager *TableManager) GetBestPathList(rfList []bgp.RouteFamily) []*Path {
}
return paths
}
-
-// process BGPUpdate message
-// this function processes only BGPUpdate
-func (manager *TableManager) ProcessUpdate(fromPeer *PeerInfo, message *bgp.BGPMessage) ([]*Path, error) {
- // check msg's type if it's BGPUpdate
- if message.Header.Type != bgp.BGP_MSG_UPDATE {
- log.WithFields(log.Fields{
- "Topic": "table",
- "Owner": manager.owner,
- "key": fromPeer.Address.String(),
- "Type": message.Header.Type,
- }).Warn("message is not BGPUpdate")
- return []*Path{}, nil
- }
-
- return manager.ProcessPaths(ProcessMessage(message, fromPeer, time.Now()))
-}
-
-type AdjRib struct {
- adjRibIn map[bgp.RouteFamily]map[string]*Path
- adjRibOut map[bgp.RouteFamily]map[string]*Path
-}
-
-func NewAdjRib(rfList []bgp.RouteFamily) *AdjRib {
- r := &AdjRib{
- adjRibIn: make(map[bgp.RouteFamily]map[string]*Path),
- adjRibOut: make(map[bgp.RouteFamily]map[string]*Path),
- }
- for _, rf := range rfList {
- r.adjRibIn[rf] = make(map[string]*Path)
- r.adjRibOut[rf] = make(map[string]*Path)
- }
- return r
-}
-
-func (adj *AdjRib) update(rib map[bgp.RouteFamily]map[string]*Path, pathList []*Path) {
- for _, path := range pathList {
- rf := path.GetRouteFamily()
- key := path.getPrefix()
- old, found := rib[rf][key]
- if path.IsWithdraw {
- if found {
- delete(rib[rf], key)
- }
- } else {
- if found && reflect.DeepEqual(old.GetPathAttrs(), path.GetPathAttrs()) {
- path.setTimestamp(old.GetTimestamp())
- }
- rib[rf][key] = path
- }
- }
-}
-
-func (adj *AdjRib) UpdateIn(pathList []*Path) {
- adj.update(adj.adjRibIn, pathList)
-}
-
-func (adj *AdjRib) UpdateOut(pathList []*Path) {
- adj.update(adj.adjRibOut, pathList)
-}
-
-func (adj *AdjRib) GetInPathList(rfList []bgp.RouteFamily) []*Path {
- pathList := make([]*Path, 0, adj.GetInCount(rfList))
- for _, rf := range rfList {
- for _, rr := range adj.adjRibIn[rf] {
- pathList = append(pathList, rr)
- }
- }
- return pathList
-}
-
-func (adj *AdjRib) GetOutPathList(rfList []bgp.RouteFamily) []*Path {
- pathList := make([]*Path, 0, adj.GetOutCount(rfList))
- for _, rf := range rfList {
- for _, rr := range adj.adjRibOut[rf] {
- pathList = append(pathList, rr)
- }
- }
- return pathList
-}
-
-func (adj *AdjRib) GetInCount(rfList []bgp.RouteFamily) int {
- count := 0
- for _, rf := range rfList {
- if _, ok := adj.adjRibIn[rf]; ok {
- count += len(adj.adjRibIn[rf])
-
- }
- }
- return count
-}
-
-func (adj *AdjRib) GetOutCount(rfList []bgp.RouteFamily) int {
- count := 0
- for _, rf := range rfList {
- if _, ok := adj.adjRibOut[rf]; ok {
- count += len(adj.adjRibOut[rf])
- }
- }
- return count
-}
-
-func (adj *AdjRib) DropIn(rfList []bgp.RouteFamily) {
- for _, rf := range rfList {
- if _, ok := adj.adjRibIn[rf]; ok {
- adj.adjRibIn[rf] = make(map[string]*Path)
- }
- }
-}
-
-func (adj *AdjRib) DropOut(rfList []bgp.RouteFamily) {
- for _, rf := range rfList {
- if _, ok := adj.adjRibIn[rf]; ok {
- adj.adjRibOut[rf] = make(map[string]*Path)
- }
- }
-}