in cni/cni.go [132:166]
func CallPlugin(plugin PluginApi, cmd string, args *cniSkel.CmdArgs, config *NetworkConfig) (*cniTypes.Result, error) {
var err error
savedType := config.Ipam.Type
config.Ipam.Type = Internal
args.StdinData = config.Serialize()
// Call the plugin's internal interface.
if cmd == CmdAdd {
err = plugin.Add(args)
} else {
err = plugin.Delete(args)
}
config.Ipam.Type = savedType
if err != nil {
res := cniTypes.Error{
Code: 66,
Msg: "failure in cni",
Details: err.Error(),
}
res.Print()
return nil, err
}
// Read back the result.
var result cniTypes.Result
err = json.Unmarshal(args.StdinData, &result)
if err != nil {
return nil, err
}
return &result, nil
}