diff --git a/agent/Makefile.in b/agent/Makefile.in
index c2587d8..e699a70 100644
--- a/agent/Makefile.in
+++ b/agent/Makefile.in
@@ -95,6 +95,7 @@
 CPPFLAGS += -DVERSION=\"$(VERSION)\" -DBAL_VER=\"$(BAL_VER)\" -DLABEL_VCS_URL=\"$(LABEL_VCS_URL)\" \
             -DLABEL_VCS_REF=\"$(LABEL_VCS_REF)\" -DLABEL_BUILD_DATE=\"$(LABEL_BUILD_DATE)\" \
             -DLABEL_COMMIT_DATE=\"$(LABEL_COMMIT_DATE)\" -DFLOW_CHECKER
+CPPFLAGS += -I./
 CXXFLAGS += -std=c++11 -fpermissive -Wno-literal-suffix
 LDFLAGS += @LDFLAGS@
 LDFLAGS += `pkg-config --libs protobuf grpc++ grpc` -ldl -lgpr
diff --git a/agent/common/main.cc b/agent/common/main.cc
index 4ebe2b8..b00b9b5 100644
--- a/agent/common/main.cc
+++ b/agent/common/main.cc
@@ -19,6 +19,7 @@
 
 #include "server.h"
 #include "core.h"
+#include "src/core_data.h"
 
 using namespace std;
 
@@ -137,6 +138,13 @@
     }
     else
         pushOltOperInd(0, "nni", "up");
+
+    for (int i = 1; i < argc; ++i) {
+       if(strcmp(argv[i-1], "--interface") == 0 || (strcmp(argv[i-1], "--intf") == 0)) {
+          grpc_server_interface_name = argv[i];
+          break;
+       }
+    }
     RunServer(argc, argv);
 
     return 0;
diff --git a/agent/src/core_api_handler.cc b/agent/src/core_api_handler.cc
index 9975c36..147582c 100644
--- a/agent/src/core_api_handler.cc
+++ b/agent/src/core_api_handler.cc
@@ -217,8 +217,23 @@
 
     char device_id[OPENOLT_FIELD_LEN];
     memset(device_id, '\0', OPENOLT_FIELD_LEN);
-    openolt_read_sysinfo("MAC", device_id);
-    OPENOLT_LOG(INFO, openolt_log_id, "Fetched device mac address %s\n", device_id);
+
+    if (grpc_server_interface_name != NULL) {
+       if (get_intf_mac(grpc_server_interface_name, device_id, sizeof(device_id)) != NULL)
+       {
+           OPENOLT_LOG(INFO, openolt_log_id, "Fetched mac address %s of an interface %s\n", device_id, grpc_server_interface_name);
+       }
+       else
+       {
+           OPENOLT_LOG(ERROR, openolt_log_id, "Mac address of an interface %s is NULL\n", grpc_server_interface_name);
+       }
+    }
+    else
+    {
+       openolt_read_sysinfo("MAC", device_id);
+       OPENOLT_LOG(INFO, openolt_log_id, "Fetched device mac address %s\n", device_id);
+    }
+
     device_info->set_device_id(device_id);
 
     // Legacy, device-wide ranges. To be deprecated when adapter
diff --git a/agent/src/core_data.cc b/agent/src/core_data.cc
index ec292e3..4f2be6d 100644
--- a/agent/src/core_data.cc
+++ b/agent/src/core_data.cc
@@ -178,3 +178,5 @@
 
 // Lock used to gaurd critical section during various API handling at the core_api_handler
 bcmos_fastlock data_lock;
+
+char* grpc_server_interface_name = NULL;
diff --git a/agent/src/core_data.h b/agent/src/core_data.h
index d44ed52..d0761c5 100644
--- a/agent/src/core_data.h
+++ b/agent/src/core_data.h
@@ -249,5 +249,7 @@
 
 extern bcmos_fastlock data_lock;
 
-
+// Interface name on which grpc server is running on
+// and this can be used to get the mac adress based on interface name.
+extern char* grpc_server_interface_name;
 #endif // OPENOLT_CORE_DATA_H_
diff --git a/agent/src/core_utils.cc b/agent/src/core_utils.cc
index 9a59487..98ef6a2 100644
--- a/agent/src/core_utils.cc
+++ b/agent/src/core_utils.cc
@@ -1331,3 +1331,41 @@
 
     return BCM_ERR_OK;
 }
+
+/**
+* Gets mac address based on interface name.
+*
+* @param intf_name interface name
+* @param mac_address  mac address field
+* @param max_size_of_mac_address max sixe of the mac_address
+* @return mac_address value in case of success or return NULL in case of failure.
+*/
+
+char* get_intf_mac(const char* intf_name, char* mac_address,  unsigned int max_size_of_mac_address){
+    int fd;
+    struct ifreq ifr;
+    char *mac;
+
+    fd = socket(AF_INET, SOCK_DGRAM, 0);
+    if ( fd == -1) {
+        OPENOLT_LOG(ERROR, openolt_log_id, "failed to get mac, could not create file descriptor");
+        return NULL;
+    }
+
+    ifr.ifr_addr.sa_family = AF_INET;
+    strncpy((char *)ifr.ifr_name , (const char *)intf_name , IFNAMSIZ-1);
+    if( ioctl(fd, SIOCGIFHWADDR, &ifr) == -1)
+    {
+        OPENOLT_LOG(ERROR, openolt_log_id, "failed to get mac, ioctl failed and returned err");
+        close(fd);
+        return NULL;
+    }
+
+    close(fd);
+    mac = (char *)ifr.ifr_hwaddr.sa_data;
+
+    // formatted mac address
+    snprintf(mac_address, max_size_of_mac_address, (const char *)"%.2x:%.2x:%.2x:%.2x:%.2x:%.2x", (unsigned char)mac[0], (unsigned char)mac[1], (unsigned char)mac[2], (unsigned char)mac[3], (unsigned char)mac[4], (unsigned char)mac[5]);
+
+    return mac_address;
+}
diff --git a/agent/src/core_utils.h b/agent/src/core_utils.h
index 5de6753..4a4d73f 100644
--- a/agent/src/core_utils.h
+++ b/agent/src/core_utils.h
@@ -19,6 +19,8 @@
 #include <unistd.h>
 #include <ifaddrs.h>
 #include <arpa/inet.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
 
 #include "core.h"
 #include "core_data.h"
@@ -102,4 +104,5 @@
 Status check_connection();
 std::string get_ip_address(const char* nw_intf);
 bcmos_errno getOnuMaxLogicalDistance(uint32_t intf_id, uint32_t *mld);
+char* get_intf_mac(const char* intf_name, char* mac_address, unsigned int max_size_of_mac_address);
 #endif // OPENOLT_CORE_UTILS_H_
