batfish / batfish

Batfish is a network configuration analysis tool that can find bugs and guarantee the correctness of (planned or current) network configurations. It enables network engineers to rapidly and safely evolve their network, without fear of outages or security breaches.

Home Page:http://www.batfish.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

EIGRP on Cisco ASA - REQUEUEFAILURE

mthomati opened this issue · comments

I encountered the following error when running a routing related question layer3Edges against a Cisco ASA config located in my snapshot.

status: REQUEUEFAILURE
.... 2024-02-22 11:22:44.684000-06:00 Couldn't requeue after unblocking.
Cannot queue dataplane dependent work for fe0edfb9-c7b9-450b-a02a-ce44c1e6038d: Status is DATAPLANING_FAIL but no incomplete dataplaning work exists.

Work finished with status REQUEUEFAILURE
work_item: {"containerName": "sww-ama-network", "id": "b06b4b54-d7c0-4351-8e80-c8c889566803", "requestParams": {"answer": "", "questionname": "__layer3Edges_e44dd22a-102f-437e-82f5-5b793975e1d6", "testrig": "sww-ama-lab"}, "testrigName": "sww-ama-lab"}
task_details: {'args': None, 'batches': [{'completed': 0, 'description': "Couldn't requeue after unblocking.\nCannot queue dataplane dependent work for fe0edfb9-c7b9-450b-a02a-ce44c1e6038d: Status is DATAPLANING_FAIL but no incomplete dataplaning work exists", 'size': 0, 'startDate': '2024-02-22T17:22:44.684+00:00'}], 'errMessage': None, 'obtained': '2024-02-22T17:22:44.684+00:00', 'status': 'RequeueFailure', 'terminated': None}

However, when I remove the EIGRP configuration from the ASA:

router eigrp 90
 network 10.1.4.0 255.255.254.0
 network 192.168.227.64 255.255.255.192
 network 192.168.231.64 255.255.255.192
 network 10.1.94.72 255.255.255.248
 network 192.168.231.208 255.255.255.248
 passive-interface DMZ
 passive-interface DMZ2
 redistribute static metric 100000 100 1 255 1500 route-map STATIC-2-EIGRP

Batfish is able to parse the config for any routing related questions such as layer3Edges. The issue is with that EIGRP config and Batfish unable to parse it correctly. Please help?

I wasn't able to run the example code you provided. Can you please use the bug report issue template?

The other thing you might try for debugging dataplane issues is running bf.generate_dataplane() separately and getting back info in the stack trace there.

Hi, I can post a bug report if that is better to put this output, below is the output generated from bf_generate_dataplane:

Work terminated abnormally
work_item: {"containerName": "sww-ama-demo-network", "id": "aada67b8-ed3a-46a8-8fc7-220e1eedfc03", "requestParams": {"dp": "", "testrig": "sww-ama-demo-lab"}, "testrigName": "sww-ama-demo-lab"}

