在/pcie_device/src/lualib/biz_topo/class/unit_configuration.lua中,存在一行初始UnitConfiguration对象BCUIndex属性的代码:
对这行代码有两个问题:
①这里为何要单独再为BCUIndex赋值?
②config[8]这种赋值方法,相当于魔鬼数字,为何不使用self.mds_obj.Configurations[i].BCUIndex = config.BCUIndex进行赋值
在/pcie_device/src/lualib/biz_topo/class/unit_configuration.lua中,存在一行初始UnitConfiguration对象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:
加载时应该是按照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]呢?这种通过索引传递值的方式在整个流程中(整个流程中普遍是匹配属性名进行值的传递)显得格格不入。
问题③您说的这种出错的情况能否具体举个例子?

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