strongswan govici:unmarshall子SA结构

ux6nzvsh  于 2023-05-20  发布在  Go
关注(0)|答案(1)|浏览(145)

我开始使用Strongswan govici API来控制IPsec,遵循我在https://github.com/strongswan/govici/blob/master/docs/getting_started.md找到的一般模式。
除了我无法设置连接的childSA的map_inmap_out字段外,它还在工作。

package main

import (
    "fmt"

    "github.com/k0kubun/pp/v3"
    "github.com/strongswan/govici/vici"
)

func main() {
    type childSA struct {
        markIn  string `vici:"mark_in"`
        markOut string `vici:"mark_out"`
    }
    type viciConnection struct {
        LocalAddrs  []string            `vici:"local_addrs"`
        RemoteAddrs []string            `vici:"remote_addrs"`
        Children    map[string]*childSA `vici:"children"`
    }

    vc := viciConnection{
        LocalAddrs:  []string{"1.1.1.1"},
        RemoteAddrs: []string{"2.2.2.2"},
        Children: map[string]*childSA{
            "onlyChild": &childSA{
                markIn:  "4/0xffffffff",
                markOut: "4",
            },
        },
    }

    c, err := vici.MarshalMessage(vc)
    if err != nil {
        fmt.Printf("%v\n", err)
        return
    }

    pp.Default.SetColoringEnabled(false)
    fmt.Printf("Marshalled message: %s\n", pp.Sprint(c))
}

输出:

Marshalled message: &vici.Message{
  keys: []string{
    "local_addrs",
    "remote_addrs",
    "children",
  },
  data: map[string]interface {}{
    "children": &vici.Message{
      keys: []string{
        "onlyChild",
      },
      data: map[string]interface {}{
        "onlyChild": &vici.Message{
          keys: []string{},
          data: map[string]interface {}{},
        },
      },
    },
    "local_addrs": []string{
      "1.1.1.1",
    },
    "remote_addrs": []string{
      "2.2.2.2",
    },
  },
}

onlyChild下,我希望在keysdata部分看到mark_inmark_out字段,但它们都不见了。
在这里运行:https://goplay.tools/snippet/WRoelsjbf9M

toe95027

toe950271#

感谢@BurakSerdar:将字段名称大写,以便将它们导出为字段:

type childSA struct {
    MarkIn  string `vici:"mark_in"`
    MarkOut string `vici:"mark_out"`
}

相关问题