summaryrefslogtreecommitdiff
path: root/agent/snmpvars.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'agent/snmpvars.hpp')
-rw-r--r--agent/snmpvars.hpp121
1 files changed, 121 insertions, 0 deletions
diff --git a/agent/snmpvars.hpp b/agent/snmpvars.hpp
new file mode 100644
index 0000000..67cfa17
--- /dev/null
+++ b/agent/snmpvars.hpp
@@ -0,0 +1,121 @@
+/**
+ * @brief netsnmp_variable_list C++ wrapper.
+ *
+ * This file is part of sila-snmp project.
+ *
+ * Copyright (c) 2022 SILA
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#pragma once
+
+namespace phosphor
+{
+namespace snmp
+{
+namespace agent
+{
+
+/**
+ * @brief SNMP representation of boolean type.
+ */
+enum class TruthValue : int
+{
+ True = 1,
+ False = 2,
+};
+
+#define SNMPBOOL(value) \
+ static_cast<int>(value ? TruthValue::True : TruthValue::False)
+
+struct VariableList
+{
+ /**
+ * @brief Fill snmp field with string value.
+ */
+ static void set(netsnmp_variable_list* var, const std::string& value)
+ {
+ snmp_set_var_typed_value(var, ASN_OCTET_STR, value.c_str(),
+ value.length());
+ }
+
+ /**
+ * @brief Fill snmp field with boolean value.
+ */
+ static void set(netsnmp_variable_list* var, bool value)
+ {
+ snmp_set_var_typed_integer(var, ASN_INTEGER, SNMPBOOL(value));
+ }
+
+ /**
+ * @brief Fill snmp field with integral value.
+ */
+ template <typename T> static void set(netsnmp_variable_list* var, T&& value)
+ {
+ snmp_set_var_typed_integer(var, ASN_INTEGER, value);
+ }
+
+ /**
+ * @brief Add string as field into snmp variables list.
+ *
+ * @param vars - Pointer to snmp variables list
+ * @param field_oid - field OID
+ * @param field_oid_len - length of field OID
+ * @param field_value - field value
+ */
+ static void add(netsnmp_variable_list* vars, const oid* field_oid,
+ size_t field_oid_len, const std::string& field_value)
+ {
+ snmp_varlist_add_variable(
+ &vars, field_oid, field_oid_len, ASN_OCTET_STR,
+ reinterpret_cast<const u_char*>(field_value.data()),
+ field_value.length());
+ }
+
+ /**
+ * @brief Add boolean as field into snmp variables list.
+ *
+ * @param vars - Pointer to snmp variables list
+ * @param field_oid - field OID
+ * @param field_oid_len - length of field OID
+ * @param field_value - field value
+ */
+ static void add(netsnmp_variable_list* vars, const oid* field_oid,
+ size_t field_oid_len, bool field_value)
+ {
+ auto v = SNMPBOOL(field_value);
+ snmp_varlist_add_variable(&vars, field_oid, field_oid_len, ASN_INTEGER,
+ &v, sizeof(v));
+ }
+ /**
+ * @brief Add value of integral type as field into snmp variables list.
+ *
+ * @param vars - Pointer to snmp variables list
+ * @param field_oid - field OID
+ * @param field_oid_len - length of field OID
+ * @param field_value - field value
+ */
+ template <typename T>
+ static void add(netsnmp_variable_list* vars, const oid* field_oid,
+ size_t field_oid_len, T&& field_value)
+ {
+ snmp_varlist_add_variable(&vars, field_oid, field_oid_len, ASN_INTEGER,
+ reinterpret_cast<const u_char*>(&field_value),
+ sizeof(field_value));
+ }
+};
+
+} // namespace agent
+} // namespace snmp
+} // namespace phosphor