mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-11-04 10:11:16 +01:00
Support allowed_address_pairs
Change-Id: Id897c1833e18d1b3885394159f6beae240b3f52b
This commit is contained in:
parent
6d24734fef
commit
102013270b
@ -15,12 +15,14 @@
|
|||||||
*/
|
*/
|
||||||
package org.onosproject.openstackswitching;
|
package org.onosproject.openstackswitching;
|
||||||
|
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
import org.onlab.packet.Ip4Address;
|
import org.onlab.packet.Ip4Address;
|
||||||
|
import org.onlab.packet.IpAddress;
|
||||||
import org.onlab.packet.MacAddress;
|
import org.onlab.packet.MacAddress;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
@ -38,8 +40,7 @@ public final class OpenstackPort {
|
|||||||
|
|
||||||
private PortStatus status;
|
private PortStatus status;
|
||||||
private String name;
|
private String name;
|
||||||
// FIX_ME
|
private Map<IpAddress, MacAddress> allowedAddressPairs;
|
||||||
private String allowedAddressPairs;
|
|
||||||
private boolean adminStateUp;
|
private boolean adminStateUp;
|
||||||
private String networkId;
|
private String networkId;
|
||||||
private String tenantId;
|
private String tenantId;
|
||||||
@ -51,13 +52,13 @@ public final class OpenstackPort {
|
|||||||
private Collection<String> securityGroups;
|
private Collection<String> securityGroups;
|
||||||
private String deviceId;
|
private String deviceId;
|
||||||
|
|
||||||
private OpenstackPort(PortStatus status, String name, boolean adminStateUp,
|
private OpenstackPort(PortStatus status, String name, Map<IpAddress, MacAddress> allowedAddressPairs,
|
||||||
String networkId, String tenantId, String deviceOwner,
|
boolean adminStateUp, String networkId, String tenantId,
|
||||||
MacAddress macAddress, HashMap fixedIps, String id,
|
String deviceOwner, MacAddress macAddress, HashMap fixedIps,
|
||||||
Collection<String> securityGroups, String deviceId) {
|
String id, Collection<String> securityGroups, String deviceId) {
|
||||||
|
|
||||||
this.status = status;
|
this.status = status;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
this.allowedAddressPairs = checkNotNull(allowedAddressPairs);
|
||||||
this.adminStateUp = adminStateUp;
|
this.adminStateUp = adminStateUp;
|
||||||
this.networkId = checkNotNull(networkId);
|
this.networkId = checkNotNull(networkId);
|
||||||
this.tenantId = checkNotNull(tenantId);
|
this.tenantId = checkNotNull(tenantId);
|
||||||
@ -98,6 +99,15 @@ public final class OpenstackPort {
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns allowed address pairs.
|
||||||
|
*
|
||||||
|
* @return map of ip address and mac address, or empty map
|
||||||
|
*/
|
||||||
|
public Map<IpAddress, MacAddress> allowedAddressPairs() {
|
||||||
|
return allowedAddressPairs;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether admin state up or not.
|
* Returns whether admin state up or not.
|
||||||
*
|
*
|
||||||
@ -170,27 +180,6 @@ public final class OpenstackPort {
|
|||||||
return deviceId;
|
return deviceId;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO : Implement the following functions when necessary
|
|
||||||
//@Override
|
|
||||||
//public void equals(Object that) {
|
|
||||||
//
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//@Override
|
|
||||||
//public int hashCode() {
|
|
||||||
//
|
|
||||||
//}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object clone() {
|
|
||||||
OpenstackPort op = new OpenstackPort(this.status, this.name, this.adminStateUp,
|
|
||||||
this.networkId, this.tenantId, this.deviceOwner, this.macAddress,
|
|
||||||
(HashMap) this.fixedIps.clone(), this.id,
|
|
||||||
Collections.unmodifiableCollection(this.securityGroups), this.deviceId);
|
|
||||||
|
|
||||||
return op;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* OpenstackPort Builder class.
|
* OpenstackPort Builder class.
|
||||||
*/
|
*/
|
||||||
@ -198,8 +187,7 @@ public final class OpenstackPort {
|
|||||||
|
|
||||||
private PortStatus status;
|
private PortStatus status;
|
||||||
private String name;
|
private String name;
|
||||||
// FIX_ME
|
private Map<IpAddress, MacAddress> allowedAddressPairs;
|
||||||
private String allowedAddressPairs;
|
|
||||||
private boolean adminStateUp;
|
private boolean adminStateUp;
|
||||||
private String networkId;
|
private String networkId;
|
||||||
private String tenantId;
|
private String tenantId;
|
||||||
@ -212,7 +200,8 @@ public final class OpenstackPort {
|
|||||||
private String deviceId;
|
private String deviceId;
|
||||||
|
|
||||||
Builder() {
|
Builder() {
|
||||||
fixedIps = new HashMap<>();
|
fixedIps = Maps.newHashMap();
|
||||||
|
allowedAddressPairs = Maps.newHashMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -239,6 +228,17 @@ public final class OpenstackPort {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets allowed address pairs.
|
||||||
|
*
|
||||||
|
* @param addrPairs map of ip address and mac address
|
||||||
|
* @return Builder object
|
||||||
|
*/
|
||||||
|
public Builder allowedAddressPairs(Map<IpAddress, MacAddress> addrPairs) {
|
||||||
|
this.allowedAddressPairs.putAll(addrPairs);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets whether admin state up or not.
|
* Sets whether admin state up or not.
|
||||||
*
|
*
|
||||||
@ -352,8 +352,9 @@ public final class OpenstackPort {
|
|||||||
* @return OpenstackPort objecet
|
* @return OpenstackPort objecet
|
||||||
*/
|
*/
|
||||||
public OpenstackPort build() {
|
public OpenstackPort build() {
|
||||||
return new OpenstackPort(status, name, adminStateUp, networkId, networkId,
|
return new OpenstackPort(status, name, allowedAddressPairs, adminStateUp,
|
||||||
deviceOwner, macAddress, fixedIps, id, securityGroups, deviceId);
|
networkId, networkId, deviceOwner, macAddress, fixedIps,
|
||||||
|
id, securityGroups, deviceId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,7 +19,9 @@ import com.fasterxml.jackson.databind.JsonNode;
|
|||||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
import org.onlab.packet.Ip4Address;
|
import org.onlab.packet.Ip4Address;
|
||||||
|
import org.onlab.packet.IpAddress;
|
||||||
import org.onlab.packet.MacAddress;
|
import org.onlab.packet.MacAddress;
|
||||||
import org.onosproject.codec.CodecContext;
|
import org.onosproject.codec.CodecContext;
|
||||||
import org.onosproject.codec.JsonCodec;
|
import org.onosproject.codec.JsonCodec;
|
||||||
@ -29,6 +31,7 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encodes and decodes the OpenstackPort.
|
* Encodes and decodes the OpenstackPort.
|
||||||
@ -54,6 +57,7 @@ public class OpenstackPortCodec extends JsonCodec<OpenstackPort> {
|
|||||||
private static final String ID = "id";
|
private static final String ID = "id";
|
||||||
private static final String SECURITY_GROUPS = "security_groups";
|
private static final String SECURITY_GROUPS = "security_groups";
|
||||||
private static final String DEVICE_ID = "device_id";
|
private static final String DEVICE_ID = "device_id";
|
||||||
|
private static final String NA = "N/A";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public OpenstackPort decode(ObjectNode json, CodecContext context) {
|
public OpenstackPort decode(ObjectNode json, CodecContext context) {
|
||||||
@ -86,9 +90,19 @@ public class OpenstackPortCodec extends JsonCodec<OpenstackPort> {
|
|||||||
securityGroupList.forEach(securityGroup -> securityGroupIdList.add(securityGroup.asText()));
|
securityGroupList.forEach(securityGroup -> securityGroupIdList.add(securityGroup.asText()));
|
||||||
String deviceId = portInfo.path(DEVICE_ID).asText();
|
String deviceId = portInfo.path(DEVICE_ID).asText();
|
||||||
|
|
||||||
|
Map<IpAddress, MacAddress> addressPairs = Maps.newHashMap();
|
||||||
|
for (JsonNode addrPair : (ArrayNode) portInfo.path(ADDRESS_PAIR)) {
|
||||||
|
try {
|
||||||
|
addressPairs.put(IpAddress.valueOf(addrPair.path(IP_ADDRESS).asText()),
|
||||||
|
MacAddress.valueOf(addrPair.path(MAC_ADDRESS).asText()));
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
log.debug("Invalid address pair {}", addrPair.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
OpenstackPort.Builder openstackPortBuilder = OpenstackPort.builder();
|
OpenstackPort.Builder openstackPortBuilder = OpenstackPort.builder();
|
||||||
OpenstackPort.PortStatus portStatus =
|
OpenstackPort.PortStatus portStatus =
|
||||||
status.equals("N/A") ? OpenstackPort.PortStatus.NA :
|
status.equals(NA) ? OpenstackPort.PortStatus.NA :
|
||||||
OpenstackPort.PortStatus.valueOf(status);
|
OpenstackPort.PortStatus.valueOf(status);
|
||||||
|
|
||||||
openstackPortBuilder.portStatus(portStatus)
|
openstackPortBuilder.portStatus(portStatus)
|
||||||
@ -103,6 +117,9 @@ public class OpenstackPortCodec extends JsonCodec<OpenstackPort> {
|
|||||||
.deviceId(deviceId)
|
.deviceId(deviceId)
|
||||||
.securityGroup(securityGroupIdList);
|
.securityGroup(securityGroupIdList);
|
||||||
|
|
||||||
|
if (!addressPairs.isEmpty()) {
|
||||||
|
openstackPortBuilder.allowedAddressPairs(addressPairs);
|
||||||
|
}
|
||||||
|
|
||||||
OpenstackPort openstackPort = openstackPortBuilder.build();
|
OpenstackPort openstackPort = openstackPortBuilder.build();
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user