14
14
15
15
#include < set>
16
16
#include < map>
17
- #include < tuple>
18
17
#include < regex>
19
- #include < string>
20
- #include < rapidjson/document.h>
21
18
#include < rapidjson/stringbuffer.h>
22
19
23
20
#include " JsonRpc.h"
24
- #include < opflexagent/logging.h>
25
- #include " OvsdbConnection.h"
26
21
27
22
using namespace std ::chrono;
28
23
@@ -59,8 +54,8 @@ bool JsonRpc::createNetFlow(const string& brUuid, const string& target, const in
59
54
msg1.kvPairs .emplace_back (" uuid-name" , uuid_name);
60
55
61
56
JsonRpcTransactMessage msg2 (OvsdbOperation::UPDATE, OvsdbTable::BRIDGE);
62
- set<tuple<string, string , string>> condSet;
63
- condSet.emplace (" _uuid" , " == " , brUuid);
57
+ set<tuple<string, OvsdbFunction , string>> condSet;
58
+ condSet.emplace (" _uuid" , OvsdbFunction::EQ , brUuid);
64
59
msg2.conditions = condSet;
65
60
66
61
tuples.clear ();
@@ -92,8 +87,8 @@ bool JsonRpc::createIpfix(const string& brUuid, const string& target, const int&
92
87
msg1.kvPairs .emplace_back (" uuid-name" , uuid_name);
93
88
94
89
JsonRpcTransactMessage msg2 (OvsdbOperation::UPDATE, OvsdbTable::BRIDGE);
95
- set<tuple<string, string , string>> condSet;
96
- condSet.emplace (" _uuid" , " == " , brUuid);
90
+ set<tuple<string, OvsdbFunction , string>> condSet;
91
+ condSet.emplace (" _uuid" , OvsdbFunction::EQ , brUuid);
97
92
msg2.conditions = condSet;
98
93
99
94
tuples.clear ();
@@ -111,8 +106,8 @@ bool JsonRpc::createIpfix(const string& brUuid, const string& target, const int&
111
106
112
107
bool JsonRpc::deleteNetFlow (const string& brName) {
113
108
JsonRpcTransactMessage msg1 (OvsdbOperation::UPDATE, OvsdbTable::BRIDGE);
114
- set<tuple<string, string , string>> condSet;
115
- condSet.emplace (" name" , " == " , brName);
109
+ set<tuple<string, OvsdbFunction , string>> condSet;
110
+ condSet.emplace (" name" , OvsdbFunction::EQ , brName);
116
111
msg1.conditions = condSet;
117
112
118
113
vector<TupleData> tuples;
@@ -129,8 +124,8 @@ bool JsonRpc::deleteNetFlow(const string& brName) {
129
124
130
125
bool JsonRpc::deleteIpfix (const string& brName) {
131
126
JsonRpcTransactMessage msg1 (OvsdbOperation::UPDATE, OvsdbTable::BRIDGE);
132
- set<tuple<string, string , string>> condSet;
133
- condSet.emplace (" name" , " == " , brName);
127
+ set<tuple<string, OvsdbFunction , string>> condSet;
128
+ condSet.emplace (" name" , OvsdbFunction::EQ , brName);
134
129
msg1.conditions = condSet;
135
130
136
131
vector<TupleData> tuples;
@@ -161,26 +156,16 @@ bool JsonRpc::handleGetPortUuidResp(uint64_t reqId,
161
156
return false ;
162
157
}
163
158
164
- bool JsonRpc::updateBridgePorts (
165
- const string& brUuid, set<string>& brPorts, const string& port, bool action) {
166
- if (action) {
167
- // add port to list
168
- brPorts.emplace (port);
169
- } else {
170
- // remove port from list
171
- brPorts.erase (port);
172
- }
173
- JsonRpcTransactMessage msg1 (OvsdbOperation::UPDATE, OvsdbTable::BRIDGE);
174
- set<tuple<string, string, string>> condSet;
175
- condSet.emplace (" _uuid" , " ==" , brUuid);
159
+ bool JsonRpc::updateBridgePorts (const string& brName, const string& portUuid, bool addToList) {
160
+ JsonRpcTransactMessage msg1 (OvsdbOperation::MUTATE, OvsdbTable::BRIDGE);
161
+ set<tuple<string, OvsdbFunction, string>> condSet;
162
+ condSet.emplace (" name" , OvsdbFunction::EQ, brName);
176
163
msg1.conditions = condSet;
164
+
177
165
vector<TupleData> tuples;
178
- tuples.reserve (brPorts.size ());
179
- for (auto & elem : brPorts) {
180
- tuples.emplace_back (" uuid" , elem);
181
- }
182
- TupleDataSet tdSet (tuples, " set" );
183
- msg1.rowData .emplace (" ports" , tdSet);
166
+ tuples.emplace_back (" uuid" , portUuid);
167
+ TupleDataSet tdSet = TupleDataSet (tuples);
168
+ msg1.mutateRowData .emplace (" ports" , std::make_pair (addToList ? OvsdbOperation::INSERT : OvsdbOperation::DELETE, tdSet));
184
169
185
170
const list<JsonRpcTransactMessage> requests = {msg1};
186
171
if (!sendRequestAndAwaitResponse (requests)) {
@@ -190,41 +175,6 @@ bool JsonRpc::updateBridgePorts(
190
175
return true ;
191
176
}
192
177
193
- bool JsonRpc::handleGetBridgePortList (uint64_t reqId, const Document& payload, BrPortResult& result) {
194
- set<string> brPortSet;
195
- list<string> ids = {" 0" ," rows" ," 0" ," ports" ," 0" };
196
- Value val;
197
- opflexagent::getValue (payload, ids, val);
198
- if (!val.IsNull () && val.IsString ()) {
199
- const string valStr (val.GetString ());
200
- ids = {" 0" , " rows" , " 0" , " ports" , " 1" };
201
- val.SetObject ();
202
- opflexagent::getValue (payload, ids, val);
203
- if (valStr == " uuid" ) {
204
- brPortSet.emplace (val.GetString ());
205
- }
206
- } else {
207
- LOG (WARNING) << " Error getting port uuid" ;
208
- return false ;
209
- }
210
-
211
- if (val.IsArray ()) {
212
- for (Value::ConstValueIterator itr1 = val.Begin ();
213
- itr1 != val.End (); itr1++) {
214
- brPortSet.emplace ((*itr1)[1 ].GetString ());
215
- }
216
- }
217
- ids = {" 0" , " rows" , " 0" , " _uuid" , " 1" };
218
- Value val3;
219
- opflexagent::getValue (payload, ids, val3);
220
- string brPortUuid = val3.GetString ();
221
- tuple<string, set<string>> brPorts = make_tuple (brPortUuid, brPortSet);
222
-
223
- result.brUuid = brPortUuid;
224
- result.portUuids .insert (brPortSet.begin (), brPortSet.end ());
225
- return true ;
226
- }
227
-
228
178
void JsonRpc::getUuidsFromVal (set<string>& uuidSet, const Document& payload, const string& index) {
229
179
LOG (INFO) << " getUuidsFromVal with index " << index;
230
180
list<string> ids = {" 0" ," rows" ," 0" ,index," 0" };
@@ -250,24 +200,11 @@ void JsonRpc::getUuidsFromVal(set<string>& uuidSet, const Document& payload, con
250
200
}
251
201
}
252
202
253
- bool JsonRpc::getBridgePortList (const string& bridge, BrPortResult& res) {
254
- JsonRpcTransactMessage msg1 (OvsdbOperation::SELECT, OvsdbTable::BRIDGE);
255
- set<tuple<string, string, string>> condSet;
256
- condSet.emplace (" name" , " ==" , bridge);
257
- msg1.conditions = condSet;
258
- msg1.columns .emplace (" ports" );
259
- msg1.columns .emplace (" _uuid" );
260
- const list<JsonRpcTransactMessage> requests = {msg1};
261
- if (!sendRequestAndAwaitResponse (requests)) {
262
- LOG (DEBUG) << " Error sending message" ;
263
- return false ;
264
- }
265
-
266
- return handleGetBridgePortList (pResp->reqId , pResp->payload , res);
267
- }
268
-
269
- bool JsonRpc::getOvsdbMirrorConfig (mirror& mir) {
203
+ bool JsonRpc::getOvsdbMirrorConfig (const string &brName, mirror &mir) {
270
204
JsonRpcTransactMessage msg1 (OvsdbOperation::SELECT, OvsdbTable::MIRROR);
205
+ set<tuple<string, OvsdbFunction, string>> condSet;
206
+ condSet.emplace (" name" , OvsdbFunction::EQ, brName);
207
+ msg1.conditions = condSet;
271
208
const list<JsonRpcTransactMessage> requests1 = {msg1};
272
209
if (!sendRequestAndAwaitResponse (requests1)) {
273
210
LOG (DEBUG) << " Error sending message" ;
@@ -310,9 +247,8 @@ bool JsonRpc::getOvsdbMirrorConfig(mirror& mir) {
310
247
bool JsonRpc::getCurrentErspanParams (const string& portName, ErspanParams& params) {
311
248
// for ERSPAN port get IP address
312
249
JsonRpcTransactMessage msg1 (OvsdbOperation::SELECT, OvsdbTable::INTERFACE);
313
- tuple<string, string, string> cond1 (" name" , " ==" , portName);
314
- set<tuple<string, string, string>> condSet;
315
- condSet.emplace (cond1);
250
+ set<tuple<string, OvsdbFunction, string>> condSet;
251
+ condSet.emplace (" name" , OvsdbFunction::EQ, portName);
316
252
msg1.conditions = condSet;
317
253
msg1.columns .emplace (" options" );
318
254
@@ -421,10 +357,10 @@ bool JsonRpc::getErspanOptions(const uint64_t reqId, const Document& payload, Er
421
357
422
358
void JsonRpc::getPortUuid (const string& name, string& uuid) {
423
359
JsonRpcTransactMessage msg1 (OvsdbOperation::SELECT, OvsdbTable::PORT);
424
- tuple<string, string, string> cond1 (" name" , " ==" , name);
425
- set<tuple<string, string, string>> condSet;
426
- condSet.emplace (cond1);
360
+ set<tuple<string, OvsdbFunction, string>> condSet;
361
+ condSet.emplace (" name" , OvsdbFunction::EQ, name);
427
362
msg1.conditions = condSet;
363
+ msg1.columns .emplace (" _uuid" );
428
364
429
365
const list<JsonRpcTransactMessage> requests{msg1};
430
366
if (!sendRequestAndAwaitResponse (requests)) {
@@ -449,8 +385,8 @@ void JsonRpc::getPortUuids(map<string, string>& ports) {
449
385
450
386
void JsonRpc::getBridgeUuid (const string& name, string& uuid) {
451
387
JsonRpcTransactMessage msg1 (OvsdbOperation::SELECT, OvsdbTable::BRIDGE);
452
- set<tuple<string, string , string>> condSet;
453
- condSet.emplace (" name" , " == " , name);
388
+ set<tuple<string, OvsdbFunction , string>> condSet;
389
+ condSet.emplace (" name" , OvsdbFunction::EQ , name);
454
390
msg1.conditions = condSet;
455
391
msg1.columns .emplace (" _uuid" );
456
392
@@ -533,13 +469,13 @@ bool JsonRpc::createMirror(const string& brUuid, const string& name, const set<s
533
469
534
470
// msg2
535
471
tuples.clear ();
536
- JsonRpcTransactMessage msg2 (OvsdbOperation::UPDATE , OvsdbTable::BRIDGE);
537
- set<tuple<string, string , string>> condSet;
538
- condSet.emplace (" _uuid" , " == " , brUuid);
472
+ JsonRpcTransactMessage msg2 (OvsdbOperation::MUTATE , OvsdbTable::BRIDGE);
473
+ set<tuple<string, OvsdbFunction , string>> condSet;
474
+ condSet.emplace (" _uuid" , OvsdbFunction::EQ , brUuid);
539
475
msg2.conditions = condSet;
540
476
tuples.emplace_back (" named-uuid" , uuid_name);
541
477
tdSet = TupleDataSet (tuples);
542
- msg2.rowData .emplace (" mirrors" , tdSet);
478
+ msg2.mutateRowData .emplace (" mirrors" , std::make_pair (OvsdbOperation::INSERT, tdSet) );
543
479
544
480
const list<JsonRpcTransactMessage> requests = {msg1, msg2};
545
481
if (!sendRequestAndAwaitResponse (requests)) {
@@ -549,7 +485,7 @@ bool JsonRpc::createMirror(const string& brUuid, const string& name, const set<s
549
485
return handleCreateMirrorResp (pResp->reqId , pResp->payload );
550
486
}
551
487
552
- bool JsonRpc::addErspanPort (const string& bridge , ErspanParams& params) {
488
+ bool JsonRpc::addErspanPort (const string& bridgeName , ErspanParams& params) {
553
489
JsonRpcTransactMessage msg1 (OvsdbOperation::INSERT, OvsdbTable::PORT);
554
490
vector<TupleData> tuples;
555
491
tuples.emplace_back (" " , params.getPortName ());
@@ -592,22 +528,13 @@ bool JsonRpc::addErspanPort(const string& bridge, ErspanParams& params) {
592
528
tdSet = TupleDataSet (tuples, " map" );
593
529
msg2.rowData .emplace (" options" , tdSet);
594
530
595
- // get bridge port list and add erspan port to it.
596
- BrPortResult res;
597
- if (!getBridgePortList (bridge, res)) {
598
- return false ;
599
- }
600
-
601
- JsonRpcTransactMessage msg3 (OvsdbOperation::UPDATE, OvsdbTable::BRIDGE);
531
+ JsonRpcTransactMessage msg3 (OvsdbOperation::MUTATE, OvsdbTable::BRIDGE);
602
532
tuples.clear ();
603
- for (const auto & elem : res.portUuids ) {
604
- tuples.emplace_back (" uuid" , elem);
605
- }
606
533
tuples.emplace_back (" named-uuid" , uuid_name);
607
- tdSet = TupleDataSet (tuples, " set " );
608
- msg3.rowData .emplace (" ports" , tdSet);
609
- set<tuple<string, string , string>> condSet;
610
- condSet.emplace (" _uuid " , " == " , res. brUuid );
534
+ tdSet = TupleDataSet (tuples);
535
+ msg3.mutateRowData .emplace (" ports" , std::make_pair (OvsdbOperation::INSERT, tdSet) );
536
+ set<tuple<string, OvsdbFunction , string>> condSet;
537
+ condSet.emplace (" name " , OvsdbFunction::EQ, bridgeName );
611
538
msg3.conditions = condSet;
612
539
613
540
const list<JsonRpcTransactMessage> requests = {msg1, msg2, msg3};
@@ -642,8 +569,8 @@ bool JsonRpc::handleCreateMirrorResp(uint64_t reqId, const Document& payload) {
642
569
643
570
bool JsonRpc::deleteMirror (const string& brName) {
644
571
JsonRpcTransactMessage msg (OvsdbOperation::UPDATE, OvsdbTable::BRIDGE);
645
- set<tuple<string, string , string>> condSet;
646
- condSet.emplace (" name" , " == " , brName);
572
+ set<tuple<string, OvsdbFunction , string>> condSet;
573
+ condSet.emplace (" name" , OvsdbFunction::EQ , brName);
647
574
msg.conditions = condSet;
648
575
649
576
vector<TupleData> tuples;
0 commit comments