OS-TUNNEL-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE,
    NOTIFICATION-TYPE       FROM SNMPv2-SMI
    DisplayString,
    RowStatus               FROM SNMPv2-TC
    InetAddressType,
    InetAddress             FROM INET-ADDRESS-MIB
    IANAtunnelType          FROM IANAifType-MIB
    nbSwitchG1Il            FROM OS-COMMON-TC-MIB
    MODULE-COMPLIANCE,
    OBJECT-GROUP,
    NOTIFICATION-GROUP      FROM SNMPv2-CONF;


osTunnelMIB MODULE-IDENTITY
    LAST-UPDATED "202004060000Z" -- April 6, 2020
    ORGANIZATION "MRV Communications."
    CONTACT-INFO
            "For technical support, please contact your service channel"
    DESCRIPTION
            "The MIB module for management of IP Tunnels,
            independent of the specific encapsulation scheme in
            use.

            The standard RFC4087 MIB is modified with MRV proprietary 
            additions to support GRE tunnels."

    REVISION     "202004060000Z" -- April 6, 2020
    DESCRIPTION
            "Notifications osTunnelUp and osTunnelDown."

    REVISION     "201702220000Z" -- February 22, 2017
    DESCRIPTION
            "Initial version."

    ::= { nbSwitchG1Il 23 }

-- ************************************************************
-- MIB place Definition
-- ************************************************************

osTunnelNotifications      OBJECT IDENTIFIER ::= { osTunnelMIB 0 }
osTunnelMIBObjects         OBJECT IDENTIFIER ::= { osTunnelMIB 1 }
osTunnel                   OBJECT IDENTIFIER ::= { osTunnelMIBObjects 1 }
osTunnelConformance        OBJECT IDENTIFIER ::= { osTunnelMIB 10 }
osTunnelMIBCompliances     OBJECT IDENTIFIER ::= { osTunnelConformance 1 }
osTunnelMIBGroups          OBJECT IDENTIFIER ::= { osTunnelConformance 2 }


-- MRV IP Tunnel MIB-Group
--
-- a collection of objects providing information about
-- IP Tunnels

osTunnelTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF OsTunnelEntry
    MAX-ACCESS  not-accessible
    STATUS     current
    DESCRIPTION
            "The table containing information on configured
             tunnels."
    ::= { osTunnel 1 }

osTunnelEntry OBJECT-TYPE
    SYNTAX     OsTunnelEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "An entry containing the information on a particular
             configured tunnel."
    INDEX      { osTunnelName }
    ::= { osTunnelTable 1 }

OsTunnelEntry ::= SEQUENCE {
    osTunnelName                DisplayString,
    osTunnelAddressType         InetAddressType,
    osTunnelLocalAddress        InetAddress,
    osTunnelRemoteAddress       InetAddress,
    osTunnelEncapsMethod        IANAtunnelType,
    osTunnelLocation            DisplayString,
    osTunnelDescription         DisplayString,
    osTunnelStatus              RowStatus,
    osTunnelAdminStatus         INTEGER,      
    osTunnelOperStatus          INTEGER       
}

osTunnelName OBJECT-TYPE
    SYNTAX     DisplayString (SIZE (0..20))
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "The tunnel name."
    ::= { osTunnelEntry 1 }

osTunnelAddressType OBJECT-TYPE
    SYNTAX     InetAddressType
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "The address type of the tunnel"
    ::= { osTunnelEntry 2 }

osTunnelLocalAddress OBJECT-TYPE
    SYNTAX     InetAddress
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "The address of the local endpoint of the tunnel, or
            0.0.0.0 (for IPv4) or :: (for IPv6)."
    ::= { osTunnelEntry 3 }

osTunnelRemoteAddress OBJECT-TYPE
    SYNTAX     InetAddress
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "The address of the remote endpoint of the tunnel."
    ::= { osTunnelEntry 4 }

osTunnelEncapsMethod OBJECT-TYPE
    SYNTAX     IANAtunnelType
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The encapsulation method used by the tunnel."
    ::= { osTunnelEntry 5 }

osTunnelLocation OBJECT-TYPE
    SYNTAX     DisplayString (SIZE (0..255))
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "A tunnel location. Should be specified on creation.
            For regular tunnels this field should not be specified.
            For OS-V*-M devices it should be module name (vdsl0, lte0).
            For legacy OS devices it is vlan interface name."
    ::= { osTunnelEntry 6 }

osTunnelDescription OBJECT-TYPE
    SYNTAX     DisplayString (SIZE (0..255))
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "A tunnel description."
    ::= { osTunnelEntry 7 }

osTunnelStatus OBJECT-TYPE
    SYNTAX     RowStatus
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "The status of this row, by which new entries may be
            created, or old entries deleted from this table."
    ::= { osTunnelEntry 8 }

osTunnelAdminStatus OBJECT-TYPE
    SYNTAX  INTEGER {
                up(1), 
                down(2)
            }
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
            "The desired admin state of the tunnel."
    ::= { osTunnelEntry 9 }

