[CORD-1305] PPPoE Client

Change-Id: Id5ae5ba0ce0cbb89d434fb34d4c42796c61c059e
diff --git a/extensions/pppoe/scripts/apps/netcfgConsolidator/NetcfgConfig.json b/extensions/pppoe/scripts/apps/netcfgConsolidator/NetcfgConfig.json
new file mode 100755
index 0000000..fe6de73
--- /dev/null
+++ b/extensions/pppoe/scripts/apps/netcfgConsolidator/NetcfgConfig.json
@@ -0,0 +1 @@
+{"OnosIP":"10.100.198.201"}
diff --git a/extensions/pppoe/scripts/apps/netcfgConsolidator/NetcfgConsolidator.js b/extensions/pppoe/scripts/apps/netcfgConsolidator/NetcfgConsolidator.js
new file mode 100755
index 0000000..498575c
--- /dev/null
+++ b/extensions/pppoe/scripts/apps/netcfgConsolidator/NetcfgConsolidator.js
@@ -0,0 +1,50 @@
+/**

+ * NetcfgConsolidator - Contains PPPoE device report functions

+ */

+var jsonServer = require('json-server')

+var server = jsonServer.create()

+var router = jsonServer.router('db.json')

+var middlewares = jsonServer.defaults()

+var fs=require('fs');

+var __dirname = "/usr/local/lib/node_modules"

+var sendOper = require(__dirname + '/addAndDeleteApList')

+// Set default middlewares (logger, static, cors and no-cache)

+server.use(middlewares)

+

+server.post('/:device',function(req,res){

+    console.log("device:"+req.params.device);

+    var device = req.params.device;

+    var str = device.split(":");

+    console.log("str:"+str);

+    console.log("enter post");

+    console.log("port:"+str[2]);

+    var netcfgDbObj = {};

+    var testjson = {"ip":str[1],"port":parseInt(str[2]),"protocol": "http"};

+    netcfgDbObj = JSON.parse(fs.readFileSync(__dirname + '/netconfigdb.json'));

+    console.log(JSON.stringify(netcfgDbObj));

+    var resProm = sendOper.addApList(netcfgDbObj,testjson,device);

+    console.log(resProm);

+    var data =  {"state":"Add data success."};

+    res.jsonp(data)

+

+

+})

+server.delete('/:device',function(req,res){

+    var device = req.params.device;

+    console.log("device:"+device);

+    var str = device.split(":");

+    console.log("enter delte");

+    var netcfgDbObj = {};

+    var testjson = {"ip":str[1],"port":str[2],"protocol": "http"};

+    console.log(testjson);

+    netcfgDbObj = JSON.parse(fs.readFileSync(__dirname + '/netconfigdb.json'));

+    var resProm = sendOper.deleteApList(netcfgDbObj,testjson,device);

+    console.log(resProm);

+    var data =  {"state":"Delete data success."}

+    res.jsonp(data)

+})

+

+server.use(router)

+server.listen(24000, function () {

+    console.log('NETCFG-Consolidator Server is running')

+})

diff --git a/extensions/pppoe/scripts/apps/netcfgConsolidator/addAndDeleteApList.js b/extensions/pppoe/scripts/apps/netcfgConsolidator/addAndDeleteApList.js
new file mode 100755
index 0000000..bf05873
--- /dev/null
+++ b/extensions/pppoe/scripts/apps/netcfgConsolidator/addAndDeleteApList.js
@@ -0,0 +1,123 @@
+/**

+ * addAndDeleteApList - Contains PPPoE device report functions

+ */

+var fs=require('fs');

+var Promise = require('bluebird');

+var request = Promise.promisifyAll(require('request'));

+var __dirname = "/usr/local/lib/node_modules";

