UNPKG

kaanalnet

Version:

Virtual Network Emulator Lab for SDN and traditional networks

257 lines (231 loc) 7.54 kB
// Generated by CoffeeScript 1.9.3 (function() { var Schema, SwitchBuilder, brctl, delLink, keystore, netem, ovs, util; brctl = require('brctldriver'); ovs = require('ovsdriver'); util = require('util'); netem = require('linuxtcdriver'); delLink = require('linuxtcdriver').delLink; keystore = require('mem-db'); Schema = require('./../schema').switchschema; SwitchBuilder = (function() { var bridge; bridge = null; function SwitchBuilder() { this.registry = new keystore("switch", Schema); } SwitchBuilder.prototype.list = function(callback) { return callback(this.registry.list()); }; SwitchBuilder.prototype.get = function(id, callback) { return callback(this.registry.get(id)); }; SwitchBuilder.prototype.create = function(data, callback) { var id; id = this.registry.add(data); util.log("new switch data created - data " + id + " "); if (id instanceof Error || false) { return callback(new Error("invalid Schema")); } if (data.make === "openvswitch") { bridge = ovs; } else { bridge = brctl; } return bridge.createBridge(data.name, (function(_this) { return function(result) { util.log("Bridge creation " + result); if (result === false) { data.status = "failed"; data.reason = "failed to create"; } else { data.status = "created"; } _this.registry.update(id, data); return callback({ "id": id, "status": data.status, "reason": data.reason != null ? data.reason : void 0 }); }; })(this)); }; SwitchBuilder.prototype.addInterface = function(id, body, callback) { var sdata; util.log("addInterface body is " + JSON.stringify(body)); util.log("addInterface data is " + id); sdata = this.registry.get(id); util.log("addInterface sdata is " + JSON.stringify(sdata)); if (sdata == null) { return callback(new Error("Switch details not found in DB")); } if (sdata.make === "openvswitch") { bridge = ovs; } else { bridge = brctl; } return bridge.addInterface(sdata.name, body.ifname, (function(_this) { return function(result) { util.log("addif" + result); return callback({ "id": sdata.id, "status": sdata.status, "reason": sdata.reason != null ? sdata.reason : void 0 }); }; })(this)); }; SwitchBuilder.prototype.CreateTapInterfaces = function(ifname1, ifname2) { bridge = brctl; return bridge.createTapPeers(ifname1, ifname2, (function(_this) { return function(result) { util.log("createTapPeers " + result); return result; }; })(this)); }; SwitchBuilder.prototype.start = function(id, callback) { var sdata; sdata = this.registry.get(id); if (sdata == null) { return callback(new Error("Switch details not found in DB")); } if (sdata.make === "openvswitch") { bridge = ovs; if (sdata.controller != null) { bridge.setController(sdata.name, sdata.controller, (function(_this) { return function(result) { util.log(result); return bridge.setOFVersion(sdata.name, sdata.ofversion, function(res) { var val; util.log(res); val = "00000000000000" + sdata.datapathid; return bridge.setDPid(sdata.name, val, function(res) { return util.log(res); }); }); }; })(this)); } } else { bridge = brctl; } return bridge.enableBridge(sdata.name, (function(_this) { return function(result) { util.log("enableBridge" + result); if (result === false) { sdata.status = "failed"; sdata.reason = "failed to start"; } else { sdata.status = "started"; } _this.registry.update(sdata.id, sdata); return callback({ "id": sdata.id, "status": sdata.status, "reason": sdata.reason != null ? sdata.reason : void 0 }); }; })(this)); }; SwitchBuilder.prototype.stop = function(id, callback) { var sdata; sdata = this.registry.get(id); if (sdata == null) { return callback(new Error("Switch details not found in DB")); } if (sdata.make === "openvswitch") { bridge = ovs; } else { bridge = brctl; } return bridge.disableBridge(sdata.name, (function(_this) { return function(result) { util.log("disableBridge" + result); if (result === false) { sdata.status = "failed"; sdata.reason = "failed to stop"; } else { sdata.status = "stopped"; } _this.registry.update(sdata.id, sdata); return callback({ "id": sdata.id, "status": sdata.status, "reason": sdata.reason != null ? sdata.reason : void 0 }); }; })(this)); }; SwitchBuilder.prototype.del = function(id, callback) { var sdata; sdata = this.registry.get(id); if (sdata.make === "openvswitch") { bridge = ovs; } else { bridge = brctl; } if (sdata == null) { return callback(new Error("Switch details not found in DB")); } return bridge.deleteBridge(sdata.name, (function(_this) { return function(result) { util.log("deletBridge" + result); if (result === false) { return callback(new Error("Failed to Delete the Switch")); } _this.registry.del(sdata.id); return callback({ "id": sdata.id, "status": "deleted" }); }; })(this)); }; SwitchBuilder.prototype.dellink = function(ifname, callback) { return netem.delLink(ifname, function(result) { return callback(result); }); }; SwitchBuilder.prototype.status = function(id, callback) { var sdata; sdata = this.registry.get(id); if (sdata == null) { return callback(new Error("Switch details not found in DB")); } if (sdata.data.make === "openvswitch") { bridge = ovs; } else { bridge = brctl; } return bridge.getStatus(sdata.name, (function(_this) { return function(result) { util.log("SwitchCtrl getStatus" + result); sdata.status = result; _this.registry.update(id, sdata); return callback(sdata); }; })(this)); }; SwitchBuilder.prototype.setLinkChars = function(id, chars, callback) { var Netem, sdata; sdata = this.registry.get(id); if (sdata.make === "openvswitch") { bridge = ovs; } else { bridge = brctl; } if (sdata == null) { return callback(new Error("Switch details not found in DB")); } if (chars.config == null) { return callback(true); } Netem = new netem(chars.name, chars.config); Netem.create(); return callback(true); }; return SwitchBuilder; })(); module.exports = new SwitchBuilder; }).call(this);