osTunnelOperStatus OBJECT-TYPE
    SYNTAX  INTEGER {
                up(1),
                down(2)
            }
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The current operational state of the tunnel."
    ::= { osTunnelEntry 10 }
    

osWanTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF OsWanEntry
    MAX-ACCESS  not-accessible
    STATUS     current
    DESCRIPTION
            "The table containing information on module
             WAN interfaces."
    ::= { osTunnel 2 }

osWanEntry OBJECT-TYPE
    SYNTAX     OsWanEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "An entry containing the information on a particular
             WAN interface."
    INDEX      { osWanModule }
    ::= { osWanTable 1 }

OsWanEntry ::= SEQUENCE {
    osWanModule                DisplayString,
    osWanLocalIpv4Address      InetAddress,
    osWanRemoteIpv4Address     InetAddress,
    osWanIpv4Receive           INTEGER,
    osWanLocalIpv6Address      InetAddress,
    osWanRemoteIpv6Address     InetAddress,
    osWanIpv6Receive           INTEGER
}

osWanModule OBJECT-TYPE
    SYNTAX     DisplayString (SIZE (0..20))
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "The module name (vdsl, lte)."
    ::= { osWanEntry 1 }

osWanLocalIpv4Address OBJECT-TYPE
    SYNTAX     InetAddress
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The local IPv4 address of the WAN interface,
             assigned either by DHCP or manually."
    ::= { osWanEntry 2 }

osWanRemoteIpv4Address OBJECT-TYPE
    SYNTAX     InetAddress
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The remote IPv4 address of GRE tunnel
            learned dynamically."
    ::= { osWanEntry 3 }

osWanIpv4Receive OBJECT-TYPE
    SYNTAX  INTEGER {
                noreceive(0), 
                receive(1)
            }
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The IPv4 GRE packets receive from WAN indication."
    ::= { osWanEntry 4 }

osWanLocalIpv6Address OBJECT-TYPE
    SYNTAX     InetAddress
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The local IPv6 address of the WAN interface,
             assigned either by DHCP or manually."
    ::= { osWanEntry 5 }

osWanRemoteIpv6Address OBJECT-TYPE
    SYNTAX     InetAddress
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The remote IPv6 address of GRE tunnel
            learned dynamically."
    ::= { osWanEntry 6 }

osWanIpv6Receive OBJECT-TYPE
    SYNTAX  INTEGER {
                noreceive(0), 
                receive(1)
            }
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The IPv6 GRE packets receive from WAN indication."
    ::= { osWanEntry 7 }
    
    
-- ******************************************************************
-- NOTIFICATIONS (TRAPS)
-- ******************************************************************

osTunnelUp NOTIFICATION-TYPE
    OBJECTS     {
                  osTunnelDescription
                }
    STATUS      current
    DESCRIPTION
       "This notification is generated when Tunnel became UP, i.e. osTunnelOperStatus=up(1)."
    ::= { osTunnelNotifications 1 }

osTunnelDown NOTIFICATION-TYPE
    OBJECTS     {
                  osTunnelDescription
                }
    STATUS      current
    DESCRIPTION
       "This notification is generated when Tunnel became DOWN, i.e. osTunnelOperStatus=dowm(2)."
    ::= { osTunnelNotifications 2 }
    
-- *******************************************************************
--  Conformance Information 
-- ******************************************************************* 

osTunnelMIBCompliance MODULE-COMPLIANCE
    STATUS current
    DESCRIPTION
        "The core compliance statement for all the implementations." 

    MODULE -- this module 
        MANDATORY-GROUPS { osTunnelMandatoryGroup,
                           osWanMandatoryGroup,
                           osTunnelNotificationsGroup
                         }

    ::= { osTunnelMIBCompliances 1 }
        
-- ...................................................................
-- Conformance Groups 
-- ................................................................... 
 
osTunnelMandatoryGroup  OBJECT-GROUP
    OBJECTS { 
      osTunnelAddressType,
      osTunnelLocalAddress, 
      osTunnelRemoteAddress, 
      osTunnelEncapsMethod, 
      osTunnelLocation, 
      osTunnelDescription, 
      osTunnelStatus,
      osTunnelAdminStatus, 
      osTunnelOperStatus
    }
    STATUS current 
    DESCRIPTION 
        "."
    ::= { osTunnelMIBGroups 1 }

osWanMandatoryGroup  OBJECT-GROUP
    OBJECTS { 
      osWanLocalIpv4Address,
      osWanRemoteIpv4Address,
      osWanIpv4Receive,
      osWanLocalIpv6Address,
      osWanRemoteIpv6Address,
      osWanIpv6Receive
    }
    STATUS current 
    DESCRIPTION 
        "."
    ::= { osTunnelMIBGroups 2 }

-- ...................................................................
--  NOTIFICATION-GROUP
-- ................................................................... 
osTunnelNotificationsGroup  NOTIFICATION-GROUP
    NOTIFICATIONS  { 
      osTunnelUp,
      osTunnelDown
    }
    STATUS current 
    DESCRIPTION 
        "The notification which are required to be supported by implementations 
        of this MIB. "
    ::= { osTunnelMIBGroups 3 }

END