summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-04-24 12:29:31 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-04-24 12:29:31 -0700
commit883a216d2a5f3d3cbddd230796d15da0af9bfab7 (patch)
tree302c8e5bacb9d3c9a37f4869b40657ccb6248002 /controller
parent5202fbdaf313096a7205e7bb9c14c11fc628b8f2 (diff)
downloadinfinitytier-883a216d2a5f3d3cbddd230796d15da0af9bfab7.tar.gz
infinitytier-883a216d2a5f3d3cbddd230796d15da0af9bfab7.zip
Build fixes.
Diffstat (limited to 'controller')
-rw-r--r--controller/SqliteNetworkController.cpp17
-rw-r--r--controller/SqliteNetworkController.hpp1
-rwxr-xr-xcontroller/controller-api-test.sh42
3 files changed, 58 insertions, 2 deletions
diff --git a/controller/SqliteNetworkController.cpp b/controller/SqliteNetworkController.cpp
index a2bc5fc3..b9aebbb8 100644
--- a/controller/SqliteNetworkController.cpp
+++ b/controller/SqliteNetworkController.cpp
@@ -178,6 +178,7 @@ SqliteNetworkController::SqliteNetworkController(const char *dbPath) :
||(sqlite3_prepare_v2(_db,"INSERT INTO Network (networkId,name,creationTime,revision) VALUES (?,?,?,1)",-1,&_sCreateNetwork,(const char **)0) != SQLITE_OK)
||(sqlite3_prepare_v2(_db,"UPDATE Network SET ? = ? WHERE networkId = ?",-1,&_sUpdateNetworkField,(const char **)0) != SQLITE_OK)
||(sqlite3_prepare_v2(_db,"SELECT revision FROM Network WHERE id = ?",-1,&_sGetNetworkRevision,(const char **)0) != SQLITE_OK)
+ ||(sqlite3_prepare_v2(_db,"UPDATE Network SET revision = ? WHERE id = ?",-1,&_sSetNetworkRevision,(const char **)0) != SQLITE_OK)
||(sqlite3_prepare_v2(_db,"SELECT ip,ipNetmaskBits,ipVersion FROM IpAssignment WHERE networkId = ? AND nodeId = ?",-1,&_sGetIpAssignmentsForNode2,(const char **)0) != SQLITE_OK)
||(sqlite3_prepare_v2(_db,"DELETE FROM Relay WHERE networkId = ?",-1,&_sDeleteRelaysForNetwork,(const char **)0) != SQLITE_OK)
||(sqlite3_prepare_v2(_db,"INSERT INTO Relay (networkId,nodeId,phyAddress) VALUES (?,?,?)",-1,&_sCreateRelay,(const char **)0) != SQLITE_OK)
@@ -220,6 +221,7 @@ SqliteNetworkController::~SqliteNetworkController()
sqlite3_finalize(_sCreateNetwork);
sqlite3_finalize(_sUpdateNetworkField);
sqlite3_finalize(_sGetNetworkRevision);
+ sqlite3_finalize(_sSetNetworkRevision);
sqlite3_finalize(_sGetIpAssignmentsForNode2);
sqlite3_finalize(_sDeleteRelaysForNetwork);
sqlite3_finalize(_sCreateRelay);
@@ -841,11 +843,17 @@ unsigned int SqliteNetworkController::handleControlPlaneHttpPOST(
int64_t revision = 0;
sqlite3_reset(_sGetNetworkRevision);
sqlite3_bind_text(_sGetNetworkRevision,1,nwids,16,SQLITE_STATIC);
- if (sqlite3_step(_sGetNetworkRevision) == SQLITE_ROW)
+ bool networkExists = false;
+ if (sqlite3_step(_sGetNetworkRevision) == SQLITE_ROW) {
+ networkExists = true;
revision = sqlite3_column_int64(_sGetNetworkRevision,0);
+ }
if (path.size() >= 3) {
+ if (!networkExists)
+ return 404;
+
if ((path.size() == 4)&&(path[2] == "member")&&(path[3].length() == 10)) {
uint64_t address = Utils::hexStrToU64(path[3].c_str());
char addrs[24];
@@ -856,7 +864,7 @@ unsigned int SqliteNetworkController::handleControlPlaneHttpPOST(
} else {
- if (revision <= 0) {
+ if (!networkExists) {
sqlite3_reset(_sCreateNetwork);
sqlite3_bind_text(_sCreateNetwork,1,nwids,16,SQLITE_STATIC);
sqlite3_bind_text(_sCreateNetwork,2,nwids,16,SQLITE_STATIC); // default name, will be changed below if a name is specified in JSON
@@ -1081,6 +1089,11 @@ unsigned int SqliteNetworkController::handleControlPlaneHttpPOST(
json_value_free(j);
}
+ sqlite3_reset(_sSetNetworkRevision);
+ sqlite3_bind_int64(_sSetNetworkRevision,1,revision += 1);
+ sqlite3_bind_text(_sSetNetworkRevision,2,nwids,16,SQLITE_STATIC);
+ sqlite3_step(_sSetNetworkRevision);
+
return handleControlPlaneHttpGET(path,urlArgs,headers,body,responseBody,responseContentType);
}
diff --git a/controller/SqliteNetworkController.hpp b/controller/SqliteNetworkController.hpp
index 72f1e203..c61829c3 100644
--- a/controller/SqliteNetworkController.hpp
+++ b/controller/SqliteNetworkController.hpp
@@ -113,6 +113,7 @@ private:
sqlite3_stmt *_sCreateNetwork;
sqlite3_stmt *_sUpdateNetworkField;
sqlite3_stmt *_sGetNetworkRevision;
+ sqlite3_stmt *_sSetNetworkRevision;
sqlite3_stmt *_sGetIpAssignmentsForNode2;
sqlite3_stmt *_sDeleteRelaysForNetwork;
sqlite3_stmt *_sCreateRelay;
diff --git a/controller/controller-api-test.sh b/controller/controller-api-test.sh
new file mode 100755
index 00000000..934685b3
--- /dev/null
+++ b/controller/controller-api-test.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+if [ "$#" -ne "2" ]; then
+ echo 'Usage: controller-api-test.sh <network ID to create> <local TCP port for HTTP API>'
+ exit 1
+fi
+
+network_json=$(cat <<EOF
+{
+ name: "test network",
+ private: true,
+ v4AssignMode: "zt",
+ v6AssignMode: "none",
+ multicastLimit: 100,
+ ipAssignmentPools: [
+ {
+ network: "10.1.2.0",
+ netmaskBits: 24
+ }
+ ],
+ rules: [
+ {
+ ruleId: 100,
+ etherType: 0x0800,
+ action: "accept"
+ },
+ {
+ ruleId: 200,
+ etherType: 0x0806,
+ action: "accept"
+ },
+ {
+ ruleId: 300,
+ etherType: 0x86dd,
+ action: "accept"
+ }
+ ]
+}
+EOF
+)
+
+echo "$network_json" | curl -d - -v "http://127.0.0.1:$2/controller/network/$1"