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.
http://www.batfish.org
Apache License 2.0
1.14k stars 230 forks source link

EIGRP on Cisco ASA - REQUEUEFAILURE #8962

Open mthomati opened 6 months ago

mthomati commented 6 months ago

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?

dhalperi commented 5 months ago

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

dhalperi commented 5 months ago

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.

mthomati commented 5 months ago

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}}
dhalperi commented 5 months ago

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.