/*
 *    Copyright (c) 2018, The OpenThread Authors.
 *    All rights reserved.
 *
 *    Redistribution and use in source and binary forms, with or without
 *    modification, are permitted provided that the following conditions are met:
 *    1. Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *    2. Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *    3. Neither the name of the copyright holder nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 *
 *    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 *    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 *    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 *    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
 *    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 *    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 *    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 *    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 *    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 *    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
 * @file
 *   This file implements general thread device required Spinel interface to the OpenThread stack.
 */

#include "ncp_base.hpp"

namespace ot {
namespace Ncp {

NcpBase::PropertyHandler NcpBase::FindGetPropertyHandler(spinel_prop_key_t aKey)
{
    NcpBase::PropertyHandler handler;

    switch (aKey)
    {
        // --------------------------------------------------------------------------
        // Common Properties (Get Handler)

    case SPINEL_PROP_CAPS:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CAPS>;
        break;
    case SPINEL_PROP_DEBUG_TEST_ASSERT:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_DEBUG_TEST_ASSERT>;
        break;
    case SPINEL_PROP_DEBUG_TEST_WATCHDOG:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_DEBUG_TEST_WATCHDOG>;
        break;
    case SPINEL_PROP_DEBUG_NCP_LOG_LEVEL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_DEBUG_NCP_LOG_LEVEL>;
        break;
    case SPINEL_PROP_HWADDR:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_HWADDR>;
        break;
    case SPINEL_PROP_HOST_POWER_STATE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_HOST_POWER_STATE>;
        break;
    case SPINEL_PROP_INTERFACE_COUNT:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_INTERFACE_COUNT>;
        break;
    case SPINEL_PROP_INTERFACE_TYPE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_INTERFACE_TYPE>;
        break;
    case SPINEL_PROP_LAST_STATUS:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_LAST_STATUS>;
        break;
    case SPINEL_PROP_LOCK:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_LOCK>;
        break;
    case SPINEL_PROP_PHY_ENABLED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_PHY_ENABLED>;
        break;
    case SPINEL_PROP_PHY_CHAN:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_PHY_CHAN>;
        break;
    case SPINEL_PROP_PHY_RSSI:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_PHY_RSSI>;
        break;
    case SPINEL_PROP_PHY_RX_SENSITIVITY:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_PHY_RX_SENSITIVITY>;
        break;
    case SPINEL_PROP_PHY_CCA_THRESHOLD:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_PHY_CCA_THRESHOLD>;
        break;
    case SPINEL_PROP_PHY_TX_POWER:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_PHY_TX_POWER>;
        break;
    case SPINEL_PROP_POWER_STATE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_POWER_STATE>;
        break;
    case SPINEL_PROP_MCU_POWER_STATE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MCU_POWER_STATE>;
        break;
    case SPINEL_PROP_PROTOCOL_VERSION:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_PROTOCOL_VERSION>;
        break;
    case SPINEL_PROP_MAC_15_4_PANID:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_15_4_PANID>;
        break;
    case SPINEL_PROP_MAC_15_4_LADDR:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_15_4_LADDR>;
        break;
    case SPINEL_PROP_MAC_15_4_SADDR:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_15_4_SADDR>;
        break;
    case SPINEL_PROP_MAC_RAW_STREAM_ENABLED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_RAW_STREAM_ENABLED>;
        break;
    case SPINEL_PROP_MAC_PROMISCUOUS_MODE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_PROMISCUOUS_MODE>;
        break;
    case SPINEL_PROP_MAC_SCAN_STATE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_SCAN_STATE>;
        break;
    case SPINEL_PROP_MAC_SCAN_MASK:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_SCAN_MASK>;
        break;
    case SPINEL_PROP_MAC_SCAN_PERIOD:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_SCAN_PERIOD>;
        break;
    case SPINEL_PROP_NCP_VERSION:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_NCP_VERSION>;
        break;
    case SPINEL_PROP_UNSOL_UPDATE_FILTER:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_UNSOL_UPDATE_FILTER>;
        break;
    case SPINEL_PROP_UNSOL_UPDATE_LIST:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_UNSOL_UPDATE_LIST>;
        break;
    case SPINEL_PROP_VENDOR_ID:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_VENDOR_ID>;
        break;
    case SPINEL_PROP_PHY_CHAN_SUPPORTED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_PHY_CHAN_SUPPORTED>;
        break;
    case SPINEL_PROP_PHY_CHAN_PREFERRED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_PHY_CHAN_PREFERRED>;
        break;
#if OPENTHREAD_CONFIG_PLATFORM_RADIO_COEX_ENABLE
    case SPINEL_PROP_RADIO_COEX_METRICS:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_RADIO_COEX_METRICS>;
        break;
    case SPINEL_PROP_RADIO_COEX_ENABLE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_RADIO_COEX_ENABLE>;
        break;
#endif

        // --------------------------------------------------------------------------
        // MTD (or FTD) Properties (Get Handler)

#if OPENTHREAD_MTD || OPENTHREAD_FTD
    case SPINEL_PROP_PHY_PCAP_ENABLED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_PHY_PCAP_ENABLED>;
        break;
    case SPINEL_PROP_MAC_DATA_POLL_PERIOD:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_DATA_POLL_PERIOD>;
        break;
    case SPINEL_PROP_MAC_EXTENDED_ADDR:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_EXTENDED_ADDR>;
        break;
    case SPINEL_PROP_MAC_CCA_FAILURE_RATE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_CCA_FAILURE_RATE>;
        break;
    case SPINEL_PROP_MAC_MAX_RETRY_NUMBER_DIRECT:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_MAX_RETRY_NUMBER_DIRECT>;
        break;
#if OPENTHREAD_CONFIG_MAC_FILTER_ENABLE
    case SPINEL_PROP_MAC_BLACKLIST:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_BLACKLIST>;
        break;
    case SPINEL_PROP_MAC_BLACKLIST_ENABLED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_BLACKLIST_ENABLED>;
        break;
    case SPINEL_PROP_MAC_FIXED_RSS:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_FIXED_RSS>;
        break;
    case SPINEL_PROP_MAC_WHITELIST:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_WHITELIST>;
        break;
    case SPINEL_PROP_MAC_WHITELIST_ENABLED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_WHITELIST_ENABLED>;
        break;
#endif
    case SPINEL_PROP_MSG_BUFFER_COUNTERS:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MSG_BUFFER_COUNTERS>;
        break;
    case SPINEL_PROP_PHY_FREQ:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_PHY_FREQ>;
        break;
    case SPINEL_PROP_NET_IF_UP:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_NET_IF_UP>;
        break;
    case SPINEL_PROP_NET_KEY_SEQUENCE_COUNTER:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_NET_KEY_SEQUENCE_COUNTER>;
        break;
    case SPINEL_PROP_NET_KEY_SWITCH_GUARDTIME:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_NET_KEY_SWITCH_GUARDTIME>;
        break;
    case SPINEL_PROP_NET_MASTER_KEY:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_NET_MASTER_KEY>;
        break;
    case SPINEL_PROP_NET_NETWORK_NAME:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_NET_NETWORK_NAME>;
        break;
    case SPINEL_PROP_NET_PARTITION_ID:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_NET_PARTITION_ID>;
        break;
    case SPINEL_PROP_NET_REQUIRE_JOIN_EXISTING:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_NET_REQUIRE_JOIN_EXISTING>;
        break;
    case SPINEL_PROP_NET_ROLE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_NET_ROLE>;
        break;
    case SPINEL_PROP_NET_SAVED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_NET_SAVED>;
        break;
    case SPINEL_PROP_NET_STACK_UP:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_NET_STACK_UP>;
        break;
    case SPINEL_PROP_NET_XPANID:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_NET_XPANID>;
        break;
    case SPINEL_PROP_THREAD_ALLOW_LOCAL_NET_DATA_CHANGE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_ALLOW_LOCAL_NET_DATA_CHANGE>;
        break;
    case SPINEL_PROP_THREAD_ASSISTING_PORTS:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_ASSISTING_PORTS>;
        break;
    case SPINEL_PROP_THREAD_CHILD_TIMEOUT:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_CHILD_TIMEOUT>;
        break;
    case SPINEL_PROP_THREAD_DISCOVERY_SCAN_JOINER_FLAG:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_DISCOVERY_SCAN_JOINER_FLAG>;
        break;
    case SPINEL_PROP_THREAD_DISCOVERY_SCAN_ENABLE_FILTERING:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_DISCOVERY_SCAN_ENABLE_FILTERING>;
        break;
    case SPINEL_PROP_THREAD_DISCOVERY_SCAN_PANID:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_DISCOVERY_SCAN_PANID>;
        break;
    case SPINEL_PROP_THREAD_LEADER_ADDR:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_LEADER_ADDR>;
        break;
    case SPINEL_PROP_THREAD_LEADER_NETWORK_DATA:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_LEADER_NETWORK_DATA>;
        break;
    case SPINEL_PROP_THREAD_LEADER_RID:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_LEADER_RID>;
        break;
    case SPINEL_PROP_THREAD_MODE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_MODE>;
        break;
    case SPINEL_PROP_THREAD_NEIGHBOR_TABLE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_NEIGHBOR_TABLE>;
        break;
#if OPENTHREAD_CONFIG_ENABLE_TX_ERROR_RATE_TRACKING
    case SPINEL_PROP_THREAD_NEIGHBOR_TABLE_ERROR_RATES:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_NEIGHBOR_TABLE_ERROR_RATES>;
        break;
#endif
    case SPINEL_PROP_THREAD_NETWORK_DATA_VERSION:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_NETWORK_DATA_VERSION>;
        break;
    case SPINEL_PROP_THREAD_OFF_MESH_ROUTES:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_OFF_MESH_ROUTES>;
        break;
    case SPINEL_PROP_THREAD_ON_MESH_NETS:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_ON_MESH_NETS>;
        break;
    case SPINEL_PROP_THREAD_PARENT:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_PARENT>;
        break;
    case SPINEL_PROP_THREAD_RLOC16:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_RLOC16>;
        break;
    case SPINEL_PROP_THREAD_RLOC16_DEBUG_PASSTHRU:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_RLOC16_DEBUG_PASSTHRU>;
        break;
    case SPINEL_PROP_THREAD_STABLE_LEADER_NETWORK_DATA:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_STABLE_LEADER_NETWORK_DATA>;
        break;
    case SPINEL_PROP_THREAD_STABLE_NETWORK_DATA_VERSION:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_STABLE_NETWORK_DATA_VERSION>;
        break;
#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
    case SPINEL_PROP_THREAD_NETWORK_DATA:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_NETWORK_DATA>;
        break;
    case SPINEL_PROP_THREAD_STABLE_NETWORK_DATA:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_STABLE_NETWORK_DATA>;
        break;
#endif
    case SPINEL_PROP_THREAD_ACTIVE_DATASET:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_ACTIVE_DATASET>;
        break;
    case SPINEL_PROP_THREAD_PENDING_DATASET:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_PENDING_DATASET>;
        break;
    case SPINEL_PROP_IPV6_ADDRESS_TABLE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_IPV6_ADDRESS_TABLE>;
        break;
    case SPINEL_PROP_IPV6_ICMP_PING_OFFLOAD:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_IPV6_ICMP_PING_OFFLOAD>;
        break;
    case SPINEL_PROP_IPV6_ICMP_PING_OFFLOAD_MODE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_IPV6_ICMP_PING_OFFLOAD_MODE>;
        break;
    case SPINEL_PROP_IPV6_LL_ADDR:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_IPV6_LL_ADDR>;
        break;
    case SPINEL_PROP_IPV6_ML_PREFIX:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_IPV6_ML_PREFIX>;
        break;
    case SPINEL_PROP_IPV6_ML_ADDR:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_IPV6_ML_ADDR>;
        break;
    case SPINEL_PROP_IPV6_MULTICAST_ADDRESS_TABLE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_IPV6_MULTICAST_ADDRESS_TABLE>;
        break;
    case SPINEL_PROP_IPV6_ROUTE_TABLE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_IPV6_ROUTE_TABLE>;
        break;
#if OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE
    case SPINEL_PROP_JAM_DETECT_ENABLE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_JAM_DETECT_ENABLE>;
        break;
    case SPINEL_PROP_JAM_DETECTED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_JAM_DETECTED>;
        break;
    case SPINEL_PROP_JAM_DETECT_RSSI_THRESHOLD:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_JAM_DETECT_RSSI_THRESHOLD>;
        break;
    case SPINEL_PROP_JAM_DETECT_WINDOW:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_JAM_DETECT_WINDOW>;
        break;
    case SPINEL_PROP_JAM_DETECT_BUSY:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_JAM_DETECT_BUSY>;
        break;
    case SPINEL_PROP_JAM_DETECT_HISTORY_BITMAP:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_JAM_DETECT_HISTORY_BITMAP>;
        break;
#endif
#if OPENTHREAD_CONFIG_CHANNEL_MONITOR_ENABLE
    case SPINEL_PROP_CHANNEL_MONITOR_SAMPLE_INTERVAL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CHANNEL_MONITOR_SAMPLE_INTERVAL>;
        break;
    case SPINEL_PROP_CHANNEL_MONITOR_RSSI_THRESHOLD:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CHANNEL_MONITOR_RSSI_THRESHOLD>;
        break;
    case SPINEL_PROP_CHANNEL_MONITOR_SAMPLE_WINDOW:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CHANNEL_MONITOR_SAMPLE_WINDOW>;
        break;
    case SPINEL_PROP_CHANNEL_MONITOR_SAMPLE_COUNT:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CHANNEL_MONITOR_SAMPLE_COUNT>;
        break;
    case SPINEL_PROP_CHANNEL_MONITOR_CHANNEL_OCCUPANCY:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CHANNEL_MONITOR_CHANNEL_OCCUPANCY>;
        break;
#endif
#if OPENTHREAD_CONFIG_LEGACY_ENABLE
    case SPINEL_PROP_NEST_LEGACY_ULA_PREFIX:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_NEST_LEGACY_ULA_PREFIX>;
        break;
    case SPINEL_PROP_NEST_LEGACY_LAST_NODE_JOINED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_NEST_LEGACY_LAST_NODE_JOINED>;
        break;
#endif
        // MAC counters
    case SPINEL_PROP_CNTR_TX_PKT_TOTAL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_PKT_TOTAL>;
        break;
    case SPINEL_PROP_CNTR_TX_PKT_ACK_REQ:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_PKT_ACK_REQ>;
        break;
    case SPINEL_PROP_CNTR_TX_PKT_ACKED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_PKT_ACKED>;
        break;
    case SPINEL_PROP_CNTR_TX_PKT_NO_ACK_REQ:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_PKT_NO_ACK_REQ>;
        break;
    case SPINEL_PROP_CNTR_TX_PKT_DATA:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_PKT_DATA>;
        break;
    case SPINEL_PROP_CNTR_TX_PKT_DATA_POLL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_PKT_DATA_POLL>;
        break;
    case SPINEL_PROP_CNTR_TX_PKT_BEACON:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_PKT_BEACON>;
        break;
    case SPINEL_PROP_CNTR_TX_PKT_BEACON_REQ:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_PKT_BEACON_REQ>;
        break;
    case SPINEL_PROP_CNTR_TX_PKT_OTHER:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_PKT_OTHER>;
        break;
    case SPINEL_PROP_CNTR_TX_PKT_RETRY:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_PKT_RETRY>;
        break;
    case SPINEL_PROP_CNTR_TX_PKT_UNICAST:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_PKT_UNICAST>;
        break;
    case SPINEL_PROP_CNTR_TX_PKT_BROADCAST:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_PKT_BROADCAST>;
        break;
    case SPINEL_PROP_CNTR_TX_ERR_CCA:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_ERR_CCA>;
        break;
    case SPINEL_PROP_CNTR_TX_ERR_ABORT:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_ERR_ABORT>;
        break;
    case SPINEL_PROP_CNTR_RX_PKT_TOTAL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_PKT_TOTAL>;
        break;
    case SPINEL_PROP_CNTR_RX_PKT_DATA:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_PKT_DATA>;
        break;
    case SPINEL_PROP_CNTR_RX_PKT_DATA_POLL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_PKT_DATA_POLL>;
        break;
    case SPINEL_PROP_CNTR_RX_PKT_BEACON:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_PKT_BEACON>;
        break;
    case SPINEL_PROP_CNTR_RX_PKT_BEACON_REQ:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_PKT_BEACON_REQ>;
        break;
    case SPINEL_PROP_CNTR_RX_PKT_OTHER:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_PKT_OTHER>;
        break;
    case SPINEL_PROP_CNTR_RX_PKT_FILT_WL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_PKT_FILT_WL>;
        break;
    case SPINEL_PROP_CNTR_RX_PKT_FILT_DA:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_PKT_FILT_DA>;
        break;
    case SPINEL_PROP_CNTR_RX_PKT_UNICAST:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_PKT_UNICAST>;
        break;
    case SPINEL_PROP_CNTR_RX_PKT_BROADCAST:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_PKT_BROADCAST>;
        break;
    case SPINEL_PROP_CNTR_RX_ERR_EMPTY:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_ERR_EMPTY>;
        break;
    case SPINEL_PROP_CNTR_RX_ERR_UKWN_NBR:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_ERR_UKWN_NBR>;
        break;
    case SPINEL_PROP_CNTR_RX_ERR_NVLD_SADDR:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_ERR_NVLD_SADDR>;
        break;
    case SPINEL_PROP_CNTR_RX_ERR_SECURITY:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_ERR_SECURITY>;
        break;
    case SPINEL_PROP_CNTR_RX_ERR_BAD_FCS:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_ERR_BAD_FCS>;
        break;
    case SPINEL_PROP_CNTR_RX_ERR_OTHER:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_ERR_OTHER>;
        break;
    case SPINEL_PROP_CNTR_RX_PKT_DUP:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_PKT_DUP>;
        break;
    case SPINEL_PROP_CNTR_ALL_MAC_COUNTERS:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_ALL_MAC_COUNTERS>;
        break;
    case SPINEL_PROP_CNTR_MLE_COUNTERS:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_MLE_COUNTERS>;
        break;
        // NCP counters
    case SPINEL_PROP_CNTR_TX_IP_SEC_TOTAL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_IP_SEC_TOTAL>;
        break;
    case SPINEL_PROP_CNTR_TX_IP_INSEC_TOTAL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_IP_INSEC_TOTAL>;
        break;
    case SPINEL_PROP_CNTR_TX_IP_DROPPED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_IP_DROPPED>;
        break;
    case SPINEL_PROP_CNTR_RX_IP_SEC_TOTAL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_IP_SEC_TOTAL>;
        break;
    case SPINEL_PROP_CNTR_RX_IP_INSEC_TOTAL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_IP_INSEC_TOTAL>;
        break;
    case SPINEL_PROP_CNTR_RX_IP_DROPPED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_IP_DROPPED>;
        break;
    case SPINEL_PROP_CNTR_TX_SPINEL_TOTAL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_TX_SPINEL_TOTAL>;
        break;
    case SPINEL_PROP_CNTR_RX_SPINEL_TOTAL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_SPINEL_TOTAL>;
        break;
    case SPINEL_PROP_CNTR_RX_SPINEL_ERR:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_RX_SPINEL_ERR>;
        break;
        // IP counters
    case SPINEL_PROP_CNTR_IP_TX_SUCCESS:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_IP_TX_SUCCESS>;
        break;
    case SPINEL_PROP_CNTR_IP_RX_SUCCESS:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_IP_RX_SUCCESS>;
        break;
    case SPINEL_PROP_CNTR_IP_TX_FAILURE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_IP_TX_FAILURE>;
        break;
    case SPINEL_PROP_CNTR_IP_RX_FAILURE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_IP_RX_FAILURE>;
        break;
    case SPINEL_PROP_CNTR_ALL_IP_COUNTERS:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CNTR_ALL_IP_COUNTERS>;
        break;
#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
    case SPINEL_PROP_THREAD_NETWORK_TIME:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_NETWORK_TIME>;
        break;
#endif
#if OPENTHREAD_CONFIG_CHILD_SUPERVISION_ENABLE
    case SPINEL_PROP_CHILD_SUPERVISION_CHECK_TIMEOUT:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CHILD_SUPERVISION_CHECK_TIMEOUT>;
        break;
#endif
#if OPENTHREAD_PLATFORM_POSIX_APP
    case SPINEL_PROP_RCP_VERSION:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_RCP_VERSION>;
        break;
#endif
#if OPENTHREAD_CONFIG_IP6_SLAAC_ENABLE
    case SPINEL_PROP_SLAAC_ENABLED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_SLAAC_ENABLED>;
        break;
#endif
#if OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE
    case SPINEL_PROP_SERVER_ALLOW_LOCAL_DATA_CHANGE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_SERVER_ALLOW_LOCAL_DATA_CHANGE>;
        break;
    case SPINEL_PROP_SERVER_SERVICES:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_SERVER_SERVICES>;
        break;
    case SPINEL_PROP_SERVER_LEADER_SERVICES:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_SERVER_LEADER_SERVICES>;
        break;
#endif
#endif // OPENTHREAD_MTD || OPENTHREAD_FTD

        // --------------------------------------------------------------------------
        // FTD Only Properties (Get Handler)

#if OPENTHREAD_FTD
    case SPINEL_PROP_MAC_MAX_RETRY_NUMBER_INDIRECT:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_MAX_RETRY_NUMBER_INDIRECT>;
        break;
    case SPINEL_PROP_NET_PSKC:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_NET_PSKC>;
        break;
    case SPINEL_PROP_THREAD_LEADER_WEIGHT:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_LEADER_WEIGHT>;
        break;
    case SPINEL_PROP_THREAD_CHILD_TABLE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_CHILD_TABLE>;
        break;
    case SPINEL_PROP_THREAD_CHILD_TABLE_ADDRESSES:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_CHILD_TABLE_ADDRESSES>;
        break;
    case SPINEL_PROP_THREAD_ROUTER_TABLE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_ROUTER_TABLE>;
        break;
    case SPINEL_PROP_THREAD_LOCAL_LEADER_WEIGHT:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_LOCAL_LEADER_WEIGHT>;
        break;
    case SPINEL_PROP_THREAD_ROUTER_ROLE_ENABLED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_ROUTER_ROLE_ENABLED>;
        break;
    case SPINEL_PROP_THREAD_CHILD_COUNT_MAX:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_CHILD_COUNT_MAX>;
        break;
    case SPINEL_PROP_THREAD_ROUTER_UPGRADE_THRESHOLD:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_ROUTER_UPGRADE_THRESHOLD>;
        break;
    case SPINEL_PROP_THREAD_ROUTER_DOWNGRADE_THRESHOLD:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_ROUTER_DOWNGRADE_THRESHOLD>;
        break;
    case SPINEL_PROP_THREAD_CONTEXT_REUSE_DELAY:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_CONTEXT_REUSE_DELAY>;
        break;
    case SPINEL_PROP_THREAD_NETWORK_ID_TIMEOUT:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_NETWORK_ID_TIMEOUT>;
        break;
    case SPINEL_PROP_THREAD_ROUTER_SELECTION_JITTER:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_ROUTER_SELECTION_JITTER>;
        break;
    case SPINEL_PROP_THREAD_PREFERRED_ROUTER_ID:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_PREFERRED_ROUTER_ID>;
        break;
    case SPINEL_PROP_THREAD_ADDRESS_CACHE_TABLE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_ADDRESS_CACHE_TABLE>;
        break;
    case SPINEL_PROP_THREAD_NEW_DATASET:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_NEW_DATASET>;
        break;
#if OPENTHREAD_CONFIG_JOINER_ENABLE
    case SPINEL_PROP_MESHCOP_JOINER_STATE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MESHCOP_JOINER_STATE>;
        break;
#endif
#if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE
    case SPINEL_PROP_MESHCOP_COMMISSIONER_STATE:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MESHCOP_COMMISSIONER_STATE>;
        break;
    case SPINEL_PROP_MESHCOP_COMMISSIONER_PROVISIONING_URL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MESHCOP_COMMISSIONER_PROVISIONING_URL>;
        break;
    case SPINEL_PROP_MESHCOP_COMMISSIONER_SESSION_ID:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MESHCOP_COMMISSIONER_SESSION_ID>;
        break;
    case SPINEL_PROP_THREAD_COMMISSIONER_ENABLED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_COMMISSIONER_ENABLED>;
        break;
#endif
#if OPENTHREAD_CONFIG_MLE_STEERING_DATA_SET_OOB_ENABLE
    case SPINEL_PROP_THREAD_STEERING_DATA:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_STEERING_DATA>;
        break;
#endif
#if OPENTHREAD_CONFIG_CHILD_SUPERVISION_ENABLE
    case SPINEL_PROP_CHILD_SUPERVISION_INTERVAL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CHILD_SUPERVISION_INTERVAL>;
        break;
#endif
#if OPENTHREAD_CONFIG_CHANNEL_MANAGER_ENABLE
    case SPINEL_PROP_CHANNEL_MANAGER_NEW_CHANNEL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CHANNEL_MANAGER_NEW_CHANNEL>;
        break;
    case SPINEL_PROP_CHANNEL_MANAGER_DELAY:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CHANNEL_MANAGER_DELAY>;
        break;
    case SPINEL_PROP_CHANNEL_MANAGER_SUPPORTED_CHANNELS:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CHANNEL_MANAGER_SUPPORTED_CHANNELS>;
        break;
    case SPINEL_PROP_CHANNEL_MANAGER_FAVORED_CHANNELS:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CHANNEL_MANAGER_FAVORED_CHANNELS>;
        break;
    case SPINEL_PROP_CHANNEL_MANAGER_CHANNEL_SELECT:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CHANNEL_MANAGER_CHANNEL_SELECT>;
        break;
    case SPINEL_PROP_CHANNEL_MANAGER_AUTO_SELECT_ENABLED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CHANNEL_MANAGER_AUTO_SELECT_ENABLED>;
        break;
    case SPINEL_PROP_CHANNEL_MANAGER_AUTO_SELECT_INTERVAL:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_CHANNEL_MANAGER_AUTO_SELECT_INTERVAL>;
        break;
#endif
#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
    case SPINEL_PROP_TIME_SYNC_PERIOD:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_TIME_SYNC_PERIOD>;
        break;
    case SPINEL_PROP_TIME_SYNC_XTAL_THRESHOLD:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_TIME_SYNC_XTAL_THRESHOLD>;
        break;
#endif // OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
#endif // OPENTHREAD_FTD

        // --------------------------------------------------------------------------
        // Raw Link or Radio Mode Properties (Get Handler)

#if OPENTHREAD_RADIO || OPENTHREAD_CONFIG_LINK_RAW_ENABLE
    case SPINEL_PROP_RADIO_CAPS:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_RADIO_CAPS>;
        break;
    case SPINEL_PROP_MAC_SRC_MATCH_ENABLED:
        handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_SRC_MATCH_ENABLED>;
        break;
#endif

    default:
        handler = NULL;
    }

    return handler;
}

NcpBase::PropertyHandler NcpBase::FindSetPropertyHandler(spinel_prop_key_t aKey)
{
    NcpBase::PropertyHandler handler;

    switch (aKey)
    {
        // --------------------------------------------------------------------------
        // Common Properties (Set Handler)

    case SPINEL_PROP_POWER_STATE:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_POWER_STATE>;
        break;
#if OPENTHREAD_CONFIG_NCP_ENABLE_MCU_POWER_STATE_CONTROL
    case SPINEL_PROP_MCU_POWER_STATE:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MCU_POWER_STATE>;
        break;
#endif
    case SPINEL_PROP_UNSOL_UPDATE_FILTER:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_UNSOL_UPDATE_FILTER>;
        break;
    case SPINEL_PROP_PHY_CCA_THRESHOLD:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_PHY_CCA_THRESHOLD>;
        break;
    case SPINEL_PROP_PHY_TX_POWER:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_PHY_TX_POWER>;
        break;
    case SPINEL_PROP_PHY_CHAN:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_PHY_CHAN>;
        break;
    case SPINEL_PROP_MAC_PROMISCUOUS_MODE:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_PROMISCUOUS_MODE>;
        break;
    case SPINEL_PROP_MAC_15_4_PANID:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_15_4_PANID>;
        break;
    case SPINEL_PROP_MAC_15_4_LADDR:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_15_4_LADDR>;
        break;
    case SPINEL_PROP_MAC_RAW_STREAM_ENABLED:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_RAW_STREAM_ENABLED>;
        break;
    case SPINEL_PROP_MAC_SCAN_MASK:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_SCAN_MASK>;
        break;
    case SPINEL_PROP_MAC_SCAN_STATE:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_SCAN_STATE>;
        break;
    case SPINEL_PROP_MAC_SCAN_PERIOD:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_SCAN_PERIOD>;
        break;
#if OPENTHREAD_CONFIG_PLATFORM_RADIO_COEX_ENABLE
    case SPINEL_PROP_RADIO_COEX_ENABLE:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_RADIO_COEX_ENABLE>;
        break;
#endif

        // --------------------------------------------------------------------------
        // MTD (or FTD) Properties (Set Handler)

#if OPENTHREAD_MTD || OPENTHREAD_FTD
    case SPINEL_PROP_PHY_PCAP_ENABLED:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_PHY_PCAP_ENABLED>;
        break;
    case SPINEL_PROP_PHY_CHAN_SUPPORTED:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_PHY_CHAN_SUPPORTED>;
        break;
    case SPINEL_PROP_MAC_DATA_POLL_PERIOD:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_DATA_POLL_PERIOD>;
        break;
    case SPINEL_PROP_MAC_MAX_RETRY_NUMBER_DIRECT:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_MAX_RETRY_NUMBER_DIRECT>;
        break;
    case SPINEL_PROP_NET_IF_UP:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_NET_IF_UP>;
        break;
    case SPINEL_PROP_NET_STACK_UP:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_NET_STACK_UP>;
        break;
    case SPINEL_PROP_NET_ROLE:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_NET_ROLE>;
        break;
    case SPINEL_PROP_NET_NETWORK_NAME:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_NET_NETWORK_NAME>;
        break;
    case SPINEL_PROP_NET_XPANID:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_NET_XPANID>;
        break;
    case SPINEL_PROP_NET_MASTER_KEY:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_NET_MASTER_KEY>;
        break;
    case SPINEL_PROP_NET_KEY_SEQUENCE_COUNTER:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_NET_KEY_SEQUENCE_COUNTER>;
        break;
    case SPINEL_PROP_NET_KEY_SWITCH_GUARDTIME:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_NET_KEY_SWITCH_GUARDTIME>;
        break;
    case SPINEL_PROP_THREAD_ASSISTING_PORTS:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_ASSISTING_PORTS>;
        break;
    case SPINEL_PROP_STREAM_NET_INSECURE:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_STREAM_NET_INSECURE>;
        break;
    case SPINEL_PROP_STREAM_NET:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_STREAM_NET>;
        break;
    case SPINEL_PROP_IPV6_ML_PREFIX:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_IPV6_ML_PREFIX>;
        break;
    case SPINEL_PROP_IPV6_ICMP_PING_OFFLOAD:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_IPV6_ICMP_PING_OFFLOAD>;
        break;
    case SPINEL_PROP_IPV6_ICMP_PING_OFFLOAD_MODE:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_IPV6_ICMP_PING_OFFLOAD_MODE>;
        break;
    case SPINEL_PROP_THREAD_CHILD_TIMEOUT:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_CHILD_TIMEOUT>;
        break;
#if OPENTHREAD_CONFIG_JOINER_ENABLE
    case SPINEL_PROP_MESHCOP_JOINER_COMMISSIONING:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_JOINER_COMMISSIONING>;
        break;
#endif
    case SPINEL_PROP_THREAD_RLOC16_DEBUG_PASSTHRU:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_RLOC16_DEBUG_PASSTHRU>;
        break;
#if OPENTHREAD_CONFIG_MAC_FILTER_ENABLE
    case SPINEL_PROP_MAC_WHITELIST:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_WHITELIST>;
        break;
    case SPINEL_PROP_MAC_WHITELIST_ENABLED:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_WHITELIST_ENABLED>;
        break;
    case SPINEL_PROP_MAC_BLACKLIST:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_BLACKLIST>;
        break;
    case SPINEL_PROP_MAC_BLACKLIST_ENABLED:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_BLACKLIST_ENABLED>;
        break;
    case SPINEL_PROP_MAC_FIXED_RSS:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_FIXED_RSS>;
        break;
#endif
    case SPINEL_PROP_THREAD_MODE:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_MODE>;
        break;
    case SPINEL_PROP_NET_REQUIRE_JOIN_EXISTING:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_NET_REQUIRE_JOIN_EXISTING>;
        break;
#if OPENTHREAD_CONFIG_ENABLE_DYNAMIC_LOG_LEVEL
    case SPINEL_PROP_DEBUG_NCP_LOG_LEVEL:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_DEBUG_NCP_LOG_LEVEL>;
        break;
#endif
    case SPINEL_PROP_THREAD_DISCOVERY_SCAN_JOINER_FLAG:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_DISCOVERY_SCAN_JOINER_FLAG>;
        break;
    case SPINEL_PROP_THREAD_DISCOVERY_SCAN_ENABLE_FILTERING:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_DISCOVERY_SCAN_ENABLE_FILTERING>;
        break;
    case SPINEL_PROP_THREAD_DISCOVERY_SCAN_PANID:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_DISCOVERY_SCAN_PANID>;
        break;
#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
    case SPINEL_PROP_THREAD_ALLOW_LOCAL_NET_DATA_CHANGE:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_ALLOW_LOCAL_NET_DATA_CHANGE>;
        break;
#endif

    case SPINEL_PROP_THREAD_ACTIVE_DATASET:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_ACTIVE_DATASET>;
        break;
    case SPINEL_PROP_THREAD_PENDING_DATASET:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_PENDING_DATASET>;
        break;
    case SPINEL_PROP_THREAD_MGMT_SET_ACTIVE_DATASET:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_MGMT_SET_ACTIVE_DATASET>;
        break;
    case SPINEL_PROP_THREAD_MGMT_SET_PENDING_DATASET:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_MGMT_SET_PENDING_DATASET>;
        break;
    case SPINEL_PROP_THREAD_MGMT_GET_ACTIVE_DATASET:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_MGMT_GET_ACTIVE_DATASET>;
        break;
    case SPINEL_PROP_THREAD_MGMT_GET_PENDING_DATASET:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_MGMT_GET_PENDING_DATASET>;
        break;

#if OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE
    case SPINEL_PROP_JAM_DETECT_ENABLE:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_JAM_DETECT_ENABLE>;
        break;
    case SPINEL_PROP_JAM_DETECT_RSSI_THRESHOLD:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_JAM_DETECT_RSSI_THRESHOLD>;
        break;
    case SPINEL_PROP_JAM_DETECT_WINDOW:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_JAM_DETECT_WINDOW>;
        break;
    case SPINEL_PROP_JAM_DETECT_BUSY:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_JAM_DETECT_BUSY>;
        break;
#endif
#if OPENTHREAD_CONFIG_LEGACY_ENABLE
    case SPINEL_PROP_NEST_LEGACY_ULA_PREFIX:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_NEST_LEGACY_ULA_PREFIX>;
        break;
#endif
    case SPINEL_PROP_CNTR_RESET:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_CNTR_RESET>;
        break;
    case SPINEL_PROP_CNTR_ALL_MAC_COUNTERS:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_CNTR_ALL_MAC_COUNTERS>;
        break;
    case SPINEL_PROP_CNTR_MLE_COUNTERS:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_CNTR_MLE_COUNTERS>;
        break;
    case SPINEL_PROP_CNTR_ALL_IP_COUNTERS:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_CNTR_ALL_IP_COUNTERS>;
        break;
#if OPENTHREAD_CONFIG_CHILD_SUPERVISION_ENABLE
    case SPINEL_PROP_CHILD_SUPERVISION_CHECK_TIMEOUT:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_CHILD_SUPERVISION_CHECK_TIMEOUT>;
        break;
#endif
#if OPENTHREAD_CONFIG_IP6_SLAAC_ENABLE
    case SPINEL_PROP_SLAAC_ENABLED:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_SLAAC_ENABLED>;
        break;
#endif
#if OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE
    case SPINEL_PROP_SERVER_ALLOW_LOCAL_DATA_CHANGE:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_SERVER_ALLOW_LOCAL_DATA_CHANGE>;
        break;
#endif
#endif // OPENTHREAD_MTD || OPENTHREAD_FTD

        // --------------------------------------------------------------------------
        // FTD Only Properties (Set Handler)

#if OPENTHREAD_FTD
    case SPINEL_PROP_MAC_MAX_RETRY_NUMBER_INDIRECT:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_MAX_RETRY_NUMBER_INDIRECT>;
        break;
    case SPINEL_PROP_NET_PSKC:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_NET_PSKC>;
        break;
    case SPINEL_PROP_NET_PARTITION_ID:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_NET_PARTITION_ID>;
        break;
    case SPINEL_PROP_THREAD_NETWORK_ID_TIMEOUT:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_NETWORK_ID_TIMEOUT>;
        break;
    case SPINEL_PROP_THREAD_LOCAL_LEADER_WEIGHT:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_LOCAL_LEADER_WEIGHT>;
        break;
    case SPINEL_PROP_THREAD_ROUTER_ROLE_ENABLED:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_ROUTER_ROLE_ENABLED>;
        break;
    case SPINEL_PROP_THREAD_CHILD_COUNT_MAX:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_CHILD_COUNT_MAX>;
        break;
    case SPINEL_PROP_THREAD_ROUTER_UPGRADE_THRESHOLD:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_ROUTER_UPGRADE_THRESHOLD>;
        break;
    case SPINEL_PROP_THREAD_ROUTER_DOWNGRADE_THRESHOLD:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_ROUTER_DOWNGRADE_THRESHOLD>;
        break;
    case SPINEL_PROP_THREAD_CONTEXT_REUSE_DELAY:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_CONTEXT_REUSE_DELAY>;
        break;
    case SPINEL_PROP_THREAD_ROUTER_SELECTION_JITTER:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_ROUTER_SELECTION_JITTER>;
        break;
    case SPINEL_PROP_THREAD_PREFERRED_ROUTER_ID:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_PREFERRED_ROUTER_ID>;
        break;
#if OPENTHREAD_CONFIG_MLE_STEERING_DATA_SET_OOB_ENABLE
    case SPINEL_PROP_THREAD_STEERING_DATA:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_STEERING_DATA>;
        break;
#endif
#if OPENTHREAD_CONFIG_UDP_FORWARD_ENABLE
    case SPINEL_PROP_THREAD_UDP_FORWARD_STREAM:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_UDP_FORWARD_STREAM>;
        break;
#endif
#if OPENTHREAD_CONFIG_CHILD_SUPERVISION_ENABLE
    case SPINEL_PROP_CHILD_SUPERVISION_INTERVAL:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_CHILD_SUPERVISION_INTERVAL>;
        break;
#endif
#if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE
    case SPINEL_PROP_MESHCOP_COMMISSIONER_STATE:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_STATE>;
        break;
    case SPINEL_PROP_MESHCOP_COMMISSIONER_PROVISIONING_URL:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_PROVISIONING_URL>;
        break;
    case SPINEL_PROP_MESHCOP_COMMISSIONER_ANNOUNCE_BEGIN:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_ANNOUNCE_BEGIN>;
        break;
    case SPINEL_PROP_MESHCOP_COMMISSIONER_ENERGY_SCAN:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_ENERGY_SCAN>;
        break;
    case SPINEL_PROP_MESHCOP_COMMISSIONER_PAN_ID_QUERY:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_PAN_ID_QUERY>;
        break;
    case SPINEL_PROP_MESHCOP_COMMISSIONER_MGMT_GET:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_MGMT_GET>;
        break;
    case SPINEL_PROP_MESHCOP_COMMISSIONER_MGMT_SET:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_MGMT_SET>;
        break;
#endif
#if OPENTHREAD_CONFIG_CHANNEL_MANAGER_ENABLE
    case SPINEL_PROP_CHANNEL_MANAGER_NEW_CHANNEL:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_CHANNEL_MANAGER_NEW_CHANNEL>;
        break;
    case SPINEL_PROP_CHANNEL_MANAGER_DELAY:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_CHANNEL_MANAGER_DELAY>;
        break;
    case SPINEL_PROP_CHANNEL_MANAGER_SUPPORTED_CHANNELS:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_CHANNEL_MANAGER_SUPPORTED_CHANNELS>;
        break;
    case SPINEL_PROP_CHANNEL_MANAGER_FAVORED_CHANNELS:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_CHANNEL_MANAGER_FAVORED_CHANNELS>;
        break;
#if OPENTHREAD_CONFIG_CHANNEL_MONITOR_ENABLE
    case SPINEL_PROP_CHANNEL_MANAGER_CHANNEL_SELECT:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_CHANNEL_MANAGER_CHANNEL_SELECT>;
        break;
#endif
    case SPINEL_PROP_CHANNEL_MANAGER_AUTO_SELECT_ENABLED:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_CHANNEL_MANAGER_AUTO_SELECT_ENABLED>;
        break;
    case SPINEL_PROP_CHANNEL_MANAGER_AUTO_SELECT_INTERVAL:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_CHANNEL_MANAGER_AUTO_SELECT_INTERVAL>;
        break;
#endif
#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
    case SPINEL_PROP_TIME_SYNC_PERIOD:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_TIME_SYNC_PERIOD>;
        break;
    case SPINEL_PROP_TIME_SYNC_XTAL_THRESHOLD:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_TIME_SYNC_XTAL_THRESHOLD>;
        break;
#endif
#endif // #if OPENTHREAD_FTD

        // --------------------------------------------------------------------------
        // Raw Link API Properties (Set Handler)

#if OPENTHREAD_RADIO || OPENTHREAD_CONFIG_LINK_RAW_ENABLE
    case SPINEL_PROP_MAC_15_4_SADDR:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_15_4_SADDR>;
        break;
    case SPINEL_PROP_MAC_SRC_MATCH_ENABLED:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_SRC_MATCH_ENABLED>;
        break;
    case SPINEL_PROP_MAC_SRC_MATCH_SHORT_ADDRESSES:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_SRC_MATCH_SHORT_ADDRESSES>;
        break;
    case SPINEL_PROP_MAC_SRC_MATCH_EXTENDED_ADDRESSES:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MAC_SRC_MATCH_EXTENDED_ADDRESSES>;
        break;
    case SPINEL_PROP_PHY_ENABLED:
        handler = &NcpBase::HandlePropertySet<SPINEL_PROP_PHY_ENABLED>;
        break;
#endif // #if OPENTHREAD_RADIO || OPENTHREAD_CONFIG_LINK_RAW_ENABLE

    default:
        handler = NULL;
    }

    return handler;
}

NcpBase::PropertyHandler NcpBase::FindInsertPropertyHandler(spinel_prop_key_t aKey)
{
    NcpBase::PropertyHandler handler;

    switch (aKey)
    {
        // --------------------------------------------------------------------------
        // Common Properties (Insert Handler)

    case SPINEL_PROP_UNSOL_UPDATE_FILTER:
        handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_UNSOL_UPDATE_FILTER>;
        break;

        // --------------------------------------------------------------------------
        // MTD (or FTD) Properties (Insert Handler)

#if OPENTHREAD_MTD || OPENTHREAD_FTD
    case SPINEL_PROP_IPV6_ADDRESS_TABLE:
        handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_IPV6_ADDRESS_TABLE>;
        break;
    case SPINEL_PROP_IPV6_MULTICAST_ADDRESS_TABLE:
        handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_IPV6_MULTICAST_ADDRESS_TABLE>;
        break;
    case SPINEL_PROP_THREAD_ASSISTING_PORTS:
        handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_THREAD_ASSISTING_PORTS>;
        break;
#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
    case SPINEL_PROP_THREAD_OFF_MESH_ROUTES:
        handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_THREAD_OFF_MESH_ROUTES>;
        break;
    case SPINEL_PROP_THREAD_ON_MESH_NETS:
        handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_THREAD_ON_MESH_NETS>;
        break;
#endif
#if OPENTHREAD_CONFIG_MAC_FILTER_ENABLE
    case SPINEL_PROP_MAC_WHITELIST:
        handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_MAC_WHITELIST>;
        break;
    case SPINEL_PROP_MAC_BLACKLIST:
        handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_MAC_BLACKLIST>;
        break;
    case SPINEL_PROP_MAC_FIXED_RSS:
        handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_MAC_FIXED_RSS>;
        break;
#endif
#if OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE
    case SPINEL_PROP_SERVER_SERVICES:
        handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_SERVER_SERVICES>;
        break;
#endif
#endif // OPENTHREAD_MTD || OPENTHREAD_FTD

        // --------------------------------------------------------------------------
        // FTD Only Properties (Insert Handler)

#if OPENTHREAD_FTD
#if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE
    case SPINEL_PROP_MESHCOP_COMMISSIONER_JOINERS:
        handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_MESHCOP_COMMISSIONER_JOINERS>;
        break;
    case SPINEL_PROP_THREAD_JOINERS:
        handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_THREAD_JOINERS>;
        break;
#endif
#endif // OPENTHREAD_FTD

        // --------------------------------------------------------------------------
        // Raw Link API Properties (Insert Handler)

#if OPENTHREAD_RADIO || OPENTHREAD_CONFIG_LINK_RAW_ENABLE
    case SPINEL_PROP_MAC_SRC_MATCH_SHORT_ADDRESSES:
        handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_MAC_SRC_MATCH_SHORT_ADDRESSES>;
        break;
    case SPINEL_PROP_MAC_SRC_MATCH_EXTENDED_ADDRESSES:
        handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_MAC_SRC_MATCH_EXTENDED_ADDRESSES>;
        break;
#endif

    default:
        handler = NULL;
    }

    return handler;
}

NcpBase::PropertyHandler NcpBase::FindRemovePropertyHandler(spinel_prop_key_t aKey)
{
    NcpBase::PropertyHandler handler;

    switch (aKey)
    {
        // --------------------------------------------------------------------------
        // Common Properties (Remove Handler)

    case SPINEL_PROP_UNSOL_UPDATE_FILTER:
        handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_UNSOL_UPDATE_FILTER>;
        break;

        // --------------------------------------------------------------------------
        // MTD (or FTD) Properties (Remove Handler)

#if OPENTHREAD_MTD || OPENTHREAD_FTD
    case SPINEL_PROP_IPV6_ADDRESS_TABLE:
        handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_IPV6_ADDRESS_TABLE>;
        break;
    case SPINEL_PROP_IPV6_MULTICAST_ADDRESS_TABLE:
        handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_IPV6_MULTICAST_ADDRESS_TABLE>;
        break;
#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
    case SPINEL_PROP_THREAD_OFF_MESH_ROUTES:
        handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_THREAD_OFF_MESH_ROUTES>;
        break;
    case SPINEL_PROP_THREAD_ON_MESH_NETS:
        handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_THREAD_ON_MESH_NETS>;
        break;
#endif
    case SPINEL_PROP_THREAD_ASSISTING_PORTS:
        handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_THREAD_ASSISTING_PORTS>;
        break;
#if OPENTHREAD_CONFIG_MAC_FILTER_ENABLE
    case SPINEL_PROP_MAC_WHITELIST:
        handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_MAC_WHITELIST>;
        break;
    case SPINEL_PROP_MAC_BLACKLIST:
        handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_MAC_BLACKLIST>;
        break;
    case SPINEL_PROP_MAC_FIXED_RSS:
        handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_MAC_FIXED_RSS>;
        break;
#endif
#if OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE
    case SPINEL_PROP_SERVER_SERVICES:
        handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_SERVER_SERVICES>;
        break;
#endif
#endif // OPENTHREAD_MTD || OPENTHREAD_FTD

        // --------------------------------------------------------------------------
        // FTD Only Properties (Remove Handler)

#if OPENTHREAD_FTD
    case SPINEL_PROP_THREAD_ACTIVE_ROUTER_IDS:
        handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_THREAD_ACTIVE_ROUTER_IDS>;
        break;
#if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE
    case SPINEL_PROP_MESHCOP_COMMISSIONER_JOINERS:
        handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_MESHCOP_COMMISSIONER_JOINERS>;
        break;
#endif
#endif // OPENTHREAD_FTD

        // --------------------------------------------------------------------------
        // Raw Link API Properties (Remove Handler)

#if OPENTHREAD_RADIO || OPENTHREAD_CONFIG_LINK_RAW_ENABLE
    case SPINEL_PROP_MAC_SRC_MATCH_SHORT_ADDRESSES:
        handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_MAC_SRC_MATCH_SHORT_ADDRESSES>;
        break;
    case SPINEL_PROP_MAC_SRC_MATCH_EXTENDED_ADDRESSES:
        handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_MAC_SRC_MATCH_EXTENDED_ADDRESSES>;
        break;
#endif

    default:
        handler = NULL;
    }

    return handler;
}

} // namespace Ncp
} // namespace ot
