/* -- DO NOT EDIT -- * Generated by smidump version 0.4.3: * smidump -f scli SNMP-COMMUNITY-MIB * * Derived from SNMP-COMMUNITY-MIB: * This MIB module defines objects to help support coexistence * between SNMPv1, SNMPv2c, and SNMPv3. * * Revision 2000-03-06 00:00: * This version published as RFC 2576. * * Revision 1999-05-13 00:00: * The Initial Revision * * $Id: snmp-community-mib.c 1788 2006-02-21 20:47:18Z schoenw $ */ #include "snmp-community-mib.h" static guint16 snmpCommunitySecurityName_constraints[] = {1U, 32U, 0, 0}; static guint16 snmpCommunityContextEngineID_constraints[] = {5U, 32U, 0, 0}; static guint16 snmpCommunityContextName_constraints[] = {0U, 32U, 0, 0}; static guint16 snmpCommunityTransportTag_constraints[] = {0U, 255U, 0, 0}; static guint16 snmpTargetAddrTMask_constraints[] = {0U, 255U, 0, 0}; static gint32 snmpTargetAddrMMS_constraints[] = {0L, 0L, 484L, 2147483647L, 0, 0}; static guint32 const snmpCommunityEntry_oid[] = {1, 3, 6, 1, 6, 3, 18, 1, 1, 1}; static GNetSnmpAttribute snmpCommunityEntry_attr[] = { { 2, GNET_SNMP_VARBIND_TYPE_OCTETSTRING, SNMP_COMMUNITY_MIB_SNMPCOMMUNITYNAME, "snmpCommunityName", NULL, G_STRUCT_OFFSET(snmp_community_mib_snmpCommunityEntry_t, snmpCommunityName), G_STRUCT_OFFSET(snmp_community_mib_snmpCommunityEntry_t, _snmpCommunityNameLength), GSNMP_ATTR_FLAG_WRITABLE }, { 3, GNET_SNMP_VARBIND_TYPE_OCTETSTRING, SNMP_COMMUNITY_MIB_SNMPCOMMUNITYSECURITYNAME, "snmpCommunitySecurityName", snmpCommunitySecurityName_constraints, G_STRUCT_OFFSET(snmp_community_mib_snmpCommunityEntry_t, snmpCommunitySecurityName), G_STRUCT_OFFSET(snmp_community_mib_snmpCommunityEntry_t, _snmpCommunitySecurityNameLength), GSNMP_ATTR_FLAG_WRITABLE }, { 4, GNET_SNMP_VARBIND_TYPE_OCTETSTRING, SNMP_COMMUNITY_MIB_SNMPCOMMUNITYCONTEXTENGINEID, "snmpCommunityContextEngineID", snmpCommunityContextEngineID_constraints, G_STRUCT_OFFSET(snmp_community_mib_snmpCommunityEntry_t, snmpCommunityContextEngineID), G_STRUCT_OFFSET(snmp_community_mib_snmpCommunityEntry_t, _snmpCommunityContextEngineIDLength), GSNMP_ATTR_FLAG_WRITABLE }, { 5, GNET_SNMP_VARBIND_TYPE_OCTETSTRING, SNMP_COMMUNITY_MIB_SNMPCOMMUNITYCONTEXTNAME, "snmpCommunityContextName", snmpCommunityContextName_constraints, G_STRUCT_OFFSET(snmp_community_mib_snmpCommunityEntry_t, snmpCommunityContextName), G_STRUCT_OFFSET(snmp_community_mib_snmpCommunityEntry_t, _snmpCommunityContextNameLength), GSNMP_ATTR_FLAG_WRITABLE }, { 6, GNET_SNMP_VARBIND_TYPE_OCTETSTRING, SNMP_COMMUNITY_MIB_SNMPCOMMUNITYTRANSPORTTAG, "snmpCommunityTransportTag", snmpCommunityTransportTag_constraints, G_STRUCT_OFFSET(snmp_community_mib_snmpCommunityEntry_t, snmpCommunityTransportTag), G_STRUCT_OFFSET(snmp_community_mib_snmpCommunityEntry_t, _snmpCommunityTransportTagLength), GSNMP_ATTR_FLAG_WRITABLE }, { 7, GNET_SNMP_VARBIND_TYPE_INTEGER32, SNMP_COMMUNITY_MIB_SNMPCOMMUNITYSTORAGETYPE, "snmpCommunityStorageType", NULL, G_STRUCT_OFFSET(snmp_community_mib_snmpCommunityEntry_t, snmpCommunityStorageType), 0, GSNMP_ATTR_FLAG_WRITABLE }, { 8, GNET_SNMP_VARBIND_TYPE_INTEGER32, SNMP_COMMUNITY_MIB_SNMPCOMMUNITYSTATUS, "snmpCommunityStatus", NULL, G_STRUCT_OFFSET(snmp_community_mib_snmpCommunityEntry_t, snmpCommunityStatus), 0, GSNMP_ATTR_FLAG_WRITABLE }, { 0, 0, 0, NULL } }; static guint32 const snmpTargetAddrExtEntry_oid[] = {1, 3, 6, 1, 6, 3, 18, 1, 2, 1}; static GNetSnmpAttribute snmpTargetAddrExtEntry_attr[] = { { 1, GNET_SNMP_VARBIND_TYPE_OCTETSTRING, SNMP_COMMUNITY_MIB_SNMPTARGETADDRTMASK, "snmpTargetAddrTMask", snmpTargetAddrTMask_constraints, G_STRUCT_OFFSET(snmp_community_mib_snmpTargetAddrExtEntry_t, snmpTargetAddrTMask), G_STRUCT_OFFSET(snmp_community_mib_snmpTargetAddrExtEntry_t, _snmpTargetAddrTMaskLength), GSNMP_ATTR_FLAG_WRITABLE }, { 2, GNET_SNMP_VARBIND_TYPE_INTEGER32, SNMP_COMMUNITY_MIB_SNMPTARGETADDRMMS, "snmpTargetAddrMMS", snmpTargetAddrMMS_constraints, G_STRUCT_OFFSET(snmp_community_mib_snmpTargetAddrExtEntry_t, snmpTargetAddrMMS), 0, GSNMP_ATTR_FLAG_WRITABLE }, { 0, 0, 0, NULL } }; snmp_community_mib_snmpCommunityEntry_t * snmp_community_mib_new_snmpCommunityEntry() { snmp_community_mib_snmpCommunityEntry_t *snmpCommunityEntry; snmpCommunityEntry = (snmp_community_mib_snmpCommunityEntry_t *) g_malloc0(sizeof(snmp_community_mib_snmpCommunityEntry_t) + sizeof(gpointer)); return snmpCommunityEntry; } static inline int unpack_snmpCommunityEntry(GNetSnmpVarBind *vb, snmp_community_mib_snmpCommunityEntry_t *snmpCommunityEntry) { guint8 idx = 11; guint16 i, len; if (vb->oid_len < idx) return -1; len = vb->oid_len - idx; if (len < 1 || len > 32) return -1; if (vb->oid_len < idx + len) return -1; for (i = 0; i < len; i++) { snmpCommunityEntry->snmpCommunityIndex[i] = vb->oid[idx++]; } snmpCommunityEntry->_snmpCommunityIndexLength = len; if (vb->oid_len > idx) return -1; return 0; } static inline gint8 pack_snmpCommunityEntry(guint32 *base, guchar *snmpCommunityIndex, guint16 _snmpCommunityIndexLength) { guint8 idx = 11; guint16 i, len; len = _snmpCommunityIndexLength; if (len < 1 || len > 32) return -1; for (i = 0; i < len; i++) { base[idx++] = snmpCommunityIndex[i]; if (idx >= 128) return -1; } return idx; } static inline snmp_community_mib_snmpCommunityEntry_t * assign_snmpCommunityEntry(GList *vbl) { snmp_community_mib_snmpCommunityEntry_t *snmpCommunityEntry; char *p; snmpCommunityEntry = snmp_community_mib_new_snmpCommunityEntry(); p = (char *) snmpCommunityEntry + sizeof(snmp_community_mib_snmpCommunityEntry_t); * (GList **) p = vbl; if (unpack_snmpCommunityEntry((GNetSnmpVarBind *) vbl->data, snmpCommunityEntry) < 0) { g_warning("%s: invalid instance identifier", "snmpCommunityEntry"); g_free(snmpCommunityEntry); return NULL; } gnet_snmp_attr_assign(vbl, snmpCommunityEntry_oid, G_N_ELEMENTS(snmpCommunityEntry_oid), snmpCommunityEntry_attr, snmpCommunityEntry); return snmpCommunityEntry; } void snmp_community_mib_get_snmpCommunityTable(GNetSnmp *s, snmp_community_mib_snmpCommunityEntry_t ***snmpCommunityEntry, gint64 mask) { GList *in = NULL, *out = NULL; GList *row; int i; static guint32 base[] = {1, 3, 6, 1, 6, 3, 18, 1, 1, 1, 0}; *snmpCommunityEntry = NULL; gnet_snmp_attr_get(s, &in, base, 11, 10, snmpCommunityEntry_attr, mask); out = gnet_snmp_sync_table(s, in); /* gnet_snmp_varbind_list_free(in); */ if (out) { *snmpCommunityEntry = (snmp_community_mib_snmpCommunityEntry_t **) g_malloc0((g_list_length(out) + 1) * sizeof(snmp_community_mib_snmpCommunityEntry_t *)); for (row = out, i = 0; row; row = g_list_next(row), i++) { (*snmpCommunityEntry)[i] = assign_snmpCommunityEntry(row->data); } } } void snmp_community_mib_get_snmpCommunityEntry(GNetSnmp *s, snmp_community_mib_snmpCommunityEntry_t **snmpCommunityEntry, guchar *snmpCommunityIndex, guint16 _snmpCommunityIndexLength, gint64 mask) { GList *in = NULL, *out = NULL; guint32 base[128]; gint8 len; memcpy(base, snmpCommunityEntry_oid, sizeof(snmpCommunityEntry_oid)); len = pack_snmpCommunityEntry(base, snmpCommunityIndex, _snmpCommunityIndexLength); if (len < 0) { g_warning("%s: invalid index values", "snmpCommunityEntry"); s->error_status = GNET_SNMP_PDU_ERR_INTERNAL; return; } *snmpCommunityEntry = NULL; gnet_snmp_attr_get(s, &in, base, len, 10, snmpCommunityEntry_attr, mask); out = gnet_snmp_sync_get(s, in); g_list_foreach(in, (GFunc) gnet_snmp_varbind_delete, NULL); g_list_free(in); if (out) { if (s->error_status != GNET_SNMP_PDU_ERR_NOERROR) { g_list_foreach(out, (GFunc) gnet_snmp_varbind_delete, NULL); g_list_free(out); return; } *snmpCommunityEntry = assign_snmpCommunityEntry(out); } } void snmp_community_mib_set_snmpCommunityEntry(GNetSnmp *s, snmp_community_mib_snmpCommunityEntry_t *snmpCommunityEntry, gint64 mask) { GList *in = NULL, *out = NULL; guint32 base[128]; gint8 len; memcpy(base, snmpCommunityEntry_oid, sizeof(snmpCommunityEntry_oid)); len = pack_snmpCommunityEntry(base, snmpCommunityEntry->snmpCommunityIndex, snmpCommunityEntry->_snmpCommunityIndexLength); if (len < 0) { g_warning("%s: invalid index values", "snmpCommunityEntry"); s->error_status = GNET_SNMP_PDU_ERR_INTERNAL; return; } gnet_snmp_attr_set(s, &in, base, len, 10, snmpCommunityEntry_attr, mask, snmpCommunityEntry); out = gnet_snmp_sync_set(s, in); g_list_foreach(in, (GFunc) gnet_snmp_varbind_delete, NULL); g_list_free(in); if (out) { g_list_foreach(out, (GFunc) gnet_snmp_varbind_delete, NULL); g_list_free(out); } } void snmp_community_mib_free_snmpCommunityEntry(snmp_community_mib_snmpCommunityEntry_t *snmpCommunityEntry) { GList *vbl; char *p; if (snmpCommunityEntry) { p = (char *) snmpCommunityEntry + sizeof(snmp_community_mib_snmpCommunityEntry_t); vbl = * (GList **) p; g_list_foreach(vbl, (GFunc) gnet_snmp_varbind_delete, NULL); g_list_free(vbl); g_free(snmpCommunityEntry); } } void snmp_community_mib_free_snmpCommunityTable(snmp_community_mib_snmpCommunityEntry_t **snmpCommunityEntry) { int i; if (snmpCommunityEntry) { for (i = 0; snmpCommunityEntry[i]; i++) { snmp_community_mib_free_snmpCommunityEntry(snmpCommunityEntry[i]); } g_free(snmpCommunityEntry); } } snmp_community_mib_snmpTargetAddrExtEntry_t * snmp_community_mib_new_snmpTargetAddrExtEntry() { snmp_community_mib_snmpTargetAddrExtEntry_t *snmpTargetAddrExtEntry; snmpTargetAddrExtEntry = (snmp_community_mib_snmpTargetAddrExtEntry_t *) g_malloc0(sizeof(snmp_community_mib_snmpTargetAddrExtEntry_t) + sizeof(gpointer)); return snmpTargetAddrExtEntry; } static inline int unpack_snmpTargetAddrExtEntry(GNetSnmpVarBind *vb, snmp_community_mib_snmpTargetAddrExtEntry_t *snmpTargetAddrExtEntry) { guint8 idx = 11; guint16 i, len; if (vb->oid_len < idx) return -1; len = vb->oid_len - idx; if (len < 1 || len > 32) return -1; if (vb->oid_len < idx + len) return -1; for (i = 0; i < len; i++) { snmpTargetAddrExtEntry->snmpTargetAddrName[i] = vb->oid[idx++]; } snmpTargetAddrExtEntry->_snmpTargetAddrNameLength = len; if (vb->oid_len > idx) return -1; return 0; } static inline gint8 pack_snmpTargetAddrExtEntry(guint32 *base, guchar *snmpTargetAddrName, guint16 _snmpTargetAddrNameLength) { guint8 idx = 11; guint16 i, len; len = _snmpTargetAddrNameLength; if (len < 1 || len > 32) return -1; for (i = 0; i < len; i++) { base[idx++] = snmpTargetAddrName[i]; if (idx >= 128) return -1; } return idx; } static inline snmp_community_mib_snmpTargetAddrExtEntry_t * assign_snmpTargetAddrExtEntry(GList *vbl) { snmp_community_mib_snmpTargetAddrExtEntry_t *snmpTargetAddrExtEntry; char *p; snmpTargetAddrExtEntry = snmp_community_mib_new_snmpTargetAddrExtEntry(); p = (char *) snmpTargetAddrExtEntry + sizeof(snmp_community_mib_snmpTargetAddrExtEntry_t); * (GList **) p = vbl; if (unpack_snmpTargetAddrExtEntry((GNetSnmpVarBind *) vbl->data, snmpTargetAddrExtEntry) < 0) { g_warning("%s: invalid instance identifier", "snmpTargetAddrExtEntry"); g_free(snmpTargetAddrExtEntry); return NULL; } gnet_snmp_attr_assign(vbl, snmpTargetAddrExtEntry_oid, G_N_ELEMENTS(snmpTargetAddrExtEntry_oid), snmpTargetAddrExtEntry_attr, snmpTargetAddrExtEntry); return snmpTargetAddrExtEntry; } void snmp_community_mib_get_snmpTargetAddrExtTable(GNetSnmp *s, snmp_community_mib_snmpTargetAddrExtEntry_t ***snmpTargetAddrExtEntry, gint64 mask) { GList *in = NULL, *out = NULL; GList *row; int i; static guint32 base[] = {1, 3, 6, 1, 6, 3, 18, 1, 2, 1, 0}; *snmpTargetAddrExtEntry = NULL; gnet_snmp_attr_get(s, &in, base, 11, 10, snmpTargetAddrExtEntry_attr, mask); out = gnet_snmp_sync_table(s, in); /* gnet_snmp_varbind_list_free(in); */ if (out) { *snmpTargetAddrExtEntry = (snmp_community_mib_snmpTargetAddrExtEntry_t **) g_malloc0((g_list_length(out) + 1) * sizeof(snmp_community_mib_snmpTargetAddrExtEntry_t *)); for (row = out, i = 0; row; row = g_list_next(row), i++) { (*snmpTargetAddrExtEntry)[i] = assign_snmpTargetAddrExtEntry(row->data); } } } void snmp_community_mib_get_snmpTargetAddrExtEntry(GNetSnmp *s, snmp_community_mib_snmpTargetAddrExtEntry_t **snmpTargetAddrExtEntry, guchar *snmpTargetAddrName, guint16 _snmpTargetAddrNameLength, gint64 mask) { GList *in = NULL, *out = NULL; guint32 base[128]; gint8 len; memcpy(base, snmpTargetAddrExtEntry_oid, sizeof(snmpTargetAddrExtEntry_oid)); len = pack_snmpTargetAddrExtEntry(base, snmpTargetAddrName, _snmpTargetAddrNameLength); if (len < 0) { g_warning("%s: invalid index values", "snmpTargetAddrExtEntry"); s->error_status = GNET_SNMP_PDU_ERR_INTERNAL; return; } *snmpTargetAddrExtEntry = NULL; gnet_snmp_attr_get(s, &in, base, len, 10, snmpTargetAddrExtEntry_attr, mask); out = gnet_snmp_sync_get(s, in); g_list_foreach(in, (GFunc) gnet_snmp_varbind_delete, NULL); g_list_free(in); if (out) { if (s->error_status != GNET_SNMP_PDU_ERR_NOERROR) { g_list_foreach(out, (GFunc) gnet_snmp_varbind_delete, NULL); g_list_free(out); return; } *snmpTargetAddrExtEntry = assign_snmpTargetAddrExtEntry(out); } } void snmp_community_mib_set_snmpTargetAddrExtEntry(GNetSnmp *s, snmp_community_mib_snmpTargetAddrExtEntry_t *snmpTargetAddrExtEntry, gint64 mask) { GList *in = NULL, *out = NULL; guint32 base[128]; gint8 len; memcpy(base, snmpTargetAddrExtEntry_oid, sizeof(snmpTargetAddrExtEntry_oid)); len = pack_snmpTargetAddrExtEntry(base, snmpTargetAddrExtEntry->snmpTargetAddrName, snmpTargetAddrExtEntry->_snmpTargetAddrNameLength); if (len < 0) { g_warning("%s: invalid index values", "snmpTargetAddrExtEntry"); s->error_status = GNET_SNMP_PDU_ERR_INTERNAL; return; } gnet_snmp_attr_set(s, &in, base, len, 10, snmpTargetAddrExtEntry_attr, mask, snmpTargetAddrExtEntry); out = gnet_snmp_sync_set(s, in); g_list_foreach(in, (GFunc) gnet_snmp_varbind_delete, NULL); g_list_free(in); if (out) { g_list_foreach(out, (GFunc) gnet_snmp_varbind_delete, NULL); g_list_free(out); } } void snmp_community_mib_free_snmpTargetAddrExtEntry(snmp_community_mib_snmpTargetAddrExtEntry_t *snmpTargetAddrExtEntry) { GList *vbl; char *p; if (snmpTargetAddrExtEntry) { p = (char *) snmpTargetAddrExtEntry + sizeof(snmp_community_mib_snmpTargetAddrExtEntry_t); vbl = * (GList **) p; g_list_foreach(vbl, (GFunc) gnet_snmp_varbind_delete, NULL); g_list_free(vbl); g_free(snmpTargetAddrExtEntry); } } void snmp_community_mib_free_snmpTargetAddrExtTable(snmp_community_mib_snmpTargetAddrExtEntry_t **snmpTargetAddrExtEntry) { int i; if (snmpTargetAddrExtEntry) { for (i = 0; snmpTargetAddrExtEntry[i]; i++) { snmp_community_mib_free_snmpTargetAddrExtEntry(snmpTargetAddrExtEntry[i]); } g_free(snmpTargetAddrExtEntry); } }