Originally reported by ebrjohn
The classifier is being created in table=0 as expected, but when the classifier is deleted, it tries to delete from table=86. Here are the LOGs:
Classifier flow creation:
2017-10-30 12:06:03,763 | INFO | pool-67-thread-1 | FlowSetWriterTask | 348 - org.opendaylight.sfc.openflow-utils - 0.7.0.SNAPSHOT | FlowSetWriterTask SFF [openflow:156930464280132] NodeKey [NodeKey [_id=Uri [_value=openflow:156930464280132]]] TableKey [TableKey [_id=0]] FlowKey [FlowKey [_id=Uri [_value=MatchAny]]] 2017-10-30 12:06:03,764 | INFO | pool-67-thread-1 | FlowSetWriterTask | 348 - org.opendaylight.sfc.openflow-utils - 0.7.0.SNAPSHOT | FlowSetWriterTask SFF [openflow:156930464280132] NodeKey [NodeKey [_id=Uri [_value=openflow:156930464280132]]] TableKey [TableKey [_id=0]] FlowKey [FlowKey [_id=Uri [_value=sff1ACL1ACE1.in]]] 2017-10-30 12:06:03,778 | INFO | pool-67-thread-1 | FlowSetWriterTask | 348 - org.opendaylight.sfc.openflow-utils - 0.7.0.SNAPSHOT | FlowSetWriterTask SFF [openflow:156930464280132] NodeKey [NodeKey [_id=Uri [_value=openflow:156930464280132]]] TableKey [TableKey [_id=0]] FlowKey [FlowKey [_id=Uri [_value=sff1ACL1ACE1.out]]]
Classifier flow deletion:
2017-10-30 12:07:26,820 | INFO | pool-67-thread-1 | FlowSetRemoverTask | 348 - org.opendaylight.sfc.openflow-utils - 0.7.0.SNAPSHOT | FlowSetRemoverTask SFF [openflow:156930464280132] NodeKey [NodeKey [_id=Uri [_value=openflow:156930464280132]]] TableKey [TableKey [_id=82]] FlowKey [FlowKey [_id=Uri [_value=sff1ACL1ACE1.in]]] 2017-10-30 12:07:26,820 | INFO | pool-67-thread-1 | FlowSetRemoverTask | 348 - org.opendaylight.sfc.openflow-utils - 0.7.0.SNAPSHOT | FlowSetRemoverTask SFF [openflow:156930464280132] NodeKey [NodeKey [_id=Uri [_value=openflow:156930464280132]]] TableKey [TableKey [_id=82]] FlowKey [FlowKey [_id=Uri [_value=sff1ACL1ACE1.out]]]
The TableKey is different when creating and deleting. Narrowed it down to where in the code this happens, but Im not sure what's going on there:
/home/bjohnson/projects/odl/sfc/sfc-classifiers/sfc-scf-openflow/src/main/java/org/opendaylight/sfc/scfofrenderer/processors/NshProcessor.java
Starting at Line 100
// add a classifier if (addClassifier) { // write the flows into the classifier LOG.info("processAce - About to create flows"); theFlows.add(classifierInterface.initClassifierTable(nodeName)); theFlows.add(classifierInterface.createClassifierOutFlow(flowKey, match, nsh.get(), nodeName)); theFlows.addAll(classifierInterface.createDpdkFlows(nodeName, nsh.get().getNshNsp())); } else { LOG.info("processAce - About to delete the *out* flows"); theFlows.add(classifierHandler.deleteFlowFromTable(nodeName, flowKey, ClassifierGeniusIntegration.getClassifierTable())); <== This thing always returns NwConstants.SFC_TRANSPORT_CLASSIFIER_TABLE = 86 }