<?xml version="1.0"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc symrefs="yes"?> 
<?rfc compact="yes"?>
<rfc ipr='full3978'
     docName="draft-irtf-nmrg-snmp-measure-06.txt"
     category="info">

  <!--
  $Id: measure.xml 2979 2008-09-17 06:13:54Z schoenw $
  -->

  <front>

    <title abbrev="SNMP Traffic Measurements">
      SNMP Traffic Measurements and Trace Exchange Formats
    </title>
    
    <author initials="J." surname="Schoenwaelder"
            fullname="Juergen Schoenwaelder">
      <organization>Jacobs University Bremen</organization>
      <address>
        <postal>
          <street>Campus Ring 1</street>
          <city>28725 Bremen</city>
          <country>Germany</country>
        </postal>
        <phone>+49 421 200-3587</phone>
        <email>j.schoenwaelder@jacobs-university.de</email>
      </address>
    </author>

    <date month="September" year="2008"/>

      <area>Operations and Management</area>

      <workgroup>NMRG</workgroup>

      <keyword>Network Management</keyword>
      <keyword>Simple Network Management Protocol</keyword>
      <keyword>SNMP</keyword>

      <abstract>
        <t>
          The Simple Network Management Protocol (SNMP) is widely
          deployed to monitor, control and (sometimes also) configure
          network elements.  Even though the SNMP technology is well
          documented, it remains relatively unclear how SNMP is used
          in practice and what typical SNMP usage patterns are.
        </t>
        <t>
          This document describes an approach to carrying out large
          scale SNMP traffic measurements in order to develop a better
          understanding how SNMP is used in real world production
          networks. It describes the motivation, the measurement
          approach, and the tools and data formats needed to carry out
          such a study.
        </t>
        <t>
          This document was produced within the IRTF's Network
          Management Research Group (NMRG) and represents the
          consensus of all of the active contributors to this group.
        </t>
      </abstract>

  </front>



  <middle>



    <section anchor="introduction" title="Introduction">

      <t>
        The Simple Network Management Protocol (SNMP) was introduced
        in the late 1980s <xref target="RFC1052"/> and has since then
        evolved to what is known today as the SNMP version 3 Framework
        (SNMPv3) <xref target="RFC3410"/>. While SNMP is widely
        deployed, it is not clear what protocol versions are being
        used, which protocol features are being used, how SNMP usage
        differs in different types of networks or organizations, which
        information is frequently queried, and what typical SNMP
        interactions patterns occur in real world production networks.
      </t>
      <t>
        There have been several publications in the recent past
        dealing with the performance of SNMP in general <xref
        target="SM99"/><xref target="Mal02"/><xref target="Pat01"/>,
        the impact of SNMPv3 security <xref target="DSR01"/><xref
        target="CT04"/>, or the relative performance of SNMP compared
        to Web Services <xref target="PDMQ04"/><xref
        target="PFGL04"/>. While these papers are generally useful to
        better understand the impact of various design decisions and
        technologies, some of these papers lack a strong foundation
        because authors typically assume certain SNMP interaction
        patterns without having experimental evidence that the
        assumptions are correct. In fact, there are many speculations
        on how SNMP is being used in real world production networks
        and performance comparisons are based on limited test cases,
        but no systematic measurements have been performed and
        published so far.
      </t>
      <t>
        Many authors use the ifTable of the IF-MIB <xref
        target="RFC2863"/> or the tcpConnTable of the TCP-MIB <xref
        target="RFC4022"/> as a starting point for their analysis and
        comparison. Despite the fact that there is no evidence that
        operations on these tables dominate SNMP traffic, it is even
        more unclear how these tables are read and which optimizations
        are done (or not done) by real world applications. It is also
        unclear what the actual traffic trade-off between periodic
        polling and more aperiodic bulk data retrieval is.
        Furthermore, we do not generally understand how much traffic
        is devoted to standardized MIB objects and how much traffic
        deals with proprietary MIB objects and whether the operation
        mix between these object classes differs between different
        operational environments (e.g., backbone networks, access
        networks, enterprise networks).
      </t>
      <t>
	This document recommends an approach to collecting, codifying,
	and handling SNMP traffic traces in order to find answers to
	some of these questions. It describes the tools that have been
	developed to allow network operators to collect traffic traces
	and to share them with research groups interested in analyzing
	and modeling network management interactions.
      </t>
      <t>
	While the SNMP trace collection and analysis effort was
	initiated by the research community, network operators can
	benefit from the SNMP measurements too.  Several new tools are
	being developed as part of this effort that can be used to
	capture and analyze the traffic generated by management
	stations. This resulting information can then be used to
	improve the efficiency and scalability of management systems.
      </t>
      <t>
	The measurement approach described in this document is by
	design limited to the study of SNMP traffic. Studies of other
	management protocols or the impact of management protocols
	such as SNMP on other traffic sharing the same network
	resources is left to future efforts.
      </t>
      <t>
        This is an informational document, produced within the IRTF's
        Network Management Research Group (NMRG) and represents the
        consensus of all of the active contributors to this group.
      </t>

    </section>

    <section title="Measurement Approach">

      <t>
        This section outlines the process of doing SNMP traffic
        measurements and analysis. The process consists of the
        following five basic steps:
      </t>
      <t>
        <list style="numbers">
          <t>
            Capture raw SNMP traffic traces in <eref
            target="http://en.wikipedia.org/wiki/Pcap">pcap packet
            capture files</eref>.
          </t>
          <t>
            Convert the raw traffic traces into a structured machine
            and human readable format. A suitable XML schema has been
            developed for this purpose which captures all SNMP message
            details. Another more compact comma separated values (CSV)
            format has been developed which only keeps key information
            about SNMP messages.
          </t>
          <t>
            Filter the converted traffic traces to hide or anonymize
            sensitive information. While the filtering is conceptually
            a separate step, filtering may actually be implemented as
            part of the previous data conversion step for efficiency
            reasons.
          </t>
          <t>
            Submit the filtered traffic traces to a repository from
            where they can be retrieved and analyzed. Such a
            repository may be public, it may be under the control of a
            research group, or it may be under the control of a
            network operator who commits to run analysis scripts on
            the repository on behalf of researchers.
          </t>
          <t>
            Analyze the traces by creating and executing analysis
            scripts which extract and aggregate information.
          </t>
        </list>
      </t>
      <t>
        Several of the steps listed above require the involvement of
        network operators supporting the SNMP measurement projects.
        In many cases, the filtered XML and CSV representation of the
        SNMP traces will be the interface between the researchers
        writing analysis scripts and the operators involved in the
        measurement activity. It is therefore important to have a well
        defined specification of these interfaces.
      </t>
      <t>
        This section provides some advice and concrete hints how the
        steps listed above can be carried out efficiently.  Some
        special tools have been developed to assist network operators
        and researchers so that the time spent on supporting SNMP
        traffic measurement projects is limited. The following
        sections describe the five steps and some tools in more
        detail.
      </t>

      <section title="Capturing Traffic Traces">
        <t>
          Capturing SNMP traffic traces can be done using packet
          sniffers such as <eref
          target="http://www.tcpdump.org/">tcpdump</eref>, <eref
          target="http://www.wireshark.org/">wireshark</eref>, or
          similar applications.  Some care must be taken to specify
          pcap filter expressions that match the SNMP transport
          endpoints used to carry SNMP traffic (typically 'udp and
          (port 161 or port 162)').  Furthermore, it is necessary to
          ensure that full packets are captured, that is packets are
          not truncated (tcpdump option -s 0). Finally, it is
          necessary to carefully select the placement of the capturing
          probe within the network. Especially on bridged LANs, it is
          important to ensure that all management traffic is captured
          and that the probe has access to all virtual LANs carrying
          management traffic. This usually requires placing the
          probe(s) close to the management system(s) and to configure
          dedicated monitoring ports on bridged networks. Some bridges
          have restrictions concerning their monitoring capabilities
          and this should be investigated and documented where
          necessary.
        </t>
        <t>
          It is recommended to capture at least a full week of data to
          capture diurnal patterns and one cycle of weekly behavior.
          Operators are strongly encouraged to capture traces over
          even longer periods of time. Tools such as <eref
          target="http://www.tcpdump.org/">tcpslice</eref> or <eref
          target="http://indev.insu.com/Fwctl/pcapmerge.html">pcapmerge</eref>
          can be used to split or merge pcap trace files as needed.
        </t>
        <t>
          Several operating systems can offload some of the TCP/IP
          processing such as the calculation of transport layer
          checksum to network interface cards. Traces that include
          traffic to/from a capturing interface which supports TCP/IP
          offloading can include incorrect transport layer checksums.
          The simplest solution is of course to turn checksum
          offloading off while capturing traces (if that is feasible
          without losing too many packets). The other solution is to
          correct or ignore checksums during the subsequent conversion
          of the raw pcap files.
        </t>
        <t>
          It is important to note that the raw pcap files should
          ideally be kept in permanent storage (e.g., compressed and
          encrypted on a CD ROM or DVD). To verify measurements, it
          might be necessary to go back to the original pcap files if,
          for example, bugs in the tools described below have been
          detected and fixed.
        </t>
        <t>
          For each captured trace, some meta data should be recorded
          and made available. The meta data should include information
          such as where the trace was collected (name of the network
          and name of the organization owning the network, description
          of the measurement point in the network topology where the
          trace was collected), when it was collected, contact
          information, the size of the trace, any known special
          events, equipment failures, or major infrastructure changes
          during the data collection period and so on. It is also
          extremely useful to provide a unique identification. There
          are special online services such as <eref
          target="http://www.datcat.org/">DatCat</eref> where meta
          data can be stored and which provide unique identifiers.
        </t>
      </section>

      <section title="Converting Traffic Traces">
        <t>
          Raw traces in pcap format must be converted into a format
          that is human readable while remaining also machine readable
          for efficient post-processing. Human readability makes it
          easy for an operator to verify that no sensitive data is
          left in a trace while machine readability is needed to
          efficiently extract relevant information.
        </t>
        <t>
          The natural choice here is to use an XML format since XML is
          human as well as machine readable and there are many tools
          and high-level scripting language application programming
          interfaces (APIs) that can be used to process XML documents
          and to extract meaningful information. However, XML is also
          pretty verbose which increases processing overhead. In
          particular, the usage of XML streaming APIs is strongly
          suggested since APIs that require an in memory
          representation of XML documents do not handle large traces
          well.
        </t>
        <t>
          <xref target="xml"/> of this document defines a RELAX NG
          schema <xref target="OASISRNG"/> for representing SNMP
          traffic traces in XML.  The schema captures all relevant
          details of an SNMP message in the XML format. Note that the
          XML format retains some information about the original
          ASN.1/BER encoding to support message size analysis.
        </t>
        <t>
          A lightweight alternative to the full blown XML
          representation based on comma separated values (CSV) is
          defined in <xref target="csv"/>. The CSV format only
          captures selected parts of SNMP messages and is thus more
          compact and faster to process.
        </t>
        <t>
          As explained in the previous sections, analysis programs
          which process raw pcap files should have an option to ignore
          incorrect checksums caused by TCP/IP offloading. In
          addition, analysis programs which process raw pcap files
          should be able to perform IP reassembly for SNMP messages
          that were fragmented at the IP layer.
        </t>
        <t>
          The <eref
          target="https://svn.eecs.jacobs-university.de/svn/schoenw/src/snmpdump">snmpdump</eref>
          package has been developed to convert raw pcap files into
          XML and CSV format. The snmpdump program reads pcap, XML, or
          CSV files as input and produces XML files or CSV files as
          output. Specific elements can be filtered as required to
          protect sensitive data.
        </t>
      </section>

      <section title="Filtering Traffic Traces">
        <t>
          Filtering sensitive data (e.g., access control lists or
          community strings) can be achieved by manipulating the XML
          representation of an SNMP trace.  Standard XSLT processors
          (e.g., <eref
          target="http://xmlsoft.org/XSLT/">xsltproc</eref>) can be
          used for this purpose. People familiar with the scripting
          language Perl might be interested in choosing a suitable
          <eref target="http://perl-xml.sourceforge.net/faq/">Perl
          module to manipulate XML documents</eref>.
        </t>
        <t>
          The snmpdump program, for example, can filter out sensitive
          information, e.g., by deleting or clearing all XML elements
          whose name matches a regular expression. Data type specific
          anonymization transformations that maintain lexicographic
          ordering for values that appear in instance identifiers
          <xref target="HS06"/> can be applied. Note that
          anonymization transformations are often bound to an
          initialization key and depend on the data being anonymized
          in an anonymization run.  As a consequence, users must be
          careful when they merge data from independently anonymized
          traces. More information about network traffic trace
          anonymization techniques can be found in <xref
          target="XFA02"/>, <xref target="FXAM04"/>, <xref
          target="PAPL06"/>, and <xref target="RW07"/>.
        </t>
      </section>

      <section title="Storing Traffic Traces">
        <t>
          The raw pcap traces as well as the XML / CSV formatted
          traces should be stored in a stable archive or repository.
          Such an archive or repository might either be maintained by
          research groups (e.g., the NMRG) or by network operators or
          both. It is of key importance that captured traces are not
          lost or modified as they may form the basis of future
          research projects and may also be needed to verify published
          research results.  Access to the archive might be restricted
          to those who have signed some sort of a non-disclosure
          agreement.
        </t>
	<t>
	  While this document recommends that raw traces should be
	  kept, it must be noted that there are situations where this
	  may not be feasible.  The recommendation to keep raw traces
	  may be ignored for example to comply with data protection
	  laws or to protect a network operator from being forced to
	  provide the data to other organizations.
	</t>
        <t>
          Lossless compression algorithms embodied in programs such as
          gzip or bzip2 can be used to compress even large trace files
          down to a size where they can be burned on DVDs for cheap
          long-term storage.
        </t>
        <t>
          It must be stressed again that it is important to keep the
          original pcap traces in addition to the XML / CSV formatted
          traces since the pcap traces are the most authentic source
          of information.  Improvements in the tool chain may require
          going back to the original pcap traces and rebuilding all
          intermediate formats from them.
        </t>
      </section>

      <section title="Analyzing Traffic Traces">
        <t>
          Scripts that analyze traffic traces must be verified for
          correctness. Ideally, all scripts used to analyze traffic
          traces will be publically accessible so that third parties
          can verify them. Furthermore, sharing scripts will enable
          other parties to repeat an analysis on other traffic traces
          and to extend such analysis scripts. It might be useful to
          establish and common, versioning repository for analysis
          scripts.
        </t>
        <t>
          Due to the availability of XML parsers and the simplicity of
          the CSV format, trace files can be processed with tools
          written in almost any programming language. However, in
          order to facilitate a common vocabulary and to allow
          operators to easily read scripts they execute on trace
          files, it is suggested that analysis scripts be written is
          scripting languages such as Perl using suitable Perl modules
          to manipulate XML documents <eref
          target="http://perl-xml.sourceforge.net/faq/"/>.  Using a
          scripting language such as Perl instead of system
          programming languages such as C or C++ has the advantage of
          reducing development time and making scripts more accessible
          to operators who may want to verify scripts before running
          them on trace files which may contain sensitive data.
        </t>
        <t>
          The snmpdump tool provides an API to process SNMP messages
          in C/C++. While the coding of trace analysis programs in
          C/C++ should in general be avoided for code readability,
          verifiability and portability reasons, using C/C++ might be
          the only option in dealing with very large traces
          efficiently.
        </t>
	<t>
	  Any results produced by analyzing a trace must be
	  interpreted in the context of the trace. The nature of the
	  network, the attachment point used to collect the trace, the
	  nature of the applications generating SNMP traffic, or the
	  events that happened while the trace was collected clearly
	  influence the result. It is therefore important to be
	  careful when drawing general conclusions based on a
	  potentially (too) limited data set.
	</t>
      </section>

    </section>

    <section anchor="analysis" title="Analysis of Traffic Traces">

      <t>
        This section discusses several questions that can be answered
        by analyzing SNMP traffic traces. The questions raised in the
        following subsections are meant to be illustrative and no
        attempt has been made to provide a complete list.
      </t>

        <section title="Basic Statistics">
          <t>
	    Basic statistics cover things such as
	    <list style="symbols">
	      <t>protocol version used,</t>
	      <t>protocol operations used,</t>
	      <t>message size distribution,</t>
	      <t>error message type frequency, or</t>
	      <t>usage of authentication and encryption mechanisms.</t>
	    </list>
	    The OID names of the objects manipulated can be
	    categorized into OID subtrees, for example to identify
	    'standardized', 'proprietary', and 'experimental' objects.
          </t>
        </section>

        <section title="Periodic vs. Aperiodic Traffic">
          <t>
	    SNMP is used to periodically poll devices as well as to
	    retrieve information at the request of an operator or
	    application.  The periodic polling leads to periodic
	    traffic patterns while on-demand information retrieval
	    causes more aperiodic traffic patterns.  It is worthwhile
	    to understand what the relationship is between the amount
	    of periodic and aperiodic traffic.  It will be interesting
	    to understand whether there are multiple levels of
	    periodicity at different time scales.
	  </t>
	  <t>
	    Periodic polling behavior may be dependent on the
	    application and polling engine it uses.  For example, some
	    management platforms allow applications to specify how
	    long polled values may be kept in a cache before they are
	    polled again. Such optimizations needs to be considered
	    when analyzing traces for periodic and aperiodic traffic.
	  </t>
        </section>

        <section title="Message Size and Latency Distributions">
          <t>
            SNMP messages are size constrained by the transport
            mappings used and the buffers provided by the SNMP
            engines. For the further evolution of the SNMP framework,
            it would be useful to know what the actual message size
            distributions are. It would be useful to understand the
            latency distributions, especially the distribution of the
            processing times by SNMP command responders. Some SNMP
            implementations approximate networking delays by measuring
            request-response times and it would be useful to
            understand to what extent this is a viable approach.
          </t>
	  <t>
	    Some SNMP implementations update their counters from the
	    underlying instrumentation following adaptive algorthms,
	    not necessarily periodically, and not necessarily
	    on-demand. The granularity of internal counter updates may
	    impact latency measurements and should be taken into
	    account.
	  </t>
        </section>

        <section title="Concurrency Levels">
          <t>
            SNMP allows management stations to retrieve information
            from multiple agents concurrently. It will be interesting
            to identify what the typical concurrency level is that can
            be observed on production networks or whether management
            applications prefer more sequential ways of retrieving
            data.
          </t>
	  <t>
	    Furthermore, it will be interesting to analyze how many
	    redundant requests coming from applications are processed
	    almost simultaneously by a device.  The concurrency level
	    and the amount of redundant requests has implications on
	    caching strategies employed by SNMP agents.
	  </t>
        </section>

        <section title="Table Retrieval Approaches">
          <t>
            Tables can be read in several different ways. The simplest
            and most inefficient approach is to retrieve tables
            object-by-object in column-by-column order. More advanced
            approaches try to read tables row-by-row or even
            multiple-rows-by-multiple-rows. The retrieval of index
            elements can be suppressed in most cases or only a subset
            of columns of a table are retrieved. It will be useful to
            know which of these approaches are used on production
            networks since this has a direct implication on agent
            implementation techniques and caching strategies.
          </t>
        </section>

        <section title="Trap-Directed Polling - Myths or Reality?">
          <t>
            SNMP is built around a concept called trap-directed
            polling.  Management applications are responsible to
            periodically poll SNMP agents to determine their
            status. SNMP agents can in addition send traps to notify
            SNMP managers about events so that SNMP managers can adapt
            their polling strategy and basically react faster than
            normal polling would allow to do.
          </t>
          <t>
            Analysis of SNMP traffic traces can identify whether
            trap-directed polling is actually deployed. In particular,
            the question that should be addressed is whether SNMP
            notifications lead to changes in the short-term polling
            behavior of management stations. In particular, it should
            be investigated to what extent SNMP managers use automated
            procedures to track down the meaning of the event conveyed
            by an SNMP notification.
          </t>
        </section>

        <section title="Popular MIB Definitions">
          <t>
            An analysis of object identifier prefixes can identify the
            most popular MIB modules and the most important object
            types or notification types defined by these modules. Such
            information would be very valuable for the further
            maintenance and development of these and related MIB
            modules.
          </t>
        </section>

        <section title="Usage of Obsolete Objects">
          <t>
            Several objects from the early days have been obsoleted
            because they cannot properly represent today's networks. A
            typical example is the ipRouteTable which was obsoleted
            because it was not able to represent classless routing,
            introduced and deployed on the Internet in 1993. Some of
            these obsolete objects are still mentioned in popular
            publications as well as research papers. It will be
            interesting to find out whether they are also still used
            by management applications or whether management
            applications have been updated to use the replacement
            objects.
          </t>
	  <t>
	    Depending on the data recorded in a trace, it might be
	    possible to determine the age of devices by looking at
	    values of objects such as sysObjectID and sysDecr <xref
	    target="RFC3418"/>. The age of a device can then be taken
	    into consideration when analyzing the use of obsolete and
	    deprecated objects.
	  </t>
        </section>

        <section title="Encoding Length Distributions">
          <t>
            It will be useful to understand the encoding length
            distributions for various data types. Assumptions about
            encoding length distributions are sometimes used to
            estimate SNMP message sizes in order to meet transport and
            buffer size constraints.
          </t>
        </section>

        <section title="Counters and Discontinuities">
          <t>
            Counters can experience discontinuities <xref
            target="RFC2578"/>. A widely used discontinuity indicator
            is the sysUpTime scalar of the SNMPv2-MIB <xref
            target="RFC3418"/>, which can be reset through a warm
            start to indicate counter discontinuities. Some MIB
            modules introduce more specific discontinuity indicators,
            e.g., the ifCounterDiscontinuityTime of the IF-MIB <xref
            target="RFC2863"/>. It will be interesting to study to
            what extent these objects are actually used by management
            applications to handle discontinuity events.
          </t>
        </section>

        <section title="Spin Locks">
          <t>
            Cooperating command generators can use advisory locks to
            coordinate their usage of SNMP write operations. The
            snmpSetSerialNo scalar of the SNMPv2-MIB <xref
            target="RFC3418"/> is the default course-grain
            coordination object. It will be interesting to find out
            whether there are command generators which coordinate
            themselves using these spin locks.
          </t>
        </section>

        <section title="Row Creation">
          <t>
            Row creation is an operation not natively supported by the
            protocol operations. Instead, conceptual tables supporting
            row creation typically provide a control column which uses
            the RowStatus textual convention defined in the SNMPv2-TC
            <xref target="RFC2579"/> module. The RowStatus itself
            supports different row creation modes, namely
            createAndWait (dribble-mode) and createAndGo (one-shot
            mode).  Different approaches can be used to derive the
            instance identifier if it does not have special semantics
            associated. It will be useful to study which of the
            various row creation approaches are actually used by
            management applications on production networks.
          </t>
        </section>

    </section>

    <section title="Trace Exchange Formats">

    <section anchor="xml" title="XML Representation">
      <t>
        The XML format has been designed to keep all information
        associated with SNMP messages. The format is specified in
        RELAX NG compact notation <xref target="OASISRNC"/>. Freely
        available tools such as <eref
        target="http://www.relaxng.org/">trang</eref> can be used to
        convert RELAX NG compact syntax to other XML schema notations.
      </t>
      <t>
	The XML format can represent SNMPv1, SNMPv2c, and SNMPv3
	messages. In case a new version of SNMP is introduced in the
	future or existing SNMP versions are extended in ways that
	require changes to the XML format, a new XML format with a
	different namespace needs to be defined (e.g., by incrementing
	the version number included in the namespace URI).
      </t>
      <figure>
        <artwork><![CDATA[
# Relax NG grammar for the XML SNMP trace format.
#
# Published as part of RFC XXXX.

default namespace = "urn:ietf:params:xml:ns:snmp-trace-1.0"

start = 
  element snmptrace {
    packet.elem*
  }

packet.elem = 
  element packet {
    element time-sec  { xsd:unsignedInt },
    element time-usec { xsd:unsignedInt },
    element src-ip    { ipaddress.type },
    element src-port  { xsd:unsignedInt },
    element dst-ip    { ipaddress.type },
    element dst-port  { xsd:unsignedInt },
    snmp.elem
  }

snmp.elem = 
  element snmp {
    length.attrs?,
    message.elem
  }

message.elem =
  element version   { length.attrs, xsd:int },
  element community { length.attrs, xsd:hexBinary },
  pdu.elem

message.elem |=
  element version { length.attrs, xsd:int },
  element message {
    length.attrs,
    element msg-id         { length.attrs, xsd:unsignedInt },
    element max-size       { length.attrs, xsd:unsignedInt },
    element flags          { length.attrs, xsd:hexBinary },
    element security-model { length.attrs, xsd:unsignedInt }
  },
  usm.elem?,
  element scoped-pdu {
    length.attrs,
    element context-engine-id { length.attrs, xsd:hexBinary },
    element context-name      { length.attrs, xsd:string },
    pdu.elem
  }

usm.elem =
  element usm {
    length.attrs,
    element auth-engine-id    { length.attrs, xsd:hexBinary },
    element auth-engine-boots { length.attrs, xsd:unsignedInt },
    element auth-engine-time  { length.attrs, xsd:unsignedInt },
    element user              { length.attrs, xsd:hexBinary },
    element auth-params       { length.attrs, xsd:hexBinary },
    element priv-params       { length.attrs, xsd:hexBinary }
  }

pdu.elem =
  element trap { 
    length.attrs,
    element enterprise        { length.attrs, oid.type },
    element agent-addr        { length.attrs, ipv4address.type },
    element generic-trap      { length.attrs, xsd:int },
    element specific-trap     { length.attrs, xsd:int },
    element time-stamp        { length.attrs, xsd:int },
    element variable-bindings { length.attrs, varbind.elem* }
  }

pdu.elem |=
  element (get-request | get-next-request | get-bulk-request |
           set-request | inform-request | snmpV2-trap | 
           response | report) { 
    length.attrs,
    element request-id        { length.attrs, xsd:int },
    element error-status      { length.attrs, xsd:int },
    element error-index       { length.attrs, xsd:int },
    element variable-bindings { length.attrs, varbind.elem* }
  }

varbind.elem = 
  element varbind { length.attrs, name.elem, value.elem }

name.elem =
  element name { length.attrs, oid.type }

value.elem =
  element null              { length.attrs, empty } |
  element integer32         { length.attrs, xsd:int } |
  element unsigned32        { length.attrs, xsd:unsignedInt } |
  element counter32         { length.attrs, xsd:unsignedInt } |
  element counter64         { length.attrs, xsd:unsignedLong } |
  element timeticks         { length.attrs, xsd:unsignedInt } |
  element ipaddress         { length.attrs, ipv4address.type } |
  element octet-string      { length.attrs, xsd:hexBinary } |
  element object-identifier { length.attrs, oid.type } |
  element opaque            { length.attrs, xsd:hexBinary } |
  element no-such-object    { length.attrs, empty } |
  element no-such-instance  { length.attrs, empty } |
  element end-of-mib-view   { length.attrs, empty }

# The blen attribute indicates the number of octets used by the BER
# encoded tag / length / value triple. The vlen attribute indicates
# the number of octets used by the BER encoded value alone.

length.attrs =
  ( attribute blen { xsd:unsignedShort },
    attribute vlen { xsd:unsignedShort } )?

oid.type =
  xsd:string {
    pattern =
      "(([0-1](\.[1-3]?[0-9]))|(2.(0|([1-9]\d*))))" ~
      "(\.(0|([1-9]\d*))){0,126}"
  }

# The types below are for IP addresses. Note that SNMP's buildin
# IpAddress type only supports IPv4 addresses; IPv6 addresses are only
# introduced to cover SNMP over IPv6 endpoints.

ipv4address.type =
  xsd:string {
    pattern =
      "((0|(1[0-9]{0,2})" ~
      "|(2(([0-4][0-9]?)|(5[0-5]?)|([6-9]?)))|([3-9][0-9]?))\.){3}" ~
      "(0|(1[0-9]{0,2})" ~
      "|(2(([0-4][0-9]?)|(5[0-5]?)|([6-9]?)))|([3-9][0-9]?))"
  }

ipv6address.type = 
  xsd:string {
    pattern =
      "(([0-9a-fA-F]+:){7}[0-9a-fA-F]+)|" ~
      "(([0-9a-fA-F]+:)*[0-9a-fA-F]+)?::(([0-9a-fA-F]+:)*[0-9a-fA-F]+)?"
  }

ipaddress.type = ipv4address.type | ipv6address.type
        ]]></artwork>
      </figure>

      <t>
	The following example shows an SNMP trace file in XML format
	containing an SNMPv1 get-next-request message for the OID
	1.3.6.1.2.1.1.3 (sysUpTime) and the response message returned
	by the agent.
      </t>

      <figure>
        <artwork><![CDATA[
<snmptrace xmlns="urn:ietf:params:xml:ns:snmp-trace-1.0">
  <packet>
    <time-sec>1147212206</time-sec>
    <time-usec>739609</time-usec>
    <src-ip>192.0.2.1</src-ip>
    <src-port>60371</src-port>
    <dst-ip>192.0.2.2</dst-ip>
    <dst-port>12345</dst-port>
    <snmp blen="42" vlen="40">
      <version blen="3" vlen="1">1</version>
      <community blen="8" vlen="6">7075626c6963</community>
      <get-next-request blen="29" vlen="27">
        <request-id blen="6" vlen="4">1804289383</request-id>
        <error-status blen="3" vlen="1">0</error-status>
        <error-index blen="3" vlen="1">0</error-index>
        <variable-bindings blen="15" vlen="13">
          <varbind blen="13" vlen="11">
            <name blen="9" vlen="7">1.3.6.1.2.1.1.3</name>
            <null blen="2" vlen="0"/>
          </varbind>
        </variable-bindings>
      </get-next-request>
    </snmp>
  </packet>
  <packet>
    <time-sec>1147212206</time-sec>
    <time-usec>762891</time-usec>
    <src-ip>192.0.2.2</src-ip>
    <src-port>12345</src-port>
    <dst-ip>192.0.2.1</dst-ip>
    <dst-port>60371</dst-port>
    <snmp blen="47" vlen="45">
      <version blen="3" vlen="1">1</version>
      <community blen="8" vlen="6">7075626c6963</community>
      <response blen="34" vlen="32">
        <request-id blen="6" vlen="4">1804289383</request-id>
        <error-status blen="3" vlen="1">0</error-status>
        <error-index blen="3" vlen="1">0</error-index>
        <variable-bindings blen="20" vlen="18">
          <varbind blen="18" vlen="16">
            <name blen="10" vlen="8">1.3.6.1.2.1.1.3.0</name>
            <unsigned32 blen="6" vlen="4">26842224</unsigned32>
          </varbind>
        </variable-bindings>
      </response>
    </snmp>
  </packet>
</snmptrace>
]]></artwork>
      </figure>

    </section>

    <section anchor="csv" title="CSV Representation">
      <t>
        The comma separated values (CSV) format has been designed to
        capture only the most relevant information about an SNMP
        message. In situations where all information about an SNMP
        message must be captured, the XML format defined above must be
        used. The CSV format uses the following fields:
      </t>
      <t>
        <list style="numbers">
          <t>
            Time-stamp in the format seconds.microseconds since 1970,
            for example "1137764769.425484".
          </t>
          <t>
            Source IP address in dotted quad notation (IPv4), for
            example "192.0.2.1", or compact hexadecimal notation
            (IPv6), for example "2001:DB8::1".
          </t>
          <t>
            Source port number represented as a decimal number, for
            example "4242".
          </t>
          <t>
            Destination IP address in dotted quad notation (IPv4), for
            example "192.0.2.1", or compact hexadecimal notation
            (IPv6), for example "2001:DB8::1".
          </t>
          <t>
            Destination port number represented as a decimal number, for
            example "161".
          </t>
          <t>
            Size of the SNMP message (a decimal number) counted in
            octets, for example "123". The size excludes all transport,
            network, and link-layer headers.
          </t>
          <t>
            SNMP message version represented as a decimal number. The
            version 0 stands for SNMPv1, 1 for SNMPv2c, and 3 for
            SNMPv3, for example "3".
          </t>
          <t>
            SNMP protocol operation indicated by one of the keywords
            get-request, get-next-request, get-bulk-request, set-request,
            trap, snmpV2-trap, inform-request, response, report.
          </t>
          <t>
            SNMP request-id in decimal notation, for example "1511411010".
          </t>
          <t>
            SNMP error-status in decimal notation, for example "0".
          </t>
          <t>
            SNMP error-index in decimal notation, for example "0".
          </t>
          <t>
            Number of variable-bindings contained in the varbind-list in
            decimal notation, for example "5".
          </t>
          <t>
            For each varbind in the varbind list, three output elements
            are generated
            <list>
              <t>
                Object name given as object identifier in dotted decimal
                notation, for example "1.3.6.1.2.1.1.3.0".
              </t>
              <t>
                Object base type name or exception name, that is one
                of the following: null, integer32, unsigned32,
                counter32, counter64, timeticks, ipaddress,
                octet-string, object-identifier, opaque,
                no-such-object, no-such-instance, and end-of-mib-view.
              </t>
              <t>
                Object value is printed as a number if the underlying
                base type is numeric. An IPv4 addresses is rendered in
                the dotted quad notation and an IPv6 address is
                rendered in the usual hexadecimal notation. An octet
                string value is printed in hexadecimal format while an
                object identifier value is printed in dotted decimal
                notation. In case of an exception, the object value is
                empty.
              </t>
            </list>
          </t>
        </list>
      </t>
      <t>
        Note that the format does not preserve the information needed
        to understand SNMPv1 traps. It is therefore recommended that
        implementations are able to convert the SNMPv1 trap format
        into the trap format used by SNMPv2c and SNMPv3, according to
        the rules defined in <xref target="RFC3584"/>. The activation
        of trap format conversion should be the user's choice.
      </t>
      <t>
	The following example shows an SNMP trace file in CSV format
	containing an SNMPv1 get-next-request message for the OID
	1.3.6.1.2.1.1.3 (sysUpTime) and the response message returned
	by the agent. (Note that the example uses backslash line
	continuation marks in order to fit the example into the RFC
	format. Backslash line continuations are not part of the CSV
	format.)
      </t>
      <figure>
	<artwork><![CDATA[
1147212206.739609,192.0.2.1,60371,192.0.2.2,12345,42,1,\
  get-next-request,1804289383,0,0,1,1.3.6.1.2.1.1.3,null,
1147212206.762891,192.0.2.2,12345,192.0.2.1,60371,47,1,\
  response,1804289383,0,0,1,1.3.6.1.2.1.1.3.0,timeticks,26842224
	]]></artwork>
      </figure>

    </section>

    </section>
    
    <section title="Security Considerations">
      <t>
        SNMP traffic traces usually contain sensitive information. It
        is therefore necessary to (a) remove unwanted information and
        (b) to anonymize the remaining necessary information before
        traces are made available for analysis. It is recommended to
        encrypt traces when they are archived.
      </t>
      <t>
        Implementations that generate CSV or XML traces from raw pcap
        files should have an option to suppress or anonymize values.
        Note that instance identifiers of tables also include values
        and it might therefore be necessary to suppress or anonymize
        (parts of) the instance identifiers. Similarly, the packet and
        message headers typically contain sensitive information about
        the source and destination of SNMP messages as well as
        authentication information (community strings or user names).
      </t>
      <t>
        Anonymization techniques can be applied to keep information in
        traces which could otherwise reveal sensitive information.
        When using anonymization, values should only be kept when the
        underlying data type is known and an appropriate anonymization
        transformation is available (filter-in principle). For values
        appearing in instance identifiers, it is usually desirable to
        maintain the lexicographic order. Special anonymization
        transformations which preserve this property have been
        developed, although their anonymization strength is usually
        reduced compared to transformations that do not preserve
        lexicographic ordering <xref target="HS06"/>.
      </t>
      <t>
	The meta data associated with traces and in particular
	information about the organization owning a network and the
	description of the measurement point in the network topology
	where a trace was collected may be misused to decide/pinpoint
	where and how to attack a network. Meta data therefore needs
	to be properly protected.
      </t>
    </section>

    <section title="IANA Considerations">
      <t>
	This document requests that IANA register a URI for the SNMP
	XML trace format namespace in the IETF XML registry <xref
	target="RFC3688"/>.  Following the format in RFC 3688, the
	following registration is requested.
      </t>
      <t>
	URI: Please assign the URI "urn:ietf:params:xml:ns:snmp-trace-1.0"
	for use by the SNMP trace format.
      </t>
      <t>
	Registrant Contact: The NMRG of the IRTF.
      </t>
      <t>
	XML: N/A, the requested URI is an XML namespace.
      </t>
    </section>

    <section title="Acknowledgements">
      <t>
        This document was influenced by discussions within the Network
        Management Research Group (NMRG). Special thanks to Remco van
        de Meent for writing the initial Perl script that lead to the
        development of the snmpdump software package and Matus Harvan
        for his work on lexicographic order preserving anonymization
        transformations.  Aiko Pras contributed ideas to <xref
        target="analysis"/> while David Harrington helped to improve
        the readability of this document.
      </t>
      <t>
	Last call reviews have been received from Bert Wijnen, Aiko
	Pras, Frank Strauss, Remco van de Meent, Giorgio Nunzi, Wes
	Hardacker, Liam Fallon, Sharon Chisholm, David Perkins, Deep
	Medhi, Randy Bush, David Harrington, Dan Romascanu, Luca Deri,
	and Marc Burgess. Karen R. Sollins reviewed the document for
	the Internet Research Steering Group (IRSG). Jari Arkko, Pasi
	Eronen, Chris Newman, and Tim Polk provided helpful comments
	during the Internet Engineering Steering Group (IESG) review.
      </t>
      <t>
        Part of this work was funded by the European Commission under
        grant FP6-2004-IST-4-EMANICS-026854-NOE.
      </t>
    </section>

  </middle>



  <back>


    <references title="Normative References">

      <reference anchor="RFC2578">
        <front>
          <title>
            Structure of Management Information Version 2 (SMIv2)
          </title>
          <author initials="K." surname="McCloghrie" fullname="Keith McCloghrie">
            <organization>Cisco Systems, Inc.</organization>
          </author>
          <author initials="D." surname="Perkins" fullname="David Perkins">
            <organization>SNMPinfo</organization>
          </author>
          <author initials="J." surname="Schoenwaelder" fullname="Juergen Schoenwaelder">
            <organization>TU Braunschweig</organization>
          </author>
          <date month="April" year="1999"/>
        </front>
        <seriesInfo name="STD" value="58"/>
        <seriesInfo name="RFC" value="2578"/>
      </reference>

      <reference anchor="OASISRNG">
        <front>
          <title>
            RELAX NG Specification
          </title>
          <author initials="J." surname="Clark" fullname="J. Clark">
            <organization>OASIS</organization>
          </author>
          <author initials="M." surname="Makoto" fullname="M. Makoto">
            <organization>OASIS</organization>
          </author>
          <date month="December" year="2001"/>
        </front>
        <seriesInfo name="OASIS" value="Committee Specification"/>
      </reference>

      <reference anchor="OASISRNC">
        <front>
          <title>
            RELAX NG Compact Syntax
          </title>
          <author initials="J." surname="Clark" fullname="J. Clark">
            <organization>OASIS</organization>
          </author>
          <date month="November" year="2002"/>
        </front>
        <seriesInfo name="OASIS" value="Committee Specification"/>
      </reference>

      <reference anchor="RFC3584">
        <front>
          <title>
            Coexistence between Version 1, Version 2, and Version 3
            of the Internet-standard Network Management Framework
          </title>
          <author initials="R." surname="Frye" fullname="R. Frye">
            <organization>Vibrant Solutions</organization>
          </author>
          <author initials="D." surname="Levi" fullname="D. Levi">
            <organization>Nortel Networks</organization>
          </author>
          <author initials="S." surname="Routhier" fullname="S. Routhier">
            <organization>Wind River Systems</organization>
          </author>
          <author initials="B." surname="Wijnen" fullname="B. Wijnen">
            <organization>Lucent Technologies</organization>
          </author>
          <date month="August" year="2003"/>
        </front>
        <seriesInfo name="RFC" value="3584"/>
      </reference>

      <reference anchor="RFC3688">
	<front>
	  <title>
	    The IETF XML Registry
	  </title>
	  <author initials="M" surname="Mealling" fullname="M. Mealling">
	    <organization>VeriSign, Inc.</organization>
	  </author>
	  <date month="January" year="2004"/>
	</front>
	<seriesInfo name="RFC" value="3688"/>
      </reference>

    </references>


    <references title="Informative References">

      <reference anchor="RFC1052">
        <front>
          <title>
            IAB Recommendations for the Development of
            Internet Network Management Standards
          </title>
          <author initials="V." surname="Cerf" fullname="V. Cerf">
            <organization>NRI</organization>
          </author>
          <date month="April" year="1998"/>
        </front>
        <seriesInfo name="RFC" value="1052"/>
      </reference>

      <reference anchor="RFC2579">
        <front>
          <title>
            Textual Conventions for SMIv2
          </title>
          <author initials="K." surname="McCloghrie" fullname="Keith McCloghrie">
            <organization>Cisco Systems, Inc.</organization>
          </author>
          <author initials="D." surname="Perkins" fullname="David Perkins">
            <organization>SNMPinfo</organization>
          </author>
          <author initials="J." surname="Schoenwaelder" fullname="Juergen Schoenwaelder">
            <organization>TU Braunschweig</organization>
          </author>
          <date month="April" year="1999"/>
        </front>
        <seriesInfo name="STD" value="58"/>
        <seriesInfo name="RFC" value="2579"/>
      </reference>

      <reference anchor="RFC3418">
        <front>
          <title>
            Management Information Base (MIB) for the
            Simple Network Management Protocol (SNMP)
          </title>
          <author initials="R." surname="Presuhn" fullname="Randy Presuhn">
            <organization>BMC Software, Inc.</organization>
          </author>
          <author initials="J." surname="Case" fullname="Jeff Case">
            <organization>SNMP Research, Inc.</organization>
          </author>
          <author initials="K." surname="McCloghrie" fullname="Keith McCloghrie">
            <organization>Cisco Systems, Inc.</organization>
          </author>
          <author initials="M." surname="Rose" fullname="Marshall Rose">
            <organization>Dover Beach Consulting, Inc.</organization>
          </author>
          <author initials="S." surname="Waldbusser" fullname="Steve Waldbusser">
            <organization>International Network Services</organization>
          </author>
          <date month="December" year="2002"/>
        </front>
        <seriesInfo name="STD" value="62"/>
        <seriesInfo name="RFC" value="3418"/>
      </reference>

      <reference anchor="RFC2863">
        <front>
          <title>
            The Interfaces Group MIB
          </title>
          <author initials="K." surname="McCloghrie" fullname="Keith McCloghrie">
            <organization>Cisco Systems</organization>
          </author>
          <author initials="F." surname="Kastenholz" fullname="Frank Kastenholz">
            <organization>Argon Networks</organization>
          </author>
          <date month="June" year="2000"/>
        </front>
        <seriesInfo name="RFC" value="2863"/>
      </reference>

      <reference anchor="RFC3410">
        <front>
          <title>
            Introduction and Applicability Statements for
            Internet Standard Management Framework
          </title>
          <author initials="J." surname="Case" fullname="J. Case">
            <organization>SNMP Research, Inc.</organization>
          </author>
          <author initials="R." surname="Mundy" fullname="R. Mundy">
            <organization>Network Associates Laboratories</organization>
          </author>
          <author initials="D." surname="Partain" fullname="D. Partain">
            <organization>Ericsson</organization>
          </author>
          <author initials="B." surname="Stewart" fullname="B. Stewart">
            <organization>Retired</organization>
          </author>
          <date month="December" year="2002"/>
        </front>
        <seriesInfo name="RFC" value="3410"/>
      </reference>

      <reference anchor="RFC4022">
        <front>
          <title>
            Management Information Base for the Transmission 
            Control Protocol (TCP)
          </title>
          <author initials="R." surname="Raghunarayan" fullname="R. Raghunarayan">
            <organization>Cisco Systems</organization>
          </author>
          <date month="March" year="2005"/>
        </front>
        <seriesInfo name="RFC" value="4022"/>
      </reference>

      <reference anchor="PDMQ04">
        <front>
          <title>
            Comparing the Performance of SNMP and Web Services based Management
          </title>
          <author initials="A." surname="Pras" fullname="A. Pras">
            <organization>University of Twente</organization>
          </author>
          <author initials="T." surname="Drevers" fullname="T. Drevers">
            <organization>University of Twente</organization>
          </author>
          <author initials="R." surname="van de Meent" fullname="R. van de Meent">
            <organization>University of Twente</organization>
          </author>
          <author initials="D." surname="Quartel" fullname="D. Quartel">
            <organization>University of Twente</organization>
          </author>
          <date month="November" year="2004"/>
        </front>
        <seriesInfo name="IEEE electronic Transactions on Network and Service Management" value="1(2)"/>
      </reference>

      <reference anchor="Pat01">
        <front>
          <title>
            A Study of the Behaviour of the Simple Network Management Protocol
          </title>
          <author initials="C." surname="Pattinson" fullname="C. Pattinson">
            <organization></organization>
          </author>
          <date month="October" year="2001"/>
        </front>
        <seriesInfo name="Proc. 12th IFIP/IEEE Workshop on Distributed Systems: Operations and Management" value=""/>
      </reference>

      <reference anchor="DSR01">
        <front>
          <title>
            Implementation and Performance Analysis of SNMP on a TLS/TCP Base
          </title>
          <author initials="X." surname="Du" fullname="X. Du">
            <organization>University of Maryland</organization>
          </author>
          <author initials="M." surname="Shayman" fullname="M. Shayman">
            <organization>University of Maryland</organization>
          </author>
          <author initials="M." surname="Rozenblit" fullname="M. Rozenblit">
            <organization>TeraBurst Networks</organization>
          </author>
          <date month="May" year="2001"/>
        </front>
        <seriesInfo name="Proc. 7th IFIP/IEEE International Symposium on Integrated Network Management" value=""/>
      </reference>

      <reference anchor="CT04">
        <front>
          <title>
            Security Performance Analysis of SNMPv3 with Respect to SNMPv2c
          </title>
          <author initials="A." surname="Corrente" fullname="A. Corrente">
            <organization>Cefriel</organization>
          </author>
          <author initials="L." surname="Tura" fullname="L. Tura">
            <organization>Cefriel</organization>
          </author>
          <date month="April" year="2004"/>
        </front>
        <seriesInfo name="Proc. 2004 IEEE/IFIP Network Operations and 
        Management Symposium" value=""/>
      </reference>

      <reference anchor="PFGL04">
        <front>
          <title>
            On Management Technologies and the Potential of Web Services
          </title>
          <author initials="G." surname="Pavlou" fullname="G. Pavlou">
            <organization>University of Surrey</organization>
          </author>
          <author initials="P." surname="Flegkas" fullname="P. Flegkas">
            <organization>University of Surrey</organization>
          </author>
          <author initials="S." surname="Gouveris" fullname="S. Gouveris">
            <organization>University of Surrey</organization>
          </author>
          <author initials="A." surname="Liotta" fullname="A. Liotta">
            <organization>University of Surrey</organization>
          </author>
          <date month="July" year="2004"/>
        </front>
        <seriesInfo name="IEEE Communications Magazine" value="42(7)"/>
      </reference>

      <reference anchor="SM99">
        <front>
          <title>
            Bulk Transfers of MIB Data
          </title>
          <author initials="R." surname="Sprenkels" fullname="R. Sprenkels">
            <organization>Twente University</organization>
          </author>
          <author initials="J.P." surname="Martin-Flatin" fullname="J.P. Martin-Flatin">
            <organization>EPFL</organization>
          </author>
          <date month="March" year="1999"/>
        </front>
        <seriesInfo name="Simple Times" value="7(1)"/>
      </reference>

      <reference anchor="Mal02">
        <front>
          <title>
            GetBulk Worth Fixing
          </title>
          <author initials="M." surname="Malowidzki" fullname="M. Malowidzki">
            <organization>Military Communication Institute</organization>
          </author>
          <date month="December" year="2002"/>
        </front>
        <seriesInfo name="Simple Times" value="10(1)"/>
      </reference>

      <reference anchor="HS06">
        <front>
          <title>
            Prefix- and Lexicographical-order-preserving IP Address
            Anonymization
          </title>
          <author initials="M." surname="Harvan" fullname="M. Harvan">
            <organization>International University Bremen</organization>
          </author>
          <author initials="J." surname="Schoenwaelder" fullname="Juergen Schoenwaelder">
            <organization>TU Braunschweig</organization>
          </author>
          <date month="April" year="2006"/>
        </front>
        <seriesInfo name="IEEE/IFIP Network Operations and Management Symposium" value="NOMS 2006"/>
      </reference>

      <reference anchor="XFA02">
        <front>
          <title>
            Prefix-Preserving IP Address Anonymization:
            Measurement-based Security Evaluation and a New
            Cryptography-based Scheme
          </title>
          <author initials="J." surname="Xu" fullname="Jun Xu">
            <organization></organization>
          </author>
          <author initials="J." surname="Fan" fullname="Jinliang Fan">
            <organization></organization>
          </author>
          <author initials="M.H." surname="Ammar" fullname="Mostafa H. Ammar">
            <organization></organization>
          </author>
          <date month="November" year="2002"/>
        </front>
        <seriesInfo name="10th IEEE International Conference on
			  Network Protocols" value="ICNP'02"/>
      </reference>

      <reference anchor="FXAM04">
        <front>
          <title>
	    Prefix-Preserving IP Address Anonymization
          </title>
          <author initials="J." surname="Fan" fullname="Jinliang Fan">
            <organization></organization>
          </author>
          <author initials="J." surname="Xu" fullname="Jun Xu">
            <organization></organization>
          </author>
          <author initials="M.H." surname="Ammar" fullname="Mostafa H. Ammar">
            <organization></organization>
          </author>
          <author initials="S." surname="Moon" fullname="Sue Moon">
            <organization></organization>
          </author>
          <date month="October" year="2004"/>
        </front>
        <seriesInfo name="Computer Networks" value="46(2)"/>
      </reference>

      <reference anchor="PAPL06">
        <front>
          <title>
	    The Devil and Packet Trace Anonymization
          </title>
          <author initials="R." surname="Pang" fullname="R. Pang">
            <organization></organization>
          </author>
          <author initials="M." surname="Allman" fullname="M. Allman">
            <organization></organization>
          </author>
          <author initials="V" surname="Paxson" fullname="V. Paxson">
            <organization></organization>
          </author>
          <author initials="J." surname="Lee" fullname="J. Lee">
            <organization></organization>
          </author>
          <date month="January" year="2006"/>
        </front>
        <seriesInfo name="Computer Communication Review" value="36(1)"/>
      </reference>

      <reference anchor="RW07">
        <front>
          <title>
	    High-Speed Prefix-Preserving {IP} Address Anonymization
	    for Passive Measurement Systems
          </title>
          <author initials="R." surname="Ramaswamy" fullname="R. Ramaswamy">
            <organization></organization>
          </author>
          <author initials="T." surname="Wolf" fullname="T. Wolf">
            <organization></organization>
          </author>
          <date month="February" year="2007"/>
        </front>
        <seriesInfo name="IEEE Transactions on Networking" value="15(1)"/>
      </reference>

    </references>

  </back>
    

</rfc>

<!-- Local Variables:                                           -->
<!-- compile-command: "xml2rfc measure.xml"                     -->
<!-- ispell-local-dictionary: "american"                        -->
<!-- sgml-declaration: "/usr/lib/sgml/declaration/xml.decl"     -->
<!-- sgml-omittag:nil                                           -->
<!-- sgml-shorttag:t                                            -->
<!-- sgml-namecase-general:t                                    -->
<!-- sgml-minimize-attributes:nil                               -->
<!-- sgml-always-quote-attributes:t                             -->
<!-- sgml-indent-step:2                                         -->
<!-- sgml-indent-data:t                                         -->
<!-- sgml-parent-document:nil                                   -->
<!-- sgml-exposed-tags:nil                                      -->
<!-- sgml-local-catalogs:nil                                    -->
<!-- sgml-local-ecat-files:nil                                  -->
<!-- End:                                                       -->
