import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase;
import org.opendaylight.genius.mdsalutil.ActionInfo;
-import org.opendaylight.genius.mdsalutil.ActionType;
import org.opendaylight.genius.mdsalutil.FlowEntity;
import org.opendaylight.genius.mdsalutil.InstructionInfo;
import org.opendaylight.genius.mdsalutil.InstructionType;
import org.opendaylight.genius.mdsalutil.NwConstants;
import org.opendaylight.genius.mdsalutil.NxMatchFieldType;
import org.opendaylight.genius.mdsalutil.NxMatchInfo;
+import org.opendaylight.genius.mdsalutil.actions.ActionDrop;
+import org.opendaylight.genius.mdsalutil.actions.ActionNxResubmit;
import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
import org.opendaylight.genius.mdsalutil.packet.IPProtocols;
-import org.opendaylight.netvirt.aclservice.utils.AclClusterUtil;
import org.opendaylight.netvirt.aclservice.utils.AclConstants;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
private static final Logger LOG = LoggerFactory.getLogger(AclNodeListener.class);
private final IMdsalApiManager mdsalManager;
- private final AclClusterUtil aclClusterUtil;
private final AclserviceConfig config;
private final DataBroker dataBroker;
private SecurityGroupMode securityGroupMode = null;
@Inject
- public AclNodeListener(final IMdsalApiManager mdsalManager, DataBroker dataBroker, AclserviceConfig config,
- AclClusterUtil aclClusterUtil) {
+ public AclNodeListener(final IMdsalApiManager mdsalManager, DataBroker dataBroker, AclserviceConfig config) {
super(FlowCapableNode.class, AclNodeListener.class);
this.mdsalManager = mdsalManager;
- this.aclClusterUtil = aclClusterUtil;
this.dataBroker = dataBroker;
this.config = config;
}
@Override
protected void add(InstanceIdentifier<FlowCapableNode> key, FlowCapableNode dataObjectModification) {
LOG.trace("FlowCapableNode Added: key: {}", key);
- if (!aclClusterUtil.isEntityOwner()) {
- return;
- }
NodeKey nodeKey = key.firstKeyOf(Node.class);
BigInteger dpnId = MDSALUtil.getDpnIdFromNodeName(nodeKey.getId());
createTableDefaultEntries(dpnId);
List<MatchInfo> mkMatches = new ArrayList<>();
List<InstructionInfo> mkInstructions = new ArrayList<>();
List<ActionInfo> actionsInfos = new ArrayList<>();
- actionsInfos.add(new ActionInfo(ActionType.drop_action, new String[] {}));
+ actionsInfos.add(new ActionDrop());
mkInstructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos));
FlowEntity flowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.EGRESS_ACL_TABLE,
private void addLearnEgressAclTableMissFlow(BigInteger dpId) {
List<InstructionInfo> mkInstructions = new ArrayList<>();
List<ActionInfo> actionsInfos = new ArrayList<>();
- actionsInfos.add(new ActionInfo(ActionType.nx_resubmit,
- new String[] {Short.toString(NwConstants.EGRESS_LEARN_TABLE) }));
- actionsInfos.add(new ActionInfo(ActionType.nx_resubmit,
- new String[] {Short.toString(NwConstants.EGRESS_LEARN2_TABLE) }));
+ actionsInfos.add(new ActionNxResubmit(NwConstants.EGRESS_LEARN_TABLE));
+ actionsInfos.add(new ActionNxResubmit(NwConstants.EGRESS_LEARN2_TABLE));
mkInstructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos));
List<MatchInfo> mkMatches = new ArrayList<>();
mkMatches = new ArrayList<>();
mkInstructions = new ArrayList<>();
actionsInfos = new ArrayList<>();
- actionsInfos.add(new ActionInfo(ActionType.drop_action, new String[] {}));
+ actionsInfos.add(new ActionDrop());
mkInstructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos));
- FlowEntity flowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.EGRESS_LEARN_TABLE,
- "LEARN-" + getTableMissFlowId(NwConstants.EGRESS_LEARN_TABLE), 0,
- "Egress Learn ACL Table Miss Flow", 0, 0,
- AclConstants.COOKIE_ACL_BASE, mkMatches, mkInstructions);
- mdsalManager.installFlow(flowEntity);
-
- flowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.EGRESS_LEARN2_TABLE,
+ FlowEntity flowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.EGRESS_LEARN2_TABLE,
"LEARN-" + getTableMissFlowId(NwConstants.EGRESS_LEARN2_TABLE), 0,
"Egress Learn2 ACL Table Miss Flow", 0, 0,
AclConstants.COOKIE_ACL_BASE, mkMatches, mkInstructions);
short dispatcherTableId = NwConstants.EGRESS_LPORT_DISPATCHER_TABLE;
List<InstructionInfo> instructions = new ArrayList<>();
- actionsInfos.add(new ActionInfo(ActionType.nx_resubmit, new String[] {Short.toString(dispatcherTableId)}));
+ actionsInfos.add(new ActionNxResubmit(dispatcherTableId));
instructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos));
flowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.EGRESS_LEARN2_TABLE,
private void addLearnIngressAclTableMissFlow(BigInteger dpId) {
List<InstructionInfo> mkInstructions = new ArrayList<>();
List<ActionInfo> actionsInfos = new ArrayList<>();
- actionsInfos.add(new ActionInfo(ActionType.nx_resubmit,
- new String[] {Short.toString(NwConstants.INGRESS_LEARN_TABLE) }));
- actionsInfos.add(new ActionInfo(ActionType.nx_resubmit,
- new String[] {Short.toString(NwConstants.INGRESS_LEARN2_TABLE) }));
+ actionsInfos.add(new ActionNxResubmit(NwConstants.INGRESS_LEARN_TABLE));
+ actionsInfos.add(new ActionNxResubmit(NwConstants.INGRESS_LEARN2_TABLE));
mkInstructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos));
List<MatchInfo> mkMatches = new ArrayList<>();
mkMatches = new ArrayList<>();
mkInstructions = new ArrayList<>();
actionsInfos = new ArrayList<>();
- actionsInfos.add(new ActionInfo(ActionType.drop_action, new String[] {}));
+ actionsInfos.add(new ActionDrop());
mkInstructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos));
- FlowEntity flowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.INGRESS_LEARN_TABLE,
- "LEARN-" + getTableMissFlowId(NwConstants.INGRESS_LEARN_TABLE), 0,
- "Ingress Learn ACL Table Miss Flow", 0, 0,
- AclConstants.COOKIE_ACL_BASE, mkMatches, mkInstructions);
- mdsalManager.installFlow(flowEntity);
-
- flowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.INGRESS_LEARN2_TABLE,
+ FlowEntity flowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.INGRESS_LEARN2_TABLE,
"LEARN-" + getTableMissFlowId(NwConstants.INGRESS_LEARN2_TABLE), 0,
"Ingress Learn2 ACL Table Miss Flow", 0, 0,
AclConstants.COOKIE_ACL_BASE, mkMatches, mkInstructions);
short dispatcherTableId = NwConstants.LPORT_DISPATCHER_TABLE;
List<InstructionInfo> instructions = new ArrayList<>();
- actionsInfos.add(new ActionInfo(ActionType.nx_resubmit, new String[] {Short.toString(dispatcherTableId)}));
+ actionsInfos.add(new ActionNxResubmit(dispatcherTableId));
instructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos));
flowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.INGRESS_LEARN2_TABLE,
List<ActionInfo> actionsInfos = new ArrayList<>();
List<InstructionInfo> dispatcherInstructions = new ArrayList<>();
- actionsInfos.add(new ActionInfo(ActionType.nx_resubmit, new String[] {Short.toString(dispatcherTableId)}));
+ actionsInfos.add(new ActionNxResubmit(dispatcherTableId));
dispatcherInstructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos));
nextTblFlowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.INGRESS_ACL_FILTER_TABLE,
List<ActionInfo> actionsInfos = new ArrayList<>();
List<InstructionInfo> instructions = new ArrayList<>();
- actionsInfos.add(new ActionInfo(ActionType.nx_resubmit, new String[] {Short.toString(dispatcherTableId)}));
+ actionsInfos.add(new ActionNxResubmit(dispatcherTableId));
instructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos));
nextTblFlowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.EGRESS_ACL_FILTER_TABLE,
synMatches.add(new MatchInfo(MatchFieldType.tcp_flags, new long[] { AclConstants.TCP_FLAG_SYN }));
List<ActionInfo> dropActionsInfos = new ArrayList<>();
- dropActionsInfos.add(new ActionInfo(ActionType.drop_action, new String[] {}));
+ dropActionsInfos.add(new ActionDrop());
List<InstructionInfo> synInstructions = new ArrayList<>();
synInstructions.add(new InstructionInfo(InstructionType.apply_actions, dropActionsInfos));
List<ActionInfo> actionsInfos = new ArrayList<>();
List<InstructionInfo> instructions = new ArrayList<>();
- actionsInfos.add(new ActionInfo(ActionType.nx_resubmit, new String[] {Short.toString(dispatcherTableId)}));
+ actionsInfos.add(new ActionNxResubmit(dispatcherTableId));
instructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos));
FlowEntity nextTblFlowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.EGRESS_ACL_FILTER_TABLE,
synMatches.add(new MatchInfo(MatchFieldType.tcp_flags, new long[] { AclConstants.TCP_FLAG_SYN }));
List<ActionInfo> synActionsInfos = new ArrayList<>();
- synActionsInfos.add(new ActionInfo(ActionType.drop_action, new String[] {}));
+ synActionsInfos.add(new ActionDrop());
List<InstructionInfo> synInstructions = new ArrayList<>();
synInstructions.add(new InstructionInfo(InstructionType.apply_actions, synActionsInfos));
List<ActionInfo> actionsInfos = new ArrayList<>();
List<InstructionInfo> dispatcherInstructions = new ArrayList<>();
- actionsInfos.add(new ActionInfo(ActionType.nx_resubmit, new String[] {Short.toString(dispatcherTableId)}));
+ actionsInfos.add(new ActionNxResubmit(dispatcherTableId));
dispatcherInstructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos));
FlowEntity nextTblFlowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.INGRESS_ACL_FILTER_TABLE,
List<MatchInfo> mkMatches = new ArrayList<>();
List<InstructionInfo> mkInstructions = new ArrayList<>();
List<ActionInfo> actionsInfos = new ArrayList<>();
- actionsInfos.add(new ActionInfo(ActionType.drop_action, new String[] {}));
+ actionsInfos.add(new ActionDrop());
mkInstructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos));
FlowEntity flowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.INGRESS_ACL_TABLE,
.TRACKED_REL_CT_STATE, AclConstants.TRACKED_REL_CT_STATE_MASK, dispatcherTableId, tableId, write );
programConntrackDropRule(dpnId, AclConstants.CT_STATE_NEW_PRIORITY_DROP,"Tracked_New",
AclConstants.TRACKED_NEW_CT_STATE, AclConstants.TRACKED_NEW_CT_STATE_MASK, tableId, write );
- programConntrackDropRule(dpnId, AclConstants.CT_STATE_NEW_PRIORITY_DROP, "Tracked_Invalid",
+ programConntrackDropRule(dpnId, AclConstants.CT_STATE_TRACKED_EXIST_PRIORITY, "Tracked_Invalid",
AclConstants.TRACKED_INV_CT_STATE, AclConstants.TRACKED_INV_CT_STATE_MASK, tableId, write );
}
* Adds the rule to forward the packets known packets.
*
* @param dpId the dpId
- * @param lportTag the lport tag
* @param priority the priority of the flow
* @param flowId the flowId
* @param conntrackState the conntrack state of the packets thats should be
* send
* @param conntrackMask the conntrack mask
+ * @param dispatcherTableId the dispatcher table id
+ * @param tableId the table id
* @param addOrRemove whether to add or remove the flow
*/
private void programConntrackForwardRule(BigInteger dpId, Integer priority, String flowId,
* Adds the rule to drop the unknown/invalid packets .
*
* @param dpId the dpId
- * @param lportTag the lport tag
* @param priority the priority of the flow
* @param flowId the flowId
* @param conntrackState the conntrack state of the packets thats should be
* send
* @param conntrackMask the conntrack mask
+ * @param tableId the table id
* @param addOrRemove whether to add or remove the flow
*/
private void programConntrackDropRule(BigInteger dpId, Integer priority, String flowId,
List<InstructionInfo> instructions = new ArrayList<>();
List<ActionInfo> actionsInfos = new ArrayList<>();
- actionsInfos.add(new ActionInfo(ActionType.drop_action, new String[] {}));
- instructions.add(new InstructionInfo(InstructionType.write_actions, actionsInfos));
+ actionsInfos.add(new ActionDrop());
+ instructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos));
flowId = "Fixed_Conntrk_NewDrop_" + dpId + "_" + flowId + tableId;
syncFlow(dpId, tableId, flowId, priority, "ACL", 0, 0,
AclConstants.COOKIE_ACL_BASE, matches, instructions, addOrRemove);
* Gets the dispatcher table resubmit instructions.
*
* @param actionsInfos the actions infos
+ * @param dispatcherTableId the dispatcher table id
* @return the instructions for dispatcher table resubmit
*/
private List<InstructionInfo> getDispatcherTableResubmitInstructions(List<ActionInfo> actionsInfos,
short dispatcherTableId) {
List<InstructionInfo> instructions = new ArrayList<>();
- actionsInfos.add(new ActionInfo(ActionType.nx_resubmit, new String[] {Short.toString(dispatcherTableId)}));
+ actionsInfos.add(new ActionNxResubmit(dispatcherTableId));
instructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos));
return instructions;
}