]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
* fixed two wrong data types
authorHeiko Gerstung <gerstung@ntp.org>
Fri, 5 Dec 2008 10:13:33 +0000 (11:13 +0100)
committerHeiko Gerstung <gerstung@ntp.org>
Fri, 5 Dec 2008 10:13:33 +0000 (11:13 +0100)
* fixed wrong OID definitions
* added preliminaray and unofficial MIB for TESTING PURPOSES ONLY

bk: 4938fecd4kBTHbmvrWmGJv6eBOxs6g

ntpsnmpd/ntpSnmpSubagentObject.c
ntpsnmpd/ntpv4-mib.mib [new file with mode: 0644]

index b4ead8834428733a0e0f53df28b6011d184a2457..3a5815a457e45edba69fbb2e737b543b89b2fdda 100644 (file)
@@ -383,8 +383,7 @@ int get_ntpEntSoftwareVersionVal (netsnmp_mib_handler *handler,
                                netsnmp_agent_request_info *reqinfo,
                                netsnmp_request_info *requests)
 {
-
-    int i = 0;
+   unsigned int i = 0;
    switch (reqinfo->mode) {
    case MODE_GET:
    {
@@ -392,13 +391,13 @@ int get_ntpEntSoftwareVersionVal (netsnmp_mib_handler *handler,
     if ( read_ntp_value("versionval", ntpvalue, NTPQ_BUFLEN) )
     {
        i=atoi(ntpvalue);
-       snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
+       snmp_set_var_typed_value(requests->requestvb, ASN_UNSIGNED,
                              (u_char *) &i,
                              sizeof (i)
                             );
     } else {
        i = 0;
-       snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
+       snmp_set_var_typed_value(requests->requestvb, ASN_UNSIGNED,
                              (u_char *) &i,
                              sizeof(i)
                             );
@@ -536,7 +535,7 @@ int get_ntpEntTimeResolutionVal (netsnmp_mib_handler *handler,
                                netsnmp_request_info *requests)
 {
 
-    int i = 0;
+   unsigned int i = 0;
    switch (reqinfo->mode) {
    case MODE_GET:
    {
@@ -544,13 +543,13 @@ int get_ntpEntTimeResolutionVal (netsnmp_mib_handler *handler,
     if ( read_ntp_value("resolutionval", ntpvalue, NTPQ_BUFLEN) )
     {
        i=atoi(ntpvalue);
-       snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
+       snmp_set_var_typed_value(requests->requestvb, ASN_UNSIGNED,
                              (u_char *) &i,
                              sizeof (i)
                             );
     } else {
        i = 0;
-       snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
+       snmp_set_var_typed_value(requests->requestvb, ASN_UNSIGNED,
                              (u_char *) &i,
                              sizeof(i)
                             );
@@ -691,16 +690,16 @@ init_ntpSnmpSubagentObject(void)
        
     /* Register all MIB objects with the agentx master */
        
-  _SETUP_OID_RO( ntpEntSoftwareName ,                  NTPV4_OID , 1, 1, 0  );
-  _SETUP_OID_RO( ntpEntSoftwareVersion ,       NTPV4_OID , 1, 2, 0  );
-  _SETUP_OID_RO( ntpEntSoftwareVersionVal ,    NTPV4_OID , 1, 3, 0  );
-  _SETUP_OID_RO( ntpEntSoftwareVendor ,        NTPV4_OID , 1, 4, 0  );
-  _SETUP_OID_RO( ntpEntSystemType ,            NTPV4_OID , 1, 5, 0  );
-  _SETUP_OID_RO( ntpEntTimeResolution ,        NTPV4_OID , 1, 6, 0  );
-  _SETUP_OID_RO( ntpEntTimeResolutionVal ,     NTPV4_OID , 1, 7, 0  );
-  _SETUP_OID_RO( ntpEntTimePrecision ,         NTPV4_OID , 1, 8, 0  );
-  _SETUP_OID_RO( ntpEntTimePrecisionVal ,      NTPV4_OID , 1, 9, 0  );
-  _SETUP_OID_RO( ntpEntTimeDistance ,                  NTPV4_OID , 1,10, 0  );
+  _SETUP_OID_RO( ntpEntSoftwareName ,          NTPV4_OID , 1, 1, 1, 0  );
+  _SETUP_OID_RO( ntpEntSoftwareVersion ,       NTPV4_OID , 1, 1, 2, 0  );
+  _SETUP_OID_RO( ntpEntSoftwareVersionVal ,    NTPV4_OID , 1, 1, 3, 0  );
+  _SETUP_OID_RO( ntpEntSoftwareVendor ,        NTPV4_OID , 1, 1, 4, 0  );
+  _SETUP_OID_RO( ntpEntSystemType ,            NTPV4_OID , 1, 1, 5, 0  );
+  _SETUP_OID_RO( ntpEntTimeResolution ,        NTPV4_OID , 1, 1, 6, 0  );
+  _SETUP_OID_RO( ntpEntTimeResolutionVal ,     NTPV4_OID , 1, 1, 7, 0  );
+  _SETUP_OID_RO( ntpEntTimePrecision ,         NTPV4_OID , 1, 1, 8, 0  );
+  _SETUP_OID_RO( ntpEntTimePrecisionVal ,      NTPV4_OID , 1, 1, 9, 0  );
+  _SETUP_OID_RO( ntpEntTimeDistance ,          NTPV4_OID , 1, 1,10, 0  );
 
 }
 
diff --git a/ntpsnmpd/ntpv4-mib.mib b/ntpsnmpd/ntpv4-mib.mib
new file mode 100644 (file)
index 0000000..68e877a
--- /dev/null
@@ -0,0 +1,1005 @@
+-- *********************************************************************
+--
+--$Id: draft-ietf-ntp-ntpv4-mib-05.xml 1.12 2007/11/28 00:00:00Z chelliot $
+--$Name: SUBMIT_1 $
+--
+--    The Network Time Protocol Version 4
+--    Management Information Base (MIB)
+--
+--    Authors: Heiko Gerstung (heiko.gerstung@meinberg.de)
+--             Chris Elliott (chelliot@cisco.com)
+--
+--    for the Internet Engineering Task Force (IETF)
+--    NTP Working Group (ntpwg)
+--
+--
+-- *********************************************************************
+--
+--  $Log: draft-ietf-ntp-ntpv4-mib-05.xml $
+--  Revision 1.14  2008/08/29 00:00:00Z heiko
+--  Re-submitted after expiration:
+--    - The working group agreed to forward this draft in its current form (04),
+--       but it expired before that could be done
+--  Revision 1.13  2008/02/25 00:00:00Z chelliot
+--  MIB:
+--    - Added statistics table on a per-packet mode basis
+--      (ntpEntStatPktModeTable)
+--  Revision 1.12  2007/11/28 00:00:00Z chelliot
+--  MIB:
+--    - Added protocol statistics at the entity and association level
+--  XML/RFC:
+--    - Changed a couple of instances of "instance" to "entity" and "srv"
+--      to "ent".
+--    - Changed Meinberg address and Heiko's phone number.
+--  Revision 1.11  2007/07/23 00:00:00Z chelliot
+--  MIB:
+--    - Modified Contact Info
+--    - Added Stratum and NTP time TCs
+--    - Changed ntpEntNotifNotInSync to ntpEntNotifCurrentMode and
+--      deleted ntpEntNotifEntityStarted and ntpEntNotifEntityStopped
+--    - Added compliance for SNTP entities
+--    - Changed ntpTime to ntpDateTime
+--  Revision 1.10  2007/07/09 00:00:00Z chelliot
+--  XML/RFC:
+--    - Changed RFC to Internet
+--    - Changed service and service instance* to entity/entities
+--    - Revised the Security Considerations to include read-write object
+--      security considerations
+--    - Added Chris Elliott as an author
+--    - Fixed several lines to be 72 characters long or less
+--  MIB:
+--    - Changed "service" and "service instance" to "entity",
+--      and Srv to Ent
+--    - Changed status to mode
+--    - Added association status object
+--    - Added leap second objects
+--  Revision 1.9  2007/03/04 06:59:44Z  chelliot
+--  MIB:
+--    - Added time objects, comments, changed notifications
+--    - Changed server to service
+--  Revision 1.8  2006/10/23 03:37:44Z  chelliot
+--  MIB:
+--    - Changed various object types, added notification control object
+--  Revision 1.7  2006/06/16 07:13:50Z  heiko
+--  XML/RFC:
+--    - Added/changed comments about the to-be-done IANA SMI assignment
+--  Revision 1.6  2006/06/16 07:04:43Z  heiko
+--  RFC/XML:
+--    - phone number corrected
+--    - removed unused references
+--  MIB:
+--    - added ntpSrvTimePrecision
+--    - changed INTEGER objects to Integer32
+--    - changed default value for ntpSrvStatusStratum from 99 to 16
+--    - changed default value for ntpSrvStatusActiveRefclockId from 99-0
+--    - changed object names to ntpSrvStatusActiveRefSourceName
+--      (from ntpSrvStatusActiveRefclockName) and to
+--      ntpSrvStatusNumberOfRefSources (from
+--      ntpSrvStatusNumberOfRefclocks)
+--    - removed ntpSrvStatusAuthKeyId object
+--    - added ntpSrvStatusDispersion to provide the current root
+--      dispersion
+--    - major rework of section 3 (Status of associations) to compile
+--      cleanly,including:
+--      - added dispersion to the association dataset
+--      - renaming of objects
+--      - added an index to the association table
+--      - formal changes
+--    - traps are now reverse mappable
+--    - traps are now define with payload where applicable
+--    - added compliance statements
+--  Revision 1.5  2006/02/27 08:28:16Z  heiko
+--    - changed to RFC format and added header as well as
+--      introduction and technical description
+--    - added other necessary RFC components (copyright statement etc.)
+--  Revision 1.4  2006/02/27 07:06:49Z  heiko
+--    - removed all objects with data type REAL
+--    - everything that needs to be floating point is now defined as
+--      DisplayString
+--  Revision 1.2  2006/01/23 08:58:11Z  heiko
+--    - changed the datatype of offset, jitter and delay objects from
+--      Integer32 to REAL
+--
+-- *********************************************************************
+
+NTPv4-MIB DEFINITIONS ::= BEGIN
+
+
+IMPORTS
+    MODULE-IDENTITY, OBJECT-TYPE , enterprises, mib-2, Integer32, NOTIFICATION-TYPE,
+    Unsigned32, Counter32
+        FROM SNMPv2-SMI
+    MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
+        FROM SNMPv2-CONF
+    DisplayString, TEXTUAL-CONVENTION
+        FROM SNMPv2-TC
+    InetAddressType, InetAddress
+        FROM INET-ADDRESS-MIB;
+
+ntpSnmpMIB MODULE-IDENTITY
+    LAST-UPDATED "200802250000Z" -- February 25, 2008
+
+    ORGANIZATION "The IETF NTP Working Group (ntpwg)"
+    CONTACT-INFO
+            "     WG Email: ntpwg@lists.ntp.isc.org
+                  Subscribe:
+                   https://lists.ntp.isc.org/mailman/listinfo/ntpwg
+
+                  Heiko Gerstung
+                  Meinberg Funkuhren Gmbh & Co. KG
+                  Lange Wand 9
+                  Bad Pyrmont  31812
+                  Germany
+
+                  Phone: +49 5281 9309 25
+                  Email: heiko.gerstung@meinberg.de
+
+                  Chris Elliott
+                  Cisco Systems, Inc.
+                  7025 Kit Creek Rd., P.O. Box 14987
+                  Research Triangle Park  27709
+                  USA
+
+                  Phone: +1 919-392-2146
+                  Email: chelliot@cisco.com"
+     DESCRIPTION
+        "The Management Information Base for NTP time entities."
+    REVISION     "200802250000Z"
+    DESCRIPTION
+        "Added ntpEntStatPktModeTable"
+    REVISION     "200711280000Z"
+    DESCRIPTION
+        "Multiple proposed changes for IETF 70"
+    REVISION     "200707230000Z"
+    DESCRIPTION
+        "Multiple proposed changes for IETF 69"
+    REVISION     "200707090000Z"
+    DESCRIPTION
+        "Multiple changes from IETF 68"
+    REVISION     "200703040000Z"
+    DESCRIPTION
+        "More MIB review modifications."
+    REVISION     "200610230000Z"
+    DESCRIPTION
+        "Modifications from MIB review."
+    REVISION     "200606190000Z"
+    DESCRIPTION
+        "First Draft Version"
+    REVISION     "200512190000Z"
+    DESCRIPTION
+        "revised edition (added traps and stuff)"
+    REVISION     "200511160000Z"
+    DESCRIPTION
+        "Initial draft"
+    ::= { enterprises 5597 99 }
+
+
+ntpSnmpMIBObjects  OBJECT IDENTIFIER ::= { ntpSnmpMIB 1 }
+
+-- MIB contains 6 groups
+
+ntpEntInfo         OBJECT IDENTIFIER ::= { ntpSnmpMIBObjects 1 }
+ntpEntStatus       OBJECT IDENTIFIER ::= { ntpSnmpMIBObjects 2 }
+ntpAssociation     OBJECT IDENTIFIER ::= { ntpSnmpMIBObjects 3 }
+ntpEntControl      OBJECT IDENTIFIER ::= { ntpSnmpMIBObjects 4 }
+ntpEntNotifObjects OBJECT IDENTIFIER ::= { ntpSnmpMIBObjects 5 }
+ntpEntNotifPrefix  OBJECT IDENTIFIER ::= { ntpSnmpMIBObjects 6 }
+
+--
+-- Textual Conventions
+--
+
+NtpStratum ::= TEXTUAL-CONVENTION
+    DISPLAY-HINT "d"
+    STATUS      current
+    DESCRIPTION
+        "The NTP stratum, with 16 representing no stratum."
+    SYNTAX      Unsigned32 (1..16)
+
+NtpDateTime ::= TEXTUAL-CONVENTION
+    DISPLAY-HINT "4d:4d:4d.4d"
+    STATUS      current
+    DESCRIPTION
+        "NTP date/time on the device, in 128-bit
+         NTP date format. Ref: draft-ietf-ntp-ntpv4-proto-06,
+         section 6:
+          It includes a 64-bit signed seconds field
+          spanning 584 billion years and a 64-bit fraction
+          field resolving .05 attosecond (i.e. 0.5e-18).
+          For convenience in mapping between formats, the
+          seconds field is divided into a 32-bit era field
+          and a 32-bit timestamp field.
+
+         If time is not syncronized this field shall be a
+         zero-length string.
+
+         This TC is not to be used for objects that are used
+         to set the time of the node querying this object.
+         NTP should be used for this--or at least SNTP."
+    SYNTAX      OCTET STRING (SIZE (0 | 16))
+
+--
+-- Section 1: General NTP Entity information objects
+--            (relatively static information)
+--
+
+ntpEntSoftwareName OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The product name of the installed NTP version."
+    -- the product name of the running ntp implementation, e.g. "ntpd"
+    ::= { ntpEntInfo  1 }
+
+ntpEntSoftwareVersion OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The software version of the installed NTP implementation."
+    -- full version string, e.g. "ntpd-4.2.0b@1.1433 ..."
+    ::= { ntpEntInfo  2 }
+
+ntpEntSoftwareVersionVal OBJECT-TYPE
+    SYNTAX      Unsigned32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "Software version of installed NTP as an unsigned integer
+         value."
+    -- e.g. if version string is "4.2.0b" this could be translated into
+    --  4202. This could be useful to find out if version of entity on a
+    --  is newer or older than version of the entity on b (without too
+    --  much string parsing trouble)
+    ::= { ntpEntInfo 3 }
+
+ntpEntSoftwareVendor OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The vendor/author of the installed NTP version."
+    ::= { ntpEntInfo  4 }
+
+ntpEntSystemType OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "General hardware/os platform information."
+    -- e.g. "Linux 2.6.12 / x86"
+    -- freely configurable, default is OS Version / Hardware platform
+    ::= { ntpEntInfo  5 }
+
+ntpEntTimeResolution OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "A string describing the time resolution of the running NTP
+         implementation."
+    -- e.g. "100 ns"
+    -- depends on the NTP implementation and the underlying OS. The
+    --  current resolution should be used, so if the OS only supports
+    --  10ms and ntpd is capable of 1ns, the 10ms should be advertised
+    ::= { ntpEntInfo  6 }
+
+ntpEntTimeResolutionVal OBJECT-TYPE
+    SYNTAX      Unsigned32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The time resolution in integer format."
+    -- ntpEntTimeResolution in Integer format
+    -- shows the resolution based on 1 second, e.g. "1ms" translates to
+    --  1000
+    ::= { ntpEntInfo  7 }
+
+ntpEntTimePrecision OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "A string describing the precision with which the NTP entity
+         implementation/OS manages its time base."
+    -- e.g. "-18" means 2^-18 = 0.000003814697265625 seconds
+    --      "-5" means 2^-5 = 0.03125 seconds
+    -- depends on the NTP implementation and the underlying OS.
+    ::= { ntpEntInfo  8 }
+
+ntpEntTimePrecisionVal OBJECT-TYPE
+    SYNTAX      Integer32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The entity's precision in integer format."
+    -- ntpEntTimePrecision in signed Integer format
+    -- shows the precision. A value of -5 would mean 2^-5 = 31.25 ms
+    ::= { ntpEntInfo  9 }
+
+ntpEntTimeDistance OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The distance from this NTP entity to the root time reference
+        (stratum 0) source."
+    -- including the unit
+    -- e.g. "13.243 ms"
+    ::= { ntpEntInfo  10 }
+
+--
+-- Section 2: Current NTP status (dynamic information)
+--
+
+ntpEntStatusCurrentMode OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The actual mode of NTP as a string"
+    --- possible strings:
+    --- "not running" : NTP is not running
+    --- "not synchronized" : NTP is not synchronized to any time source
+    ---   (stratum = 16)
+    --- "none configured" : NTP is not synchronized and does not have a
+    ---                     server configured
+    ---   (stratum = 16)
+    --- "sync to local" : NTP is synchronized to own local clock
+    ---   (degraded reliability)
+    --- "sync to refclock" : NTP is synchronized to a local hardware
+    ---   refclock (e.g. GPS)
+    --- "sync to remote server" : NTP is synchronized to a remote NTP
+    ---   server ("upstream" server)
+    --- "unknown" : The state of NTP is unknown.
+    ::= { ntpEntStatus 1 }
+
+ntpEntStatusCurrentModeVal OBJECT-TYPE
+    SYNTAX      INTEGER {
+                            notRunning(1),
+                            notSynchronized(2),
+                            noneConfigured(3),
+                            syncToLocal(4),
+                            syncToRefclock(5),
+                            syncToRemoteServer(6),
+                            unknown(99)
+                        }
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The current mode of the NTP as integer value."
+    -- see ntpEntStatusCurrentMode
+    DEFVAL { 99 }
+    ::= { ntpEntStatus 2 }
+
+ntpEntStatusStratum OBJECT-TYPE
+    SYNTAX      NtpStratum
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The NTP entity's own stratum value."
+    -- should be stratum of syspeer + 1 (or 16 if no syspeer)
+    DEFVAL { 16 }
+    ::= { ntpEntStatus 3 }
+
+ntpEntStatusActiveRefSourceId OBJECT-TYPE
+    SYNTAX      Unsigned32 ( 0..99999 )
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The association ID of the current syspeer."
+    DEFVAL { 0 }
+    ::= { ntpEntStatus 4 }
+
+ntpEntStatusActiveRefSourceName OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The hostname/descriptive name of the current reference source
+         selected as syspeer."
+    -- e.g. "ntp1.ptb.de" or "GPS" or "DCFi" ...
+    -- maybe something like "RefClk(8)"="hardware clock using driver 8"
+    -- would be nice
+    ::= { ntpEntStatus 5 }
+
+ntpEntStatusActiveOffset OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The Time offset to the current selected reference time source
+         as a string."
+    -- including unit, e.g. "0.032 ms" or "1.232 s"
+    ::= { ntpEntStatus 6 }
+
+ntpEntStatusNumberOfRefSources OBJECT-TYPE
+    SYNTAX      Unsigned32 (0..99)
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The number of reference sources configured for NTP."
+    DEFVAL { 0 }
+    ::= { ntpEntStatus 7 }
+
+ntpEntStatusDispersion OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The root dispersion of the running NTP entity."
+    -- e.g. "6.927"
+    DEFVAL { "n/a" }
+    ::= { ntpEntStatus 8 }
+
+ntpEntStatusEntityUptime OBJECT-TYPE
+    SYNTAX      Unsigned32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The uptime of the NTP entity in seconds."
+    -- time since ntpd was (re-)started (not sysUptime!)
+    DEFVAL { 0 }
+    ::= { ntpEntStatus 9 }
+
+ntpEntStatusDateTime OBJECT-TYPE
+    SYNTAX      NtpDateTime
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The current NTP date/time on the device, in 128-bit
+         NTP date format. Ref: draft-ietf-ntp-ntpv4-proto-06,
+         section 6:
+          It includes a 64-bit signed seconds field
+          spanning 584 billion years and a 64-bit fraction
+          field resolving .05 attosecond (i.e. 0.5e-18).
+          For convenience in mapping between formats, the
+          seconds field is divided into a 32-bit era field
+          and a 32-bit timestamp field.
+
+         If time is not syncronized this field shall be a
+         zero-length string.
+
+         This object can be used to timestamp events on this
+         node and allow a management station to coorelate
+         different time objects. For example, a management
+         station could query this object and sysUpTime in
+         the same operation to be able to relate sysUpTime
+         to NTP time.
+
+         This object is not to be used to set the time of
+         the node querying this object. NTP should be used
+         for this--or at least SNTP."
+    ::= { ntpEntStatus 10 }
+
+ntpEntStatusLeapSecond OBJECT-TYPE
+    SYNTAX      Integer32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "Date the next known leap second will occur. If there is
+         no leap second announced then this object should be 0."
+    DEFVAL { 0 }
+    ::= { ntpEntStatus 11 }
+
+ntpEntStatusLeapSecDirection OBJECT-TYPE
+    SYNTAX      Integer32 (-1..1)
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "Direction of next known leap second. If there is no
+         leap second announced then this object should be 0."
+    DEFVAL { 0 }
+    ::= { ntpEntStatus 12 }
+
+ntpEntStatusInPkts OBJECT-TYPE
+    SYNTAX      Counter32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The total number of NTP messages delivered to the
+         NTP entity from the transport service."
+    ::= { ntpEntStatus 13 }
+
+ntpEntStatusOutPkts OBJECT-TYPE
+    SYNTAX      Counter32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The total number of NTP messages delivered to the
+         transport service by this NTP entity."
+    ::= { ntpEntStatus 14 }
+
+ntpEntStatusBadVersion OBJECT-TYPE
+    SYNTAX      Counter32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The total number of NTP messages which were delivered
+         to this NTP entity and were for an unsupported NTP
+         version."
+    ::= { ntpEntStatus 15 }
+
+ntpEntStatusProtocolError OBJECT-TYPE
+    SYNTAX      Counter32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The total number of NTP messages which were delivered
+         to this NTP entity and this entity was not able to
+         process due to an NTP protocol error."
+    ::= { ntpEntStatus 16 }
+
+ntpEntStatusNotifications OBJECT-TYPE
+    SYNTAX      Counter32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The total number of SNMP notifications which this NTP
+         entity has generated."
+    ::= { ntpEntStatus 17 }
+
+ntpEntStatPktModeTable OBJECT-TYPE
+    SYNTAX           SEQUENCE OF NtpEntStatPktModeEntry
+    MAX-ACCESS       not-accessible
+    STATUS           current
+    DESCRIPTION
+        "The number of packets sent and received by packet mode."
+    ::= { ntpEntStatus 18 }
+
+ntpEntStatPktModeEntry OBJECT-TYPE
+    SYNTAX      NtpEntStatPktModeEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+        "The number of packets sent and received by packet mode."
+    INDEX       { ntpEntStatPktMode }
+    ::= { ntpEntStatPktModeTable 1 }
+
+NtpEntStatPktModeEntry   ::= SEQUENCE {
+        ntpEntStatPktMode              INTEGER,
+        ntpEntStatPktSent              Counter32,
+        ntpEntStatPktReceived          Counter32
+}
+
+ntpEntStatPktMode OBJECT-TYPE
+    SYNTAX      INTEGER {
+                    symetricactive(1),
+                    symetricpassive(2),
+                    client(3),
+                    server(4),
+                    broadcastserver(5),
+                    broadcastclient(6)
+                }
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+        "The NTP packet mode."
+    ::= { ntpEntStatPktModeEntry 1 }
+
+ntpEntStatPktSent OBJECT-TYPE
+    SYNTAX      Counter32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The number of NTP packets sent with this packet mode."
+    ::= { ntpEntStatPktModeEntry 2 }
+
+ntpEntStatPktReceived OBJECT-TYPE
+    SYNTAX      Counter32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The number of NTP packets received with this packet mode."
+    ::= { ntpEntStatPktModeEntry 3 }
+
+--
+-- Section 3: The status of all currently mobilized associations
+--
+
+ntpAssociationTable OBJECT-TYPE
+    SYNTAX           SEQUENCE OF NtpAssociationEntry
+    MAX-ACCESS       not-accessible
+    STATUS           current
+    DESCRIPTION
+        "The table of currently mobilized associations."
+    ::= { ntpAssociation 1 }
+
+ntpAssociationEntry OBJECT-TYPE
+    SYNTAX      NtpAssociationEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+        "The table entry of currently mobilized associations."
+    INDEX       { ntpAssocId }
+    ::= { ntpAssociationTable 1 }
+
+NtpAssociationEntry   ::= SEQUENCE {
+        ntpAssocId                  Unsigned32,
+        ntpAssocName                DisplayString,
+        ntpAssocRefId               DisplayString,
+        ntpAssocAddressType         InetAddressType,
+        ntpAssocAddress             InetAddress,
+        ntpAssocOffset              DisplayString,
+        ntpAssocStratum             NtpStratum,
+        ntpAssocStatusJitter        DisplayString,
+        ntpAssocStatusDelay         DisplayString,
+        ntpAssocStatusDispersion    DisplayString
+}
+
+ntpAssocId      OBJECT-TYPE
+    SYNTAX      Unsigned32 ( 1..99999 )
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+        "The association ID. This is an internal, unique ID."
+    ::= { ntpAssociationEntry 1 }
+
+ntpAssocName    OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The hostname or other descriptive name for the association."
+    ::= { ntpAssociationEntry 2 }
+
+ntpAssocRefId   OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The refclock driver ID, if available."
+    -- a refclock driver ID like "127.127.1.0" for non
+    -- uni/multi/broadcast associations
+    ::= { ntpAssociationEntry 3 }
+
+ntpAssocAddressType OBJECT-TYPE
+    SYNTAX      InetAddressType
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The type of address of the association."
+    -- contains the type of address for uni/multi/broadcast associations
+    ::= { ntpAssociationEntry 4 }
+
+ntpAssocAddress OBJECT-TYPE
+    SYNTAX      InetAddress
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The IP address (IPv4 or IPv6) of the association."
+    -- contains IP address of uni/multi/broadcast associations
+    ::= { ntpAssociationEntry 5 }
+
+ntpAssocOffset  OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The time offset to the association as a string."
+    -- including unit, e.g. "0.032 ms" or "1.232 s"
+    ::= { ntpAssociationEntry 6 }
+
+ntpAssocStratum OBJECT-TYPE
+    SYNTAX      NtpStratum
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The association stratum value."
+    ::= { ntpAssociationEntry 7 }
+
+ntpAssocStatusJitter OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The jitter in miliseconds as a string."
+    ::= { ntpAssociationEntry 8 }
+
+ntpAssocStatusDelay OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The network delay in miliseconds as a string."
+    ::= { ntpAssociationEntry 9 }
+
+ntpAssocStatusDispersion OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The root dispersion of the association."
+    -- e.g. "6.927"
+    ::= { ntpAssociationEntry 10 }
+
+ntpAssociationStatisticsTable OBJECT-TYPE
+    SYNTAX           SEQUENCE OF NtpAssociationStatisticsEntry
+    MAX-ACCESS       not-accessible
+    STATUS           current
+    DESCRIPTION
+        "The table of statistics for current associations."
+    ::= { ntpAssociation 2 }
+
+ntpAssociationStatisticsEntry OBJECT-TYPE
+    SYNTAX      NtpAssociationStatisticsEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+        "The table entry of statistics for current associations."
+    INDEX       { ntpAssocId }
+    ::= { ntpAssociationStatisticsTable 1 }
+
+NtpAssociationStatisticsEntry   ::= SEQUENCE {
+        ntpAssocStatInPkts          Counter32,
+        ntpAssocStatOutPkts         Counter32,
+        ntpAssocStatProtocolError   Counter32
+}
+
+ntpAssocStatInPkts OBJECT-TYPE
+    SYNTAX      Counter32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The total number of NTP messages delivered to the
+         NTP entity from this association."
+    ::= { ntpAssociationStatisticsEntry 1 }
+
+ntpAssocStatOutPkts OBJECT-TYPE
+    SYNTAX      Counter32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The total number of NTP messages delivered to the
+         transport service by this NTP entity for this
+         association."
+    ::= { ntpAssociationStatisticsEntry 2 }
+
+ntpAssocStatProtocolError OBJECT-TYPE
+    SYNTAX      Counter32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "The total number of NTP messages which were delivered
+         to this NTP entity from this association and this entity
+         was not able to process due to an NTP protocol error."
+    ::= { ntpAssociationStatisticsEntry 3 }
+
+--
+-- Section 4: Control objects
+--
+
+ntpEntHeartbeatInterval OBJECT-TYPE
+    SYNTAX      Unsigned32
+    MAX-ACCESS  read-write
+    STATUS      current
+    DESCRIPTION
+        "The interval at which the ntpEntNotifHeartbeat notification
+         should be sent, in seconds. If set to 0 and the
+         entNotifHeartbeat bit in ntpEntNotifBits is 1 then
+         ntpEntNotifHeartbeat is sent once."
+    DEFVAL { 60 }
+    ::= { ntpEntControl 1 }
+
+ntpEntNotifBits OBJECT-TYPE
+    SYNTAX       BITS {
+                     notUsed(0), -- Used to sync up bit and notification
+                                 -- indices
+                     entNotifModeChange(1),
+                     entNotifStratumChange(2),
+                     entNotifSyspeerChanged(3),
+                     entNotifAddAssociation(4),
+                     entNotifRemoveAssociation(5),
+                     entNotifConfigChanged(6),
+                     entNotifLeapSecondAnnounced(7),
+                     entNotifHeartbeat(8)
+    }
+    MAX-ACCESS  read-write
+    STATUS      current
+    DESCRIPTION
+        "A bit for each notification. A 1 for a particular bit enables
+         that particular notification, a 0 disables it."
+    ::= { ntpEntControl 2 }
+
+--
+-- Section 5: Notification objects
+--
+
+ntpEntNotifMessage OBJECT-TYPE
+    SYNTAX      DisplayString
+    MAX-ACCESS  accessible-for-notify
+    STATUS      current
+    DESCRIPTION
+        "Used as a payload object for all notifications. Holds a clear
+         text event message."
+    DEFVAL { "no event" }
+    ::= { ntpEntNotifObjects 1 }
+
+--
+-- SNMP notification definitions
+--
+
+ntpEntNotifications OBJECT IDENTIFIER ::= { ntpEntNotifPrefix 0 }
+
+ntpEntNotifModeChange NOTIFICATION-TYPE
+    OBJECTS     { ntpEntStatusCurrentModeVal }
+    STATUS      current
+    DESCRIPTION
+        "The notification to be sent when the NTP entity changes mode,
+         including starting and stopping (if possible)"
+    ::= { ntpEntNotifications 1 }
+
+ntpEntNotifStratumChange NOTIFICATION-TYPE
+    OBJECTS     { ntpEntStatusDateTime, ntpEntStatusStratum,
+                  ntpEntNotifMessage }
+    STATUS      current
+    DESCRIPTION
+        "The notification to be sent when stratum level of NTP changes."
+    ::= { ntpEntNotifications 2 }
+
+ntpEntNotifSyspeerChanged NOTIFICATION-TYPE
+    OBJECTS     { ntpEntStatusDateTime, ntpEntStatusActiveRefSourceId,
+                  ntpEntNotifMessage }
+    STATUS      current
+    DESCRIPTION
+        "The notification to be sent when a (new) syspeer has been
+         selected."
+    ::= { ntpEntNotifications 3 }
+
+ntpEntNotifAddAssociation NOTIFICATION-TYPE
+    OBJECTS     { ntpEntStatusDateTime, ntpAssocName, ntpEntNotifMessage }
+    STATUS      current
+    DESCRIPTION
+        "The notification to be sent when a new association is
+         mobilized."
+    ::= { ntpEntNotifications 4 }
+
+ntpEntNotifRemoveAssociation NOTIFICATION-TYPE
+    OBJECTS     { ntpEntStatusDateTime, ntpAssocName,  ntpEntNotifMessage }
+    STATUS      current
+    DESCRIPTION
+        "The notification to be sent when an association is
+         demobilized."
+    ::= { ntpEntNotifications 5 }
+
+ntpEntNotifConfigChanged NOTIFICATION-TYPE
+    OBJECTS     { ntpEntStatusDateTime, ntpEntNotifMessage }
+    STATUS      current
+    DESCRIPTION
+        "The notification to be sent when the NTP configuration has
+         changed."
+    -- e.g. when the system connected to the internet and was assigned
+    -- a new IP address by the ISPs DHCP server
+    ::= { ntpEntNotifications 6 }
+
+ntpEntNotifLeapSecondAnnounced NOTIFICATION-TYPE
+    OBJECTS     { ntpEntStatusDateTime, ntpEntNotifMessage }
+    STATUS      current
+    DESCRIPTION
+        "The notification to be sent when a leap second has been
+         announced."
+    ::= { ntpEntNotifications 7 }
+
+ntpEntNotifHeartbeat NOTIFICATION-TYPE
+    OBJECTS     { ntpEntStatusDateTime, ntpEntStatusCurrentModeVal,
+                  ntpEntHeartbeatInterval, ntpEntNotifMessage }
+    STATUS      current
+    DESCRIPTION
+        "The notification to be sent periodically (as defined by
+         ntpEntHeartbeatInterval) to indicate that the NTP entity is
+         still alive."
+    ::= { ntpEntNotifications 8 }
+
+--
+-- Conformance/Compliance statements
+--
+
+ntpEntConformance OBJECT IDENTIFIER ::= { ntpSnmpMIB 6 }
+
+ntpEntCompliances OBJECT IDENTIFIER ::= { ntpEntConformance 1 }
+ntpEntGroups      OBJECT IDENTIFIER ::= { ntpEntConformance 2 }
+
+ntpEntNTPCompliance MODULE-COMPLIANCE
+    STATUS      current
+    DESCRIPTION
+        "The compliance statement for SNMP entities which use NTP and
+         implement the NTP MIB"
+    MODULE  -- this module
+        MANDATORY-GROUPS {
+                           ntpEntObjectsGroup1,
+                           ntpEntObjectsGroup2,
+                           ntpEntNotifPrefixGroup
+        }
+        ::= { ntpEntCompliances 1 }
+
+ntpEntSNTPCompliance MODULE-COMPLIANCE
+    STATUS      current
+    DESCRIPTION
+        "The compliance statement for SNMP entities which use SNTP and
+         implement the NTP MIB"
+    MODULE  -- this module
+        MANDATORY-GROUPS {
+                           ntpEntObjectsGroup1
+        }
+        ::= { ntpEntCompliances 2 }
+
+ntpEntObjectsGroup1 OBJECT-GROUP
+    OBJECTS {
+              ntpEntSoftwareName,
+              ntpEntSoftwareVersion,
+              ntpEntSoftwareVersionVal,
+              ntpEntSoftwareVendor,
+              ntpEntSystemType,
+              ntpEntStatusEntityUptime,
+              ntpEntStatusDateTime,
+              ntpAssocName,
+              ntpAssocRefId,
+              ntpAssocAddressType,
+              ntpAssocAddress
+    }
+    STATUS      current
+    DESCRIPTION
+        "A collection of objects for the NTP MIB that all NTP
+         or SNTP entities should implement."
+    ::= { ntpEntGroups 1 }
+
+ntpEntObjectsGroup2 OBJECT-GROUP
+    OBJECTS {
+              ntpEntTimeResolution,
+              ntpEntTimeResolutionVal,
+              ntpEntTimePrecision,
+              ntpEntTimePrecisionVal,
+              ntpEntTimeDistance,
+              ntpEntStatusCurrentMode,
+              ntpEntStatusCurrentModeVal,
+              ntpEntStatusStratum,
+              ntpEntStatusActiveRefSourceId,
+              ntpEntStatusActiveRefSourceName,
+              ntpEntStatusActiveOffset,
+              ntpEntStatusNumberOfRefSources,
+              ntpEntStatusDispersion,
+              ntpEntStatusLeapSecond,
+              ntpEntStatusLeapSecDirection,
+              ntpEntStatusInPkts,
+              ntpEntStatusOutPkts,
+              ntpEntStatusBadVersion,
+              ntpEntStatusProtocolError,
+              ntpEntStatusNotifications,
+              ntpEntStatPktSent,
+              ntpEntStatPktReceived,
+              ntpAssocOffset,
+              ntpAssocStratum,
+              ntpAssocStatusJitter,
+              ntpAssocStatusDelay,
+              ntpAssocStatusDispersion,
+              ntpAssocStatInPkts,
+              ntpAssocStatOutPkts,
+              ntpAssocStatProtocolError,
+              ntpEntHeartbeatInterval,
+              ntpEntNotifBits,
+              ntpEntNotifMessage
+    }
+    STATUS      current
+    DESCRIPTION
+        "A collection of objects for the NTP MIB that are optional
+         for NTP or SNTP entities to implement."
+    ::= { ntpEntGroups 2 }
+
+ntpEntNotifPrefixGroup NOTIFICATION-GROUP
+    NOTIFICATIONS {
+                    ntpEntNotifModeChange,
+                    ntpEntNotifStratumChange,
+                    ntpEntNotifSyspeerChanged,
+                    ntpEntNotifAddAssociation,
+                    ntpEntNotifRemoveAssociation,
+                    ntpEntNotifConfigChanged,
+                    ntpEntNotifLeapSecondAnnounced,
+                    ntpEntNotifHeartbeat
+    }
+    STATUS      current
+    DESCRIPTION
+        "A collection of notifications for the NTP MIB"
+    ::= { ntpEntGroups 3 }
+
+END