UnitConfiguration对象的BCUIndex属性初始化问题

在/pcie_device/src/lualib/biz_topo/class/unit_configuration.lua中,存在一行初始UnitConfiguration对象BCUIndex属性的代码:


对这行代码有两个问题:
①这里为何要单独再为BCUIndex赋值?
②config[8]这种赋值方法,相当于魔鬼数字,为何不使用self.mds_obj.Configurations[i].BCUIndex = config.BCUIndex进行赋值

您好,这种写法是因为部分机型为单BCU,没有Index字段,另外一部分机型存在这个字段,因此需要进行特殊配置防止后续用到的地方出错。后面会在社区提一个修改加上注释。

提这个问题是因为我们碰到了异常:我们为了适配Switch,在Unitconfiguration中新增了一个属性用来表示Switch的Port,这样会导致BCUIndex不再是config[8],结果就是最后BCUIndex被赋值成了“true”,导致无法通过is_bcu_index_valid函数的校验。

能否针对我们这种情况,给出一个修改BUCIndex赋值方法的建议。

您好,这边建议在CSR中显式的把BCUIndex配上,或者在使用的时候显式判断一下最后一位的类型,来防止lua表中出现空洞的问题。

您好 对于**self.mds_obj.Configurations[i].BCUIndex = config[8]**这行代码,我还是有些疑问,希望您可以帮忙解答一下。

当框架从csr中加载下面这个对象时,应该是会通过匹配属性名的方式进行加载。毕竟对象下的属性都在model.json里声明了。

"UnitConfiguration_SEU1_1": {
      "SlotType": "SEU",
      "SlotNumber": 1,
      "SlotSilkText": "SEUSlot1",
      "Configurations": [
        {
          "UID": "00000001030302023925",
          "Index": 1,
          "SrcPortName": [
            "C7b",
            "C7a"
          ],
          "TargetPortID": [
            33,
            32
          ],
          "Slot": [
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8
          ],
          "Device": []
        }
     ],
     "Port1LinkInfo": ""
}

mds/model.json:


mds/types.json:

加载时应该是按照types.json#/defs/Configuration中配置的属性名和顺序,将csr中的对象加载。直到这里都是根据属性名来传值的。(问题①这里我想知道如果csr中没有配置某个属性,且model.json/type.json中没有给该属性配置默认值,那么该属性是会按照类型被强制赋予一个默认值还是直接就是nil?)

在使用configuration_new解包config结构体时,只要保证黄色方框中configuration_new声明的入参和types.json中的属性顺序一致,就能保证一一对应吧?

问题②为什么要再多此一举进行self.mds_obj.Configurations[i].BCUIndex = config[8]呢?这种通过索引传递值的方式在整个流程中(整个流程中普遍是匹配属性名进行值的传递)显得格格不入。

问题③您说的这种出错的情况能否具体举个例子?
image

这个自发现对象分发到APP里使用时会变成数组,这里的作用是将数组重新转成结构体。