Merge "VOL-434: Introduced configuration parameter to enable changing of src/dst MAC address" into dhcpl2relay-1.1
diff --git a/src/main/java/org/opencord/dhcpl2relay/DhcpL2Relay.java b/src/main/java/org/opencord/dhcpl2relay/DhcpL2Relay.java
index 29965dd..f941afc 100755
--- a/src/main/java/org/opencord/dhcpl2relay/DhcpL2Relay.java
+++ b/src/main/java/org/opencord/dhcpl2relay/DhcpL2Relay.java
@@ -156,6 +156,7 @@
private ApplicationId appId;
static Map<String, DhcpAllocationInfo> allocationMap = Maps.newConcurrentMap();
+ private boolean modifyClientPktsSrcDstMac = false;
@Activate
protected void activate(ComponentContext context) {
@@ -257,6 +258,7 @@
}
dhcpConnectPoints = Sets.newConcurrentHashSet(cfg.getDhcpServerConnectPoint());
+ modifyClientPktsSrcDstMac = cfg.getModifySrcDstMacAddresses();
selectServerConnectPoint();
@@ -546,8 +548,10 @@
ipv4Packet.setPayload(udpPacket);
etherReply.setPayload(ipv4Packet);
- etherReply.setSourceMacAddress(relayAgentMac);
- etherReply.setDestinationMacAddress(dhcpConnectMac);
+ if (modifyClientPktsSrcDstMac) {
+ etherReply.setSourceMacAddress(relayAgentMac);
+ etherReply.setDestinationMacAddress(dhcpConnectMac);
+ }
etherReply.setPriorityCode(ethernetPacket.getPriorityCode());
etherReply.setVlanID(cTag(context).toShort());
diff --git a/src/main/java/org/opencord/dhcpl2relay/DhcpL2RelayConfig.java b/src/main/java/org/opencord/dhcpl2relay/DhcpL2RelayConfig.java
index eb60c7f..b3e3cf4 100755
--- a/src/main/java/org/opencord/dhcpl2relay/DhcpL2RelayConfig.java
+++ b/src/main/java/org/opencord/dhcpl2relay/DhcpL2RelayConfig.java
@@ -34,11 +34,31 @@
public class DhcpL2RelayConfig extends Config<ApplicationId> {
private static final String DHCP_CONNECT_POINTS = "dhcpServerConnectPoints";
+ private static final String MODIFY_SRC_DST_MAC = "modifyUlPacketsSrcDstMacAddresses";
+
+ private static final Boolean DEFAULT_MODIFY_SRC_DST_MAC = false;
@Override
public boolean isValid() {
- return hasOnlyFields(DHCP_CONNECT_POINTS);
+ return hasOnlyFields(DHCP_CONNECT_POINTS, MODIFY_SRC_DST_MAC);
+ }
+
+ /**
+ * Returns whether the app would modify MAC address of uplink packets.
+ *
+ * @return whether app would modify src and dst MAC addresses or not of packets
+ * sent to the DHCP server
+ */
+ public boolean getModifySrcDstMacAddresses() {
+ if (object == null) {
+ return DEFAULT_MODIFY_SRC_DST_MAC;
+ }
+ if (!object.has(MODIFY_SRC_DST_MAC)) {
+ return DEFAULT_MODIFY_SRC_DST_MAC;
+ }
+
+ return object.path(MODIFY_SRC_DST_MAC).asBoolean();
}
/**
diff --git a/src/test/java/org/opencord/dhcpl2relay/DhcpL2RelayTest.java b/src/test/java/org/opencord/dhcpl2relay/DhcpL2RelayTest.java
index e6f97a8..691f8f1 100755
--- a/src/test/java/org/opencord/dhcpl2relay/DhcpL2RelayTest.java
+++ b/src/test/java/org/opencord/dhcpl2relay/DhcpL2RelayTest.java
@@ -381,6 +381,11 @@
public Set<ConnectPoint> getDhcpServerConnectPoint() {
return ImmutableSet.of(SERVER_CONNECT_POINT);
}
+
+ @Override
+ public boolean getModifySrcDstMacAddresses() {
+ return true;
+ }
}
/**