10 "git.fd.io/govpp.git/api"
18 // Connect dials remote proxy server on given address and
19 // returns new client if successful.
20 func Connect(addr string) (*Client, error) {
21 client, err := rpc.DialHTTP("tcp", addr)
23 log.Fatal("Connection error: ", err)
32 // NewStatsClient returns new StatsClient which implements api.StatsProvider.
33 func (c *Client) NewStatsClient() (*StatsClient, error) {
34 stats := &StatsClient{
40 // NewBinapiClient returns new BinapiClient which implements api.Channel.
41 func (c *Client) NewBinapiClient() (*BinapiClient, error) {
42 binapi := &BinapiClient{
48 type StatsClient struct {
52 func (s *StatsClient) GetSystemStats(sysStats *api.SystemStats) error {
53 req := StatsRequest{StatsType: "system"}
54 resp := StatsResponse{SysStats: sysStats}
55 return s.rpc.Call("StatsRPC.GetStats", req, &resp)
58 func (s *StatsClient) GetNodeStats(nodeStats *api.NodeStats) error {
59 req := StatsRequest{StatsType: "node"}
60 resp := StatsResponse{NodeStats: nodeStats}
61 return s.rpc.Call("StatsRPC.GetStats", req, &resp)
64 func (s *StatsClient) GetInterfaceStats(ifaceStats *api.InterfaceStats) error {
65 req := StatsRequest{StatsType: "interface"}
66 resp := StatsResponse{IfaceStats: ifaceStats}
67 return s.rpc.Call("StatsRPC.GetStats", req, &resp)
70 func (s *StatsClient) GetErrorStats(errStats *api.ErrorStats) error {
71 req := StatsRequest{StatsType: "error"}
72 resp := StatsResponse{ErrStats: errStats}
73 return s.rpc.Call("StatsRPC.GetStats", req, &resp)
76 func (s *StatsClient) GetBufferStats(bufStats *api.BufferStats) error {
77 req := StatsRequest{StatsType: "buffer"}
78 resp := StatsResponse{BufStats: bufStats}
79 return s.rpc.Call("StatsRPC.GetStats", req, &resp)
82 type BinapiClient struct {
86 func (b *BinapiClient) SendRequest(msg api.Message) api.RequestCtx {
91 log.Printf("SendRequest: %T %+v", msg, msg)
95 type requestCtx struct {
100 func (r *requestCtx) ReceiveReply(msg api.Message) error {
101 req := BinapiRequest{
105 resp := BinapiResponse{}
107 err := r.rpc.Call("BinapiRPC.Invoke", req, &resp)
109 return fmt.Errorf("RPC call failed: %v", err)
112 // we set the value of msg to the value from response
113 reflect.ValueOf(msg).Elem().Set(reflect.ValueOf(resp.Msg).Elem())
118 func (b *BinapiClient) SendMultiRequest(msg api.Message) api.MultiRequestCtx {
119 req := &multiRequestCtx{
123 log.Printf("SendMultiRequest: %T %+v", msg, msg)
127 type multiRequestCtx struct {
132 replies []api.Message
135 func (r *multiRequestCtx) ReceiveReply(msg api.Message) (stop bool, err error) {
136 // we call Invoke only on first ReceiveReply
138 req := BinapiRequest{
143 resp := BinapiResponse{}
145 err := r.rpc.Call("BinapiRPC.Invoke", req, &resp)
147 return false, fmt.Errorf("RPC call failed: %v", err)
150 r.replies = resp.Msgs
153 if r.index >= len(r.replies) {
157 // we set the value of msg to the value from response
158 reflect.ValueOf(msg).Elem().Set(reflect.ValueOf(r.replies[r.index]).Elem())
164 func (b *BinapiClient) SubscribeNotification(notifChan chan api.Message, event api.Message) (api.SubscriptionCtx, error) {
165 panic("implement me")
168 func (b *BinapiClient) SetReplyTimeout(timeout time.Duration) {
169 panic("implement me")
172 func (b *BinapiClient) CheckCompatiblity(msgs ...api.Message) error {
173 return nil // TODO: proxy this
176 func (b *BinapiClient) Close() {