summaryrefslogtreecommitdiffhomepage
path: root/docs/sources/mrt.md
blob: 3a3ac6df435173264153c01fae4275affbf6924f (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
# MRT

This page explains how to play with GoBGP's MRT feature.

## Prerequisites

Assume you finished [Getting Started](https://github.com/osrg/gobgp/blob/master/docs/sources/getting-started.md).

## Contents
- [Configuration](#section0)
- [Dump MRT table v2 records](#section1)
    - [Dump neighbor's local table](#section1.1)
- [Inject routes from MRT table v2 records](#section2)

## <a name="section0"> Configuration
You don't need any special configuration for MRT feature.
This page assume the configuration below.

```toml
[Global]
    [Global.GlobalConfig]
        As = 64512
        RouterId = "192.168.255.1"
[Neighbors]
    [[Neighbors.NeighborList]]
        [Neighbors.NeighborList.NeighborConfig]
        NeighborAddress = "10.0.0.1"
        PeerAs = 65001
```

## <a name="section1">Dump MRT Table v2 Records

Instant dump can be done like below

```bash
$ gobgp mrt dump rib global
mrt dump: rib_ipv4_20150809_233952
$ ls -la rib*
rib_ipv4_20150809_233952
```

To dump ipv6 routes, type

```bash
$ gobgp mrt dump rib global -a ipv6
mrt dump: rib_ipv6_20150809_234012
```

If you want to dump periodically, specify dump interval (unit is second)
```bash
# dump hourly. this will block
$ gobgp mrt dump rib global $((60*60))
mrt dump: rib_ipv4_20150809_234438
...
```

You can change output directory by  `-o <outdir>` and filename format by `-f <format>`

```bash
# change the output directory and the filename of dumps
$ gobgp mrt dump rib global -o /dump/here -f mydailydump_{{.Y}}_{{.M}}_{{.D}} $((60*60*24))
mrt dump: /dump/here/rib_2015_08_09
...
```

Filename format is same as golang [text/template](http://golang.org/pkg/text/template/) package template.
Below is the supported variables you can use.

| value                 | meaning                                       |
|:---------------------:|:---------------------------------------------:|
| {{.Y}}                | Year (e.g. 2015)                              |
| {{.M}}                | Month (e.g. 08)                               |
| {{.D}}                | Day (e.g. 09)                                 |
| {{.H}}                | Hour (e.g. 23)                                |
| {{.Min}}              | Minute (e.g. 47)                              |
| {{.Sec}}              | Second (e.g. 10)                              |
| {{.Af}}               | Address Family ( `ipv4` \| `ipv6` \| `l2vpn`) |
| {{.NeighborAddress }} | Neighbor Address (e.g. 10.0.0.1)              |
| {{.Resource}}         | Resource ( `global` \| `local` )              |

### <a name="section1.1"> Dump neighbor's local table
GoBGP supports multiple RIB for route server [feature](https://github.com/osrg/gobgp/blob/master/docs/sources/route-server.md).
GoBGP can also dump these tables which is local to neighbors

```bash
$ gobgp mrt dump rib neighbor 10.0.0.1 -o /dump/local $((60*60))
rpc error: code = 2 desc = "no local rib for 10.0.0.1"
```

Oops! Before trying this feature, you must enable route server feature.
Configuration is something like below.

```
$ cat gobgpd.conf
[Global]
    [Global.GlobalConfig]
        As = 64512
        RouterId = "192.168.255.1"
[Neighbors]
    [[Neighbors.NeighborList]]
        [Neighbors.NeighborList.NeighborConfig]
            NeighborAddress = "10.0.0.1"
            PeerAs = 65001
        [Neighbors.NeighborList.RouteServer]
            [Neighbors.NeighborList.RouteServer.RouteServerConfig]
            RouteServerClient = true
```

OK, let's try again.

```bash
$ gobgp mrt dump rib neighbor 10.0.0.1 -o /dump/local
mrt dump: /dump/local/rib_10.0.0.1_20150809_234543
```

## <a name="section2"> Inject routes from MRT table v2 records
Route injection can be done by
```bash
$ gobgp mrt inject global <dumpfile> [<number of prefix to inject>]
```