package org.opennaas.extensions.ofertie.ncl.helpers;
import java.util.ArrayList;
import java.util.List;
import org.opennaas.extensions.ofertie.ncl.provisioner.api.model.FlowRequest;
import org.opennaas.extensions.openflowswitch.model.FloodlightOFAction;
import org.opennaas.extensions.openflowswitch.model.FloodlightOFMatch;
import org.opennaas.extensions.sdnnetwork.model.Route;
import org.opennaas.extensions.sdnnetwork.model.SDNNetworkOFFlow;
/**
*
* @author Adrian Rosello (i2CAT)
*
*/
public abstract class FlowRequestParser {
public static SDNNetworkOFFlow parseFlowRequestIntoSDNFlow(FlowRequest flowRequest, Route route) {
SDNNetworkOFFlow sdnNetworkOFFlow = new SDNNetworkOFFlow();
List<FloodlightOFAction> actions = new ArrayList<FloodlightOFAction>();
FloodlightOFMatch match = buildOFMatchFromRequest(flowRequest, route);
FloodlightOFAction forwardingAction = buildForwardingActionFromRequest(flowRequest, route);
actions.add(forwardingAction);
sdnNetworkOFFlow.setMatch(match);
sdnNetworkOFFlow.setRoute(route);
sdnNetworkOFFlow.setActions(actions);
return sdnNetworkOFFlow;
}
public static FloodlightOFAction buildForwardingActionFromRequest(FlowRequest flowRequest, Route route) {
FloodlightOFAction action = new FloodlightOFAction();
int lastConnectionIndex = route.getNetworkConnections().size() - 1;
String dstPort = String.valueOf(route.getNetworkConnections().get(lastConnectionIndex).getDestination().getId());
action.setType("output");
action.setValue(dstPort);
return action;
}
public static FloodlightOFMatch buildOFMatchFromRequest(FlowRequest flowRequest, Route route) {
FloodlightOFMatch match = new FloodlightOFMatch();
match.setSrcPort(String.valueOf(flowRequest.getSourcePort()));
match.setDstPort(String.valueOf(flowRequest.getDestinationPort()));
match.setTosBits(String.valueOf(flowRequest.getTos()));
if (flowRequest.getSourceIPAddress() == null || flowRequest.getSourceIPAddress().isEmpty()) {
// remove empty strings, use null instead
match.setSrcIp(null);
} else {
match.setSrcIp(flowRequest.getSourceIPAddress());
}
if (flowRequest.getDestinationIPAddress() == null || flowRequest.getDestinationIPAddress().isEmpty()) {
// remove empty strings, use null instead
match.setDstIp(null);
} else {
match.setDstIp(flowRequest.getDestinationIPAddress());
}
String ingressPort = route.getNetworkConnections().get(0).getSource().getId();
match.setIngressPort(ingressPort);
return match;
}
}