diff --git a/agent/common/core.h b/agent/common/core.h
index dafbf97..f322bf0 100644
--- a/agent/common/core.h
+++ b/agent/common/core.h
@@ -248,6 +248,8 @@
 Status GetOnuStatistics_(uint32_t intf_id, uint32_t onu_id, openolt::OnuStatistics *onu_stats);
 Status GetGemPortStatistics_(uint32_t intf_id, uint32_t gemport_id, openolt::GemPortStatistics* gemport_stats);
 Status GetPonRxPower_(uint32_t intf_id, uint32_t onu_id, openolt::PonRxPowerData* response);
+Status GetOnuInfo_(uint32_t intf_id, uint32_t onu_id, openolt::OnuInfo *response);
+Status GetPonInterfaceInfo_(uint32_t intf_id, openolt::PonIntfInfo *response);
 int get_status_bcm_cli_quit(void);
 uint16_t get_dev_id(void);
 Status pushOltOperInd(uint32_t intf_id, const char *type, const char *state, uint32_t speed);
diff --git a/agent/common/server.cc b/agent/common/server.cc
index 83a66f3..ec52b26 100644
--- a/agent/common/server.cc
+++ b/agent/common/server.cc
@@ -355,6 +355,30 @@
             request->onu_id(),
             response);
     }
+
+    Status GetOnuInfo(
+            ServerContext* context,
+            const openolt::Onu* request,
+            openolt::OnuInfo* response) override {
+        return GetOnuInfo_(
+            request->intf_id(),
+            request->onu_id(),
+            response);
+    }
+
+
+    Status GetPonInterfaceInfo(
+            ServerContext* context,
+            const openolt::Interface* request,
+            openolt::PonIntfInfo* response) override {
+        return GetPonInterfaceInfo_(
+            request->intf_id(),
+            response);
+    }
+
+
+
+
 };
 
 bool RunServer(int argc, char** argv) {
diff --git a/agent/src/core_api_handler.cc b/agent/src/core_api_handler.cc
index 8f6ea7b..18f284f 100644
--- a/agent/src/core_api_handler.cc
+++ b/agent/src/core_api_handler.cc
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <cerrno>
 #include <iostream>
 #include <memory>
 #include <string>
@@ -207,7 +208,6 @@
     device_info->set_model(MODEL_ID);
     device_info->set_hardware_version("");
     device_info->set_firmware_version(firmware_version);
-    device_info->set_technology(board_technology);
     device_info->set_pon_ports(num_of_pon_ports);
 
     char serial_number[OPENOLT_FIELD_LEN];
@@ -237,18 +237,6 @@
     }
 
     device_info->set_device_id(device_id);
-
-    // Legacy, device-wide ranges. To be deprecated when adapter
-    // is upgraded to support per-interface ranges
-    device_info->set_onu_id_start(ONU_ID_START);
-    device_info->set_onu_id_end(ONU_ID_END);
-    device_info->set_alloc_id_start(ALLOC_ID_START);
-    device_info->set_alloc_id_end(ALLOC_ID_END);
-    device_info->set_gemport_id_start(GEM_PORT_ID_START);
-    device_info->set_gemport_id_end(GEM_PORT_ID_END);
-    device_info->set_flow_id_start(FLOW_ID_START);
-    device_info->set_flow_id_end(FLOW_ID_END);
-
     std::map<std::string, ::openolt::DeviceInfo::DeviceResourceRanges*> ranges;
     for (uint32_t intf_id = 0; intf_id < num_of_pon_ports; ++intf_id) {
         std::string intf_technology = intf_technologies[intf_id];
@@ -3510,3 +3498,136 @@
         return bcm_to_grpc_err(err, "timeout waiting for pon rssi measurement complete indication");
     }
 }