+module.exports={

+    addApList:function(netcfgDbObj,testjson,device){

+        console.log("add ap list!");

+        var APList = netcfgDbObj.apps['org.onosproject.restsb'].devices;

+        var DeviceList = netcfgDbObj.devices;

+        DeviceList[device] = { "basic": { "driver": "rest-pppoe" } };

+        var flag = true;

+        for(var i = 0;i< APList.length;i++) {

+            if((testjson.ip == APList[i].ip) && (testjson.port == APList[i].port)) {

+                flag = false;

+            }

+        }

+        if(flag) {

+            APList.push(testjson);

+        }

+        var APListObj = {"devices": DeviceList,"apps":{"org.onosproject.restsb":{"devices":APList}}};

+        console.log("add test!!!!")

+        console.log(JSON.stringify(APListObj));

+        console.log("add test!!!!");

+        fs.writeFile(__dirname + '/netconfigdb.json', JSON.stringify(APListObj), function(err) {

+            if (err) {

+                throw err;

+            }

+            console.log('Saved.');

+        });

+        console.log("Add one data,and report to ONOS!");

+        var config = JSON.parse(fs.readFileSync(__dirname + '/NetcfgConfig.json'));

+        console.log(config);

+        var waitTimeout = 10000;

+        setTimeout(function() {

+            console.log("Delayed POST reqeust: Add AP List!");

+            request({

+                url: "http://"+config.OnosIP+":8182/onos/v1/network/configuration/",

+                method: "POST",

+                json: true,   // <--Very important!!!

+                body: APListObj,

+                auth: {

+                    username: 'onos',

+                    password: 'rocks'

+                }

+            }, function (error, response, body){

+                console.log(error);

+                //console.log(response);

+            });

+        }, waitTimeout);

+        var rep =  {"status":true};

+        return rep;

+    },

+    deleteApList:function(netcfgDbObj,testjson,device){

+        console.log("delete ap list!");

+        var APList =  netcfgDbObj.apps['org.onosproject.restsb'].devices;

+        var DeviceList = netcfgDbObj.devices;

+        delete DeviceList[device];

+        var tempList = new Array();

+        for (var i = 0;i< APList.length;i++) {

+            if((testjson.ip == APList[i].ip) && (testjson.port == APList[i].port)) {

+

+            } else {

+                tempList.push(APList[i]);

+            }

+        }

+        var APListObj = {"devices": DeviceList,"apps":{"org.onosproject.restsb":{"devices":tempList}}};

+        console.log("delete test!!!!")

+        console.log(JSON.stringify(APListObj));

+        console.log("delete test!!!!");

+        fs.writeFile(__dirname + '/netconfigdb.json', JSON.stringify(APListObj), function(err) {

+            if (err) {

+                throw err;

+            }

+            console.log('Saved.');

+        });

+        console.log("Delete one data,and report to ONOS!");

+        var config = JSON.parse(fs.readFileSync(__dirname + '/NetcfgConfig.json'));

+        console.log(config);

+        request({

+            url: "http://"+config.OnosIP+":8182/onos/v1/network/configuration/devices/"+device,

+            method: "DELETE",

+            json: true,   // <--Very important!!!

+            auth: {

+                username: 'onos',

+                password: 'rocks'

+            }

+        }, function (error, response, body){

+            console.log(error);

+            // console.log(response);

+        });

+        request({

+            url: "http://"+config.OnosIP+":8182/onos/v1/network/configuration/",

+            method: "POST",

+            json: true,   // <--Very important!!!

+            body: APListObj,

+            auth: {

+                username: 'onos',

+                password: 'rocks'

+            }

+        }, function (error, response, body){

+            console.log(error);

+        });

+        var rep =  {"status":true};

+        return rep;

+    },

+    deleteReportOnos:function(){

+        var netcfgDbObj = {};

+        var APList = new Array();

+        var tempList = new Array();

+        netcfgDbObj = JSON.parse(fs.readFileSync(__dirname + '/netconfigdb.json'));

+        APList = netcfgDbObj.AP;

+        for(var i = 0;i < APList.length; i++) {

+            if(APList[i].status === "Available") {

+                tempList.push(APList[i]);

+            }

+        }

+        var data = {"AP":tempList};

+        //report onos

+    }

+}

diff --git a/extensions/pppoe/scripts/apps/netcfgConsolidator/netconfigdb.json b/extensions/pppoe/scripts/apps/netcfgConsolidator/netconfigdb.json
new file mode 100755
index 0000000..19c5bb8
--- /dev/null
+++ b/extensions/pppoe/scripts/apps/netcfgConsolidator/netconfigdb.json
@@ -0,0 +1 @@
+{"devices": {},"apps":{"org.onosproject.restsb":{"devices":[]}}}