@@ -208,3 +208,218 @@ func TestBGPToOpenConfig(t *testing.T) {
208208 t .Errorf ("unexpected diff for '%s': %s\n " , "BGP integration test" , diff )
209209 }
210210}
211+
212+ func TestBGPToOpenConfigTimersAndAggretates (t * testing.T ) {
213+ // some vars because we need pointers!
214+ var as65000 uint32 = 65000
215+ var as65001 uint32 = 65001
216+ var flagTrue = true
217+ var ebgpDistance221 uint8 = 221
218+ var ibgpDistance222 uint8 = 222
219+ var restartTime uint16 = 60
220+ var routerID5001 = "127.0.0.1:5001"
221+ var ecmpMaximumPaths64 uint32 = 64
222+ var maxPrefixes10 uint32 = 10
223+ var awesomePassword = "awesomepassword"
224+ var descriptionToTOR01 = "TO:TOR01-01"
225+ var neighborAddress0 = "192.0.2.0"
226+
227+ globalConfig := cmdbBGP.BGPGlobal {
228+ Device : struct {
229+ Name string "json:\" name\" validate:\" required\" "
230+ }{
231+ Name : "spine01-01" ,
232+ },
233+ LocalAsn : common.ASN {
234+ Number : & as65001 ,
235+ Organization : "Lab-65001" ,
236+ },
237+ RouterID : "127.0.0.1:5001" ,
238+ EBGPAdministrativeDistance : & ebgpDistance221 ,
239+ IBGPAdministrativeDistance : & ibgpDistance222 ,
240+ GracefulRestartEnabled : & flagTrue ,
241+ GracefulRestartTime : & restartTime ,
242+ EcmpEnabled : & flagTrue ,
243+ EcmpMaximumPaths : & ecmpMaximumPaths64 ,
244+ AfiSafis : []* cmdbBGP.GlobalAfiSafi {
245+ {
246+ Name : cmdbBGP .IPv4Unicast ,
247+ Aggregates : []cmdbBGP.Network {{Prefix : "10.0.0.0/16" }},
248+ RedistributedNetworks : []cmdbBGP.Network {{Prefix : "192.2.0.0/24" }, {Prefix : "192.2.1.0/24" }},
249+ },
250+ },
251+ }
252+
253+ sessions := []* cmdbBGP.Session {
254+ {
255+ PeerA : cmdbBGP.DeviceSession {
256+ Device : struct {
257+ Name string `json:"name" validate:"required"`
258+ }{
259+ Name : "tor01-01" ,
260+ },
261+ LocalAddress : cmdbBGP.Address {
262+ Address : types.CIDR {
263+ IP : net .ParseIP ("192.0.2.0" ),
264+ Netmask : 31 ,
265+ },
266+ Family : 4 ,
267+ },
268+ LocalAsn : common.ASN {
269+ Number : & as65000 ,
270+ Organization : "Lab-65000" ,
271+ },
272+ AfiSafis : []* cmdbBGP.AfiSafi {
273+ {
274+ Name : "ipv4-unicast" ,
275+ RoutePolicyIn : & cmdbRP.RoutePolicyLite {
276+ Name : "LAN:IN:MAINTENANCE" ,
277+ Description : "MAINTENANCE MODE" ,
278+ },
279+ RoutePolicyOut : & cmdbRP.RoutePolicyLite {
280+ Name : "LAN:OUT:MAINTENANCE" ,
281+ Description : "MAINTENANCE MODE" ,
282+ },
283+ },
284+ },
285+ PeerGroup : nil ,
286+ RoutePolicyIn : & cmdbRP.RoutePolicyLite {
287+ Name : "LAN:IN" ,
288+ Description : "" ,
289+ },
290+ RoutePolicyOut : & cmdbRP.RoutePolicyLite {
291+ Name : "SERVER:PROD:OUT" ,
292+ Description : "Server VLAN prod" ,
293+ },
294+ Description : "TO:SPINE01-01" ,
295+ MaximumPrefixes : 128 ,
296+ EnforceFirstAs : true ,
297+ Enabled : & flagTrue ,
298+ },
299+ PeerB : cmdbBGP.DeviceSession {
300+ Device : struct {
301+ Name string `json:"name" validate:"required"`
302+ }{
303+ Name : "spine01-01" ,
304+ },
305+ LocalAddress : cmdbBGP.Address {
306+ Address : types.CIDR {
307+ IP : net .ParseIP ("192.0.2.1" ),
308+ Netmask : 31 ,
309+ },
310+ Family : 4 ,
311+ },
312+ LocalAsn : common.ASN {
313+ Number : & as65001 ,
314+ Organization : "Lab-65001" ,
315+ },
316+ AfiSafis : []* cmdbBGP.AfiSafi {
317+ {
318+ Name : "ipv4-unicast" ,
319+ RoutePolicyIn : & cmdbRP.RoutePolicyLite {
320+ Name : "SERVER:PROD:MAINTENANCE:IN" ,
321+ Description : "" ,
322+ },
323+ RoutePolicyOut : & cmdbRP.RoutePolicyLite {
324+ Name : "LAN:MAINTENANCE:OUT" ,
325+ Description : "" ,
326+ },
327+ },
328+ },
329+ PeerGroup : nil ,
330+ RoutePolicyIn : & cmdbRP.RoutePolicyLite {
331+ Name : "SERVER:PROD:IN" ,
332+ Description : "" ,
333+ },
334+ RoutePolicyOut : & cmdbRP.RoutePolicyLite {
335+ Name : "LAN:OUT" ,
336+ Description : "" ,
337+ },
338+ Description : "TO:TOR01-01" ,
339+ MaximumPrefixes : 10 ,
340+ EnforceFirstAs : true ,
341+ Enabled : & flagTrue ,
342+ DelayOpenTimer : 5 ,
343+ },
344+ Password : awesomePassword ,
345+ },
346+ }
347+
348+ expectedDelayOpenTimer := uint16 (5 )
349+ want := & openconfig.NetworkInstance_Protocol_Bgp {
350+ Global : & openconfig.NetworkInstance_Protocol_Bgp_Global {
351+ As : & as65001 ,
352+ DefaultRouteDistance : & openconfig.NetworkInstance_Protocol_Bgp_Global_DefaultRouteDistance {
353+ ExternalRouteDistance : & ebgpDistance221 ,
354+ InternalRouteDistance : & ibgpDistance222 ,
355+ },
356+ GracefulRestart : & openconfig.NetworkInstance_Protocol_Bgp_Global_GracefulRestart {
357+ Enabled : & flagTrue ,
358+ RestartTime : & restartTime ,
359+ },
360+ RouterId : & routerID5001 ,
361+ UseMultiplePaths : & openconfig.NetworkInstance_Protocol_Bgp_Global_UseMultiplePaths {
362+ Enabled : & flagTrue ,
363+ Ebgp : & openconfig.NetworkInstance_Protocol_Bgp_Global_UseMultiplePaths_Ebgp {
364+ MaximumPaths : & ecmpMaximumPaths64 ,
365+ },
366+ Ibgp : & openconfig.NetworkInstance_Protocol_Bgp_Global_UseMultiplePaths_Ibgp {
367+ MaximumPaths : & ecmpMaximumPaths64 ,
368+ },
369+ },
370+ AfiSafi : map [openconfig.E_BgpTypes_AFI_SAFI_TYPE ]* openconfig.NetworkInstance_Protocol_Bgp_Global_AfiSafi {
371+ openconfig .BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST : {
372+ AfiSafiName : openconfig .BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST ,
373+ Aggregates : []string {"10.0.0.0/16" },
374+ RedistributedNetworks : []string {"192.2.0.0/24" , "192.2.1.0/24" },
375+ },
376+ },
377+ },
378+ Neighbor : map [string ]* openconfig.NetworkInstance_Protocol_Bgp_Neighbor {
379+ "192.0.2.0" : {
380+ AfiSafi : map [openconfig.E_BgpTypes_AFI_SAFI_TYPE ]* openconfig.NetworkInstance_Protocol_Bgp_Neighbor_AfiSafi {
381+ openconfig .BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST : {
382+ AfiSafiName : openconfig .BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST ,
383+ ApplyPolicy : & openconfig.NetworkInstance_Protocol_Bgp_Neighbor_AfiSafi_ApplyPolicy {
384+ ExportPolicy : []string {"LAN:MAINTENANCE:OUT" },
385+ ImportPolicy : []string {"SERVER:PROD:MAINTENANCE:IN" },
386+ },
387+ Enabled : & flagTrue ,
388+ Ipv4Unicast : & openconfig.NetworkInstance_Protocol_Bgp_Neighbor_AfiSafi_Ipv4Unicast {
389+ PrefixLimit : & openconfig.NetworkInstance_Protocol_Bgp_Neighbor_AfiSafi_Ipv4Unicast_PrefixLimit {
390+ MaxPrefixes : & maxPrefixes10 ,
391+ },
392+ },
393+ },
394+ },
395+ ApplyPolicy : & openconfig.NetworkInstance_Protocol_Bgp_Neighbor_ApplyPolicy {
396+ ExportPolicy : []string {"LAN:OUT" },
397+ ImportPolicy : []string {"SERVER:PROD:IN" },
398+ },
399+ AuthPassword : & awesomePassword ,
400+ Description : & descriptionToTOR01 ,
401+ Enabled : & flagTrue ,
402+ LocalAs : & as65001 ,
403+ NeighborAddress : & neighborAddress0 ,
404+ PeerAs : & as65000 ,
405+ PeerGroup : nil ,
406+ PeerType : 0 ,
407+ RemovePrivateAs : 0 ,
408+ SendCommunity : 0 ,
409+ Timers : & openconfig.NetworkInstance_Protocol_Bgp_Neighbor_Timers {
410+ DelayOpenTimer : & expectedDelayOpenTimer ,
411+ },
412+ },
413+ },
414+ PeerGroup : map [string ]* openconfig.NetworkInstance_Protocol_Bgp_PeerGroup {},
415+ }
416+
417+ ret , err := bgp .BGPToOpenconfig ("spine01-01" , & globalConfig , sessions , nil )
418+ if err != nil {
419+ t .Errorf ("failed to convert BGP to OpenConfig" )
420+ }
421+
422+ if diff := cmp .Diff (ret , want ); diff != "" {
423+ t .Errorf ("unexpected diff for '%s': %s\n " , "BGP integration test" , diff )
424+ }
425+ }
0 commit comments