Skip to content
This repository was archived by the owner on Apr 22, 2020. It is now read-only.
Lisa Roach edited this page Sep 22, 2016 · 5 revisions

Can I run this on a host?

Yes, Solenoid can be run in a container on the IOS-XR or on a host, with identical functionality.

Can I connect a controller directly to Solenoid, instead of running through exaBGP or another third-party BGP?

This functionality is currently being tested, and once testing is complete you will be able to run Solenoid as a separate service and send TCP messages from a controller directly to the app.

Has this been tested with BIRD, Quagga or any other third-party BGP other than exaBGP?

No it has not, it currently only runs with exaBGP.

How do I know if it is working?

Check the output of exaBGP (with screen –r exabgp), you should see “INFO” messages with HTTP Status codes. See the table below for a working example. A status code of “204 – No content” is a successful message, meaning “ The server has successfully fulfilled the request and that there is no additional content to send in the response payload body.”

Date & Time Msg Level PID Msg Source Message HTTP Code HTTP Meaning

Wed, 06 Jul 2016 01:34:57 | INFO | 4107 | solenoid | WITHDRAW | 204 | No Content

Wed, 06 Jul 2016 01:35:03 | INFO | 4107 | solenoid | ANNOUNCE | 204 | No Content

I am getting error messages in my unit tests

If you are running the integration tests, be sure another instance of Solenoid is not already running. If you are using the vagrant boxes a Solenoid is running by default in the exabgp screen.

If you are seeing something other than "OK" as the final line of your unittests, such as "failures" or "errors", please file a bug on the Issues page.

I am having trouble formatting my config file

Check out the solenoid.config section of the Wiki for a lot more detail on the config file.

I am getting an error that says 'SyntaxError: '<' operator not allowed in environment markers'?

You need to upgrade your version of setuptools to version 17.1 or above. See: http://docs.openstack.org/developer/pbr/compatibility.html#evaluate-marker

Has this been tested on hardware?

No it has not.

Has this been tested to scale?

No it has not.

How do I add filtering functionality?

Create a filter text file and fill it with either the range of IPs you want, or individual IPs. The file can be placed and named whatever you want. Example:

1.1.1.0/32-1.1.2.0/32
10.1.1.0/32-10.1.5.0/32
10.1.1.6/32
192.168.1.0/28-192.168.2.0/28

And add this line to your exaBGP configuration file:

run /your/python/location /path/to/solenoid/solenoid/edit_rib.py -f '/path/to/filter/file’;

How do I install and configure exaBGP on my IOS-XR box?

curl -L https://github.com/Exa-Networks/exabgp/archive/3.4.16.tar.gz | sudo tar zx -C /opt/ > /dev/null

Then, create a file named router.ini (or whatever name you please) and configure it like this:

group test {
    router-id x.x.x.x;

    process monitor-neighbors {
        encoder json;
        receive {
            parsed;
            updates;
            neighbor-changes;
        }
        run /your/python/location /path/to/solenoid/solenoid/edit_rib.py;
    }

    neighbor y.y.y.y {
        local-address x.x.x.x;
        local as ####;
        peer-as ####;
    }

}

To run exaBGP:

exabgp router.ini

How do I know what /my/python/location is?

You can usually determine (on Linux machines) your python location by running:

which python

This will output your python location, often /usr/bin/python.

How do I install and configure exaBGP on a neighbor?

exaBGP can be installed the same way as it is installed on the IOS-XR, with the following command:

curl -L https://github.com/Exa-Networks/exabgp/archive/3.4.16.tar.gz | sudo tar zx -C /opt/ > /dev/null

The exaBGP configuration file does not need to include the process monitor-neighbors section that is included in the IOS-XR:

group demo {
    router-id 11.1.1.20;

    neighbor 11.1.1.10 {
        local-address 11.1.1.20;
        local-as 65000;
        peer-as 65000;
    }
}

To run exaBGP, use the following command:

sudo env exabgp.tcp.bind="11.1.1.20" exabgp.tcp.port=179 /opt/exabgp-3.4.16/sbin/exabgp /vagrant/router-conf.ini
Clone this wiki locally