mirror of
https://gitee.com/willfree/mlsr.git
synced 2026-06-06 17:09:29 +08:00
通过转json的方式,解决MlsrConfig中结构体数组的存取问题
This commit is contained in:
+62
-13
@@ -9,6 +9,7 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"gopkg.in/ini.v1"
|
||||
)
|
||||
|
||||
@@ -26,7 +27,8 @@ type MlsrConfig struct {
|
||||
AdvertisingConfig `ini:"Advertising"`
|
||||
SecurityConfig `ini:"Security"`
|
||||
|
||||
mlsrConfigPath string // 配置文件所在路径
|
||||
mlsrConfigPath string // 配置文件所在路径
|
||||
neighbors []NeighborConfig // NeighborsConfig中的信息
|
||||
}
|
||||
|
||||
//
|
||||
@@ -61,17 +63,47 @@ type NeighborsConfig struct {
|
||||
LogicFaceDatasetFetchRetries uint32 `ini:"LogicFaceDatasetFetchRetries"` // 获取FaceStatus数据集的重试次数
|
||||
LogicFaceDatasetFetchInterval uint32 `ini:"LogicFaceDatasetFetchInterval"` // FaceStatus数据集获取尝试之间的间隔
|
||||
|
||||
NeighborsInfo []*NeighborConfig `ini:"NeighborsInfo"` // 邻居路由器链路信息
|
||||
NeighborsInfo NeighborsJsonString `ini:"NeighborsInfo"` // 邻居路由器链路信息
|
||||
}
|
||||
|
||||
type NeighborConfig struct {
|
||||
//NeighborName string `ini:"NeighborName"` // 邻居路由器的名称前缀
|
||||
//LogicFaceUri string `ini:"LogicFaceUri"` // 连接该邻居路由器的LogicFace的URI
|
||||
//LinkCost uint64 `ini:"LinkCost"` // 链路开销(用uint64还是double待决)
|
||||
type NeighborsJsonString string
|
||||
|
||||
NeighborName string // 邻居路由器的名称前缀
|
||||
LogicFaceUri string // 连接该邻居路由器的LogicFace的URI
|
||||
LinkCost uint64 // 链路开销(用uint64还是double待决)
|
||||
type NeighborConfig struct {
|
||||
NeighborName string `ini:"NeighborName"` // 邻居路由器的名称前缀
|
||||
LogicFaceUri string `ini:"LogicFaceUri"` // 连接该邻居路由器的LogicFace的URI
|
||||
LinkCost uint64 `ini:"LinkCost"` // 链路开销(用uint64还是double待决)
|
||||
}
|
||||
|
||||
//
|
||||
// parseNeighborConfigToJsonString
|
||||
// @Description: 将neighbors结构体数组转为json字符串
|
||||
// @param neighbors
|
||||
// @return NeighborsJsonString
|
||||
// @return error
|
||||
//
|
||||
func parseNeighborConfigToJsonString(neighbors []NeighborConfig) (NeighborsJsonString,error) {
|
||||
bytes,err := json.Marshal(neighbors)
|
||||
if err!= nil{
|
||||
return "",err
|
||||
}
|
||||
return NeighborsJsonString(bytes), nil
|
||||
}
|
||||
|
||||
//
|
||||
// parseJsonStringToNeighbors
|
||||
// @Description: 将json字符串neighbors结构体数组
|
||||
// @receiver c
|
||||
// @param jsonString
|
||||
// @return []NeighborConfig
|
||||
// @return error
|
||||
//
|
||||
func parseJsonStringToNeighbors(jsonString NeighborsJsonString) ([]NeighborConfig,error) {
|
||||
var neighbors []NeighborConfig
|
||||
err := json.Unmarshal([]byte(jsonString), &neighbors)
|
||||
if err!= nil{
|
||||
return nil,err
|
||||
}
|
||||
return neighbors, nil
|
||||
}
|
||||
|
||||
//
|
||||
@@ -120,10 +152,21 @@ func (c *MlsrConfig) Init() {
|
||||
c.NeighborsConfig.AdjLsaBuildInterval = 10 // 5-30
|
||||
c.NeighborsConfig.LogicFaceDatasetFetchRetries = 3 // 1-10
|
||||
c.NeighborsConfig.LogicFaceDatasetFetchInterval = 3600 // 1800-5400
|
||||
// todo: 下面这种记录方式,无法将邻居链路信息存储到配置文件中
|
||||
c.NeighborsConfig.NeighborsInfo=[]*NeighborConfig{
|
||||
{"/routerB","tcp://1.1.1.1",10},
|
||||
{"/routerC","udp://1.1.1.2",10}}
|
||||
// 将邻居链路信息存储到配置文件中 todo:用于测试
|
||||
neighborConfig1 := NeighborConfig{
|
||||
NeighborName: "/routerB",
|
||||
LogicFaceUri: "tcp://1.1.1.1",
|
||||
LinkCost: 10,
|
||||
}
|
||||
neighborConfig2 := NeighborConfig{
|
||||
NeighborName: "/routerC",
|
||||
LogicFaceUri: "tcp://1.1.1.0",
|
||||
LinkCost: 10,
|
||||
}
|
||||
//neighborsJsonString, _ := parseNeighborConfigToJsonString(
|
||||
// []NeighborConfig{neighborConfig1,neighborConfig2})
|
||||
//c.NeighborsConfig.NeighborsInfo=neighborsJsonString
|
||||
c.neighbors=[]NeighborConfig{neighborConfig1,neighborConfig2}
|
||||
|
||||
// 路由计算配置参数
|
||||
c.FibConfig.MaxLogicFacesPerPrefix = 0 // 0-60 todo:为啥默认是0呢
|
||||
@@ -141,6 +184,9 @@ func (c *MlsrConfig) Init() {
|
||||
//
|
||||
func (c *MlsrConfig) Save() error {
|
||||
cfg := ini.Empty()
|
||||
if len(c.neighbors)>0 {
|
||||
c.NeighborsInfo, _ = parseNeighborConfigToJsonString(c.neighbors)
|
||||
}
|
||||
if err:= ini.ReflectFrom(cfg,c); err!= nil{
|
||||
return err
|
||||
}
|
||||
@@ -168,5 +214,8 @@ func ParseConfig(configPath string) (*MlsrConfig, error) {
|
||||
if err = cfg.MapTo(&mlsrConfig); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if mlsrConfig.NeighborsInfo!="" {
|
||||
mlsrConfig.neighbors, _ = parseJsonStringToNeighbors(mlsrConfig.NeighborsInfo)
|
||||
}
|
||||
return mlsrConfig, nil
|
||||
}
|
||||
|
||||
@@ -36,8 +36,25 @@ func TestMlsrConfig_ParseConfigAndSave(t *testing.T) {
|
||||
testPath += DefaultConfFileName
|
||||
fmt.Println("test mlsr conf path: "+testPath)
|
||||
mlsrConfig,_ := ParseConfig(testPath)
|
||||
|
||||
// 存储
|
||||
fmt.Println(mlsrConfig)
|
||||
_ = mlsrConfig.Save()
|
||||
|
||||
// 取出
|
||||
mlsrConfig2,_ := ParseConfig(testPath)
|
||||
fmt.Println(mlsrConfig2)
|
||||
|
||||
// 解析neighbors
|
||||
neighbors := mlsrConfig2.neighbors
|
||||
fmt.Println(neighbors)
|
||||
|
||||
// 修改再存
|
||||
ss:=NeighborConfig{
|
||||
NeighborName: "nei",
|
||||
LogicFaceUri: "uri",
|
||||
LinkCost: 0,
|
||||
}
|
||||
mlsrConfig2.neighbors = append(mlsrConfig2.neighbors,ss)
|
||||
_ = mlsrConfig2.Save()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user