diff --git a/binapi/graph/graph_rpc.ba.go b/binapi/graph/graph_rpc.ba.go index 96a22021..57194ef3 100644 --- a/binapi/graph/graph_rpc.ba.go +++ b/binapi/graph/graph_rpc.ba.go @@ -36,7 +36,7 @@ func (c *serviceClient) GraphNodeGet(ctx context.Context, in *GraphNodeGet) (RPC } type RPCService_GraphNodeGetClient interface { - Recv() (*GraphNodeDetails, error) + Recv() (*GraphNodeDetails, *GraphNodeGetReply, error) api.Stream } @@ -44,21 +44,24 @@ type serviceClient_GraphNodeGetClient struct { api.Stream } -func (c *serviceClient_GraphNodeGetClient) Recv() (*GraphNodeDetails, error) { +func (c *serviceClient_GraphNodeGetClient) Recv() (*GraphNodeDetails, *GraphNodeGetReply, error) { msg, err := c.Stream.RecvMsg() if err != nil { - return nil, err + return nil, nil, err } switch m := msg.(type) { case *GraphNodeDetails: - return m, nil + return m, nil, nil case *GraphNodeGetReply: + if err := api.RetvalToVPPApiError(m.Retval); err != nil { + return nil, nil, err + } err = c.Stream.Close() if err != nil { - return nil, err + return nil, nil, err } - return nil, io.EOF + return nil, m, io.EOF default: - return nil, fmt.Errorf("unexpected message: %T %v", m, m) + return nil, nil, fmt.Errorf("unexpected message: %T %v", m, m) } } diff --git a/binapi/interface/interface_rpc.ba.go b/binapi/interface/interface_rpc.ba.go index a1754032..8103d7cb 100644 --- a/binapi/interface/interface_rpc.ba.go +++ b/binapi/interface/interface_rpc.ba.go @@ -406,7 +406,7 @@ func (c *serviceClient) SwInterfaceTxPlacementGet(ctx context.Context, in *SwInt } type RPCService_SwInterfaceTxPlacementGetClient interface { - Recv() (*SwInterfaceTxPlacementDetails, error) + Recv() (*SwInterfaceTxPlacementDetails, *SwInterfaceTxPlacementGetReply, error) api.Stream } @@ -414,22 +414,25 @@ type serviceClient_SwInterfaceTxPlacementGetClient struct { api.Stream } -func (c *serviceClient_SwInterfaceTxPlacementGetClient) Recv() (*SwInterfaceTxPlacementDetails, error) { +func (c *serviceClient_SwInterfaceTxPlacementGetClient) Recv() (*SwInterfaceTxPlacementDetails, *SwInterfaceTxPlacementGetReply, error) { msg, err := c.Stream.RecvMsg() if err != nil { - return nil, err + return nil, nil, err } switch m := msg.(type) { case *SwInterfaceTxPlacementDetails: - return m, nil + return m, nil, nil case *SwInterfaceTxPlacementGetReply: + if err := api.RetvalToVPPApiError(m.Retval); err != nil { + return nil, nil, err + } err = c.Stream.Close() if err != nil { - return nil, err + return nil, nil, err } - return nil, io.EOF + return nil, m, io.EOF default: - return nil, fmt.Errorf("unexpected message: %T %v", m, m) + return nil, nil, fmt.Errorf("unexpected message: %T %v", m, m) } } diff --git a/binapi/ip/ip_rpc.ba.go b/binapi/ip/ip_rpc.ba.go index 31124fcd..255a3b32 100644 --- a/binapi/ip/ip_rpc.ba.go +++ b/binapi/ip/ip_rpc.ba.go @@ -359,7 +359,7 @@ func (c *serviceClient) IPPathMtuGet(ctx context.Context, in *IPPathMtuGet) (RPC } type RPCService_IPPathMtuGetClient interface { - Recv() (*IPPathMtuDetails, error) + Recv() (*IPPathMtuDetails, *IPPathMtuGetReply, error) api.Stream } @@ -367,22 +367,25 @@ type serviceClient_IPPathMtuGetClient struct { api.Stream } -func (c *serviceClient_IPPathMtuGetClient) Recv() (*IPPathMtuDetails, error) { +func (c *serviceClient_IPPathMtuGetClient) Recv() (*IPPathMtuDetails, *IPPathMtuGetReply, error) { msg, err := c.Stream.RecvMsg() if err != nil { - return nil, err + return nil, nil, err } switch m := msg.(type) { case *IPPathMtuDetails: - return m, nil + return m, nil, nil case *IPPathMtuGetReply: + if err := api.RetvalToVPPApiError(m.Retval); err != nil { + return nil, nil, err + } err = c.Stream.Close() if err != nil { - return nil, err + return nil, nil, err } - return nil, io.EOF + return nil, m, io.EOF default: - return nil, fmt.Errorf("unexpected message: %T %v", m, m) + return nil, nil, fmt.Errorf("unexpected message: %T %v", m, m) } } diff --git a/binapi/ipfix_export/ipfix_export_rpc.ba.go b/binapi/ipfix_export/ipfix_export_rpc.ba.go index f34b4e64..11cecf36 100644 --- a/binapi/ipfix_export/ipfix_export_rpc.ba.go +++ b/binapi/ipfix_export/ipfix_export_rpc.ba.go @@ -45,7 +45,7 @@ func (c *serviceClient) IpfixAllExporterGet(ctx context.Context, in *IpfixAllExp } type RPCService_IpfixAllExporterGetClient interface { - Recv() (*IpfixAllExporterDetails, error) + Recv() (*IpfixAllExporterDetails, *IpfixAllExporterGetReply, error) api.Stream } @@ -53,22 +53,25 @@ type serviceClient_IpfixAllExporterGetClient struct { api.Stream } -func (c *serviceClient_IpfixAllExporterGetClient) Recv() (*IpfixAllExporterDetails, error) { +func (c *serviceClient_IpfixAllExporterGetClient) Recv() (*IpfixAllExporterDetails, *IpfixAllExporterGetReply, error) { msg, err := c.Stream.RecvMsg() if err != nil { - return nil, err + return nil, nil, err } switch m := msg.(type) { case *IpfixAllExporterDetails: - return m, nil + return m, nil, nil case *IpfixAllExporterGetReply: + if err := api.RetvalToVPPApiError(m.Retval); err != nil { + return nil, nil, err + } err = c.Stream.Close() if err != nil { - return nil, err + return nil, nil, err } - return nil, io.EOF + return nil, m, io.EOF default: - return nil, fmt.Errorf("unexpected message: %T %v", m, m) + return nil, nil, fmt.Errorf("unexpected message: %T %v", m, m) } } diff --git a/binapi/lcp/lcp_rpc.ba.go b/binapi/lcp/lcp_rpc.ba.go index 1010d03c..03fa12c7 100644 --- a/binapi/lcp/lcp_rpc.ba.go +++ b/binapi/lcp/lcp_rpc.ba.go @@ -78,7 +78,7 @@ func (c *serviceClient) LcpItfPairGet(ctx context.Context, in *LcpItfPairGet) (R } type RPCService_LcpItfPairGetClient interface { - Recv() (*LcpItfPairDetails, error) + Recv() (*LcpItfPairDetails, *LcpItfPairGetReply, error) api.Stream } @@ -86,22 +86,25 @@ type serviceClient_LcpItfPairGetClient struct { api.Stream } -func (c *serviceClient_LcpItfPairGetClient) Recv() (*LcpItfPairDetails, error) { +func (c *serviceClient_LcpItfPairGetClient) Recv() (*LcpItfPairDetails, *LcpItfPairGetReply, error) { msg, err := c.Stream.RecvMsg() if err != nil { - return nil, err + return nil, nil, err } switch m := msg.(type) { case *LcpItfPairDetails: - return m, nil + return m, nil, nil case *LcpItfPairGetReply: + if err := api.RetvalToVPPApiError(m.Retval); err != nil { + return nil, nil, err + } err = c.Stream.Close() if err != nil { - return nil, err + return nil, nil, err } - return nil, io.EOF + return nil, m, io.EOF default: - return nil, fmt.Errorf("unexpected message: %T %v", m, m) + return nil, nil, fmt.Errorf("unexpected message: %T %v", m, m) } } diff --git a/binapi/map/map_rpc.ba.go b/binapi/map/map_rpc.ba.go index f667d67c..ee5faefa 100644 --- a/binapi/map/map_rpc.ba.go +++ b/binapi/map/map_rpc.ba.go @@ -122,7 +122,7 @@ func (c *serviceClient) MapDomainsGet(ctx context.Context, in *MapDomainsGet) (R } type RPCService_MapDomainsGetClient interface { - Recv() (*MapDomainDetails, error) + Recv() (*MapDomainDetails, *MapDomainsGetReply, error) api.Stream } @@ -130,22 +130,25 @@ type serviceClient_MapDomainsGetClient struct { api.Stream } -func (c *serviceClient_MapDomainsGetClient) Recv() (*MapDomainDetails, error) { +func (c *serviceClient_MapDomainsGetClient) Recv() (*MapDomainDetails, *MapDomainsGetReply, error) { msg, err := c.Stream.RecvMsg() if err != nil { - return nil, err + return nil, nil, err } switch m := msg.(type) { case *MapDomainDetails: - return m, nil + return m, nil, nil case *MapDomainsGetReply: + if err := api.RetvalToVPPApiError(m.Retval); err != nil { + return nil, nil, err + } err = c.Stream.Close() if err != nil { - return nil, err + return nil, nil, err } - return nil, io.EOF + return nil, m, io.EOF default: - return nil, fmt.Errorf("unexpected message: %T %v", m, m) + return nil, nil, fmt.Errorf("unexpected message: %T %v", m, m) } } diff --git a/binapi/mss_clamp/mss_clamp_rpc.ba.go b/binapi/mss_clamp/mss_clamp_rpc.ba.go index d533af9a..704d1c83 100644 --- a/binapi/mss_clamp/mss_clamp_rpc.ba.go +++ b/binapi/mss_clamp/mss_clamp_rpc.ba.go @@ -46,7 +46,7 @@ func (c *serviceClient) MssClampGet(ctx context.Context, in *MssClampGet) (RPCSe } type RPCService_MssClampGetClient interface { - Recv() (*MssClampDetails, error) + Recv() (*MssClampDetails, *MssClampGetReply, error) api.Stream } @@ -54,21 +54,24 @@ type serviceClient_MssClampGetClient struct { api.Stream } -func (c *serviceClient_MssClampGetClient) Recv() (*MssClampDetails, error) { +func (c *serviceClient_MssClampGetClient) Recv() (*MssClampDetails, *MssClampGetReply, error) { msg, err := c.Stream.RecvMsg() if err != nil { - return nil, err + return nil, nil, err } switch m := msg.(type) { case *MssClampDetails: - return m, nil + return m, nil, nil case *MssClampGetReply: + if err := api.RetvalToVPPApiError(m.Retval); err != nil { + return nil, nil, err + } err = c.Stream.Close() if err != nil { - return nil, err + return nil, nil, err } - return nil, io.EOF + return nil, m, io.EOF default: - return nil, fmt.Errorf("unexpected message: %T %v", m, m) + return nil, nil, fmt.Errorf("unexpected message: %T %v", m, m) } } diff --git a/binapi/nat44_ed/nat44_ed_rpc.ba.go b/binapi/nat44_ed/nat44_ed_rpc.ba.go index 3964bdbf..044cca19 100644 --- a/binapi/nat44_ed/nat44_ed_rpc.ba.go +++ b/binapi/nat44_ed/nat44_ed_rpc.ba.go @@ -222,7 +222,7 @@ func (c *serviceClient) Nat44EdOutputInterfaceGet(ctx context.Context, in *Nat44 } type RPCService_Nat44EdOutputInterfaceGetClient interface { - Recv() (*Nat44EdOutputInterfaceDetails, error) + Recv() (*Nat44EdOutputInterfaceDetails, *Nat44EdOutputInterfaceGetReply, error) api.Stream } @@ -230,22 +230,25 @@ type serviceClient_Nat44EdOutputInterfaceGetClient struct { api.Stream } -func (c *serviceClient_Nat44EdOutputInterfaceGetClient) Recv() (*Nat44EdOutputInterfaceDetails, error) { +func (c *serviceClient_Nat44EdOutputInterfaceGetClient) Recv() (*Nat44EdOutputInterfaceDetails, *Nat44EdOutputInterfaceGetReply, error) { msg, err := c.Stream.RecvMsg() if err != nil { - return nil, err + return nil, nil, err } switch m := msg.(type) { case *Nat44EdOutputInterfaceDetails: - return m, nil + return m, nil, nil case *Nat44EdOutputInterfaceGetReply: + if err := api.RetvalToVPPApiError(m.Retval); err != nil { + return nil, nil, err + } err = c.Stream.Close() if err != nil { - return nil, err + return nil, nil, err } - return nil, io.EOF + return nil, m, io.EOF default: - return nil, fmt.Errorf("unexpected message: %T %v", m, m) + return nil, nil, fmt.Errorf("unexpected message: %T %v", m, m) } } diff --git a/binapi/nat44_ei/nat44_ei_rpc.ba.go b/binapi/nat44_ei/nat44_ei_rpc.ba.go index 7656525f..02daae17 100644 --- a/binapi/nat44_ei/nat44_ei_rpc.ba.go +++ b/binapi/nat44_ei/nat44_ei_rpc.ba.go @@ -460,7 +460,7 @@ func (c *serviceClient) Nat44EiOutputInterfaceGet(ctx context.Context, in *Nat44 } type RPCService_Nat44EiOutputInterfaceGetClient interface { - Recv() (*Nat44EiOutputInterfaceDetails, error) + Recv() (*Nat44EiOutputInterfaceDetails, *Nat44EiOutputInterfaceGetReply, error) api.Stream } @@ -468,22 +468,25 @@ type serviceClient_Nat44EiOutputInterfaceGetClient struct { api.Stream } -func (c *serviceClient_Nat44EiOutputInterfaceGetClient) Recv() (*Nat44EiOutputInterfaceDetails, error) { +func (c *serviceClient_Nat44EiOutputInterfaceGetClient) Recv() (*Nat44EiOutputInterfaceDetails, *Nat44EiOutputInterfaceGetReply, error) { msg, err := c.Stream.RecvMsg() if err != nil { - return nil, err + return nil, nil, err } switch m := msg.(type) { case *Nat44EiOutputInterfaceDetails: - return m, nil + return m, nil, nil case *Nat44EiOutputInterfaceGetReply: + if err := api.RetvalToVPPApiError(m.Retval); err != nil { + return nil, nil, err + } err = c.Stream.Close() if err != nil { - return nil, err + return nil, nil, err } - return nil, io.EOF + return nil, m, io.EOF default: - return nil, fmt.Errorf("unexpected message: %T %v", m, m) + return nil, nil, fmt.Errorf("unexpected message: %T %v", m, m) } } diff --git a/binapi/pnat/pnat_rpc.ba.go b/binapi/pnat/pnat_rpc.ba.go index a910602c..cb7483a4 100644 --- a/binapi/pnat/pnat_rpc.ba.go +++ b/binapi/pnat/pnat_rpc.ba.go @@ -87,7 +87,7 @@ func (c *serviceClient) PnatBindingsGet(ctx context.Context, in *PnatBindingsGet } type RPCService_PnatBindingsGetClient interface { - Recv() (*PnatBindingsDetails, error) + Recv() (*PnatBindingsDetails, *PnatBindingsGetReply, error) api.Stream } @@ -95,22 +95,25 @@ type serviceClient_PnatBindingsGetClient struct { api.Stream } -func (c *serviceClient_PnatBindingsGetClient) Recv() (*PnatBindingsDetails, error) { +func (c *serviceClient_PnatBindingsGetClient) Recv() (*PnatBindingsDetails, *PnatBindingsGetReply, error) { msg, err := c.Stream.RecvMsg() if err != nil { - return nil, err + return nil, nil, err } switch m := msg.(type) { case *PnatBindingsDetails: - return m, nil + return m, nil, nil case *PnatBindingsGetReply: + if err := api.RetvalToVPPApiError(m.Retval); err != nil { + return nil, nil, err + } err = c.Stream.Close() if err != nil { - return nil, err + return nil, nil, err } - return nil, io.EOF + return nil, m, io.EOF default: - return nil, fmt.Errorf("unexpected message: %T %v", m, m) + return nil, nil, fmt.Errorf("unexpected message: %T %v", m, m) } } @@ -127,7 +130,7 @@ func (c *serviceClient) PnatInterfacesGet(ctx context.Context, in *PnatInterface } type RPCService_PnatInterfacesGetClient interface { - Recv() (*PnatInterfacesDetails, error) + Recv() (*PnatInterfacesDetails, *PnatInterfacesGetReply, error) api.Stream } @@ -135,21 +138,24 @@ type serviceClient_PnatInterfacesGetClient struct { api.Stream } -func (c *serviceClient_PnatInterfacesGetClient) Recv() (*PnatInterfacesDetails, error) { +func (c *serviceClient_PnatInterfacesGetClient) Recv() (*PnatInterfacesDetails, *PnatInterfacesGetReply, error) { msg, err := c.Stream.RecvMsg() if err != nil { - return nil, err + return nil, nil, err } switch m := msg.(type) { case *PnatInterfacesDetails: - return m, nil + return m, nil, nil case *PnatInterfacesGetReply: + if err := api.RetvalToVPPApiError(m.Retval); err != nil { + return nil, nil, err + } err = c.Stream.Close() if err != nil { - return nil, err + return nil, nil, err } - return nil, io.EOF + return nil, m, io.EOF default: - return nil, fmt.Errorf("unexpected message: %T %v", m, m) + return nil, nil, fmt.Errorf("unexpected message: %T %v", m, m) } } diff --git a/binapi/tracedump/tracedump_rpc.ba.go b/binapi/tracedump/tracedump_rpc.ba.go index a3f9a0ef..1c807d78 100644 --- a/binapi/tracedump/tracedump_rpc.ba.go +++ b/binapi/tracedump/tracedump_rpc.ba.go @@ -57,7 +57,7 @@ func (c *serviceClient) TraceDump(ctx context.Context, in *TraceDump) (RPCServic } type RPCService_TraceDumpClient interface { - Recv() (*TraceDetails, error) + Recv() (*TraceDetails, *TraceDumpReply, error) api.Stream } @@ -65,22 +65,25 @@ type serviceClient_TraceDumpClient struct { api.Stream } -func (c *serviceClient_TraceDumpClient) Recv() (*TraceDetails, error) { +func (c *serviceClient_TraceDumpClient) Recv() (*TraceDetails, *TraceDumpReply, error) { msg, err := c.Stream.RecvMsg() if err != nil { - return nil, err + return nil, nil, err } switch m := msg.(type) { case *TraceDetails: - return m, nil + return m, nil, nil case *TraceDumpReply: + if err := api.RetvalToVPPApiError(m.Retval); err != nil { + return nil, nil, err + } err = c.Stream.Close() if err != nil { - return nil, err + return nil, nil, err } - return nil, io.EOF + return nil, m, io.EOF default: - return nil, fmt.Errorf("unexpected message: %T %v", m, m) + return nil, nil, fmt.Errorf("unexpected message: %T %v", m, m) } } diff --git a/binapigen/gen_rpc.go b/binapigen/gen_rpc.go index 33602ccc..0adadccb 100644 --- a/binapigen/gen_rpc.go +++ b/binapigen/gen_rpc.go @@ -134,7 +134,11 @@ func genService(g *GenFile, svc *Service) { g.P("}") g.P() g.P("type ", streamApi, " interface {") - g.P(" Recv() (*", msgDetails.GoIdent, ", error)") + if msgReply != msgControlPingReply { + g.P(" Recv() (*", msgDetails.GoIdent, ", *", msgReply.GoIdent, ", error)") + } else { + g.P(" Recv() (*", msgDetails.GoIdent, ", error)") + } g.P(" ", govppApiPkg.Ident("Stream")) g.P("}") g.P() @@ -144,18 +148,57 @@ func genService(g *GenFile, svc *Service) { g.P("}") g.P() - g.P("func (c *", streamImpl, ") Recv() (*", msgDetails.GoIdent, ", error) {") + if msgReply != msgControlPingReply { + g.P("func (c *", streamImpl, ") Recv() (*", msgDetails.GoIdent, ", *", msgReply.GoIdent, ", error) {") + } else { + g.P("func (c *", streamImpl, ") Recv() (*", msgDetails.GoIdent, ", error) {") + } g.P(" msg, err := c.Stream.RecvMsg()") - g.P(" if err != nil { return nil, err }") + if msgReply != msgControlPingReply { + g.P(" if err != nil { return nil, nil, err }") + } else { + g.P(" if err != nil { return nil, err }") + } g.P(" switch m := msg.(type) {") g.P(" case *", msgDetails.GoIdent, ":") - g.P(" return m, nil") + if msgReply != msgControlPingReply { + g.P(" return m, nil, nil") + } else { + g.P(" return m, nil") + } g.P(" case *", msgReply.GoIdent, ":") + if msgReply != msgControlPingReply { + if retvalField := getRetvalField(msgReply); retvalField != nil { + s := fmt.Sprint("(m.", retvalField.GoName, ")") + if fieldType := getFieldType(g, retvalField); fieldType != "int32" { + s = fmt.Sprint("(int32(m.", retvalField.GoName, "))") + } + g.P("if err := ", govppApiPkg.Ident("RetvalToVPPApiError"), s, "; err != nil {") + if msgReply != msgControlPingReply { + g.P(" return nil, nil, err") + } else { + g.P(" return nil, err") + } + g.P("}") + } + } g.P(" err = c.Stream.Close()") - g.P(" if err != nil { return nil, err }") - g.P(" return nil, ", ioPkg.Ident("EOF")) + if msgReply != msgControlPingReply { + g.P(" if err != nil { return nil, nil, err }") + } else { + g.P(" if err != nil { return nil, err }") + } + if msgReply != msgControlPingReply { + g.P(" return nil, m, ", ioPkg.Ident("EOF")) + } else { + g.P(" return nil, ", ioPkg.Ident("EOF")) + } g.P(" default:") - g.P(" return nil, ", fmtPkg.Ident("Errorf"), "(\"unexpected message: %T %v\", m, m)") + if msgReply != msgControlPingReply { + g.P(" return nil, nil, ", fmtPkg.Ident("Errorf"), "(\"unexpected message: %T %v\", m, m)") + } else { + g.P(" return nil, ", fmtPkg.Ident("Errorf"), "(\"unexpected message: %T %v\", m, m)") + } g.P("}") } else if rpc.MsgReply != nil { g.P("out := new(", rpc.MsgReply.GoIdent, ")")