Have questions? Stuck? Please check our FAQ for some common questions and answers.

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

Introduction

This document provides information on how to install, configure and run SDN-IP in an SDN network.

It's recommended that you read the architecture guide <LINK> to become familiar with the concepts before trying to set up the application.

Network model

SDN-IP allows an SDN network to peer and exchange traffic with adjacent external network using the BGP routing protocol. 

FIGURE 1 shows the topology elements we expect in our network model.

The most fundamental building block is, of course, the SDN network. This is the network that is controlled by ONOS, and will use SDN-IP to communicate with the outside world.

Border routers of external networks are connected at the edge of the SDN network. The border routers need not be physically connected to an SDN switch, however we assume that we are directly connected at the IP level to the peering address of each border rou+ter. That is, for each router we have a peering address in the same subnet as the router's peering address. We don't currently support multi-hop BGP peering sessions.

The third part of the model is the internal BGP control plane. Inside the SDN network there are one or more internal BGP speakers. There are no specific requirements on the implementation of the BGP speakers - as long as they support both external BPG (eBGP) and internal BGP (iBGP) peering sessions they will work. Each BGP speaker must have at least one connection to the SDN data plane network. The BGP speaker will peer with external BGP routers over this connection. 

Each BGP speaker also needs to peer with each SDN-IP instance so it can relay routes to the SDN-IP instances. These peering session are iBGP sessions, so there needs to be a full mesh between all BGP speakers and SDN-IP instances. The only exception is that SDN-IP instances do not need to peer with each other, and it is not even possible to configure this. SDN-IP never advertises router over the iBGP sessions, it only listens to routers. The connectivity for this peering must be out-of-band of the data plane. 

Finally, ONOS must be deployed either as a single instance or as a cluster.

Peering sessions

Reference scenario

BGP speakers a deployed as BGP software running on a Linux host.

 

Big Router abstraction

sdfdsfds

Configuration

SDN-IP currently uses a simple JSON file format to import configuration data. There are two separate files: addresses.json for IP and MAC address data, and sdnip.json for BGP peering session data.

Location

These configuration files need to be placed in the config directory. Currently this is located at KARAF_ROOT/../config, and the path is not currently configurable.

When using the ONOS cell mechansim to deploy and ONOS cluster, the config files can be placed in ONOS_ROOT/tools/package/config. Then they will be automatically be copied to the correct location on the cell instances when the cluster is deployed.

addresses.json

The addresses.json file is used to configure the addresses that ONOS uses to talk with the outside world. This configuration is mainly used for proxy ARP, so that the proxy ARP module knows how to respond to ARP requests coming from outside the network.

{
    "addresses" : [
        {
            "dpid" : "00:00:00:00:00:00:00:a1",
            "port" : "1",
            "ips" : ["10.0.1.101/24"],
            "mac" : "00:00:00:00:00:01"
        },
        {
            "dpid" : "00:00:00:00:00:00:00:a2",
            "port" : "1",
            "ips" : ["10.0.2.101/24"],
            "mac" : "00:00:00:00:00:01"
        },
        {
            "dpid" : "00:00:00:00:00:00:00:a5",
            "port" : "1",
            "ips" : ["10.0.3.101/24"],
            "mac" : "00:00:00:00:00:01"
        },
        {
            "dpid" : "00:00:00:00:00:00:00:a6",
            "port" : "1",
            "ips" : ["10.0.4.101/24"],
            "mac" : "00:00:00:00:00:01"
        }
    ]
}

The file contains an addresses array which has multiple address entries. Each address entry describes a set of addresses which are bound to a port on a switch. Each entry contains the switch port the address is bound to (specified by DPID and port number), a set of IP addresses that are bound to the port, and a single MAC address to be used for ARP responses for each of the IP addresses.

When running SDN-IP, each address used by the SDN network to peer with an external router needs to be configured in the addresses.json file.

sdnip.json

The sdnip.json file contains details of the BGP peering sessions, as well as the connectivity between internal BGP speakers and external BGP peers.

