Internet DRAFT - draft-groom-vpn-tunnel

draft-groom-vpn-tunnel



Problem Statement                                               P.Groom
Internet-Draft                                         October 24, 2003
Expires: April 24, 2004


         VPN Performance Measurements - an open model based proposal
                     draft-groom-vpn-tunnel-00.txt


Status of this Memo


   This document is an Internet-Draft and is in full conformance with
   all provisions of Section 10 of RFC2026.


   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF), its areas, and its working groups. Note that other
   groups may also distribute working documents as Internet-Drafts.


   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time. It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."


   The list of current Internet-Drafts can be accessed at http://
   www.ietf.org/ietf/1id-abstracts.txt.


   The list of Internet-Draft Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html.


   This Internet-Draft will expire on July 9, 2004.


Copyright Notice


   Copyright (C) The Internet Society (2004). All Rights Reserved.


I.      ABSTRACT


This document discusses a proposed solution for measuring the performance of a 
VPN tunnel, in terms of latency, packet loss and availability, using a 
standards based methodology. Although various vendors have provided methods of 
measuring VPN performance, all of them use either proprietary protocols or 
bespoke software. This paper proposes a standards based solution that can be 
easily integrated into an NMS (Network Management System).



II.     INTRODUCTION


Currently, the management of a VPN terminating device (VTD) is well 
understood, using a mixture of SNMP (Simple Network Management Protocol) and 
proprietary vendor protocols. For example, several vendors provide SNMP MIBs 
(Management Information Bases) that can be used to interrogate their VTDs, in 
order to check the availability status of a particular VPN tunnel. [1][2] 
Whilst such an approach does provide availability monitoring (fault 
management), there is no open standard to measure metrics such as packet loss 
or latency through a VPN tunnel. Figure 1 shows the current architecture.



    +-------------------+                  +-------------------+
    |                   |                  |                   |
    | +---------------+ |                  | +---------------+ |
App.| |VPN Terminating| |  +------------+  | |VPN Terminating| |App.
----+-| Device (VTD)  |-+--| VPN tunnel |--+-| Device (VTD)  |-+----
Flow| +---------------+ |  +------------+  | +---------------+ |Flow
    |                   |                  |                   |
    |     Sphere of     |                  |     Sphere of     |
    |    Management     |                  |    Management     |
    +-------------------+                  +-------------------+
              |
              |
              |
      +---------------+
      |   Network     |
      |  Management   |
      |   Station     |
      |    (NMS)      |
      +---------------+



Figure1
Current VPN network management architecture



III.    How do vendors remedy this problem?


There are three typical methods used by vendors, to remedy this problem, those 
being:


¸       Use of Netflow data [3]
¸       Use of other proprietary management protocols [4]
¸       Use of custom crafted packets and bespoke software [5]


The use of proprietary Netflow data can provide session information through a 
particular VPN tunnel but this does not provide information on latency or 
packet loss. The other two types of solution can provide latency and 
packetloss information but are by their very nature, closed systems.



IV.     Proposed solution


The proposed solution is intended to be an add-on to the IPSec protocol 
described in RFCs 2402, 2406, 2408 and 2409 [6][7][8][9] and will therefore 
provide an open standard that will be available to all VPN vendors to 
implement as an option. Clearly, in cases where there are different vendors at 
each end of a VPN tunnel, both must support the option for it to be effective.
In a nutshell, this solution proposes the use of special keepalive packets 
that can be generated by just one or both VTDs, sent down the VPN tunnel to 
the remote VTD and returned to the initiating VTD. The initiating VTD tracks 
the response packet and calculates the RTT (Round Trip Time). If the response 
packet does not appear within a timeout period then the packet is assumed to 
be lost. This provides the packet loss figures for the VPN tunnel under test.



