fixes for office deployment
Change-Id: I322dc856cb2f724e1860f3e30b3bcb5445c8fb65
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultFlowRule.java b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultFlowRule.java
index 65c4a16..f705a94 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultFlowRule.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultFlowRule.java
@@ -27,9 +27,11 @@
private final ApplicationId appId;
+ private boolean expired;
+
public DefaultFlowRule(DeviceId deviceId, TrafficSelector selector,
TrafficTreatment treatment, int priority, FlowRuleState state,
- long life, long packets, long bytes, long flowId) {
+ long life, long packets, long bytes, long flowId, boolean expired) {
this.deviceId = deviceId;
this.priority = priority;
this.selector = selector;
@@ -37,7 +39,7 @@
this.state = state;
this.appId = ApplicationId.valueOf((int) (flowId >> 32));
this.id = FlowId.valueOf(flowId);
-
+ this.expired = expired;
this.life = life;
this.packets = packets;
this.bytes = bytes;
@@ -186,4 +188,9 @@
.toString();
}
+ @Override
+ public boolean expired() {
+ return expired;
+ }
+
}
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRule.java b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRule.java
index 487659b..2728e21 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRule.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRule.java
@@ -111,4 +111,11 @@
*/
long bytes();
+ /**
+ * Indicates that this flow has expired at the device.
+ *
+ * @return true if it has expired, false otherwise
+ */
+ boolean expired();
+
}
diff --git a/core/net/src/main/java/org/onlab/onos/net/flow/impl/FlowRuleManager.java b/core/net/src/main/java/org/onlab/onos/net/flow/impl/FlowRuleManager.java
index 89c3399..a6f5ebb 100644
--- a/core/net/src/main/java/org/onlab/onos/net/flow/impl/FlowRuleManager.java
+++ b/core/net/src/main/java/org/onlab/onos/net/flow/impl/FlowRuleManager.java
@@ -161,7 +161,11 @@
switch (stored.state()) {
case ADDED:
case PENDING_ADD:
- frp.applyFlowRule(stored);
+ if (flowRule.expired()) {
+ event = store.removeFlowRule(flowRule);
+ } else {
+ frp.applyFlowRule(stored);
+ }
break;
case PENDING_REMOVE:
case REMOVED:
diff --git a/core/net/src/main/java/org/onlab/onos/net/proxyarp/impl/ProxyArpManager.java b/core/net/src/main/java/org/onlab/onos/net/proxyarp/impl/ProxyArpManager.java
index e7e08fc..6e07c3e 100644
--- a/core/net/src/main/java/org/onlab/onos/net/proxyarp/impl/ProxyArpManager.java
+++ b/core/net/src/main/java/org/onlab/onos/net/proxyarp/impl/ProxyArpManager.java
@@ -231,6 +231,7 @@
arp.setOpCode(ARP.OP_REPLY);
arp.setProtocolType(ARP.PROTO_TYPE_IP);
arp.setHardwareType(ARP.HW_TYPE_ETHERNET);
+
arp.setProtocolAddressLength((byte) IpPrefix.INET_LEN);
arp.setHardwareAddressLength((byte) Ethernet.DATALAYER_ADDRESS_LENGTH);
arp.setSenderHardwareAddress(h.mac().getAddress());
@@ -238,7 +239,7 @@
arp.setTargetProtocolAddress(((ARP) request.getPayload())
.getSenderProtocolAddress());
- arp.setSenderProtocolAddress(h.ipAddresses().iterator().next().toInt());
+ arp.setSenderProtocolAddress(h.ipAddresses().iterator().next().toRealInt());
eth.setPayload(arp);
return eth;
}
@@ -291,7 +292,6 @@
case DEVICE_MASTERSHIP_CHANGED:
case DEVICE_SUSPENDED:
case DEVICE_UPDATED:
- case PORT_UPDATED:
// nothing to do in these cases; handled when links get reported
break;
case DEVICE_REMOVED:
@@ -301,9 +301,12 @@
}
break;
case PORT_ADDED:
+ case PORT_UPDATED:
synchronized (externalPorts) {
- externalPorts.put(device, event.port().number());
- internalPorts.remove(device, event.port().number());
+ if (event.port().isEnabled()) {
+ externalPorts.put(device, event.port().number());
+ internalPorts.remove(device, event.port().number());
+ }
}
break;
case PORT_REMOVED: