blob: 2403c5ee88a02545d90762d20e91d5d263c63dcf [file] [log] [blame]
/*
* Copyright 2020-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.net;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.onosproject.core.GroupId;
import org.onosproject.net.flow.FlowEntry;
import org.onosproject.net.flow.TrafficSelector;
import org.onosproject.net.group.Group;
import java.util.List;
import java.util.Map;
/**
* Represents the input of the pipeline traceable processing.
*/
public class PipelineTraceableInput {
// Input state for the traceable behavior
TrafficSelector ingressPacket;
ConnectPoint ingressPort;
// List here all possible device state using
// possibly an optimized reference
List<FlowEntry> flows = Lists.newArrayList();
Map<GroupId, Group> groups = Maps.newHashMap();
public PipelineTraceableInput(TrafficSelector ingressPacket, ConnectPoint ingressPort,
List<DataPlaneEntity> deviceState) {
this.ingressPacket = ingressPacket;
this.ingressPort = ingressPort;
processDeviceState(deviceState);
}
// Init internal device state (flows, groups, etc)
private void processDeviceState(List<DataPlaneEntity> deviceState) {
deviceState.forEach(entity -> {
if (entity.getType() == DataPlaneEntity.Type.FLOWRULE) {
flows.add(entity.getFlowEntry());
} else if (entity.getType() == DataPlaneEntity.Type.GROUP) {
groups.put(entity.getGroupEntry().id(), entity.getGroupEntry());
}
});
}
/**
* Getter for the ingress packet.
*
* @return the ingress packet
*/
public TrafficSelector ingressPacket() {
return ingressPacket;
}
/**
* Getter for the ingress port.
*
* @return the ingress port
*/
public ConnectPoint ingressPort() {
return ingressPort;
}
/**
* Getter for the flows.
*
* @return the flows
*/
public List<FlowEntry> flows() {
return flows;
}
/**
* Getter for the groups.
*
* @return the groups
*/
public Map<GroupId, Group> groups() {
return groups;
}
/**
* Returns the group associated with the given group id.
*
* @param groupId the group id
* @return the group, otherwise null.
*/
public Group getGroup(GroupId groupId) {
return groups.get(groupId);
}
}