+
+Status GetOnuInfo_(uint32_t intf_id, uint32_t onu_id, openolt::OnuInfo *response)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    bcmolt_onu_state onu_state;
+
+    bcmolt_status losi;
+    bcmolt_status lofi;
+    bcmolt_status loami;
+    err = get_gpon_onu_info((bcmolt_interface)intf_id, onu_id, &onu_state, &losi, &lofi, &loami);
+
+    if (err == BCM_ERR_OK)
+    {
+
+        response->set_onu_id(onu_id);
+        OPENOLT_LOG(DEBUG, openolt_log_id, "onu state  %d\n", onu_state);
+        OPENOLT_LOG(DEBUG, openolt_log_id, "losi  %d\n", losi);
+        OPENOLT_LOG(DEBUG, openolt_log_id, "lofi %d\n", lofi);
+        OPENOLT_LOG(DEBUG, openolt_log_id, "loami %d\n", loami);
+
+        switch (onu_state)
+        {
+        case bcmolt_onu_state::BCMOLT_ONU_STATE_ACTIVE:
+            response->set_state(openolt::OnuInfo_OnuState::OnuInfo_OnuState_ACTIVE);
+            break;
+        case bcmolt_onu_state::BCMOLT_ONU_STATE_INACTIVE:
+            response->set_state(openolt::OnuInfo_OnuState::OnuInfo_OnuState_INACTIVE);
+            break;
+        case bcmolt_onu_state::BCMOLT_ONU_STATE_UNAWARE:
+            response->set_state(openolt::OnuInfo_OnuState::OnuInfo_OnuState_UNKNOWN);
+            break;
+        case bcmolt_onu_state::BCMOLT_ONU_STATE_NOT_CONFIGURED:
+            response->set_state(openolt::OnuInfo_OnuState::OnuInfo_OnuState_NOT_CONFIGURED);
+            break;
+        case bcmolt_onu_state::BCMOLT_ONU_STATE_DISABLED:
+            response->set_state(openolt::OnuInfo_OnuState::OnuInfo_OnuState_DISABLED);
+            break;
+        }
+        switch (losi)
+        {
+        case bcmolt_status::BCMOLT_STATUS_ON:
+            response->set_losi(openolt::AlarmState::ON);
+            break;
+        case bcmolt_status::BCMOLT_STATUS_OFF:
+            response->set_losi(openolt::AlarmState::OFF);
+            break;
+        }
+
+        switch (lofi)
+        {
+        case bcmolt_status::BCMOLT_STATUS_ON:
+            response->set_lofi(openolt::AlarmState::ON);
+            break;
+        case bcmolt_status::BCMOLT_STATUS_OFF:
+            response->set_lofi(openolt::AlarmState::OFF);
+            break;
+        }
+
+        switch (loami)
+        {
+        case bcmolt_status::BCMOLT_STATUS_ON:
+            response->set_loami(openolt::AlarmState::ON);
+            break;
+        case bcmolt_status::BCMOLT_STATUS_OFF:
+            response->set_loami(openolt::AlarmState::OFF);
+            break;
+        }
+        return Status::OK;
+    }
+    else
+    {
+        OPENOLT_LOG(ERROR, openolt_log_id, "Failed to fetch Onu status, onu_id = %d, intf_id = %d, err = %s\n",
+                    onu_id, intf_id, bcmos_strerror(err));
+        return bcm_to_grpc_err(err, "Failed to fetch Onu status");
+    }
+}
+
+Status GetPonInterfaceInfo_(uint32_t intf_id, openolt::PonIntfInfo *response)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    bcmolt_status los_status;
+    bcmolt_interface_state state;
+    err = get_pon_interface_status((bcmolt_interface)intf_id, &state, &los_status);
+    OPENOLT_LOG(ERROR, openolt_log_id, "pon state  %d\n",state);
+    OPENOLT_LOG(ERROR, openolt_log_id, "pon los status  %d\n", los_status);
+
+
+    if (err == BCM_ERR_OK)
+    {
+        response->set_intf_id(intf_id) ;
+        switch (los_status)
+        {
+        case bcmolt_status::BCMOLT_STATUS_ON:
+
+            response->set_los(openolt::AlarmState::ON);
+            break;
+        case bcmolt_status::BCMOLT_STATUS_OFF:
+            response->set_los(openolt::AlarmState::OFF);
+            break;
+        }
+
+        switch (state)
+        {
+        case bcmolt_interface_state::BCMOLT_INTERFACE_STATE_ACTIVE_WORKING:
+            response->set_state(openolt::PonIntfInfo_PonIntfState::PonIntfInfo_PonIntfState_ACTIVE_WORKING);
+            break;
+        case bcmolt_interface_state::BCMOLT_INTERFACE_STATE_ACTIVE_STANDBY:
+            response->set_state(openolt::PonIntfInfo_PonIntfState::PonIntfInfo_PonIntfState_ACTIVE_STANDBY);
+            break;
+
+        case bcmolt_interface_state::BCMOLT_INTERFACE_STATE_DISABLED:
+            response->set_state(openolt::PonIntfInfo_PonIntfState::PonIntfInfo_PonIntfState_DISABLED);
+            break;
+
+        case bcmolt_interface_state::BCMOLT_INTERFACE_STATE_INACTIVE:
+
+            response->set_state(openolt::PonIntfInfo_PonIntfState::PonIntfInfo_PonIntfState_INACTIVE);
+            break;
+        default:
+            response->set_state(openolt::PonIntfInfo_PonIntfState::PonIntfInfo_PonIntfState_UNKNOWN);
+        }
+
+        return Status::OK;
+    }
+    else
+    {
+        OPENOLT_LOG(ERROR, openolt_log_id, "Failed to fetch PON interface los status intf_id = %d, err = %s\n",
+                    intf_id, bcmos_strerror(err));
+        return bcm_to_grpc_err(err, "Failed to fetch PON interface los status intf_id");
+    }
+}
diff --git a/agent/src/core_utils.cc b/agent/src/core_utils.cc
index dafc68c..9bc7659 100644
--- a/agent/src/core_utils.cc
+++ b/agent/src/core_utils.cc
@@ -891,6 +891,51 @@
     return err;
 }
 
