kaanalnet
Version:
Virtual Network Emulator Lab for SDN and traditional networks
136 lines (117 loc) • 5.11 kB
text/coffeescript
util = require('util')
request = require('request-json');
extend = require('util')._extend
switchctrl = require('./builder/switchCtrl')
async = require 'async'
log = require('./utils/logger').getLogger()
log.info "Switches Logger test message"
#global parameter
#log = require('./app').log
class switches
constructor: (sw)->
@config = extend {}, sw
@config.make ?= "bridge"
@config.ofversion ?= 1.0
@status = {}
@statistics = {}
@tapifs = []
log.info "Switches - constructor - new switch object created " + JSON.stringify @config
@tapindex = 0
create: (callback)->
log.info "Switches - creating a switch with config " + JSON.stringify @config
switchctrl.create @config, (res) =>
#console.log "post switch response" +res
log.info "Switches - switch creation result " + JSON.stringify res
@uuid = res.id
@config.status = res.status
callback res
del: (callback)->
log.info "Switches - deleting a switch " + JSON.stringify @config
@delLinks()
switchctrl.del @uuid, (res) =>
#console.log res
log.info "Switches - switch deletion result " + res
@config.status = res.status
callback res
get:()->
"uuid":@uuid
"config":@config
"tapifs": @tapifs
#"status":@status
#"statistics":@statistics
stop:(callback)->
log.info "Switches - stoping a switch " + JSON.stringify @config
switchctrl.stop @uuid, (res) =>
log.info "Switches - switch stop result " + JSON.stringify res
@config.status = res.status
#console.log res
callback res
start:(callback)->
log.info "Switches - starting a switch " + JSON.stringify @config
switchctrl.start @uuid, (res) =>
log.info "Switches - switch start result " + JSON.stringify res
@config.status = res.status
#console.log res
callback res
getstatus : (callback)->
log.info "getstatus called" + @uuid
switchctrl.get @uuid, (result) =>
log.info "Switches getstatus result " + JSON.stringify result
@config.status = result.status
callback result
connect:(ifname,callback)->
val =
"ifname": ifname
log.info "Switches - connecting a interface #{ifname} in switch #{@config.name}"
switchctrl.addInterface @uuid, val, (res) =>
log.info "Switches - connect- interface #{ifname} connection result " + JSON.stringify res
#console.log res
callback res
createTapInterfaces:(ifname1,ifname2)->
log.info "Switches - createTapInterfaces - input #{ifname1} #{ifname2}"
result = switchctrl.CreateTapInterfaces ifname1, ifname2
log.info "Switches - createTapInterfaces - result " + JSON.stringify result
return result
addTapInterface:(ifname,characteristics)->
#@tapifs.push ifname if ifname?
tapif =
"name": ifname
"config": characteristics
log.info "addTapInterface " + JSON.stringify tapif
@tapifs.push tapif
#@tapifs.push ifname if ifname?
#log.info "Switches - addTapInterface - ifname " + ifname
#@config = extend {}, characteristics
return
connectTapInterfaces:(callback)->
log.info "Switches - connectTapInterfaces ...connecting the inter switch links"
async.eachSeries @tapifs, (tapif,callback) =>
log.info "connectTapInterfaces " + JSON.stringify tapif
@connect tapif.name,(result)=>
callback()
,(err) =>
if err
log.error "connectTapInterfaces switches error occured " + JSON.stringify err
return callback false
else
log.info "connectTapInterfaces Switches all are processed "
return callback true
setLinkChars : (callback)->
log.info "Switches: setting the link characterstics " + @config.name
for tapif in @tapifs
log.info "Switchs setLinkChars " + JSON.stringify tapif
switchctrl.setLinkChars @uuid, tapif,(result) =>
log.info "Switches: setLinkChars result " + result
callback result
delLinks : ()->
for tapif in @tapifs
log.info "deleting the link " + JSON.stringify tapif
switchctrl.dellink tapif.name,(result) =>
log.info "Switches: del link result " + result
switchStatus:()->
#Todo be done
statistics:()->
#Todo
#####################################################################################################
module.exports = switches
#Todo items: HTTP Request json timeout, response code to be checked