home > Components > Topology Exchange

TSS component notes

Overview

The TSS component deals with network topology database exchange between interdomain controllers (IDC). IDCs need to exchange topology information to facilitate interdomain pathfinding. The TSS subsystem is responsible for passing out local topology information, and for importing topology information from other IDCs. OSCARS uses the Open Grid  Forum Network Measurements Working Group (NMWG) control plane XML schema  developed by DICE to describe topology that is being exchanged.

Currently OSCARS supports these operations on two different implementations of the topology database:

The OSCARS administrator can choose which method of topology exchange database (TEDB) they want to use at configuration time.

Moreover, OSCARS developers with different needs may develop their own TEDB implementation by creating a new class that implements the TEDB java interface.

Configuration

The admin must choose which TEDB method they want to run by configuring the OSCARS server through oscars.properties. The relevant property is tedb.tedbMethod. Valid values are:

In both those cases the administrator must initialize the topology database accordingly.

Development

To develop a new TEDB method, the developer should implement the net.es.oscars.tss.TEDB interface. Then a short name for the method must be chosen (in addition to "oscars" and "terce"), and TEDBFactory must be modified to load the appropriate class when the tedb.tedbMethod property has that value.

BSS Topology Tables

The topology tables are used by the OSCARS and interdomain pathfinder when finding a route. They are also used by the scheduling code to check for oversubscription and elements from them are referenced from the reservation tables. Thus, even at a site where the local topology and pathfinding are provided by an exernal service such as TERCE these tables are required. At Dragon sites, topoloy is imported from TERCE and stored in the topology tables.

OSCARS assumes that you have described your topology in the Open Grid Forum (OGF) Network Measurement Working Group (NMWG) control plane topology schema. The NMWG topology schema consists of a hierarchy of domains, nodes, ports, and links. The table below describes each of these elements

Element
Child Element
Description
domain
node
Represents an administratively-similar set of devices
node
port
Represents a network device. For this installation, it represents a VLSR
port
link
Represent a physical or virtual port on the network. Corresponds to a physical port number and/or DRAGON local-id for this installation.
link

Represents a connection between two ports. For the purposes of this installation, you will likely have one port per link.

The topology identifiers that are used are Uniform Resource Names (URN) that contain not only an ID for the element defining it, but also its parent elements. This type of identifier is referred to as a fully-qualified identifier. These IDs always begin with the prefix “urn:ogf:network:”. This prefix is followed by a colon-delimited list of identifiers appropriate for that hierarchical level. For example, a fully-qualified port ID contains a domain ID, a node ID, and the port ID. The hierarchical level of each portion is indicated by either a “domain=”,”node=”, “port=”, or “link=” prefix.Examples of different fully-qualified link ID types from the example I2 topology files that come with the software are shown below:

Type
Fully-Qualified Identifier
domain ID
urn:ogf:network:domain=blue.pod.lan
node ID
urn:ogf:network:domain=blue.pod.lan:node=vlsr1
port ID
urn:ogf:network:domain=blue.pod.lan:node=vlsr1:port=3
link ID
urn:ogf:network:domain=blue.pod.lan:node=vlsr1:port=3:link=11.2.1.2

The domains table contains the following information about each domain that the IDC can interact with:

 	Integer id              /** identifier field */  
String topologyIdent /** persistant field */
String name /** persistant field */
String url /** persistant field: of OSCARS service for the domain */
String abbrev /** persistant field */
boolean local /** persistant field: is this the local domain */

The nodes table contains the following information about each node:

	Integer id        	/** identifier field */ 
boolean valid /** persistant field */
String topologyIdent /** persistant field */
Integer domainId /** persistant field: parent domain */

The ports table contains the following information for each port

	Integer id                      /** identifier field */ 	
boolean valid /** persistant field */
Integer snmpIndex /** persistant field */
String topologyIdent /** persistant field */
Long capacity /** persistant field */
Long maximumReservableCapacity /** persistant field */
Long minimumReservableCapacity /** persistant field */
  Long unreservedCapacity /** persistant field */
String alias /** nullable persistent field */
Integer nodeId /** persistant field: parent node */

snmpIndex seems to always be set to 1 and not used.

The links table contains the following information for each link in the local domain:

	Integer id 			/** identifier field */ 
boolean valid /** persistant field */
Integer snmpIndex /** nullable persistent field */
String topologyIdent /** persistant field */
String trafficEngineeringMetric /** nullable persistent field */
Long capacity /** nullable persistent field */
Long maximumReservableCapacity /** nullable persistent field */
Long minimumReservableCapacity /** nullable persistent field */
Long granularity /** nullable persistent field */
Long unreservedCapacity /** nullable persistent field */
String alias /** nullable persistent field */
Integer remoteLinkId /** nullable persistent field */
Integer portId /** persistant field: parent port */
Set ipaddrs /** optional set of ippaddrs */
Integer l2SwitchingCapabilityData /** optional index into the l2SwitchingCapabilityData table */
Where the topologyIdent is a logical name that identifies the link; trafficEngineeringMetric is a description of a traffic metric that may be used when selecting a path: granularity is the increments at which the bandwidth may be reserved; remoteLinkId is an index into the links table for the link on the other end of the connection; and portId is an index into the ports table for the parent port. If the  capacity fields are null, the information is taken from the parent port.

The ipaddrs table contains the following information:
	Integer id              /** identifier field */ 
boolean valid /** persistant field */
String IP /** persistant field */
Integer linkId /** persistant field, index into links table */

Used to get a valid IP Address for a link.
nodeAddresses table - does not appear to be currently used.
	Integer id      	/** identifier field */  
String address /** persistant field: dotted IP address */
Integer nodeId /** persistant field: corresponding entry in nodes table */
edgeInfos table
	Integer id      	/** identifier field */  
String externalIP /** persistant field */
Integer ipaddrId /** persistant field, index into ipaddrs table */
Integer domainId /** persistant field, index into domains table */
The next domain on an input layer2 path is found by looking up the first hop outside of this domain, the externalIP, in this table.

interdomainRoutes table
	Integer id      	/** identifier field */  	
Integer srcNodeId /** nullable persistent field */
Integer srcPortId /** nullable persistent field */
Integer srcLinkId /** nullable persistent field */
Integer destDomainId /** nullable persistent field */
Integer destNodeId /** nullable persistent field */
Integer destLinkId /** nullable persistent field */
Integer routeElemId /** persistant field */
Integer preference /** persistant field */
boolean defaultRoute /** persistant field */
Used to look-up routes that match the given source and destination, specified by either nodes, ports or links. If no routes match then the default route or null is returned. It orders routes by source, destination and preference. Matches that are more specific are ordered higher (i.e. a matching link is higher than a matching port, etc). Used by the genericInterdomainPathfinder.

routeElems table
	Integer id      	/** identifier field */ 
Integer domainId /** nullable persistent field */
Integer nodeId /** nullable persistent field */
Integer portId /** nullable persistent field */
Integer linkId /** nullable persistent field */
Integer nextHopId /** nullable persistent field */
String description /** nullable persistent field */

Contains the indexes into the domain,node,port and link table for an interdomainRoute.
nextHopId is an index into this table for then next hop on the route.

l2SwitchingCapabilityData table

Integer id /** identifier field */
Integer linkId /** persistent field */
String vlanRangeAvailability /** persistent field */ |
Integer interfaceMTU /** persistent field */

Will find switching capability for a given link.