UNPKG

kaanalnet

Version:

Virtual Network Emulator Lab for SDN and traditional networks

175 lines (152 loc) 5.73 kB
util = require('util') request = require('request-json'); extend = require('util')._extend ip = require 'ip' async = require 'async' vmctrl = require('./builder/vmCtrl') log = require('./utils/logger').getLogger() log.info "Node - Logger test message" #utility functions #Todo: Not scalable....To be modified #HWADDR_PREFIX = "00:16:3e:5a:55:" HWADDR_PREFIX = "00:00:00:00:00:" HWADDR_START = 10 getHwAddress = () -> HWADDR_START++ hwaddr= "#{HWADDR_PREFIX}#{HWADDR_START}" hwaddr class node constructor:(data) -> @ifmap = [] @lagmap = [] @ifindex = 1 @lagindex = 1 @config = extend {}, data @config.ifmap = @ifmap @config.lagmap = @lagmap @statistics = {} @status = {} log.debug "node object created with " + JSON.stringify @config addLanInterface :(brname, ipaddress, subnetmask, gateway, characterstics) -> interf = "ifname" : "eth#{@ifindex}" "hwAddress" : getHwAddress() "brname" : brname "ipaddress": ipaddress "netmask" : subnetmask "gateway" : gateway if gateway? "type":"lan" "veth" : "#{@config.name}_veth#{@ifindex}" "config": characterstics log.debug "lan interface " + JSON.stringify interf @ifindex++ @ifmap.push interf @lanip = ipaddress addLagInterface :(brname,bondname,ipaddress,subnetmask,gateway,characterstics)-> lagif1 = "eth#{@ifindex}" veth1 = "#{@config.name}_veth#{@ifindex}" @ifindex++ lagif2 = "eth#{@ifindex}" veth2 = "#{@config.name}_veth#{@ifindex}" lagif = "bondname" : bondname "lagif1" : lagif1 "hwAddress1" : getHwAddress() "veth1" : veth1 "lagif2" : lagif2 "hwAddress2" : getHwAddress() "veth2" : veth2 "brname" : brname "ipaddress": ipaddress "netmask" : subnetmask "gateway" : gateway if gateway? "type":"lan" "config": characterstics @lagmap.push lagif addWanInterface :(brname, ipaddress, subnetmask, gateway , characterstics) -> #console.log "inside addWanInterface function" interf = "ifname" : "eth#{@ifindex}" "hwAddress" : getHwAddress() "brname" : brname "ipaddress": ipaddress "netmask" : subnetmask "gateway" : gateway if gateway? "type":"wan" "veth" : "#{@config.name}_veth#{@ifindex}" "config": characterstics log.debug "waninterface " + JSON.stringify interf @ifindex++ @ifmap.push interf addMgmtInterface :(ipaddress, subnetmask) -> interf = "ifname" : "eth0" "hwAddress" : getHwAddress() "ipaddress": ipaddress "netmask" : subnetmask "type":"mgmt" log.debug "mgmt interface" + JSON.stringify interf @ifmap.push interf @mgmtip = ipaddress @config.mgmtip = @mgmtip #console.log @ifmap create : (callback)-> log.info "createing node " + JSON.stringify @config vmctrl.create @config, (result) => @uuid = result.id @config.id = @uuid @config.status = result.status log.info "node creation result " + JSON.stringify result callback result start : (callback)-> log.info "starting a node " + @config.name vmctrl.start @uuid, (result) => log.info "node start result " + JSON.stringify result @config.status = result.status callback result provision : (callback)-> log.info "provisioning a node " + @config.name vmctrl.provision @uuid, (result) => log.info "node provision result " + JSON.stringify result #@config.status = result. status callback result stop : (callback)-> log.info "stopping a node " + @config.name vmctrl.stop @uuid, (result) => log.info "node stop result " + JSON.stringify result @config.status = result.status callback result trace : (callback)-> vmctrl.packettrace @uuid, (res) => log.info "node packettrace result " + res callback res del : (callback)-> log.info "node deleting " + @config.name vmctrl.del @uuid, (res) => log.info "node del result " + JSON.stringify res @config.status = result.status callback res getstatus : (callback)-> log.info "getstatus called" + @uuid vmctrl.get @uuid, (result) => log.info "node getstatus result " + JSON.stringify result @config.status = result.status callback result getrunningstatus : (callback)-> vmctrl.status @params.id, (res) => log.info "node running status result " + res callback res setLinkChars : (callback)-> log.info "setting the link characterstics " + @config.name vmctrl.setLinkChars @uuid, (result) => log.info "setLinkChars result " + result callback result get : () -> "id" : @uuid "config": @config #"status": @status #"statistics":@statistics module.exports = node #Todo items #request.json - HTTP response code #Timeout condition - if server is not reachable