1

I am trying to read in an mrt (with .bz2 file extension) from archive.routeviews.org namely file - http://archive.routeviews.org/route-views.chile/bgpdata/2022.05/UPDATES/updates.20220501.0000.bz2.

I have found some code online that parses it using three different packages - FGBGP, go-mrt, goBGP. Here is the code:

package main

import (
    "bufio"
    "bytes"
    "fmt"
    "log"
    "os"

    mrt1 "github.com/cloudflare/fgbgp/mrt"
    mrt2 "github.com/kaorimatz/go-mrt"
    mrt3 "github.com/osrg/gobgp/pkg/packet/mrt"
)

func main() {
    data, err := os.ReadFile("updates.20220501.0000")
    if err != nil {
        log.Fatal(err)
    } 
    // or paste bytes instead data := []byte{}
    
    fmt.Println("FGBGP")
    rdr := bytes.NewBuffer(data)

    r, err := mrt1.DecodeSingle(rdr)
    for r != nil && err == nil {
        fmt.Println(r)
        r, err = mrt1.DecodeSingle(rdr)
    }

    fmt.Println("Go-mrt")

    rdr2 := mrt2.NewReader(bytes.NewBuffer(data))

    r2, err := rdr2.Next()
    for r2 != nil && err == nil {
        fmt.Println(r2)
        r2, err = rdr2.Next()
    }

    fmt.Println("GoBGP")
    sc := bufio.NewScanner(bytes.NewBuffer(data))
    sc.Split(mrt3.SplitMrt)

    for {
        b := sc.Scan()
        if !b {
            break
        }
        mrtb := sc.Bytes()

        hdr, err := mrt3.NewMRTHeader(0, mrt3.BGP4MP, mrt3.RIB_IPV4_UNICAST, 0)
        if err != nil {
            fmt.Println(err)
            break
        }
        hdr.DecodeFromBytes(mrtb)

        r3, err := mrt3.ParseMRTBody(hdr, mrtb[mrt3.MRT_COMMON_HEADER_LEN:])
        if err != nil {
            fmt.Println(err)
        }
        fmt.Println(r3)
    }
}

When this is run, FGBGP does not input anything, go-mrt does seem to output the lines but each line seems to be missing things I would like to see such as AS PATH etc. And goBGP which was the one I was most interested in, throws an unsupported type error.

Here is an example output for go-mrt and goBGP:

go-mrt: &{{{0 63786960781 <nil>} 17 4} 27678 6447 0 1 200.16.114.34 200.16.114.60 0x140003f5900}

goBGP: <nil> unsupported type: 17

e110
  • 23
  • 1
  • 5
  • Maybe you need to decompress the file before passing it to the libraries. Maybe this helps: https://pkg.go.dev/compress/bzip2 – guettli Aug 29 '22 at 15:41

0 Answers0