diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2014-12-30 22:08:08 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2014-12-30 22:08:08 +0900 |
commit | 40e40449ff08a0f226ca8b5cee04307a66a5e59f (patch) | |
tree | 677aacb012f8595b3da5cd47f4f660eb72b100c1 /table/message.go | |
parent | de9a26d9f36ebd9c918c3f7c88764093a54152dc (diff) |
serve: move functions about path and bgp message to table/message.go
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Diffstat (limited to 'table/message.go')
-rw-r--r-- | table/message.go | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/table/message.go b/table/message.go index 35eb501a..7ea1c361 100644 --- a/table/message.go +++ b/table/message.go @@ -107,3 +107,27 @@ func UpdatePathAttrs4ByteAs(msg *bgp.BGPUpdate) error { } return nil } + +func CreateUpdateMsgFromPath(path Path, msg *bgp.BGPMessage) (*bgp.BGPMessage, error) { + rf := path.GetRouteFamily() + + if rf == bgp.RF_IPv4_UC { + if path.IsWithdraw() { + draw := path.GetNlri().(*bgp.WithdrawnRoute) + return bgp.NewBGPUpdateMessage([]bgp.WithdrawnRoute{*draw}, []bgp.PathAttributeInterface{}, []bgp.NLRInfo{}), nil + } else { + nlri := path.GetNlri().(*bgp.NLRInfo) + pathAttrs := path.GetPathAttrs() + return bgp.NewBGPUpdateMessage([]bgp.WithdrawnRoute{}, pathAttrs, []bgp.NLRInfo{*nlri}), nil + } + } else if rf == bgp.RF_IPv6_UC { + if path.IsWithdraw() { + pathAttrs := path.GetPathAttrs() + return bgp.NewBGPUpdateMessage([]bgp.WithdrawnRoute{}, pathAttrs, []bgp.NLRInfo{}), nil + } else { + pathAttrs := path.GetPathAttrs() + return bgp.NewBGPUpdateMessage([]bgp.WithdrawnRoute{}, pathAttrs, []bgp.NLRInfo{}), nil + } + } + return nil, nil +} |