0 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                              SPI                              |
|                                                               |
+---------------------------------------------------------------+
|                                                               |
|                        Sequence Number                        |
|                                                               |
+---------------------------------------------------------------+
|                                                               |
|  Payload containing an incremental counter (variable length)  |
|                                                               |
+---------------------------------------------------------------+
|                                                               |
|                   Padding (variable length)                   |
|                                                               |
+---------------+---------------+-------------------------------+
|               |               |                               |
|    Length     |  Next Header  |Authentication Data (variable  |
|               |               |          length               |
+---------------+---------------+-------------------------------+



Figure 2
Initiating keepalive packet format


Figures 2 and 3 show the formats for the special packets used by this 
solution.



0 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                              SPI                              |
|                                                               |
+---------------------------------------------------------------+
|                                                               |
|                        Sequence Number                        |
|                                                               |
+---------------------------------------------------------------+
|                                                               |
|    Payload containing the same incremental counter as the     |
|             initiating packet (variable length)               |
|                                                               |
+---------------------------------------------------------------+
|                                                               |
|                   Padding (variable length)                   |
|                                                               |
+---------------+---------------+-------------------------------+
|               |               |                               |
|    Length     |  Next Header  |Authentication Data (variable  |
|               |               |          length               |
+---------------+---------------+-------------------------------+



Figure 3
Return response packet format


The theory behind the packet formats is that in effect the return response 
packet mirrors the initiating keepalive packet, since the payload is a 64 bit 
number which is an up counter starting at zero. This method allows for missing 
packets to be detected, as well as packets being received out of sequence. 
Figure 4, on the next page, shows the relationship between initiator and 
responder across the VPN tunnel. It also shows performance information being 
collected in both directions.



                 +------+------+------------+-+-+--+ Response packet
        <------  |      |      |            | | |  | from B towards A
                 +------+------+------------+-+-+--+


              Initiating packet +--+-+-+------------+------+------+
            from A towards B  |  | | |            |      |      |  ------>
                                +--+-+-+------------+------+------+


      +---------------+                      +---------------+
App.  |VPN Terminating|    +------------+    |VPN Terminating|App.
------| Device (VTD)  |----| VPN tunnel |----| Device (VTD)  |----
Flow  |       A       |    +------------+    |       B       |Flow
        +---------------+                      +---------------+


                 +------+------+------------+-+-+--+ Initiating packet
        <------  |      |      |            | | |  | from B towards A
                 +------+------+------------+-+-+--+


              Response packet   +--+-+-+------------+------+------+
            from A towards B  |  | | |            |      |      |  ------>
                                +--+-+-+------------+------+------+



Figure 4
Communication steps between initiator and responder


The logic is that the initiating VTD retains the performance information and 
via its configuration, can opt to collect performance data on a single, some 
or all of its VPN tunnels.  All of this performance is available via a SNMP 
MIB entry which can be queried by the NMS, once the necessary SNMP MIB has 
been loaded into it. If there is no desire for SNMP traffic to traverse the 
VPN tunnel then only the local VTD needs to be configured, whereas for traffic 
in both directions, both VTDs need configuring and SNMP traffic will traverse 
the VPN tunnel.
The last value of RTT will be stored in the MIB and used for comparison.Should 
three (by default, although this is configurable) successive response packets 
not arrive at the initiating VTD then an alarm can be generated, either on the 
console, via a syslog message or as a SNMP trap. The same methods can be 
employed should the RTT values exceed a configured threshold (by default, set 
to two seconds). Furthermore, a 'cancellation of threshold exceeded' alarm can 
be generated when three successive RTTs drop below the threshold. 
Additionally, the MIB can provide SNMP trap capabilities so that alerts can be 
generated whenever the number of lost response packets exceeds a set 
threshold. Figure 5, on the next page, shows the proposed architecture.



    +----------------------------------------------------------+
    |                                                          |
    | +---------------+                      +---------------+ |
App.| |VPN Terminating|    +------------+    |VPN Terminating| |App.
----+-| Device (VTD)  |----| VPN tunnel |----| Device (VTD)  |-+----
Flow| +---------------+    +------------+    +---------------+ |Flow
    |                                                          |
    |                                                          |
    |                   Sphere of Management                   |
    +----------------------------------------------------------+
             |
             |
             |
    +---------------+
    |   Network     |
    |  Management   |
    |   Station     |
    |    (NMS)      |
    +---------------+



Figure 5
Proposed network management architecture



IV.     SNMP MIBs and Agent


Figure 6, below, shows the MIB that can provide the monitoring of the SNMP 
agents on the VTDs. It is expected that the VTDs will need to incorporate 
additional functionality in order to provide the information to support these 
MIBs.


VPN-PERFORMANCE-MIB DEFINITIONS ::= BEGIN


IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, TimeTicks, Integer32, mib-2, IpAddress, 
Counter32, NOTIFICATION-TYPE FROM SNMPv2-SMI
    MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP FROM SNMPv2-CONF
    DisplayString FROM SNMPv2-TC;


vpnPerformanceMIB MODULE-IDENTITY
    LAST-UPDATED "200309151900Z" -- 15 September 2003
    ORGANIZATION "Credit Suisse First Boston"
    CONTACT-INFO
            " Peter Groom
              Credit Suisse First Boston
              One Cabot Square
              London
              United Kingdom
              Email: peter.groom@csfb.com"
    DESCRIPTION
            "The MIB module for performance management of VPN tunnels."
    REVISION     "200309151900Z" -- 15 September 2003
    DESCRIPTION
            "Initial version, yet to be published as a RFC."
    ::= { mib-2 XXX } -- To be assigned by IANA.
                             -- Request to assign same number as LMP
                             -- ifType.


vpnPerformanceMIBObjects OBJECT IDENTIFIER ::= { vpnPerformanceMIB 1 }


vpnPerformanceTrapNotifications OBJECT IDENTIFIER ::= { 
vpnPerformanceMIBObjects 0 }


vpnPerformance      OBJECT IDENTIFIER ::= { vpnPerformanceMIBObjects 1 }


vpnPerformanceTRAP  OBJECT IDENTIFIER ::= { vpnPerformanceMIBObjects 2 }


-- the VPN Performance MIB-Group
--
-- a collection of objects providing performance information about
-- VPN tunnels


vpnPerformanceIfTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF VpnPerformanceIfEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "The table containing line entries for each VPN tunnel."
    ::= { vpnPerformance 1 }


vpnPerformanceIfEntry OBJECT-TYPE
    SYNTAX     VpnPerformanceIfEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "A line entry containing information about a particular
            configured tunnel."
    INDEX      { vpnPerformanceIndex }
    ::= { vpnPerformanceIfTable 1 }


VpnPerformanceIfEntry ::= SEQUENCE {
    vpnPerformanceIndex                         Integer32,
    vpnPerformanceIfLocalAddress                IpAddress,
    vpnPerformanceIfRemoteAddress               IpAddress,
    vpnPerformanceIfPollPeriod                  TimeTicks,
    vpnPerformanceIfHighThreshold               TimeTicks,
    vpnPerformanceIfLostPackets                 Counter32,
    vpnPerformanceIfRearmThreshold              TimeTicks,
    vpnPerformanceIfHolddownThreshold           TimeTicks,
    vpnPerformanceIfLastRoundTripTime           TimeTicks
}


vpnPerformanceIndex OBJECT-TYPE
    SYNTAX     Integer32 (1..2147483647)
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "A unique value for each table entry."
    ::= { vpnPerformanceIfEntry 1 }


vpnPerformanceIfLocalAddress OBJECT-TYPE
    SYNTAX     IpAddress
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The address of the local VPN tunnel endpoint."
    ::= { vpnPerformanceIfEntry 2 }


vpnPerformanceIfRemoteAddress OBJECT-TYPE
    SYNTAX     IpAddress
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The address of the remote VPN tunnel endpoint."
    ::= { vpnPerformanceIfEntry 3 }


vpnPerformanceIfPollPeriod OBJECT-TYPE
    SYNTAX     TimeTicks
    UNITS      "1/100th Seconds"
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
            "The time period used to send performance packets
            to the remote end of the VPN tunnel."
    ::= { vpnPerformanceIfEntry 4 }


vpnPerformanceIfHighThreshold OBJECT-TYPE
    SYNTAX     TimeTicks
    UNITS      "1/100th Seconds"
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
            "The time threshold used to compare round trip
            values against."
    ::= { vpnPerformanceIfEntry 5 }


vpnPerformanceIfLostPackets OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The counting threshold used to compare the number
            of lost packet values against."
    ::= { vpnPerformanceIfEntry 6 }


vpnPerformanceIfRearmThreshold OBJECT-TYPE
    SYNTAX     TimeTicks
    UNITS      "1/100th Seconds"
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
            "The rearm threshold used to compare successive
            alarm values against."
    ::= { vpnPerformanceIfEntry 7 }


vpnPerformanceIfHolddownThreshold OBJECT-TYPE
    SYNTAX     TimeTicks
    UNITS      "1/100th Seconds"
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
            "The holddown threshold used to compare successive
            alarm values against."
    ::= { vpnPerformanceIfEntry 8 }


vpnPerformanceIfLastRoundTripTime OBJECT-TYPE
    SYNTAX     TimeTicks
    UNITS      "1/100th Seconds"
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
            "The last round trip value collected."
    ::= { vpnPerformanceIfEntry 9 }


-- the VPN Performance TRAP-Group
--
-- a collection of objects generating snmp traps based on performance
-- information about VPN tunnels


vpnPerformanceTrapTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF VpnPerformanceTrapEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "The agent's table containing the alarm information."
    ::= { vpnPerformanceTRAP 1 }


vpnPerformanceTrapEntry OBJECT-TYPE
    SYNTAX     VpnPerformanceTrapEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "Information about the last trap generated by the agent.
            There is always one entry in this table, indexed by the
            integer value 1."
    INDEX      { vpnPerformanceTrapIndex }
    ::= { vpnPerformanceTrapTable 1 }


VpnPerformanceTrapEntry ::= SEQUENCE {
    VpnPerformanceTrapIndex             Integer32,
    vpnPerformanceTrapSequence          Counter32,
    vpnPerformanceTrapText              DisplayString,
    vpnPerformanceTrapPriority          Integer32,
    vpnPerformanceTrapTime              Counter32,
    vpnPerformanceTrapSuspect           IpAddress
}


vpnPerformanceTrapIndex OBJECT-TYPE
    SYNTAX     Integer32 (1..2147483647)
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "A unique value for each table entry."
    ::= { vpnPerformanceTrapEntry 1 }


vpnPerformanceTrapSequence OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "A counter of the number of alarms generated since
            the agent for last initialised."
    ::= { vpnPerformanceTrapEntry 2 }


vpnPerformanceTrapText OBJECT-TYPE
    SYNTAX     DisplayString
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
            "Trap text to make the alarm obvious."
    ::= { vpnPerformanceTrapEntry 3 }


vpnPerformanceTrapPriority OBJECT-TYPE
    SYNTAX     Integer32 (1..255)
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The priority level as set on the agent for this
            type of trap."
    ::= { vpnPerformanceTrapEntry 4 }


vpnPerformanceTrapTime OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The time that the condition or event occurred which
            generated the alarm. The value is given in seconds
            since 00:00:00 Greenwich Mean Time (GMT) January 1,
            1970."
    ::= { vpnPerformanceTrapEntry 5 }


vpnPerformanceTrapSuspect OBJECT-TYPE
    SYNTAX     IpAddress
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "An ASCII string describing the host which caused the
            alarm."
    ::= { vpnPerformanceTrapEntry 6 }


vpnPerformanceTrapLostPackets NOTIFICATION-TYPE
    OBJECTS    {        vpnPerformanceTrapSequence,
                        vpnPerformanceTrapText,
                        vpnPerformanceTrapPriority,
                        vpnPerformanceTrapTime,
                        vpnPerformanceTrapSuspect
}
    STATUS     current
    DESCRIPTION
            "The agent has detected the number of lost packets has
            exceeded a threshold."
    ::= { vpnPerformanceTrapNotifications 1 }


vpnPerformanceTrapLostPacketsOk NOTIFICATION-TYPE
    OBJECTS    {        vpnPerformanceTrapSequence,
                        vpnPerformanceTrapText,
                        vpnPerformanceTrapPriority,
                        vpnPerformanceTrapTime,
                        vpnPerformanceTrapSuspect
}
    STATUS     current
    DESCRIPTION
            "The agent has detected the number of lost packets has
            dropped below a threshold."
    ::= { vpnPerformanceTrapNotifications 2 }


vpnPerformanceNotificationsGroup NOTIFICATION-GROUP
    NOTIFICATIONS {     vpnPerformanceTrapLostPackets,
                        vpnPerformanceTrapLostPacketsOk
}
    STATUS     current
    DESCRIPTION
            "Generic VPN Performance Notifications."
    ::= { vpnPerformanceTrapNotifications 3 }


-- Conformance information


vpnPerformanceConformance OBJECT IDENTIFIER ::= { vpnPerformanceMIB 2 }


vpnPerformanceTrapConformance OBJECT IDENTIFIER ::= { vpnPerformanceMIB 3 }


vpnPerformanceCompliances OBJECT IDENTIFIER ::= { vpnPerformanceConformance 1 }


vpnPerformanceGroups OBJECT IDENTIFIER ::= { vpnPerformanceConformance 2 }


vpnPerformanceTrapCompliances OBJECT IDENTIFIER ::= { 
vpnPerformanceTrapConformance 1 }


vpnPerformanceTrapGroups OBJECT IDENTIFIER ::= { 
vpnPerformanceTrapConformance 2 }


-- Compliance statement


vpnPerformanceCompliance MODULE-COMPLIANCE
    STATUS     current
    DESCRIPTION
            "The compliance statement for SNMPv2 entities which
            implement the VPN performance module."
    MODULE     -- this module
    MANDATORY-GROUPS    { vpnPerformanceGroup } ::= { 
vpnPerformanceCompliances 1 }


vpnPerformanceTrapCompliance MODULE-COMPLIANCE
    STATUS     current
    DESCRIPTION
            "The compliance statement for SNMPv2 entities which
            implement the VPN performance trap module."
    MODULE     -- this module
    MANDATORY-GROUPS    { vpnPerformanceTrapGroup } ::= { 
vpnPerformanceTrapCompliances 1 }


-- Units of Conformance


vpnPerformanceGroup OBJECT-GROUP
    OBJECTS  {          vpnPerformanceIfLocalAddress,
                        vpnPerformanceIfRemoteAddress,
                        vpnPerformanceIfPollPeriod,
                        vpnPerformanceIfHighThreshold,
                        vpnPerformanceIfLostPackets,
                        vpnPerformanceIfRearmThreshold,
                        vpnPerformanceIfHolddownThreshold,
                        vpnPerformanceIfLastRoundTripTime
}
    STATUS     current
    DESCRIPTION
            "The vpnPerformance group of objects providing for the
            management of VPN performance metrics."
    ::= { vpnPerformanceGroups 1 }


vpnPerformanceTrapGroup OBJECT-GROUP
    OBJECTS  {          vpnPerformanceTrapSequence,
                        vpnPerformanceTrapText,
                        vpnPerformanceTrapPriority,
                        vpnPerformanceTrapTime,
                        vpnPerformanceTrapSuspect
}
    STATUS     current
    DESCRIPTION
            "The vpnPerformance group of objects providing for the
            management of VPN performance traps."
    ::= { vpnPerformanceTrapGroups 1 }


END


Figure 6
MIB to support SNMP queries and traps


The MIB tree from the above MIB is shown below in Figure 7.


+-mib-2
  |
  +-vpnPerformanceMIB(xxx)
    |
    +-vpnPerformanceMIBObjects(1)
    | |
    | +-vpnPerformanceTrapNotifications(0)
    | | |
    | | +-vpnPerformanceTrapLostPackets(1)
    | | +-vpnPerformanceTrapLostPacketsOk(2)
    | | +-vpnPerformanceNotificationsGroup(3)
    | |
    | +-vpnPerformance(1)
    | | |
    | | +-vpnPerformanceIfTable(1)
    | |   |
    | |   +-vpnPerformanceIfEntry(1)
    | |     |
    | |     +-vpnPerformanceIndex(1)
    | |     +-vpnPerformanceIfLocalAddress(2)
    | |     +-vpnPerformanceIfRemoteAddress(3)
    | |     +-vpnPerformanceIfPollPeriod(4)
    | |     +-vpnPerformanceIfHighThreshold(5)
    | |     +-vpnPerformanceIfLostPackets(6)
    | |     +-vpnPerformanceIfRearmThreshold(7)
    | |     +-vpnPerformanceIfHolddownThreshold(8)
    | |     +-vpnPerformanceIfLastRoundTripTime(9)
    | |
    | +-vpnPerformanceTRAP(2)
    |   |
    |   +-vpnPerformanceTrapTable(2)
    |     |
    |     +-vpnPerformanceTrapIndex(1)
    |       |
    |       +-vpnPerformanceTrapSequence(2)
    |       +-vpnPerformanceTrapText(3)
    |       +-vpnPerformanceTrapPriority(4)
    |       +-vpnPerformanceTrapTime(5)
    |       +-vpnPerformanceTrapSuspect(6)    
    |
    +-vpnPerformanceConformance(2)
    | |
    | +-vpnPerformanceCompliances(1)
    | | |
    | | +-vpnPerformanceCompliance(1)
    | |
    | +-vpnPerformanceGroups(2)
    |   |
    |   +-vpnPerformanceGroup(1)
    | 
    +-vpnPerformanceTrapConformance(3)
      |
      +-vpnPerformanceTrapCompliances(1)
      | |
      | +-vpnPerformanceTrapCompliance(1)
      |
      +-vpnPerformanceTrapGroups(2)
        |
        +-vpnPerformanceTrapGroup(1)



Figure 7
MIB tree for the VPN-PERFORMANCE-MIB.



It is expected that the configuration of the VTD will allow the lost packet 
threshold, RTT threshold and the polling period to be set on a per VPN tunnel 
basis. The relationship between the threshold, polling period and SNMP traps 
is shown below in Figure 8.



     Occurrence
          ^              +---+                 +---+            +---+
    Alert |              |   |                 |   |            |   |
          |              |   |                 |   |            |   |
          |              |   |                 |   |            |   |
          |              |   |                 |   |            |   |
          |              |   |                 |   |            |   |
          |              |   |                 |   |            |   |
No Alert +--------------+---+-----------------+---+------------+---+----->
                                                      SNMP alerts over time


                         A            B        C        D       E
                         |   Re-arm   |        |Holddown|       |
   Round Trip Time       |   Period   |        | Period |       |
          ^              |<---------->|        |<------>|       |
   Packet |
  lost or +-----/--------\------------/-------------------------\---------
 too late |    /          \          /                           \
threshold |   /            \        /                             \
          |  /              \______/                               \
          | /                                                       \_____
          |/
          |
          |
        0 +--------------------------------------------------------------->
          0     2     4     6     8     10    12    14    16    18    20
                                                        Responses over time


Figure 8
The relationship between RTTs and SNMP alerts


In Figure 8, point A describes the point where three successive keepalives 
have either not returned or arrived too late. At this point, a SNMP trap is 
sent to the NMS. Following the alert, either a re-arm period or a hold-down 
period is counted. Following point A, response packets begin arriving within 
the required timeframe so a re-arm timer is used (until point B). After point 
B, the counters are reset and some time later, at point C, a further alert is 
generated. However, after point C, there are still no response packets so the 
hold-down timer is used. The hold-down timer can be considerably longer than 
the re-arm timer in order to minimize the number of unnecessary alerts. After 
the hold-down timer has expired, at point D, the counters are reset and 
finally, at point E, the last alert is generated.



VI.     Security Considerations


Since the proposed protocol is, by it's very nature, performance information 
gathering any information gained from unauthorised access to it us unlikely to 
be critical in nature. It is, therefore, proposed that that the security for 
this implementation be covered by the standard access controls in place to 
limit SNMP access to VTDs.



VII.    Conclusions


This paper discusses an open standard methodology for capturing and reporting 
on performance data in a VPN tunnel environment. It is envisaged that such 
information will be particularly useful in a multi vendor environment where 
the use of SLAs (Service Level Agreements) is being considered.



VIII.   References


[1] Intel NetStructure VPN Gateway Family - Checking Total Interface and
Tunnel Count using SNMP with VPN Gateway (041675-PM01). Available at
<http://www.intel.com/support/netstructure/vpn/gateway/31263.htm


[2] Using SNMP (for monitoring the PIX firewall). Available at
<http://www.cisco.com/univercd/cc/td/doc/product/iaabu/pix/pix_sw/v_63/config/
sysmgmt.htm#22797


[3] Cisco Netflow protocol. Available at
http://www.cisco.com/warp/public/cc/pd/iosw/prodlit/iosnf_ds.htm


[4] Checkpoint Real-Time Monitor. Available at
<http://www.checkpoint.com/products/manage/svm_vlm.html


[5]OpenService Pulsar xSP product. Available at
<http://www.open.com/responsenetworks/solutions/vpn.htm(


[6] Kent, S. and R. Atkinson, "IP Authentication Header", RFC 2402, November
1998


[7] Kent, S. and R. Atkinson, "IP Encapsulating Security Payload", RFC 2406,
November 1998


[8] Maughan, D., Schertler, M., Schneider, M. and J. Turner, "Internet
Security Association and Key Management Protocol (ISAKMP)", RFC 2408,
November 1998.


[9] Harkins, D. and D. Carrel, "The Internet Key Exchange (IKE)", RFC 2409,
November 1998.


IX.     Author's Address


Peter D. Groom


Credit Suisse First Boston
One Cabot Square
London
United Kingdom


Telephone: +44 207 888 4835


Email: peter.groom@csfb.com



X.      IPR notices


None



XI.     Copyright statement


"Copyright (C) The Internet Society (date).  All Rights Reserved.


This document and translations of it may be copied and furnished to others, 
and derivative works that comment on or otherwise explain it or assist in its 
implementation may be prepared, copied, published and distributed, in whole or 
in part, without restriction of any kind, provided that the above copyright 
notice and this paragraph are included on all such copies and derivative 
works. However, this document itself may not be modified in any way, such as 
by removing the copyright notice or references to the Internet Society or 
other Internet organizations, except as needed for the purpose of developing 
Internet standards in which case the procedures for copyrights defined in the 
Internet Standards process must be followed, or as required to translate it 
into languages other than English.


The limited permissions granted above are perpetual and will not be revoked by 
the Internet Society or its successors or assigns.


This document and the information contained herein is provided on an "AS IS" 
basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE 
DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY 
WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS 
OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR 
PURPOSE.



XII.    Disclaimer


The views expressed are those of the author and not necessarily those of CSFB.