1# 2# This file is part of pysnmp software. 3# 4# Copyright (c) 2005-2019, Ilya Etingof <etingof@gmail.com> 5# License: http://snmplabs.com/pysnmp/license.html 6# 7# THESE FUNCTIONS ARE OBSOLETE AND MUST NOT BE USED! 8# USE pysnmp.entity.rfc3413.oneliner.mibvar INSTEAD 9# 10from pyasn1.type import univ 11from pysnmp.smi.error import NoSuchObjectError 12 13 14# Name 15 16def mibNameToOid(mibView, name): 17 if isinstance(name[0], tuple): 18 f = lambda x='', y='': (x, y) 19 modName, symName = f(*name[0]) 20 if modName: # load module if needed 21 mibView.mibBuilder.loadModules(modName) 22 else: 23 mibView.mibBuilder.loadModules() # load all (slow) 24 if symName: 25 oid, label, suffix = mibView.getNodeNameByDesc(symName, modName) 26 else: 27 oid, label, suffix = mibView.getFirstNodeName(modName) 28 suffix = name[1:] 29 modName, symName, _s = mibView.getNodeLocation(oid) 30 mibNode, = mibView.mibBuilder.importSymbols( 31 modName, symName 32 ) 33 if hasattr(mibNode, 'createTest'): # table column XXX 34 modName, symName, _s = mibView.getNodeLocation(oid[:-1]) 35 rowNode, = mibView.mibBuilder.importSymbols(modName, symName) 36 return oid, rowNode.getInstIdFromIndices(*suffix) 37 else: # scalar or incomplete spec 38 return oid, suffix 39 elif not isinstance(name, tuple): 40 name = tuple(univ.ObjectIdentifier(name)) 41 42 oid, label, suffix = mibView.getNodeNameByOid(name) 43 44 return oid, suffix 45 46 47__scalarSuffix = (univ.Integer(0),) 48 49 50def oidToMibName(mibView, oid): 51 if not isinstance(oid, tuple): 52 oid = tuple(univ.ObjectIdentifier(oid)) 53 _oid, label, suffix = mibView.getNodeNameByOid(oid) 54 modName, symName, __suffix = mibView.getNodeLocation(_oid) 55 mibNode, = mibView.mibBuilder.importSymbols( 56 modName, symName 57 ) 58 if hasattr(mibNode, 'createTest'): # table column 59 __modName, __symName, __s = mibView.getNodeLocation(_oid[:-1]) 60 rowNode, = mibView.mibBuilder.importSymbols(__modName, __symName) 61 return (symName, modName), rowNode.getIndicesFromInstId(suffix) 62 elif not suffix: # scalar 63 return (symName, modName), suffix 64 elif suffix == (0,): # scalar 65 return (symName, modName), __scalarSuffix 66 else: 67 raise NoSuchObjectError( 68 str='No MIB registered that defines %s object, closest known parent is %s (%s::%s)' % ( 69 univ.ObjectIdentifier(oid), univ.ObjectIdentifier(mibNode.name), modName, symName) 70 ) 71 72 73# Value 74 75def cloneFromMibValue(mibView, modName, symName, value): 76 mibNode, = mibView.mibBuilder.importSymbols( 77 modName, symName 78 ) 79 if hasattr(mibNode, 'syntax'): # scalar 80 return mibNode.syntax.clone(value) 81 else: 82 return # identifier 83