aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
blob: e1ba19ac2d8dfd40fb6df78fa1689c0a8b4d6598 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
⚠️ The GoVPP project has changed URL :
- the import URL has moved to [go.fd.io/govpp](https://go.fd.io/govpp)
- the repository location has moved to [https://github.com/FDio/govpp](https://github.com/FDio/govpp).

The last version archived on [git.fd.io/govpp.git](https://git.fd.io/govpp) is `v0.5.0`.


# GoVPP

[![stable](https://img.shields.io/github/v/tag/fdio/govpp.svg?label=release&logo=github)](https://github.com/ligato/vpp-agent/releases/latest) [![PkgGoDev](https://pkg.go.dev/badge/go.fd.io/govpp)](https://pkg.go.dev/go.fd.io/govpp)

The GoVPP repository contains a Go client library for interacting with the VPP, 
generator of Go bindings for the VPP binary API and various other tooling for VPP.

## Overview

Here is a brief overview for the repository structure.

- [govpp](govpp.go) - the entry point for the GoVPP client
  - [adapter](adapter) - VPP binary & stats API interface
    - [mock](adapter/mock) - Mock adapter used for testing
    - [socketclient](adapter/socketclient) - Go implementation of VPP API client for unix socket
    - [statsclient](adapter/statsclient) - Go implementation of VPP Stats client for shared memory
    - [vppapiclient](adapter/vppapiclient) - CGo wrapper of vppapiclient library (DEPRECATED!)
  - [api](api) - GoVPP client API
  - [binapigen](binapigen) - library for generating code from VPP API
    - [vppapi](binapigen/vppapi) - VPP API parser
  - cmd/
    - [binapi-generator](cmd/binapi-generator) - VPP binary API generator
    - [vpp-proxy](cmd/vpp-proxy) - VPP proxy for remote access
  - [codec](codec) - handles encoding/decoding of generated messages into binary form
  - [core](core) - implementation of the GoVPP client
  - [docs](docs) - documentation
  - [examples](examples) - examples demonstrating GoVPP functionality
  - [internal](internal) - packages used internally by GoVPP
  - [proxy](proxy) - contains client/server implementation for proxy
  - [test](test) - integration tests, benchmarks and performance tests

## Quick Start

Below are some code examples showing GoVPP client interacting with VPP API.

### Using raw messages directly

Here is a code for low-level way to access the VPP API using the generated messages directly for sending/receiving.

```go
package main

import (
    "log"
    
	"go.fd.io/govpp"
	"go.fd.io/govpp/binapi/interfaces"
	"go.fd.io/govpp/binapi/vpe"
)

func main() {
	// Connect to VPP
	conn, _ := govpp.Connect("/run/vpp/api.sock")
	defer conn.Disconnect()

	// Open channel
	ch, _ := conn.NewAPIChannel()
	defer ch.Close()

	// Prepare messages
	req := &vpe.ShowVersion{}
	reply := &vpe.ShowVersionReply{}

	// Send the request
	err := ch.SendRequest(req).ReceiveReply(reply)
	if err != nil {
        log.Fatal("ERROR: ", err)
	}

    log.Print("Version: ", reply.Version)
}
```

For a complete example see [simple-client](examples/simple-client).

### Using RPC service client

Here is a sample code for an effortless way to access the VPP API using a generated RPC service client for calling.

```go
package main

import (
    "context"
    "log"

	"go.fd.io/govpp"
	"go.fd.io/govpp/binapi/vpe"
)

func main() {
	// Connect to VPP API socket
	conn, _ := govpp.Connect("/run/vpp/api.sock")
	defer conn.Disconnect()

	// Init vpe service client
    client := vpe.NewServiceClient(conn)

	reply, err := client.ShowVersion(context.Background(), &vpe.ShowVersion{})
	if err != nil {
		log.Fatal("ERROR: ", err)
	}

	log.Print("Version: ", reply.Version)
}
```

For a complete example see [rpc-service](examples/rpc-service).

### More code examples

More examples can be found in [examples](examples) directory.

- [api-trace](api-trace) - trace sent/received messages
- [binapi-types](binapi-types) - using common types from generated code
- [multi-vpp](multi-vpp) - connect to multiple VPP instances
- [perf-bench](perf-bench) - very basic performance test for measuring throughput
- [rpc-service](rpc-service) - effortless way to call VPP API via RPC client
- [simple-client](simple-client) - send and receive VPP API messages using GoVPP API directly
- [stats-client](stats-client) - client for retrieving VPP stats data
- [stream-client](stream-client) - using new stream API to call VPP API

## Documentation

Further documentation can be found in [docs](docs) directory.

- [Adapters](docs/ADAPTERS.md) - detailed info about transport adapters and their implementations
- [Binapi Generator](docs/GENERATOR.md) - user guide for generating VPP binary API