log: Loading configurations for NetworkSnapshot{network=3fe99444-f884-41e5-a864-001e87fab09a, snapshot=d0c1b6a4-8c57-4fc1-9706-6ef0455d8818}
Loading configurations for NetworkSnapshot{network=3fe99444-f884-41e5-a864-001e87fab09a, snapshot=d0c1b6a4-8c57-4fc1-9706-6ef0455d8818}
Loading configurations for NetworkSnapshot{network=3fe99444-f884-41e5-a864-001e87fab09a, snapshot=d0c1b6a4-8c57-4fc1-9706-6ef0455d8818}
Loading configurations for NetworkSnapshot{network=3fe99444-f884-41e5-a864-001e87fab09a, snapshot=d0c1b6a4-8c57-4fc1-9706-6ef0455d8818}
Exception in container:3fe99444-f884-41e5-a864-001e87fab09a, testrig:d0c1b6a4-8c57-4fc1-9706-6ef0455d8818; exception:java.lang.ArithmeticException
       at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
       at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
       at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
       at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
       at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:603)
       at java.base/java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:678)
       at java.base/java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:737)
       at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:159)
       at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:173)
       at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)
       at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
       at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:661)
       at org.batfish.dataplane.ibdp.IncrementalBdpEngine.computeDependentRoutesIteration(IncrementalBdpEngine.java:659)
       at org.batfish.dataplane.ibdp.IncrementalBdpEngine.computeNonMonotonicPortionOfDataPlane(IncrementalBdpEngine.java:861)
       at org.batfish.dataplane.ibdp.IncrementalBdpEngine.computeDataPlane(IncrementalBdpEngine.java:336)
       at org.batfish.dataplane.ibdp.IncrementalDataPlanePlugin.computeDataPlane(IncrementalDataPlanePlugin.java:51)
       at org.batfish.main.Batfish.computeDataPlane(Batfish.java:716)
       at org.batfish.main.Batfish.run(Batfish.java:2063)
       at org.batfish.main.Driver.lambda$runBatfish$0(Driver.java:155)
       at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.ArithmeticException: / by zero
       at org.batfish.datamodel.eigrp.ClassicMetric.costV1(ClassicMetric.java:92)
       at org.batfish.datamodel.eigrp.ClassicMetric.cost(ClassicMetric.java:82)
       at org.batfish.datamodel.EigrpRoute.getCompositeCost(EigrpRoute.java:46)
       at java.base/java.util.Comparator.lambda$comparing$77a9974f$1(Comparator.java:469)
       at java.base/java.util.Comparator.lambda$thenComparing$36697e65$1(Comparator.java:216)
       at org.batfish.dataplane.rib.EigrpInternalRib.comparePreference(EigrpInternalRib.java:21)
       at org.batfish.dataplane.rib.EigrpInternalRib.comparePreference(EigrpInternalRib.java:8)
       at org.batfish.dataplane.rib.RibTree.mergeRoute(RibTree.java:166)
       at org.batfish.dataplane.rib.AbstractRib.mergeRouteGetDelta(AbstractRib.java:215)
       at org.batfish.dataplane.ibdp.EigrpRoutingProcess.processInternalRoutesFromNeighbor(EigrpRoutingProcess.java:317)
       at org.batfish.dataplane.ibdp.EigrpRoutingProcess.lambda$processInternalRoutes$2(EigrpRoutingProcess.java:288)
       at com.google.common.collect.ImmutableSortedMap.forEach(ImmutableSortedMap.java:788)
       at org.batfish.dataplane.ibdp.EigrpRoutingProcess.processInternalRoutes(EigrpRoutingProcess.java:287)
       at org.batfish.dataplane.ibdp.EigrpRoutingProcess.executeIteration(EigrpRoutingProcess.java:174)
       at org.batfish.dataplane.ibdp.VirtualRouter.lambda$eigrpIteration$37(VirtualRouter.java:1583)
       at java.base/java.lang.Iterable.forEach(Iterable.java:75)
       at org.batfish.dataplane.ibdp.VirtualRouter.eigrpIteration(VirtualRouter.java:1583)
       at org.batfish.dataplane.ibdp.IncrementalBdpEngine.lambda$computeDependentRoutesIteration$10(IncrementalBdpEngine.java:659)
       at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
       at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
       at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
       at java.base/java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:290)
       at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:746)
       at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
       at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
       at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
       at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
       at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
{"answerElements":[{"class":"org.batfish.common.BatfishException$BatfishStackTrace","answer":["org.batfish.common.BatfishException: Batfish job failed","   at org.batfish.main.Driver.lambda$runBatfish$0(Driver.java:195)","   at java.base/java.lang.Thread.run(Thread.java:829)","Caused by: java.lang.ArithmeticException","   at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)","   at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)","   at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)","   at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)","   at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:603)","   at java.base/java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:678)","   at java.base/java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:737)","   at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:159)","   at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:173)","   at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)","   at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)","   at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:661)","   at org.batfish.dataplane.ibdp.IncrementalBdpEngine.computeDependentRoutesIteration(IncrementalBdpEngine.java:659)","   at org.batfish.dataplane.ibdp.IncrementalBdpEngine.computeNonMonotonicPortionOfDataPlane(IncrementalBdpEngine.java:861)","   at org.batfish.dataplane.ibdp.IncrementalBdpEngine.computeDataPlane(IncrementalBdpEngine.java:336)","   at org.batfish.dataplane.ibdp.IncrementalDataPlanePlugin.computeDataPlane(IncrementalDataPlanePlugin.java:51)","   at org.batfish.main.Batfish.computeDataPlane(Batfish.java:716)","   at org.batfish.main.Batfish.run(Batfish.java:2063)","   at org.batfish.main.Driver.lambda$runBatfish$0(Driver.java:155)","   ... 1 more","Caused by: java.lang.ArithmeticException: / by zero","   at org.batfish.datamodel.eigrp.ClassicMetric.costV1(ClassicMetric.java:92)","   at org.batfish.datamodel.eigrp.ClassicMetric.cost(ClassicMetric.java:82)","   at org.batfish.datamodel.EigrpRoute.getCompositeCost(EigrpRoute.java:46)","   at java.base/java.util.Comparator.lambda$comparing$77a9974f$1(Comparator.java:469)","   at java.base/java.util.Comparator.lambda$thenComparing$36697e65$1(Comparator.java:216)","   at org.batfish.dataplane.rib.EigrpInternalRib.comparePreference(EigrpInternalRib.java:21)","   at org.batfish.dataplane.rib.EigrpInternalRib.comparePreference(EigrpInternalRib.java:8)","   at org.batfish.dataplane.rib.RibTree.mergeRoute(RibTree.java:166)","   at org.batfish.dataplane.rib.AbstractRib.mergeRouteGetDelta(AbstractRib.java:215)","   at org.batfish.dataplane.ibdp.EigrpRoutingProcess.processInternalRoutesFromNeighbor(EigrpRoutingProcess.java:317)","   at org.batfish.dataplane.ibdp.EigrpRoutingProcess.lambda$processInternalRoutes$2(EigrpRoutingProcess.java:288)","   at com.google.common.collect.ImmutableSortedMap.forEach(ImmutableSortedMap.java:788)","   at org.batfish.dataplane.ibdp.EigrpRoutingProcess.processInternalRoutes(EigrpRoutingProcess.java:287)","   at org.batfish.dataplane.ibdp.EigrpRoutingProcess.executeIteration(EigrpRoutingProcess.java:174)","   at org.batfish.dataplane.ibdp.VirtualRouter.lambda$eigrpIteration$37(VirtualRouter.java:1583)","   at java.base/java.lang.Iterable.forEach(Iterable.java:75)","   at org.batfish.dataplane.ibdp.VirtualRouter.eigrpIteration(VirtualRouter.java:1583)","   at org.batfish.dataplane.ibdp.IncrementalBdpEngine.lambda$computeDependentRoutesIteration$10(IncrementalBdpEngine.java:659)","   at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)","   at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)","   at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)","   at java.base/java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:290)","   at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:746)","   at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)","   at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)","   at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)","   at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)","   at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)",""]}],"status":"FAILURE","summary":{"numFailed":0,"numPassed":0,"numResults":0}}


Yeah I think we need a runnable repro. The stack trace helps, but it makes it look like interface BW is being treated as zero. need more data for that.