/*
* Copyright (c) 2016, 2017 Ericsson Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.sfc.scfofrenderer;
import java.util.ArrayList;
import java.util.List;
import org.opendaylight.sfc.util.openflow.SfcOpenflowUtils;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.acl.rev151001.Actions1;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.acl.rev151001.Actions1Builder;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.acl.rev151001.access.lists.acl.access.list.entries.ace.actions.sfc.action.AclRenderedServicePathBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.Ace;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.AceBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.ace.Actions;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.ace.ActionsBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.ace.Matches;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.ace.MatchesBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.ace.matches.ace.type.AceIp;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.ace.matches.ace.type.AceIpBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.ace.matches.ace.type.ace.ip.ace.ip.version.AceIpv4;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.ace.matches.ace.type.ace.ip.ace.ip.version.AceIpv4Builder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.packet.fields.rev160218.acl.transport.header.fields.DestinationPortRangeBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.packet.fields.rev160218.acl.transport.header.fields.SourcePortRangeBuilder;
public class ClassifierAclDataBuilder {
public List<Ace> mockAces(final int numberOfMatches) {
String srcNetwork = "192.168.2.0/24";
String dstNetwork = "192.168.2.0/24";
String rspPrefix = "RSP_";
int srcLowerPort = 80;
int dstLowerPort = 80;
short protocol = SfcOpenflowUtils.IP_PROTOCOL_TCP;
List<Ace> theAces = new ArrayList<>();
for (int i = 0; i < numberOfMatches; i++) {
String rspName = rspPrefix + Integer.toString(i / 2 + 1);
theAces.add(new AceBuilder().setRuleName(String.format("ACE%d", i)).setActions(buildActions(rspName))
.setMatches(buildMatches(srcNetwork, dstNetwork, srcLowerPort, dstLowerPort, protocol)).build());
}
return theAces;
}
private Matches buildMatches(String srcNetwork, String dstNetwork, int srcLowerPort, int dstLowerPort,
short protocol) {
AceIpv4 ipv4 = new AceIpv4Builder().setSourceIpv4Network(new Ipv4Prefix(srcNetwork))
.setDestinationIpv4Network(new Ipv4Prefix(dstNetwork)).build();
AceIp ip = new AceIpBuilder().setAceIpVersion(ipv4).setProtocol(protocol)
.setSourcePortRange(new SourcePortRangeBuilder().setLowerPort(new PortNumber(srcLowerPort)).build())
.setDestinationPortRange(
new DestinationPortRangeBuilder().setLowerPort(new PortNumber(dstLowerPort)).build())
.build();
return new MatchesBuilder().setAceType(ip).build();
}
private Actions buildActions(String rspName) {
Actions1Builder actions1Builder = new Actions1Builder()
.setSfcAction(new AclRenderedServicePathBuilder().setRenderedServicePath(rspName).build());
return new ActionsBuilder().addAugmentation(Actions1.class, actions1Builder.build()).build();
}
}