rfc1157.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #
  2. # This file is part of pyasn1-modules software.
  3. #
  4. # Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com>
  5. # License: http://pyasn1.sf.net/license.html
  6. #
  7. # SNMPv1 message syntax
  8. #
  9. # ASN.1 source from:
  10. # http://www.ietf.org/rfc/rfc1157.txt
  11. #
  12. # Sample captures from:
  13. # http://wiki.wireshark.org/SampleCaptures/
  14. #
  15. from pyasn1.type import univ, namedtype, namedval, tag
  16. from pyasn1_modules import rfc1155
  17. class Version(univ.Integer):
  18. namedValues = namedval.NamedValues(
  19. ('version-1', 0)
  20. )
  21. defaultValue = 0
  22. class Community(univ.OctetString):
  23. pass
  24. class RequestID(univ.Integer):
  25. pass
  26. class ErrorStatus(univ.Integer):
  27. namedValues = namedval.NamedValues(
  28. ('noError', 0),
  29. ('tooBig', 1),
  30. ('noSuchName', 2),
  31. ('badValue', 3),
  32. ('readOnly', 4),
  33. ('genErr', 5)
  34. )
  35. class ErrorIndex(univ.Integer):
  36. pass
  37. class VarBind(univ.Sequence):
  38. componentType = namedtype.NamedTypes(
  39. namedtype.NamedType('name', rfc1155.ObjectName()),
  40. namedtype.NamedType('value', rfc1155.ObjectSyntax())
  41. )
  42. class VarBindList(univ.SequenceOf):
  43. componentType = VarBind()
  44. class _RequestBase(univ.Sequence):
  45. componentType = namedtype.NamedTypes(
  46. namedtype.NamedType('request-id', RequestID()),
  47. namedtype.NamedType('error-status', ErrorStatus()),
  48. namedtype.NamedType('error-index', ErrorIndex()),
  49. namedtype.NamedType('variable-bindings', VarBindList())
  50. )
  51. class GetRequestPDU(_RequestBase):
  52. tagSet = _RequestBase.tagSet.tagImplicitly(
  53. tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0)
  54. )
  55. class GetNextRequestPDU(_RequestBase):
  56. tagSet = _RequestBase.tagSet.tagImplicitly(
  57. tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1)
  58. )
  59. class GetResponsePDU(_RequestBase):
  60. tagSet = _RequestBase.tagSet.tagImplicitly(
  61. tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2)
  62. )
  63. class SetRequestPDU(_RequestBase):
  64. tagSet = _RequestBase.tagSet.tagImplicitly(
  65. tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3)
  66. )
  67. class TrapPDU(univ.Sequence):
  68. componentType = namedtype.NamedTypes(
  69. namedtype.NamedType('enterprise', univ.ObjectIdentifier()),
  70. namedtype.NamedType('agent-addr', rfc1155.NetworkAddress()),
  71. namedtype.NamedType('generic-trap', univ.Integer().clone(
  72. namedValues=namedval.NamedValues(('coldStart', 0), ('warmStart', 1), ('linkDown', 2), ('linkUp', 3),
  73. ('authenticationFailure', 4), ('egpNeighborLoss', 5),
  74. ('enterpriseSpecific', 6)))),
  75. namedtype.NamedType('specific-trap', univ.Integer()),
  76. namedtype.NamedType('time-stamp', rfc1155.TimeTicks()),
  77. namedtype.NamedType('variable-bindings', VarBindList())
  78. )
  79. class Pdus(univ.Choice):
  80. componentType = namedtype.NamedTypes(
  81. namedtype.NamedType('get-request', GetRequestPDU()),
  82. namedtype.NamedType('get-next-request', GetNextRequestPDU()),
  83. namedtype.NamedType('get-response', GetResponsePDU()),
  84. namedtype.NamedType('set-request', SetRequestPDU()),
  85. namedtype.NamedType('trap', TrapPDU())
  86. )
  87. class Message(univ.Sequence):
  88. componentType = namedtype.NamedTypes(
  89. namedtype.NamedType('version', Version()),
  90. namedtype.NamedType('community', Community()),
  91. namedtype.NamedType('data', Pdus())
  92. )