2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.groupbasedpolicy.renderer.vpp.policy.acl;
11 import javax.annotation.Nullable;
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.acl.access.list.entries.Ace;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.acl.access.list.entries.AceBuilder;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.acl.access.list.entries.ace.Actions;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.acl.access.list.entries.ace.ActionsBuilder;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.acl.access.list.entries.ace.Matches;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.acl.access.list.entries.ace.MatchesBuilder;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.acl.access.list.entries.ace.actions.packet.handling.DenyBuilder;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.acl.access.list.entries.ace.actions.packet.handling.PermitBuilder;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.packet.fields.rev160708.acl.transport.header.fields.DestinationPortRange;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.packet.fields.rev160708.acl.transport.header.fields.DestinationPortRangeBuilder;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.packet.fields.rev160708.acl.transport.header.fields.SourcePortRange;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.packet.fields.rev160708.acl.transport.header.fields.SourcePortRangeBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.access.lists.acl.access.list.entries.ace.matches.ace.type.VppAce;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.access.lists.acl.access.list.entries.ace.matches.ace.type.VppAceBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.access.lists.acl.access.list.entries.ace.matches.ace.type.vpp.ace.VppAceNodesBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.access.lists.acl.access.list.entries.ace.matches.ace.type.vpp.ace.vpp.ace.nodes.AceIpVersion;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.access.lists.acl.access.list.entries.ace.matches.ace.type.vpp.ace.vpp.ace.nodes.ace.ip.version.AceIpv4;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.access.lists.acl.access.list.entries.ace.matches.ace.type.vpp.ace.vpp.ace.nodes.ace.ip.version.AceIpv4Builder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.access.lists.acl.access.list.entries.ace.matches.ace.type.vpp.ace.vpp.ace.nodes.ace.ip.version.AceIpv6;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.access.lists.acl.access.list.entries.ace.matches.ace.type.vpp.ace.vpp.ace.nodes.ace.ip.version.AceIpv6Builder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.acl.icmp.header.fields.IcmpCodeRangeBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.acl.icmp.header.fields.IcmpTypeRangeBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.acl.ip.protocol.header.fields.IpProtocol;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.acl.ip.protocol.header.fields.ip.protocol.IcmpBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.acl.ip.protocol.header.fields.ip.protocol.OtherBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.acl.ip.protocol.header.fields.ip.protocol.TcpBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.acl.ip.protocol.header.fields.ip.protocol.UdpBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.acl.ip.protocol.header.fields.ip.protocol.icmp.IcmpNodesBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.acl.ip.protocol.header.fields.ip.protocol.other.OtherNodesBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.acl.ip.protocol.header.fields.ip.protocol.tcp.TcpNodes;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.acl.ip.protocol.header.fields.ip.protocol.tcp.TcpNodesBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.acl.ip.protocol.header.fields.ip.protocol.udp.UdpNodes;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev161214.acl.ip.protocol.header.fields.ip.protocol.udp.UdpNodesBuilder;
49 import com.google.common.base.Preconditions;
51 public class GbpAceBuilder {
53 private final String name;
54 private Short protocol;
55 private SourcePortRangeBuilder sourcePortRangeBuilder;
56 private DestinationPortRangeBuilder destinationPortRangeBuilder;
57 private AceIpVersion aceIpVersion;
58 private AceIpv4 aceIpv4;
59 private AceIpv6 aceIpv6;
60 private IpProtocol ipProtocol;
61 private Actions action; // deny is a default action in the model
63 private static final Short FIRST_ICMP = 0;
64 private static final Short LAST_ICMP = 254;
66 GbpAceBuilder(String name) {
67 this.name = Preconditions.checkNotNull(name, "Cannot build rule with empty name.");
68 this.sourcePortRangeBuilder = new SourcePortRangeBuilder();
69 this.destinationPortRangeBuilder = new DestinationPortRangeBuilder();
72 public String getName() {
76 public Short getProtocol() {
80 public SourcePortRangeBuilder getSourcePortRangeBuilder() {
81 return sourcePortRangeBuilder;
84 public DestinationPortRangeBuilder getDestinationPortRangeBuilder() {
85 return destinationPortRangeBuilder;
88 public AceIpVersion getAceIpVersion() {
92 public Actions getAction() {
96 public GbpAceBuilder setProtocol(short protocol) {
97 this.protocol = protocol;
101 public GbpAceBuilder setSourcePortRange(SourcePortRangeBuilder sourcePortRangeBuilder) {
102 if (sourcePortRangeBuilder != null) {
103 this.sourcePortRangeBuilder = sourcePortRangeBuilder;
108 public GbpAceBuilder setDestinationPortRange(DestinationPortRangeBuilder destPortRangeBuilder) {
109 if (destPortRangeBuilder != null) {
110 this.destinationPortRangeBuilder = destPortRangeBuilder;
115 public GbpAceBuilder setIpAddresses(@Nullable Ipv4Prefix srcIp, @Nullable Ipv4Prefix dstIp) {
116 AceIpv4Builder aceIpv4Builder = (aceIpv4 != null) ? new AceIpv4Builder(aceIpv4) : new AceIpv4Builder();
118 aceIpv4Builder.setSourceIpv4Network(srcIp);
121 aceIpv4Builder.setDestinationIpv4Network(dstIp);
123 this.aceIpv4 = aceIpv4Builder.build();
124 this.aceIpVersion = aceIpv4;
128 public GbpAceBuilder setIpAddresses(@Nullable Ipv6Prefix srcIp, @Nullable Ipv6Prefix dstIp) {
129 AceIpv6Builder aceIpv6Builder = (aceIpv6 != null) ? new AceIpv6Builder(aceIpv6) : new AceIpv6Builder();
131 aceIpv6Builder.setSourceIpv6Network(srcIp);
134 aceIpv6Builder.setDestinationIpv6Network(dstIp);
136 this.aceIpv6 = aceIpv6Builder.build();
137 this.aceIpVersion = aceIpv6;
141 public GbpAceBuilder setPermit() {
142 this.action = new ActionsBuilder().setPacketHandling(new PermitBuilder().setPermit(true).build()).build();
146 public GbpAceBuilder setDeny() {
147 this.action = new ActionsBuilder().setPacketHandling(new DenyBuilder().setDeny(true).build()).build();
151 public GbpAceBuilder setAction(Actions actions) {
152 this.action = actions;
157 if (protocol == null || protocol == 0) {
159 new OtherBuilder().setOtherNodes(new OtherNodesBuilder().setProtocol((short) 0).build()).build();
162 ipProtocol = new IcmpBuilder().setIcmpNodes(new IcmpNodesBuilder()
163 .setIcmpTypeRange(new IcmpTypeRangeBuilder().setFirst(FIRST_ICMP).setLast(LAST_ICMP).build())
164 .setIcmpCodeRange(new IcmpCodeRangeBuilder().setFirst(FIRST_ICMP).setLast(LAST_ICMP).build())
167 SourcePortRange sourcePortRange = (sourcePortRangeBuilder.getLowerPort() != null
168 && sourcePortRangeBuilder.getUpperPort() != null) ? sourcePortRangeBuilder.build() : null;
169 DestinationPortRange destPortRange = (destinationPortRangeBuilder.getLowerPort() != null
170 && destinationPortRangeBuilder.getUpperPort() != null) ? destinationPortRangeBuilder.build() : null;
172 TcpNodes tcpNodes = new TcpNodesBuilder().setSourcePortRange(sourcePortRange)
173 .setDestinationPortRange(destPortRange)
175 ipProtocol = new TcpBuilder().setTcpNodes(tcpNodes).build();
177 if (protocol == 17) {
178 UdpNodes udpNodes = new UdpNodesBuilder().setSourcePortRange(sourcePortRange)
179 .setDestinationPortRange(destPortRange)
181 ipProtocol = new UdpBuilder().setUdpNodes(udpNodes).build();
182 ipProtocol = new UdpBuilder().setUdpNodes(udpNodes).build();
185 VppAce vppAce = new VppAceBuilder()
186 .setVppAceNodes(new VppAceNodesBuilder().setAceIpVersion(aceIpVersion).setIpProtocol(ipProtocol).build())
188 Matches matches = new MatchesBuilder().setAceType(vppAce).build();
189 AceBuilder aceBuilder = new AceBuilder();
190 aceBuilder.setMatches(matches);
191 aceBuilder.setActions(action);
192 aceBuilder.setRuleName(name);
193 return aceBuilder.build();
197 public String toString() {
198 StringBuilder sb = new StringBuilder();
199 appendNonNullTo(sb, "GbpAceBuilder [name=", name);
200 if (sourcePortRangeBuilder != null) {
201 appendNonNullTo(sb, ", srcPort=lower:", sourcePortRangeBuilder.getLowerPort());
202 appendNonNullTo(sb, ", srcPort=upper:", sourcePortRangeBuilder.getUpperPort());
204 if (sourcePortRangeBuilder != null) {
205 appendNonNullTo(sb, ", dstPort=lower:", destinationPortRangeBuilder.getLowerPort());
206 appendNonNullTo(sb, ", dstPort=upper:", destinationPortRangeBuilder.getUpperPort());
208 appendNonNullTo(sb, ", protocol=", protocol);
209 appendNonNullTo(sb, ", aceIpVersion=", aceIpVersion);
210 appendNonNullTo(sb, ", action=", action);
211 return sb.toString();
214 private void appendNonNullTo(StringBuilder sb, String key, Object value) {
215 if (value != null && key!= null) {
216 sb.append(key).append(value);