{                                                                                                                                                                                                                                                                              
    "bgpPeers" : [                                                                                                                                                                                                                                                             
        {                                                                                                                                                                                                                                                                      
            "attachmentDpid" : "00:00:00:00:00:00:00:a1",                                                                                                                                                                                                                      
            "attachmentPort" : "1",                                                                                                                                                                                                                                            
            "ipAddress" : "10.0.1.1"                                                                                                                                                                                                                                           
        },                                                                                                                                                                                                                                                                     
        {                                                                                                                                                                                                                                                                      
            "attachmentDpid" : "00:00:00:00:00:00:00:a2",                                                                                                                                                                                                                      
            "attachmentPort" : "1",                                                                                                                                                                                                                                            
            "ipAddress" : "10.0.2.1"                                                                                                                                                                                                                                           
        },                                                                                                                                                                                                                                                                     
        {                                                                                                                                                                                                                                                                      
            "attachmentDpid" : "00:00:00:00:00:00:00:a5",                                                                                                                                                                                                                      
            "attachmentPort" : "1",                                                                                                                                                                                                                                            
            "ipAddress" : "10.0.3.1"                                                                                                                                                                                                                                           
        },                                                                                                                                                                                                                                                                     
        {                                                                                                                                                                                                                                                                      
            "attachmentDpid" : "00:00:00:00:00:00:00:a6",                                                                                                                                                                                                                      
            "attachmentPort" : "1",                                                                                                                                                                                                                                            
            "ipAddress" : "10.0.4.1"                                                                                                                                                                                                                                           
        }                                                                                                                                                                                                                                                                      
    ],                                                                                                                                                                                                                                                                         
    "bgpSpeakers" : [                                                                                                                                                                                                                                                          
        {                                                                                                                                                                                                                                                                      
            "name" : "bgp",                                                                                                                                                                                                                                                    
            "attachmentDpid" : "00:00:00:00:00:00:00:a3",
            "attachmentPort" : "1",
            "macAddress" : "00:00:00:00:00:01",
            "interfaceAddresses" : [
                {
                    "interfaceDpid" : "00:00:00:00:00:00:00:a1",
                    "interfacePort" : "1",
                    "ipAddress" : "10.0.1.101"
                },
                {
                    "interfaceDpid" : "00:00:00:00:00:00:00:a2",
                    "interfacePort" : "1",
                    "ipAddress" : "10.0.2.101"
                },
                {
                    "interfaceDpid" : "00:00:00:00:00:00:00:a5",
                    "interfacePort" : "1",
                    "ipAddress" : "10.0.3.101"
                },
                {
                    "interfaceDpid" : "00:00:00:00:00:00:00:a6",
                    "interfacePort" : "1",
                    "ipAddress" : "10.0.4.101"
                }
            ]
        }
    ]
}

At the top level of the sdnip.json file are two lists: bgpPeers and bgpSpeakers.

The bgpPeers list contains an entry for every external peer that the SDN network peers with. Each peer has a peering address, and the attachment point where it is connected to the SDN network specified by DPID and port number.

The bgpSpeakers list contains an entry for each BGP speaker in the SDN network. The header for each BGP speaker includes an arbitrary name for the speaker, the attachment point where it is connected to the SDN network (specified by DPID and port number), and the MAC address of the BGP speaker. Then, each BGP speaker has a list of "interfaceAddresses", which are the external-facing interfaces this speaker has peering sessions on, and the IP address it uses for that peering session.

BGP speakers

Each BGP speaker potentially has multiple peering sessions to different external networks. It is possible for these peering sessions to be on different IP subnets, which means each BGP speaker can potentially have multiple IP addresses it is peering on. These addresses must be configured in the sdnip.json file, but they also need to be configured on the interfaces of the BGP speaker, so that it can receive packets sent to it on those addresses.

Running SDN-IP on ONOS

The first step is to get an ONOS system up and running, and you can read more about how to do this here <LINK>

Once ONOS is running, SDN-IP has a couple of additional dependencies that it relies on to ensure ARP requests are resolved properly. 

  • onos-app-config is used to read in the addresses.json configuration file
  • onos-app-proxyarp is the proxy ARP module that responds to ARP requests on behalf of hosts and external routers.

It's usually best to ensure these are loaded before starting SDN-IP, either by adding them to the ONOS_FEATURES, or by loading them manually:

onos> feature:install onos-app-config
onos> feature:install onos-app-proxyarp

Once these dependencies are satisfied, the SDN-IP application can be installed:

onos> feature:install onos-app-sdnip

At this point, SDN-IP will start up, read its configuration files and install intents in the network to establish connectivity for the BGP peering sessions. Then it will begin to receive routes, which are installed into the network using MultiPointToSinglePoint intents.

SDN-IP CLI

SDN-IP includes CLI commands that allow a user to monitor the state of the system. Each command is detailed below.

onos> bgp-neibors

 

 

 

 

  • No labels