mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-17 18:32:28 +02:00
[ONOS-3857] BGP flow specification prefix implementation.
Change-Id: I49228f85f8efd5e972092df798a42ffc316d784d
This commit is contained in:
parent
aa6211aed1
commit
fe2fb208ee
@ -0,0 +1,139 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* 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.bgpio.protocol.flowspec;
|
||||
|
||||
import java.util.Objects;
|
||||
import org.onlab.packet.IpPrefix;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import com.google.common.base.MoreObjects;
|
||||
|
||||
/**
|
||||
* Provides BGP flow specification rule index.
|
||||
*/
|
||||
public class BgpFlowSpecPrefix implements Comparable<Object> {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(BgpFlowSpecPrefix.class);
|
||||
|
||||
private final IpPrefix destinationPrefix;
|
||||
private final IpPrefix sourcePrefix;
|
||||
|
||||
/**
|
||||
* Constructor to initialize parameters.
|
||||
*
|
||||
* @param destinationPrefix destination prefix
|
||||
* @param sourcePrefix source prefix
|
||||
*/
|
||||
public BgpFlowSpecPrefix(IpPrefix destinationPrefix, IpPrefix sourcePrefix) {
|
||||
this.destinationPrefix = destinationPrefix;
|
||||
this.sourcePrefix = sourcePrefix;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(destinationPrefix, sourcePrefix);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (obj instanceof BgpFlowSpecPrefix) {
|
||||
BgpFlowSpecPrefix other = (BgpFlowSpecPrefix) obj;
|
||||
|
||||
if (this.destinationPrefix.equals(other.destinationPrefix)) {
|
||||
return this.sourcePrefix.equals(other.sourcePrefix);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns destination prefix.
|
||||
*
|
||||
* @return destination prefix
|
||||
*/
|
||||
public IpPrefix destinationPrefix() {
|
||||
return this.destinationPrefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns source prefix.
|
||||
*
|
||||
* @return source prefix
|
||||
*/
|
||||
public IpPrefix sourcePrefix() {
|
||||
return this.sourcePrefix;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return MoreObjects.toStringHelper(getClass()).omitNullValues()
|
||||
.add("destinationPrefix", destinationPrefix)
|
||||
.add("sourcePrefix", destinationPrefix)
|
||||
.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares this and o object.
|
||||
*
|
||||
* @param o object to be compared with this object
|
||||
* @return which object is greater
|
||||
*/
|
||||
public int compareTo(Object o) {
|
||||
if (this.equals(o)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (o instanceof BgpFlowSpecPrefix) {
|
||||
BgpFlowSpecPrefix that = (BgpFlowSpecPrefix) o;
|
||||
|
||||
if (this.destinationPrefix().prefixLength() == that.destinationPrefix().prefixLength()) {
|
||||
ByteBuffer value1 = ByteBuffer.wrap(this.destinationPrefix().address().toOctets());
|
||||
ByteBuffer value2 = ByteBuffer.wrap(that.destinationPrefix().address().toOctets());
|
||||
int cmpVal = value1.compareTo(value2);
|
||||
if (cmpVal != 0) {
|
||||
return cmpVal;
|
||||
}
|
||||
} else {
|
||||
if (this.destinationPrefix().prefixLength() > that.destinationPrefix().prefixLength()) {
|
||||
return 1;
|
||||
} else if (this.destinationPrefix().prefixLength() < that.destinationPrefix().prefixLength()) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.sourcePrefix().prefixLength() == that.sourcePrefix().prefixLength()) {
|
||||
ByteBuffer value1 = ByteBuffer.wrap(this.sourcePrefix().address().toOctets());
|
||||
ByteBuffer value2 = ByteBuffer.wrap(that.sourcePrefix().address().toOctets());
|
||||
return value1.compareTo(value2);
|
||||
}
|
||||
|
||||
if (this.sourcePrefix().prefixLength() > that.sourcePrefix().prefixLength()) {
|
||||
return 1;
|
||||
} else if (this.sourcePrefix().prefixLength() < that.sourcePrefix().prefixLength()) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* 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.bgpio.protocol.flowspec;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.onlab.packet.IpPrefix;
|
||||
|
||||
import com.google.common.testing.EqualsTester;
|
||||
|
||||
/**
|
||||
* Test for BgpFsDestinationPrefix flow specification component.
|
||||
*/
|
||||
public class BgpFlowSpecPrefixTest {
|
||||
private IpPrefix destinationPrefix1 = IpPrefix.valueOf("21.21.21.21/16");
|
||||
private IpPrefix sourcePrefix1 = IpPrefix.valueOf("11.11.11.11/16");
|
||||
private IpPrefix destinationPrefix2 = IpPrefix.valueOf("42.42.42.42/16");
|
||||
private IpPrefix sourcePrefix2 = IpPrefix.valueOf("32.32.32.32/16");
|
||||
|
||||
private final BgpFlowSpecPrefix tlv1 = new BgpFlowSpecPrefix(destinationPrefix1, sourcePrefix1);
|
||||
private final BgpFlowSpecPrefix sameAsTlv1 = new BgpFlowSpecPrefix(destinationPrefix1, sourcePrefix1);
|
||||
private final BgpFlowSpecPrefix tlv2 = new BgpFlowSpecPrefix(destinationPrefix2, sourcePrefix2);
|
||||
|
||||
@Test
|
||||
public void testEquality() {
|
||||
new EqualsTester()
|
||||
.addEqualityGroup(tlv1, sameAsTlv1)
|
||||
.addEqualityGroup(tlv2)
|
||||
.testEquals();
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user