• gdb使用


    背景:C++开发环境下,掌握gdb的使用很有必要。

    通过gdb调用初始化函数。

    REG_DRV_MOD_INSTANCE(DRV_MODULE_ID_FNPR_PA_TBL, dha_fnpr_pa_tbl);
    
    dha_fnpr_pa_tbl *g_pa_tbl_ptr = nullptr;
    err_t dha_fnpr_pa_tbl::drv_initialize(uint32_t step)
    {
      g_pa_tbl_ptr = this;
      if (step == INIT_WITH_OTHER) {
        dha_fnpr_tbl_adapter_ptr adapter(DRV_MODULE_ID_DDM_TBL_RW, pool_);
        if (adapter != nullptr) {
          for (auto item : table_id_) {
            adapter->reg_tbl(item, DRV_MODULE_ID_FNPR_PA_TBL);
          }
        }
      }
      if (step == INIT_CHIP) {
        DCHIP_WARN(("pa init start")(step));
        DRV_RESET_INIT_EXE_ACL(dnid())
        DCHIP_WARN(("hard init pa tbl")(dnid()));
        //auto ret = init_pa();
        //if (ret != UTFP_ERR_SUCCESS)
          //DCHIP_WARN(("init_pa fail")(ret));
      }
      return UTFP_ERR_SUCCESS;
    }
    
    err_t dha_fnpr_pa_tbl::write(const ddm_table_ctrldata* ctrldata)
    {
      if (!table_id_valid(ctrldata->tbl_id()))
        return UTFP_ERR_SUCCESS;
    
      auto data = dynamic_cast<const ddm_fnpr_pa_ctrldata*>(ctrldata);
      if (data == nullptr)
        return UTFP_ERR_FAILURE;
    
      if (data->opcode() == DDM_TABLE_OPCODE_ERASE)
        return del_pa(data);
    
      if (data->data().key_data.valid == 0)
        return UTFP_ERR_SUCCESS;
    
      std::pair<uint8_t, std::function<err_t(const ddm_fnpr_pa_ctrldata* data)>> msg_func_tbl[] =
      {
        { FNPR_PA_KEY_ETH, [this](const ddm_fnpr_pa_ctrldata* _data) -> err_t
          { return add_eth_pa(_data); }
        },
      };
    
      for (const auto& item : msg_func_tbl) {
        if (item.first == data->data().key_data.key_type)
          return (item.second)(data);
      }
    
      return UTFP_ERR_FAILURE;
    }
    
    void init_pa_test(uint32_t step)
    {
      g_pa_tbl_ptr->init_pa(step);
    }
    
    err_t dha_fnpr_pa_tbl::init_pa(uint32_t step)
    {
      ddm_fnpr_painfo_encap painfo(pool_);
      if (!painfo.valid)
        return UTFP_ERR_FAILURE;
    
      if (step == 0) {
        std::pair<uint8_t, std::function<err_t(const ddm_fnpr_pa_entry& entry,
          uint32_t* key, uint32_t* mask, uint32_t* ad)>> msg_func_tbl[] =
        {
          { FNPR_PA_KEY_ETH, [this](const ddm_fnpr_pa_entry& _entry,
            uint32_t* _key, uint32_t* _mask, uint32_t* _ad) -> err_t
            { return set_eth_pa_key_mask_ad(_entry, _key, _mask, _ad); }
          },
        };
    
        for (const auto& item : painfo.data.pa_info) {
          uint32_t key[FPI588X_PA_TCAM_ETH_ENTRY_32BIT_WIDTH];
          uint32_t mask[FPI588X_PA_TCAM_ETH_ENTRY_32BIT_WIDTH];
          uint32_t ad[FPI588X_PA_ART_ENTRY_32BIT_WIDTH];
          memset_s(&key[0], sizeof(key), 0, sizeof(key));
          memset_s(&mask[0], sizeof(mask), 0, sizeof(mask));
          memset_s(&ad[0], sizeof(ad), 0, sizeof(ad));
    
          for (const auto& tbl_item : msg_func_tbl) {
            if ((tbl_item.first == item.key_data.key_type)
              && (item.key_data.valid != 0)) {
              (tbl_item.second)(item, &key[0], &mask[0], &ad[0]);
    
              FNPR_ADD_TCAM_ENTRY(0, TBL_ID_HPA3, item.tbl_idx,
                key, mask, ad);
            }
          }
        }
    
      }
  • 相关阅读:
    shell文件包含
    shell输入/输出重定向
    shell流程控制
    shell echo命令(六)
    shell基本运算符(五)
    shell数组(四)
    shell传递参数-$的用法(三)
    SQL 注入 处理
    WPF 还未开始我就打算结束
    Java SDK 2.0
  • 原文地址:https://www.cnblogs.com/lixuwu/p/10539139.html
Copyright © 2020-2023  润新知