Closed cprabha closed 1 year ago
I am evaluating this request this sprint and will have either completed this request or will have a timetable to announce by 10/25.
Thanks Greg.
Juniper Business Use Only From: Greg Dennis @.> Sent: Wednesday, October 12, 2022 1:21 PM To: openconfig/ondatra @.> Cc: Prabha Chethan @.>; Author @.> Subject: Re: [openconfig/ondatra] Feature request - need a way to retrieve BGP As path Learned info in ATE (Issue #45)
[External Email. Be cautious of content]
I am evaluating this request this sprint and will have either completed this request or will have a timetable to announce by 10/25.
- Reply to this email directly, view it on GitHubhttps://urldefense.com/v3/__https:/github.com/openconfig/ondatra/issues/45*issuecomment-1276691394__;Iw!!NEt6yMaO-gk!EB20SMiPpA_7tMceDP5sQEw4TmpwDvRCbWZJt6tyQ-x5HZ5DrmB97DAu4M9pfuG5vmN7GuzM48p1d3nMjiRTVjGK$, or unsubscribehttps://urldefense.com/v3/__https:/github.com/notifications/unsubscribe-auth/AHCEB5U3A4QBQEF5BAJ2OUTWC4MSXANCNFSM6AAAAAARCO567M__;!!NEt6yMaO-gk!EB20SMiPpA_7tMceDP5sQEw4TmpwDvRCbWZJt6tyQ-x5HZ5DrmB97DAu4M9pfuG5vmN7GuzM48p1d3nMjnv8cJ4x$. You are receiving this because you authored the thread.Message ID: @.**@.>>
@cprabha can you please provide an IxNetwork config and reference to the IxNetwork operation that retrieves the specific info you are interested in?
Hi Greg,
I am looping Ixia support to provide corresponding IxNetworking config.
Hi Subhajit, Vibaswan,
Please could you share IxNetwork config and reference to the IxNetwork operation to retrieve BGP AS-PATH details from ATE RIB info.
Thanks, Prabha
Juniper Business Use Only
From: Greg Dennis @.> Sent: Friday, October 14, 2022 11:56 AM To: openconfig/ondatra @.> Cc: Prabha Chethan @.>; Mention @.> Subject: Re: [openconfig/ondatra] Feature request - need a way to retrieve BGP As path Learned info in ATE (Issue #45)
[External Email. Be cautious of content]
@cprabhahttps://urldefense.com/v3/__https:/github.com/cprabha__;!!NEt6yMaO-gk!En2Zwc6sE4-Lkk3wi5UiW5ajfXF7Gz2gRTBZ03286L6dVJY_xbgYLi8HvwrGwfAfAwiEfGFtRaJzwcpUS1YmmeYN$ can you please provide an IxNetwork config and reference to the IxNetwork operation that retrieves the specific info you are interested in?
- Reply to this email directly, view it on GitHubhttps://urldefense.com/v3/__https:/github.com/openconfig/ondatra/issues/45*issuecomment-1279353434__;Iw!!NEt6yMaO-gk!En2Zwc6sE4-Lkk3wi5UiW5ajfXF7Gz2gRTBZ03286L6dVJY_xbgYLi8HvwrGwfAfAwiEfGFtRaJzwcpUS3_vv7WT$, or unsubscribehttps://urldefense.com/v3/__https:/github.com/notifications/unsubscribe-auth/AHCEB5WSJF4B6ZDGA7JFWBTWDGUEXANCNFSM6AAAAAARCO567M__;!!NEt6yMaO-gk!En2Zwc6sE4-Lkk3wi5UiW5ajfXF7Gz2gRTBZ03286L6dVJY_xbgYLi8HvwrGwfAfAwiEfGFtRaJzwcpUS2dRrfaB$. You are receiving this because you were mentioned.Message ID: @.**@.>>
@cprabha can you point whoever you pinged on the Keysight side to https://github.com/openconfig/ondatra/issues/42 as well?
Hi Greg,
Sure, below is email details of ixia POC.
Ixia POC : Subhajit Pal @.**@.> and Vibaswan Roychowdhury @.**@.>
Thanks, Prabha
Juniper Business Use Only From: Greg Dennis @.> Sent: Friday, October 14, 2022 1:54 PM To: openconfig/ondatra @.> Cc: Prabha Chethan @.>; Mention @.> Subject: Re: [openconfig/ondatra] Feature request - need a way to retrieve BGP As path Learned info in ATE (Issue #45)
[External Email. Be cautious of content]
@cprabhahttps://urldefense.com/v3/__https:/github.com/cprabha__;!!NEt6yMaO-gk!ABp5_XyOtzrz0MqAQzSSwTnc07G7yc7lSo6EjKUWa8mwSYBHlqe5i7CYitlsxxMgplOMKxnFhnTR3ftrLahjqgPI$ can you point whoever you pinged on the Keysight side to #42https://urldefense.com/v3/__https:/github.com/openconfig/ondatra/issues/42__;!!NEt6yMaO-gk!ABp5_XyOtzrz0MqAQzSSwTnc07G7yc7lSo6EjKUWa8mwSYBHlqe5i7CYitlsxxMgplOMKxnFhnTR3ftrLVk-h6VN$ as well?
- Reply to this email directly, view it on GitHubhttps://urldefense.com/v3/__https:/github.com/openconfig/ondatra/issues/45*issuecomment-1279454992__;Iw!!NEt6yMaO-gk!ABp5_XyOtzrz0MqAQzSSwTnc07G7yc7lSo6EjKUWa8mwSYBHlqe5i7CYitlsxxMgplOMKxnFhnTR3ftrLcr9OL6Y$, or unsubscribehttps://urldefense.com/v3/__https:/github.com/notifications/unsubscribe-auth/AHCEB5Q33JJFPTXRVASTACDWDHB45ANCNFSM6AAAAAARCO567M__;!!NEt6yMaO-gk!ABp5_XyOtzrz0MqAQzSSwTnc07G7yc7lSo6EjKUWa8mwSYBHlqe5i7CYitlsxxMgplOMKxnFhnTR3ftrLWdCPN4j$. You are receiving this because you were mentioned.Message ID: @.**@.>>
Hi @greg-dennis ,
Given below is the test which would create bgp in b2b and can retrieve the info using the api
topology/deviceGroup/ethernet/ipv4/bgpIpv4Peer/operations/getAllLearnedInfo
which is already being used in
https://github.com/openconfig/ondatra/blob/main/internal/ixgnmi/ixgnmi.go#L307
I assume we already have the as path from reply it seems ref: https://github.com/openconfig/ondatra/blob/main/internal/ixgnmi/learnedinfo.go#L39, we just need to expose it user through the right telemetry Apies
Bgp-b2b TEST:
package topology_test
import (
"fmt"
"sort"
"testing"
"github.com/openconfig/featureprofiles/internal/fptest"
"github.com/openconfig/ondatra"
"github.com/openconfig/ondatra/telemetry"
)
func TestMain(m *testing.M) {
fptest.RunTests(m)
}
// plen is the IPv4 prefix length used for IPv4 assignments in this
// topology.
const plen = 30
// dutPortIP assigns IP addresses for DUT port i, where i is the index
// of the port slices returned by dut.Ports().
func dutPortIP(i int) string {
if i == 0 {
return fmt.Sprintf("100.1.0.11")
} else {
return fmt.Sprintf("100.1.0.1")
}
}
// atePortCIDR assigns IP addresses with prefixlen for ATE port i, where
// i is the index of the port slices returned by ate.Ports().
func atePortCIDR(i int) string {
if i == 0 {
return fmt.Sprintf("100.1.0.1/24")
} else {
return fmt.Sprintf("100.1.0.11/24")
}
}
func asNum(i int) int {
if i == 0 {
return 11
} else {
return 22
}
}
func ipPrefix(i int) string {
if i == 0 {
return fmt.Sprintf("1.2.3.4/24")
} else {
return fmt.Sprintf("5.6.7.8/24")
}
}
func getRoute(i int) string {
if i == 1 {
return fmt.Sprintf("1.2.3.0/24")
} else {
return fmt.Sprintf("5.6.7.0/24")
}
}
func configureATE(t *testing.T, ate *ondatra.ATEDevice, atePorts []*ondatra.Port) {
top := ate.Topology().New()
for i, ap := range atePorts {
t.Logf("ATE AddInterface: ports[%d] = %v", i, ap)
in := top.AddInterface(ap.Name()).WithPort(ap)
in.IPv4().WithAddress(atePortCIDR(i)).WithDefaultGateway(dutPortIP(i))
if false {
t.Logf("Disabling FEC on port %v", ap)
in.Ethernet().FEC().WithEnabled(false)
}
in.BGP().AddPeer().WithPeerAddress(dutPortIP(i)).WithTypeExternal().WithLocalASN(uint32(asNum(i)))
in.AddNetwork(fmt.Sprintf("bgpNet-%d", i+1)).IPv4().WithAddress(ipPrefix(i))
}
top.Push(t).StartProtocols(t)
}
func sortPorts(ports []*ondatra.Port) []*ondatra.Port {
sort.Slice(ports, func(i, j int) bool {
idi, idj := ports[i].ID(), ports[j].ID()
li, lj := len(idi), len(idj)
if li == lj {
return idi < idj
}
return li < lj // "port2" < "port10"
})
return ports
}
func TestBgp(t *testing.T) {
// Configure the ATE
ate := ondatra.ATE(t, "ate")
atePorts := sortPorts(ate.Ports())
configureATE(t, ate, atePorts)
// Query Telemetry
t.Run("Telemetry", func(t *testing.T) {
const want = telemetry.Interface_OperStatus_UP
at := ate.Telemetry()
for i, ap := range atePorts {
if got := at.Interface(ap.Name()).OperStatus().Get(t); got != want {
t.Errorf("%s oper-status got %v, want %v", ap, got, want)
}
rib := at.NetworkInstance(ap.Name()).Protocol(telemetry.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Rib()
pref := rib.AfiSafi(telemetry.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Ipv4Unicast().Neighbor(dutPortIP(i)).AdjRibInPre().Route(getRoute(i), 0).Prefix().Get(t)
fmt.Printf("prefix == %s\n", pref)
med := rib.AttrSet(0).Med().Get(t)
fmt.Printf("med == %d\n", med)
ori := rib.AttrSet(0).Origin().Get(t).String()
fmt.Printf("origin == %s\n", ori)
hop := rib.AttrSet(0).NextHop().Get(t)
fmt.Printf("nextHop == %s\n", hop)
aigp := rib.AttrSet(0).Aigp().Get(t)
fmt.Printf("aigp == %d\n", aigp)
// we need something like this for As path as well
// eg: rib.AttrSet(0).AsPath().Get(t)
}
})
}
Supporting this is actually more challenging than I anticipated, because the AS segments are modeled as a keyless list and gNMI purportedly does not support keyless lists today: https://github.com/openconfig/reference/issues/166
I'm reaching out to OpenConfig folks for guidance
Ondatra has all the functionality to support this now, but it doesn't work yet because ygot doesn't support keyless lists: https://github.com/openconfig/ygot/issues/740 @robshakir will be approving a solution to the ygot bug, and once implemented, I just need to update Ondatra to that new ygot version
We're currently looking at removing keyless lists entirely from the OpenConfig models. There are three such instances, and this is one of them.
Opened a PR to convert as-segment
to a keyed list: https://github.com/openconfig/public/pull/750, I plan to discuss this at the next OpenConfig community meeting on Dec. 1
The latest update is that https://github.com/openconfig/public/pull/750 will be merged on January 26 and unblock this issue.
@greg-dennis https://github.com/openconfig/public/pull/750 has been merged
This is now available in v0.1.2
Hi,
Similar to issue #42 , we need support to retrieve as-path info from BGP rib on ATE.
Ixia ondatra API currently supports retrieving MED info in BGP Rib, but we don't have as-path retrieval support.
rib := at.NetworkInstance(ap.Name()).Protocol(telemetry.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP Peer 1").Bgp().Rib() med := rib.AttrSet(0).ASPATH().Get(t) ==> This is needed.
Thanks, Prabha