Add CLI for reconfiguring ARP mode on openstacknetworking app
Change-Id: I4211681ccf6eaea9c76ec27adc45e0f1cc71d0d7
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
index d7bcc7f..74bf681 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
@@ -32,8 +32,8 @@
import org.onlab.packet.Ip4Address;
import org.onlab.packet.IpAddress;
import org.onlab.packet.MacAddress;
-import org.onlab.util.Tools;
import org.onosproject.cfg.ComponentConfigService;
+import org.onosproject.cfg.ConfigProperty;
import org.onosproject.cluster.ClusterService;
import org.onosproject.cluster.LeadershipService;
import org.onosproject.cluster.NodeId;
@@ -77,7 +77,6 @@
import org.slf4j.Logger;
import java.nio.ByteBuffer;
-import java.util.Dictionary;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@@ -97,6 +96,7 @@
import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.associatedFloatingIp;
import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getGwByComputeDevId;
import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getGwByInstancePort;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getPropertyValue;
import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.isAssociatedWithVM;
import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.GATEWAY;
import static org.slf4j.LoggerFactory.getLogger;
@@ -146,8 +146,6 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected ComponentConfigService configService;
- // TODO: need to find a way to unify aprMode and gatewayMac variables with
- // that in SwitchingArpHandler
@Property(name = ARP_MODE, value = DEFAULT_ARP_MODE_STR,
label = "ARP processing mode, broadcast | proxy (default)")
protected String arpMode = DEFAULT_ARP_MODE_STR;
@@ -205,21 +203,19 @@
// that in SwitchingArpHandler
@Modified
void modified(ComponentContext context) {
- Dictionary<?, ?> properties = context.getProperties();
- String updateArpMode;
-
- updateArpMode = Tools.get(properties, ARP_MODE);
- if (!Strings.isNullOrEmpty(updateArpMode) && !updateArpMode.equals(arpMode)) {
- arpMode = updateArpMode;
- }
log.info("Modified");
}
+ private String getArpMode() {
+ Set<ConfigProperty> properties = configService.getProperties(this.getClass().getName());
+ return getPropertyValue(properties, ARP_MODE);
+ }
+
private void processArpPacket(PacketContext context, Ethernet ethernet) {
ARP arp = (ARP) ethernet.getPayload();
- if (arp.getOpCode() == ARP.OP_REQUEST && arpMode.equals(ARP_PROXY_MODE)) {
+ if (arp.getOpCode() == ARP.OP_REQUEST && ARP_PROXY_MODE.equals(getArpMode())) {
if (log.isTraceEnabled()) {
log.trace("ARP request received from {} for {}",
Ip4Address.valueOf(arp.getSenderProtocolAddress()).toString(),
@@ -381,7 +377,7 @@
* @param install flow rule installation flag
*/
private void setFloatingIpArpRuleForGateway(OpenstackNode gateway, boolean install) {
- if (arpMode.equals(ARP_BROADCAST_MODE)) {
+ if (ARP_BROADCAST_MODE.equals(getArpMode())) {
Set<OpenstackNode> completedGws = osNodeService.completeNodes(GATEWAY);
Set<OpenstackNode> finalGws = Sets.newConcurrentHashSet();
@@ -442,7 +438,7 @@
InstancePort port,
Set<OpenstackNode> gateways,
boolean install) {
- if (arpMode.equals(ARP_BROADCAST_MODE)) {
+ if (ARP_BROADCAST_MODE.equals(getArpMode())) {
OpenstackNode gw = getGwByInstancePort(gateways, port);
@@ -469,7 +465,7 @@
private synchronized void setFloatingIpArpRule(NetFloatingIP fip,
Set<OpenstackNode> gateways,
boolean install) {
- if (arpMode.equals(ARP_BROADCAST_MODE)) {
+ if (ARP_BROADCAST_MODE.equals(getArpMode())) {
if (fip == null) {
log.warn("Failed to set ARP broadcast rule for floating IP");
@@ -671,7 +667,7 @@
}
private void setFakeGatewayArpRule(ExternalGateway extGw, boolean install) {
- if (arpMode.equals(ARP_BROADCAST_MODE)) {
+ if (ARP_BROADCAST_MODE.equals(getArpMode())) {
if (extGw == null) {
return;
@@ -859,7 +855,7 @@
}
private void setDefaultArpRule(OpenstackNode osNode, boolean install) {
- switch (arpMode) {
+ switch (getArpMode()) {
case ARP_PROXY_MODE:
setDefaultArpRuleForProxyMode(osNode, install);
break;
@@ -868,7 +864,7 @@
break;
default:
log.warn("Invalid ARP mode {}. Please use either " +
- "broadcast or proxy mode.", arpMode);
+ "broadcast or proxy mode.", getArpMode());
break;
}
}