资源协作接口中的变量是在哪定义的

我在CSR中定义了

        "Endpoint_1": {
            "TargetEid": 9,
            "TargetPhyAddr": 29,
            "MessageType": 4,
            "MediumType": 2,
            "RefChip": "#/Chip_Mctp"
        }

对应mctpd的model.json中的

"Endpoint": {
        "path": "/bmc/kepler/Systems/:SystemId/Mctp/Endpoint/:Id/:MsgType",
        "privilege": [
            "ConfigureSelf"
        ],
        "interfaces": {
            "bmc.kepler.Systems.Mctp.PCIeEndpoint": {
                "properties": {
                    "ServiceName": {},
                    "TargetEid": {
                        "usage": [
                            "CSR"
                        ]
                    },
                    "TargetPhyAddr": {
                        "usage": [
                            "CSR"
                        ]
                    },
                    "MessageType": {
                        "usage": [
                            "CSR"
                        ]
                    },
                    "MediumType": {
                        "usage": [
                            "CSR"
                        ]
                    },
                    "Status": {}
                }
            },

但是加载却失败了,从日志来看似乎是因为path[/bmc/kepler/Systems/1/Mctp/Endpoint/Endpoint_1_010101/${MsgType}]中最后一个变量MsgType获取不到值导致的

1970-01-01 03:44:24.475859 mctpd INFO: object_manage.lua(248): start to AddObject Endpoint_1_010101, owner:mctpd, path:/bmc/kepler/ObjectGroup/010101, position:010101, life_cycle_id:1, class_name:Endpoint
1970-01-01 03:44:24.522118 mctpd DEBUG: object.lua(83): set property traceback: sender[bmc.kepler.mctpd], path[/bmc/kepler/Systems/1/Mctp/Endpoint/Endpoint_1_010101/${MsgType}], interface[bmc.kepler.Systems.Mctp.PCIeEndpoint], name[Status], value[nil]->[0], traceback[stack traceback:  ./opt/bmc/libmc/lualib/traceback/object.lua:49: in function <./opt/bmc/libmc/lualib/traceback/object.lua:45>  [C]: in function 'pcall'  ./opt/bmc/libmc/lualib/mc/logging.lua:109: in function 'format_msg'  ./opt/bmc/libmc/lualib/mc/logging.lua:253: in function 'LOG_MSG'  ./opt/bmc/libmc/lualib/mc/logging.lua:459: in function 'log_easy'  ./opt/bmc/libmc/lualib/mc/logging.lua:463: in function 'debug_easy'  ./opt/bmc/libmc/lualib/traceback/object.lua:83: in function 'before_set_value'  ./opt/bmc/libmc/lualib/traceback/object.lua:88: in function '__newindex'  ./opt/bmc/libmc/lualib/mc/mdb/init.lua:657: in function 'new_object'  ./opt/bmc/libmc/lualib/mc/mdb/init.lua:671: in function 'do_create_mdb_objects'  .../libmc/lualib/mc/class_mgnt/api/object/mdb_mgmt/init.lua:192: in function 'create_mdb_objects'  ...c/lualib/mc/class_mgnt/api/object/property_mgmt/init.lua:467: in function 'parse_sr_extra_params'  ./opt/bmc/libmc/lualib/mc/mdb/object_manage.lua:119: in function <./opt/bmc/libmc/lualib/mc/mdb/object_manage.lua:112>  [C]: in function 'pcall'  ./opt/bmc/libmc/lualib/mc/mdb/object_manage.lua:251: in function <./opt/bmc/libmc/lualib/mc/mdb/object_manage.lua:244>  [builtin#21]: at 0xffff9c4fb3c0  [C]: in function 'pcall'  ./opt/bmc/libmc/lualib/mc/context.lua:205: in function 'with_context'  ./opt/bmc/libmc/lualib/mc/app_preloader.lua:92: in function ''  /opt/bmc/skynet/lualib/skynet.lua: in function </opt/bmc/skynet/lualib/skynet.lua:0>]
……
1970-01-01 03:44:25.663781 mctpd DEBUG: object.lua(83): set property traceback: sender[bmc.kepler.mctpd], path[/bmc/kepler/Systems/1/Mctp/Endpoint/Endpoint_1_010101/${MsgType}], interface[bmc.kepler.Systems.Mctp.PCIeEndpoint], name[TargetEid], value[0]->[9], traceback[stack traceback:  ./opt/bmc/libmc/lualib/traceback/object.lua:49: in function <./opt/bmc/libmc/lualib/traceback/object.lua:45>  [C]: in function 'pcall'  ./opt/bmc/libmc/lualib/mc/logging.lua:109: in function 'format_msg'  ./opt/bmc/libmc/lualib/mc/logging.lua:253: in function 'LOG_MSG'  ./opt/bmc/libmc/lualib/mc/logging.lua:459: in function 'log_easy'  ./opt/bmc/libmc/lualib/mc/logging.lua:463: in function 'debug_easy'  ./opt/bmc/libmc/lualib/traceback/object.lua:83: in function 'before_set_value'  ./opt/bmc/libmc/lualib/traceback/object.lua:88: in function '__newindex'  ...c/lualib/mc/class_mgnt/api/object/property_mgmt/init.lua:344: in function 'force_set_prop'  ...c/lualib/mc/class_mgnt/api/object/property_mgmt/init.lua:452: in function 'assign_sr_props'  ./opt/bmc/libmc/lualib/mc/mdb/object_manage.lua:124: in function <./opt/bmc/libmc/lualib/mc/mdb/object_manage.lua:112>  [C]: in function 'pcall'  ./opt/bmc/libmc/lualib/mc/mdb/object_manage.lua:251: in function <./opt/bmc/libmc/lualib/mc/mdb/object_manage.lua:244>  [builtin#21]: at 0xffff9c4fb3c0  [C]: in function 'pcall'  ./opt/bmc/libmc/lualib/mc/context.lua:205: in function 'with_context'  ./opt/bmc/libmc/lualib/mc/app_preloader.lua:92: in function ''  /opt/bmc/skynet/lualib/skynet.lua: in function </opt/bmc/skynet/lualib/skynet.lua:0>]
1970-01-01 03:44:25.664881 mctpd DEBUG: init.lua(409): assign preset props failed, table not exists, class_name: Endpoint
1970-01-01 03:44:25.665760 mctpd DEBUG: init.lua(520): assign persistance props failed, database not exists, class_name: Endpoint
1970-01-01 03:44:25.722444 mctpd DEBUG: app_preloader.lua(58): co[thread: 0x7393c9e75640] exit

想问一下像这种资源协作接口中的变量是在哪定义的,以及怎么处理这种错误

  1. 
    

"path": "/bmc/kepler/Systems/:SystemId/Mctp/Endpoint/:Id/:MsgType"

个人理解这种路径中的:变量,一般是参数占位符,在匹配的同时进行赋值。

attach mctpd组件,发现以下打印:

ecdbeffc8f8b9562f161b380c913d067

查看资源树:

因此推测path[/bmc/kepler/Systems/1/Mctp/Endpoint/Endpoint_1_010101/${MsgType}]这样的打印是正常的,在mctpd组件中会去获取MsgType的值然后重新组成一个/bmc/kepler/Systems/1/Mctp/Endpoint/0101020301_29/4这种格式的Path,然后上树

1 个赞

:SystemId 和 :Id是由自发现分发对象时填充的,:MsgType是由mctpd自行上树对象的时候填充的

1 个赞

set property traceback这行打印是在设置对象的属性前会打印的调用栈,这里并不是产生了问题。${MsgType}是在组件创建对象的时候补充上去的。请问加载失败具体是什么表现呢?是资源树上没有Endpoint_1吗?你在一键收集的日志里过滤下smbus看看有没有什么异常的日志?

1 个赞

在app.log中确实有如下日志:

2025-10-27 09:18:22.638755 unknown_service ERROR: smbus_write_read_service.lua(88): process smbus request failed. chip name: Chip_Mctp_010101, err: ./opt/bmc/apps/hwproxy/lualib/chip.lua:414: ./opt/bmc/apps/hwproxy/lualib/stream/i2c.lua:117: response error, i2c read fail, ret: false, input:{"is_trace":false,"addrWidth":1,"name":"Chip_Mctp_010101","requestor":"bmc.kepler.hwproxy","protocol_flag":2,"mask":4294967295,"offset":0,"bus_type":0,"type":1,"len":259,"buffer":"3A 0F 0A 21 01 00 08 C9 00 80 01 00 63 F6 ","rw_type":1,"has_error":false,"addr":58,"offsetWidth":0}

3A 0F 0A 21 01 00 08 C9 00 80 01 00 63 F6对应的就是MCTP over SMBus的set endpoint ID命令,但是读取响应失败,初步定位原因如下:
1、我的设备拓扑为:i2c6->pca9545->channel 0->Marvell RAID(0x1d)
2、因为该设备响应需要做主从切换,但是mctpd似乎没有考虑中间带pca9545的情况,发送数据后就把pca9545通道关闭了(从0x70读出来pca9545寄存器值为0x00),导致RAID卡切换为主后无法发送响应
能确认一下mctpd是否存在该设计缺陷吗