+ return 0;
+}
+
+static void snmp_agent_generate_oid2string(oid_t *oid, size_t offset,
+ char *key) {
+ int key_len = oid->oid[offset];
+ int i;
+
+ for (i = 0; i < key_len && offset < oid->oid_len; i++)
+ key[i] = oid->oid[++offset];
+
+ key[i] = '\0';
+}
+
+static int snmp_agent_generate_string2oid(oid_t *oid, const char *key) {
+ int key_len = strlen(key);
+
+ oid->oid[oid->oid_len++] = key_len;
+ for (int i = 0; i < key_len; i++) {
+ oid->oid[oid->oid_len++] = key[i];
+ if (oid->oid_len >= MAX_OID_LEN) {
+ ERROR(PLUGIN_NAME ": Conversion key string %s to OID failed", key);
+ return -EINVAL;
+ }
+ }
+
+ return 0;
+}
+
+static int snmp_agent_register_oid_string(oid_t *oid, const char *key,
+ Netsnmp_Node_Handler *handler) {
+ oid_t new_oid;
+
+ memcpy(&new_oid, oid, sizeof(*oid));
+ int ret = snmp_agent_generate_string2oid(&new_oid, key);
+ if (ret != 0)
+ return ret;
+
+ return snmp_agent_register_oid(&new_oid, handler);
+}
+
+static int snmp_agent_unregister_oid_string(oid_t *oid, const char *key) {
+ oid_t new_oid;
+
+ memcpy(&new_oid, oid, sizeof(*oid));
+ int ret = snmp_agent_generate_string2oid(&new_oid, key);
+ if (ret != 0)
+ return ret;
+
+ return unregister_mib(new_oid.oid, new_oid.oid_len);