+bcmos_errno get_gpon_onu_info(bcmolt_interface pon_ni, int onu_id, bcmolt_onu_state *onu_state, bcmolt_status *losi, bcmolt_status *lofi, bcmolt_status *loami)
+{
+
+    bcmos_errno err;
+    bcmolt_onu_cfg onu_cfg;
+    bcmolt_itu_onu_params itu = {};
+    bcmolt_gpon_onu_alarm_state alarm_state = {};
+    bcmolt_gpon_onu_params gpon = {};
+
+    bcmolt_onu_cfg onu_cfg_itu;
+    bcmolt_onu_key onu_key;
+    onu_key.pon_ni = pon_ni;
+    onu_key.onu_id = onu_id;
+
+    BCMOLT_CFG_INIT(&onu_cfg, onu, onu_key);
+    BCMOLT_FIELD_SET_PRESENT(&onu_cfg.data, onu_cfg_data, onu_state);
+
+    BCMOLT_FIELD_SET_PRESENT(&onu_cfg.data, onu_cfg_data, itu);
+
+    BCMOLT_FIELD_SET_PRESENT(&itu, itu_onu_params, gpon);
+    BCMOLT_FIELD_SET_PRESENT(&gpon, gpon_onu_params, alarm_state);
+
+    BCMOLT_FIELD_SET_PRESENT(&alarm_state, gpon_onu_alarm_state, losi);
+    BCMOLT_FIELD_SET_PRESENT(&alarm_state, gpon_onu_alarm_state, lofi);
+    BCMOLT_FIELD_SET_PRESENT(&alarm_state, gpon_onu_alarm_state, loami);
+
+    BCMOLT_FIELD_SET(&gpon, gpon_onu_params, alarm_state, alarm_state);
+
+    BCMOLT_FIELD_SET(&itu, itu_onu_params, gpon, gpon);
+
+    BCMOLT_FIELD_SET(&onu_cfg.data, onu_cfg_data, itu, itu);
+
+    err = bcmolt_cfg_get(dev_id, &onu_cfg.hdr);
+
+    *onu_state = onu_cfg.data.onu_state;
+    // fetch onu itu
+    *losi = onu_cfg.data.itu.gpon.alarm_state.losi;
+
+    *lofi = onu_cfg.data.itu.gpon.alarm_state.lofi;
+
+    *loami = onu_cfg.data.itu.gpon.alarm_state.loami;
+
+    return err;
+}
+
 bcmos_errno get_gem_obj_state(bcmolt_interface pon_ni, bcmolt_gem_port_id id, bcmolt_activation_state *state) {
     bcmos_errno err;
     bcmolt_itupon_gem_cfg cfg;
diff --git a/agent/src/core_utils.h b/agent/src/core_utils.h
index 1813a37..644ddec 100644
--- a/agent/src/core_utils.h
+++ b/agent/src/core_utils.h
@@ -89,6 +89,7 @@
 bcmos_errno bcmolt_apiend_cli_init();
 bcmos_errno get_pon_interface_status(bcmolt_interface pon_ni, bcmolt_interface_state *state, bcmolt_status *los_status);
 bcmos_errno get_onu_state(bcmolt_interface pon_ni, int onu_id, bcmolt_onu_state *onu_state);
+bcmos_errno get_gpon_onu_info(bcmolt_interface pon_ni, int onu_id, bcmolt_onu_state *onu_state, bcmolt_status *losi, bcmolt_status *lofi,bcmolt_status *loami);
 bcmos_errno bcmolt_cfg_get_mult_retry(bcmolt_oltid olt, bcmolt_cfg *cfg);
 unsigned NumNniIf_();
 unsigned NumPonIf_();
diff --git a/agent/test/Makefile b/agent/test/Makefile
index 94e0829..8e4f730 100644
--- a/agent/test/Makefile
+++ b/agent/test/Makefile
@@ -21,7 +21,7 @@
 TOP_DIR=`pwd`
 OPENOLTDEVICE ?= sim
 
-OPENOLT_PROTO_VER ?= v5.2.1
+OPENOLT_PROTO_VER ?= v5.4.6
 
 ########################################################################
 ##
