aboutsummaryrefslogtreecommitdiffstats
path: root/src/VppIdGen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/VppIdGen.cpp')
-rw-r--r--src/VppIdGen.cpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/VppIdGen.cpp b/src/VppIdGen.cpp
new file mode 100644
index 0000000..f0833a7
--- /dev/null
+++ b/src/VppIdGen.cpp
@@ -0,0 +1,94 @@
+/* -*- C++ -*-; c-basic-offset: 4; indent-tabs-mode: nil */
+/*
+ * Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+#include "VppIdGen.hpp"
+
+#include <modelgbp/gbp/BridgeDomain.hpp>
+#include <modelgbp/gbp/Contract.hpp>
+#include <modelgbp/gbp/FloodDomain.hpp>
+#include <modelgbp/gbp/L3ExternalNetwork.hpp>
+#include <modelgbp/gbp/RoutingDomain.hpp>
+
+namespace VPP
+{
+static const char *ID_NAMESPACES[] = {"floodDomain",
+ "bridgeDomain",
+ "routingDomain",
+ "contract",
+ "externalNetwork",
+ "secGroup",
+ "secGroupSet"};
+
+static const char *ID_NMSPC_FD = ID_NAMESPACES[0];
+static const char *ID_NMSPC_BD = ID_NAMESPACES[1];
+static const char *ID_NMSPC_RD = ID_NAMESPACES[2];
+static const char *ID_NMSPC_CON = ID_NAMESPACES[3];
+static const char *ID_NMSPC_EXTNET = ID_NAMESPACES[4];
+static const char *ID_NMSPC_SECGROUP = ID_NAMESPACES[5];
+static const char *ID_NMSPC_SECGROUP_SET = ID_NAMESPACES[6];
+
+IdGen::IdGen(opflexagent::IdGenerator &id_gen)
+ : m_id_gen(id_gen)
+{
+ for (size_t i = 0; i < sizeof(ID_NAMESPACES) / sizeof(char *); i++)
+ {
+ /*
+ * start the namespace ID's at a non-zero offset so the
+ * default tables are never used.
+ */
+ m_id_gen.initNamespace(ID_NAMESPACES[i], 100);
+ }
+}
+
+uint32_t
+IdGen::get(opflex::modb::class_id_t cid, const opflex::modb::URI &uri)
+{
+ return m_id_gen.getId(get_namespace(cid), uri.toString());
+}
+
+void
+IdGen::erase(opflex::modb::class_id_t cid, const opflex::modb::URI &uri)
+{
+ m_id_gen.erase(get_namespace(cid), uri.toString());
+}
+
+const char *
+IdGen::get_namespace(opflex::modb::class_id_t cid)
+{
+ const char *nmspc = NULL;
+ switch (cid)
+ {
+ case modelgbp::gbp::RoutingDomain::CLASS_ID:
+ nmspc = ID_NMSPC_RD;
+ break;
+ case modelgbp::gbp::BridgeDomain::CLASS_ID:
+ nmspc = ID_NMSPC_BD;
+ break;
+ case modelgbp::gbp::FloodDomain::CLASS_ID:
+ nmspc = ID_NMSPC_FD;
+ break;
+ case modelgbp::gbp::Contract::CLASS_ID:
+ nmspc = ID_NMSPC_CON;
+ break;
+ case modelgbp::gbp::L3ExternalNetwork::CLASS_ID:
+ nmspc = ID_NMSPC_EXTNET;
+ break;
+ default:
+ assert(false);
+ }
+ return nmspc;
+}
+
+} // namespace VPP
+
+/*
+ * Local Variables:
+ * eval: (c-set-style "llvm.org")
+ * End:
+ */