102 lines
4.8 KiB
Markdown
102 lines
4.8 KiB
Markdown
---
|
|
title: "New bgpscanner backwards compatibility script released!"
|
|
mobile_menu_title: "bgpscanner compatibility script is out!"
|
|
date: 2021-08-11
|
|
description: "Meet the bgpscanner legacy wrapper - The Micro BGP Suite now provides mostly complete backwards compatibility with Isolario bgpscanner. You may use it to learn bgpgrep & peerindex or to run your legacy scripts easily."
|
|
series: [ "ubgpsuite - The Micro BGP Suite" ]
|
|
categories: [ "news", "development" ]
|
|
tags: [ "ubgpsuite", "bgpscanner", "bgpgrep", "peerindex", "Networking", "BGP" ]
|
|
news_keywords: [ "ubgpsuite", "bgpscanner", "bgpgrep", "peerindex" ]
|
|
---
|
|
|
|
## New bgpscanner backwards compatibility script is now available.
|
|
|
|
Lately I had the pleasure to be in contact with many old time `bgpscanner` aficionados.
|
|
|
|
A question popped up frequently during our conversations.
|
|
* I used to do `X` with `bgpscanner`, can `bgpgrep` do the same, and how?
|
|
|
|
That's when the fact hit me, that `bgpscanner` probably had a larger userbase relying
|
|
on it for day to day work than I originally anticipated.
|
|
Unfortunately `bgpgrep` and `peerindex` are not exactly backwards compatible.
|
|
While probably being very convenient to new users, it could throw off
|
|
the experienced userbase that has been familiar with `bgpscanner` for years.
|
|
|
|
Even worse, it could make existing scripts instantly unusable.
|
|
|
|
This convinced me that providing a backwards compatibility feature might be a good
|
|
idea to help users familiarize with the new tool while also providing a smoother
|
|
transition curve.
|
|
|
|
Coming back to the recurring question, yes, `bgpgrep`, and `peerindex`, do
|
|
anything `bgpscanner` can do.
|
|
|
|
To top it off, `bgpgrep` does what `bgpscanner` does not.
|
|
|
|
That was actually the most fundamental reason that encouraged me to break
|
|
backwards compatibility.
|
|
`bgpgrep` provides extreme flexibility in filtering specification, letting
|
|
the user combine freely multiple conditions and chain them arbitrarily with `AND`,
|
|
`OR` and `NOT` logic.
|
|
Something `bgpscanner` could do only to a very limited extent.
|
|
This while also being intuitive with its syntax.
|
|
|
|
But that doesn't eliminate the fact that `bgpscanner` was already pretty powerful
|
|
by itself, and it did things in a different way. So what?
|
|
|
|
Enter the [`bgpscanner` legacy wrapper script](https://git.doublefourteen.io/bgp/ubgpsuite/src/branch/master/tools/bgpscanner).
|
|
The third tool in µbgpsuite arsenal (they grow so fast ♥).
|
|
|
|
A somewhat pragmatic, crude, grumpy -- yet fascinating in its own special way,
|
|
POSIX shell wrapper script capable of converting (almost) any invocation of
|
|
`bgpscanner` to an equivalent invocation of `bgpgrep` or `peerindex`.
|
|
Making the `bgpscanner` legacy wrapper a drop-in replacement for the
|
|
classic Isolario `bgpscanner`.
|
|
|
|
While this is satisfactory by itself, it didn't feel quite alright.
|
|
In my book `bgpscanner` is still an obsolete tool (hence the "legacy" in "wrapper script").
|
|
Being able to actually *learn* how to do things with new tools would be
|
|
much better than relying on the old ways.
|
|
|
|
This is when it hit me again, the wrapper script already does all the hard work
|
|
to figure out how to make an equivalent call to µbgpsuite native tools.
|
|
Why not just print the result, instead of executing it?
|
|
|
|
```sh
|
|
$ PRETEND=y bgpscanner -i 192.65.131.1 -p "137 2598$" -u 8.8.8.8/32 data/rib/bview.20181016.0800.gz
|
|
bgpgrep -- data/rib/bview.20181016.0800.gz -peer \( 192.65.131.1 \) -supernet \( 8.8.8.8/32 \) -aspath "137 2598$"
|
|
```
|
|
|
|
Isn't it awesome? With just a tiny `PRETEND=y` flag, we can now interactively learn
|
|
how to convert an old invocation to the new format.
|
|
True, it might not be the best, most expressive, most idiomatic way to write the query,
|
|
but it is an excellent starting point.
|
|
|
|
You can install the `bgpscanner` legacy wrapper script along with other µbgpsuite
|
|
tools by enabling the `bgpscanner-legacy` configuration option with `meson`,
|
|
just run:
|
|
```sh
|
|
$ meson configure -Dbgpscanner-legacy=true
|
|
```
|
|
inside your µbgpsuite build directory and it will be installed along with the
|
|
other tools upon `ninja install`.
|
|
|
|
Obviously, it wouldn't be a true announcement post, if I didn't also mention
|
|
that the `bgpscanner` legacy wrapper script is documented in its own fantastic
|
|
man [page](https://git.doublefourteen.io/bgp/ubgpsuite/src/branch/master/tools/bgpscanner/bgpscanner.1.in).
|
|
And that you're just one command away from having a beautiful PDF with its contents:
|
|
```sh
|
|
$ sed s/@UTILITY@/bgpscanner/g tools/bgpscanner/bgpscanner.1.in | groffer
|
|
```
|
|
|
|
Hoping the `bgpscanner` legacy wrapper tool will be at least as useful to you as
|
|
it was fun for me to write.
|
|
|
|
Happy hacking!
|
|
|
|
Lorenzo Cogotti
|
|
|
|
> P.S. A gigantic and special thank you to [Rich's sh (POSIX shell) tricks](https://www.etalabs.net/sh_tricks.html),
|
|
> for its enlightening list of shell recipes. In my opinion one of the most fundamental reads that anybody writing
|
|
> a shell script should go through.
|