diff options
Diffstat (limited to 'src/VppIdGen.cpp')
-rw-r--r-- | src/VppIdGen.cpp | 94 |
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: + */ |