CustomMib · Modelo network
Propósito
CustomMib registra archivos MIB ASN.1 subidos manualmente por el usuario para enriquecer el Deep Discovery SNMP de un VendorProfile. Almacena el fuente ASN.1 como backup persistente para recompilar si el contenedor pierde /app/mib_cache/custom/. Flujo: subida → extracción nombre de módulo → compilación pysmi → extracción OIDs → almacenamiento. Los OIDs se pueden clasificar con Gemini Flash via mib_assistant y aplicar a VendorProfile.deep_discovery_oids.
Contrato
Campos:
| Campo | Tipo | Nullable | Default | Descripción |
|---|---|---|---|---|
vendor_profile | FK(VendorProfile, CASCADE) | No | — | Vendor propietario; related_name custom_mibs |
module_name | CharField(100) | No | — | Nombre ASN.1 extraído (VENDOR-AP-MIB) |
original_filename | CharField(255) | No | — | Nombre archivo subido |
source_content | TextField | Blank | "" | Fuente ASN.1 completa (backup) |
file_size | IntegerField | No | 0 | Bytes |
compiled | BooleanField | No | False | Indica compilación exitosa |
compile_error | TextField | Blank | "" | Error si falló |
extracted_oids | JSONField | Blank | [] | [{name, oid, type, access, syntax}] |
uploaded_by | FK(core.User, SET_NULL) | Null | — | Usuario |
uploaded_at | DateTimeField(auto_now_add) | No | — | Timestamp |
organization | FK(core.Organization, CASCADE) | No | — | Tenant (RLS) |
Meta:
- Tabla:
custom_mibs. unique_together:[vendor_profile, module_name].ordering:["-uploaded_at"].
Dependencias entrantes
| Caller | Archivo | Uso |
|---|---|---|
upload_mib | network/api/vendor.py | update_or_create tras compilar pysmi |
list_custom_mibs | network/api/vendor.py | Lista por vendor |
delete_custom_mib | network/api/vendor.py | Elimina + limpia archivos + OIDs |
apply_custom_oids | network/api/vendor.py | Valida antes de añadir OIDs |
mib_assistant_analyze | network/api/vendor.py | Agrega extracted_oids para enviar a Gemini |
TestRLSCustomMibIsolation | tests/test_rls.py | Tests aislamiento multi-tenant |
Dependencias salientes
VendorProfile— FK CASCADE.core.User— FK SET_NULL (uploaded_by).core.Organization— FK CASCADE.mib_manager.compile_local_mib— compila ASN.1 con pysmi (SmiV2Parser,PySnmpCodeGen,PyFileWriter).mib_manager.extract_oids_from_compiled— extrae OIDs del.pycompilado (MibScalar,MibTableColumn).mib_manager.extract_oids_from_source— fallback extracción directa ASN.1.mib_assistant.analyze_mib_oids— envíaextracted_oidsa Gemini Flash (gemini-3-flash-preview).
Ejemplos
# Subir MIB
POST /api/network/vendor-profiles/ubiquiti/upload-mib
Content-Type: multipart/form-data
file=@UBNT-UniFi-MIB.mib
# → CustomMibOut con compiled: true, extracted_oids: [...]
# Aplicar OIDs al vendor
POST /api/network/vendor-profiles/ubiquiti/custom-mibs/3/apply-oids
{"category": "wireless", "oids": [{"name": "unifiVapNumStations", "oid": "1.3.6.1.4.1.41112.1.6.1.2.1.8", "type": "walk"}]}
Límite MAX_DEEP_DISCOVERY_OIDS total por vendor; rechaza si se supera.
Related
entity--network--model--vendorprofile— propietario; recibe OIDs endeep_discovery_oidsymib_modules.concept--network--auto-provision— Deep Discovery consume CustomMib durante descubrimiento SNMP.
Véase también
- [[entity—network—model—vendorprofile]]
- [[concept—network—auto-provision]]