<!doctype linuxdoc system>

<article>

<title>
arts++
</title>
<author>Daniel McRobb, CAIDA</author>
<date>Original Aug 1998  ; last modified Nov 22, 1999</date>

<abstract>
This document describes arts++, a C++ class library and set of simple
utilities for processing ARTS files produced by CAIDA software.
</abstract>

<toc>

<sect>Overview
<p>

<tt>arts++</tt> is a set of C++ classes and applications for handling
ARTS data files produced by CAIDA software (<tt>cflowd</tt> and
<tt>skitter</tt>).  Specifically, the <tt>arts++</tt> package handles
the following ARTS data types:

<itemize>
  <item>AS matrix (version 0)
  <item>net matrix (version 2)
  <item>port table (version 2)
  <item>port matrix (version 0)
  <item>selected port table (version 0)
  <item>protocol table (version 2)
  <item>TOS table (version 0)
  <item>interface matrix (version 0)
  <item>nexthop table (version 0)
  <item>forward IP path and RTT (version 0)
  <item>BGP4 route table (version 0)
  <item>RTT time series table (version 0)
</itemize>

<sect>ARTS Data Types Handled by <tt>arts++</tt>
<p>

There are many types of data stored in ARTS files.  <tt>arts++</tt>
handles a subset of ARTS data types.

<sect1>AS matrix (version 0)
<p>

The AS matrix contains counters for traffic (packets and bytes) from
source ASes to destination ASes.  It is a sparse matrix, having only
entries for which traffic information is stored.  Since this data is
typically collected by <tt>cflowd</tt>, an AS matrix normally contains
counters for sourceAS:destinationAS pairs for which a particular Cisco
forwarded traffic.

When AS matrix data is stored in a file, it is stored with a period
attribute which represents the time interval in which the traffic was
seen.  It is also stored with a host attribute indicating the router
from which the data was collected.  Finally, it may also have an
interface index attribute indicating the input interface on which the
data was seen, an interface description attribute indicating the name of
the input interface, and an interface IP address attribute indicating
the IP address of the input interface.

<sect1>net matrix (version 2)
<p>

The net matrix contains counters for traffic (packets and bytes) from
source networks to destination networks.  Networks are identified by
network number and netmask length.  It is a sparse matrix, having only
entries for which traffic information is stored.  Since this data is
typically collected by <tt>cflowd</tt>, a net matrix normally contains
counters for sourceNetwork:destinationNetwork pairs for which a
particular Cisco forwarded traffic.

When net matrix data is stored in a file, it is stored with a period
attribute which represents the time interval in which the traffic was
seen.  It is also stored with a host attribute indicating the router
from which the data was collected.  Finally, it may also have an
interface index attribute indicating the input interface on which the
data was seen, an interface description attribute indicating the name of
the input interface, and an interface IP address attribute indicating
the IP address of the input interface.
 
<sect1>port table (version 2)
<p>

The port table contains counters for input and output traffic (packets
and bytes) versus transport layer port number.  Input counters represent
traffic destined for the port while output counters represent traffic
sourced from the port.  For example, the input counters for port 80
would normally indicate the amount of traffic sent from Web browsers to
Web servers, while the output counters for port 80 would normally
indicate the amount of traffic sent from Web servers to Web browsers.

The table is sparse; there are no entries for ports on which no traffic
was seen.  Since this data is typically collected by <tt>cflowd</tt>,
a port table normally contains counters for traffic forwarded by a 
particular Cisco.

When port table data is stored in a file, it is stored with a period
attribute which represents the time interval in which the traffic was
seen.  It is also stored with a host attribute indicating the router
from which the data was collected.  Finally, it may also have an
interface index attribute indicating the input interface on which the
data was seen.


<sect1>port matrix (version 0)
<p>

The port matrix contains counters for traffic from source ports
to destination ports.  Unlike the port table, this object retains
the source to destination port relationship.

When port matrix data is stored in a file, it is stored with a period
attribute which represents the time interval in which the traffic was
seen.  It is also stored with a host attribute indicating the router
from which the data was collected.  Finally, it may also have an
interface index attribute indicating the input interface on which the
data was seen, an interface description attribute indicating the name of
the input interface, and an interface IP address attribute indicating
the IP address of the input interface.

<sect1>selected port table (version 0)
<p>

The selected port table contains counters for input and output traffic
(packets and bytes) versus transport layer port number for a set of
ports, plus one additional counter for all other ports (summed traffic
across all other ports).  Input counters represent traffic destined for
the port while output counters represent traffic sourced from the port.
For example, the input counters for port 80 would normally indicate the
amount of traffic sent from Web browsers to Web servers, while the
output counters for port 80 would normally indicate the amount of
traffic sent from Web servers to Web browsers.

The table is sparse; there are no entries for ports on which no traffic
was seen.  Since this data is typically collected by <tt>cflowd</tt>,
a port table normally contains counters for traffic forwarded by a 
particular Cisco.

The difference between this object and a plain port table: the selected
port table contains inidividual port entries for only selected ports,
and lumps all other data under the port 0 entry.  Inside the selected
port table, there is an <tt>ArtsPortChooser</tt> object which contains
the ports chosen when the object was created.  Data is only counted
<em>once</em>: we put it under the lower of the source or destination
ports that is in the <tt>ArtsPortChooser</tt>, or put it under port 0 if
neither the source nor destination port was in the
<tt>ArtsPortChooser</tt>.

This object is usually generated by using port matrix objects and an
<tt>ArtsPortChooser</tt> object as input to the
<tt>ArtsPortMatrixAggregator</tt> class.  This permits a simple user
configurable means of boiling port matrix data down to data usable for
tracking per-application traffic patterns.  This functionality is
available in the <em>artsportmagg(l)</em> utility.

When selected port table data is stored in a file, it is stored with a
period attribute which represents the time interval in which the traffic
was seen.  It is also stored with a host attribute indicating the router
from which the data was collected.  Finally, it may also have an
interface index attribute indicating the input interface on which the
data was seen, an interface description attribute indicating the name of
the input interface, and an interface IP address attribute indicating
the IP address of the input interface.

<sect1>protocol table (version 2)
<p>

The protocol table contains counters (packets and bytes) versus IP
protocol (TCP, UDP, ICMP, IGMP, et. al.).  The table is sparse; there
are no entries for protocols that were not seen in the measured traffic.
Since this data is typically collected by <tt>cflowd</tt>, a protocol
table normally contains counters for traffic forwarded by a particular
Cisco.

When protocol table data is stored in a file, it is stored with a
period attribute which represents the time interval in which the traffic
was seen.  It is also stored with a host attribute indicating the router
from which the data was collected.  Finally, it may also have in
interface index attribute indicating the input interface on which the
data was seen, an interface description attribute indicating the name of
the input interface, and an interface IP address attribute indicating
the IP address of the input interface.

<sect1>TOS table (version 0)
<p>

The TOS table contains counters (packets and bytes) versus IP TOS (Type
Of Service).  The table is sparse; there are no entries for TOS values
that were not seen in the measured traffic.  Since this data is
typically collected by <tt>cflowd</tt>, a TOS table normally contains
counters for traffic forwarded by a particular Cisco.

When TOS table data is stored in a file, it is stored with a period
attribute which represents the time interval in which the traffic was
seen.  It is also stored with a host attribute indicating the router
from which the data was collected.  Finally, it may also have an
interface index attribute indicating the input interface on which the
data was seen, an interface description attribute indicating the name of
the input interface, and an interface IP address attribute indicating
the IP address of the input interface.

<sect1>interface matrix (version 0)
<p>

The interface matrix contains counters (packets and bytes) for traffic
from input interfaces to output interfaces.  Input and output interfaces
are identified by their index (ifIndex); the matrix can be viewed as
having rows for input interfaces and columns for output interfaces.

When interface matrix data is stored in a file, it is stored with a
period attribute which represents the time interval in which the traffic
was seen.  It is also stored with a host attribute indicating the router
from which the data was collected.  Finally, it may also have an
interface index attribute indicating the input interface on which the
data was seen, an interface description attribute indicating the name of
the input interface, and an interface IP address attribute indicating
the IP address of the input interface.

<sect1>nexthop table (version 0)
<p>

The nexthop table contains counters (packets and bytes) versus IP nexthop.
Since this data is typically collected by <tt>cflowd</tt>, a nexthop
table normally contains counters for traffic forwarded by a particular
Cisco.

When nexthop table data is stored in a file, it is stored with a period
attribute which represents the time interval in which the traffic was
seen.  It is also stored with a host attribute indicating the router
from which the data was collected.  Finally, it may also have an
interface index attribute indicating the input interface on which the
data was seen, an interface description attribute indicating the name of
the input interface, and an interface IP address attribute indicating
the IP address of the input interface.

<sect1>forward IP path and RTT (version 0)
<p>

<sect1>BGP4 route table (version 0)
<p>

The BGP4 route table contains BGP4 information for a set of unique
IPv4 network prefixes (usually the 'chosen' routes, i.e. those used for
forwarding).  This object is currently experimental and is used by
some analysis and visualization tools in the <tt>skitter</tt> package
with data collected by <tt>mrtd</tt>.  
<footnote>mrtd is part of the Multi-Threaded Routing Toolkit.  See
http://www.merit.edu/~mrt/</footnote>

When BGP4 route table data is stored in a file, it is stored with a
creation attribute which represents the time at which the 'snapshot' of
the BGP4 route information was taken.  It is also stored with a host
attribute indicating the router from which the data was obtained.

<sect1>RTT time series table (version 0)
<p>

The RTT time series table contains round-trip time information for a
source and destination host.  This object also stores dropped packet
information (packet loss).

When RTT time series table data is stored in a file, it is stored with a
creation attribute which represents the time at which the first RTT
measurement was taken.  It is also stored with a host pair attribute
indicating the source and destination of the RTT measurement.

<sect>C++ Class Library
<p>

The <tt>arts++</tt> package includes a C++ class library which 
provides an API for ARTS data.  The class library contains a top-level
<tt>Arts</tt> class which may contain any type of ARTS data.  The
class library also contains derived classes for each of the ARTS data
objects used by CAIDA.

<sect1>The <tt>Arts</tt> Class and Contained Classes
<p>
The <tt>Arts</tt> class is a top level class in the class heirarchy.
It is used to hold any of the ARTS data types.

All <tt>Arts</tt> objects contain a header section represented by
a contained <tt>ArtsHeader</tt> object.  <tt>Arts</tt> objects also
normally contain one or more attributes in a vector of 
<tt>ArtsAttribute</tt> objects (literally a 
<tt>vector&lt;ArtsAttribute&gt;</tt> using STL).  Finally, each
<tt>Arts</tt> object contains a data portion.  The data portion
is where the specific type of data (AS matrix, net matrix, etc.)
is stored.

You may obtain a reference to the <tt>ArtsHeader</tt> in an
<tt>Arts</tt> object by calling the <tt>Header()</tt> member from the
<tt>Arts</tt> class.You may obtain a reference to the vector of
attributes in an <tt>Arts</tt> object or one of the <tt>Arts</tt>
descendants by calling the <tt>Attributes()</tt> member from the
<tt>Arts</tt> class.

The type of the data in the data portion of an <tt>Arts</tt> object
can be determined by looking at the <tt>Header().Identifier()</tt>
in the object.  The class library will handle the following values:

<tabular ca=ll>
  <em>Header().Identifier()</em> <colsep> <em>Description</em> <rowsep>
<#if output="latex2e">
<hline>
</#if>
  <tt>artsC_OBJECT_AS_MATRIX</tt> <colsep> An AS matrix object. <rowsep>
  <tt>artsC_OBJECT_NET</tt> <colsep> A net matrix object. <rowsep>
  <tt>artsC_OBJECT_PORT</tt> <colsep> A port table object. <rowsep>
  <tt>artsC_OBJECT_PORT_MATRIX</tt> <colsep> A port matrix object. <rowsep>
  <tt>artsC_OBJECT_SELECTED_PORT</tt> <colsep> A selected port table object. <rowsep>
  <tt>artsC_OBJECT_PROTO</tt> <colsep> A protocol table object. <rowsep>
  <tt>artsC_OBJECT_TOS</tt> <colsep> A TOS table object. <rowsep>
  <tt>artsC_OBJECT_IP_PATH</tt> <colsep> An IP forward path and RTT object. <rowsep>
  <tt>artsC_OBJECT_INTERFACE_MATRIX</tt> <colsep> An interface matrix object. <rowsep>
  <tt>artsC_OBJECT_NEXT_HOP</tt> <colsep> An IP nexthop table object. <rowsep>
  <tt>artsC_OBJECT_BGP4</tt> <colsep> A BGP4 route table object. <rowsep>
  <tt>artsC_OBJECT_RTT_TIME_SERIES</tt> <colsep> A RTT time series object. <rowsep>
</tabular>

<sect2>The <tt>ArtsHeader</tt> Class
<p>

The <tt>ArtsHeader</tt> class is used inside each <tt>Arts</tt> object
to hold information which is generic to all ARTS data types.  For example,
the object identifier, the version of the object, or the number of 
attributes in the object.

<sect2>The <tt>ArtsAttribute</tt> Class
<p>

A vector of <tt>ArtsAttribute</tt> objects is used inside an
<tt>Arts</tt> object to hold various attributes which may apply to a
variety of ARTS data types.  For example, a period attribute is used in
several objects to hold a time interval for which the ARTS data holds
information.  A host attribute is frequently used to hold the IP address
of a host or router from which the ARTS data was collected.

<sect2>The <tt>ArtsAsMatrixData</tt> Class
<p>

The <tt>ArtsAsMatrixData</tt> class is used to hold AS matrix data
within an <tt>Arts</tt> object.  When the <tt>Header().Identifier()</tt>
of an <tt>Arts</tt> object is <tt>artsC_OBJECT_AS_MATRIX</tt>, you may
obtain a pointer to the <tt>ArtsAsMatrixData</tt> object in the 
<tt>Arts</tt> object by calling the <tt>AsMatrixData()</tt> member from
the <tt>Arts</tt> class.

An <tt>ArtsAsMatrixData</tt> object contains a vector of 
<tt>ArtsAsMatrixEntry</tt> objects.

<sect3>The <tt>ArtsAsMatrixEntry</tt> Class
<p>

The <tt>ArtsAsMatrixEntry</tt> class contains a source AS number,
a destination AS number, the packets sent from the source AS to the
destination AS, and the bytes sent from the source AS to the destination
AS.

<sect2>The <tt>ArtsNetMatrixData</tt> Class
<p>

The <tt>ArtsNetMatrixData</tt> class is used to hold net matrix data
within an <tt>Arts</tt> object.  When the <tt>Header().Identifier()</tt>
of an <tt>Arts</tt> object is <tt>artsC_OBJECT_NET</tt>, you may
obtain a pointer to the <tt>ArtsNetMatrixData</tt> object in the 
<tt>Arts</tt> object by calling the <tt>NetMatrixData()</tt> member from
the <tt>Arts</tt> class.

An <tt>ArtsNetMatrixData</tt> object contains a vector of 
<tt>ArtsNetMatrixEntry</tt> objects.

<sect3>The <tt>ArtsNetMatrixEntry</tt> Class
<p>

The <tt>ArtsNetMatrixEntry</tt> class contains a source network address
and netmask length, a destination network address and netmask length,
the packets sent from the source network to the destination network, and
the bytes sent from the source network to the destination network.

<sect2>The <tt>ArtsPortTableData</tt> Class
<p>

The <tt>ArtsPortTableData</tt> class is used to hold port table data
within an <tt>Arts</tt> object.  When the <tt>Header().Identifier()</tt>
of an <tt>Arts</tt> object is <tt>artsC_OBJECT_PORT</tt>, you may
obtain a pointer to the <tt>ArtsPortTableData</tt> object in the
<tt>Arts</tt> object by calling the <tt>PortTableData()</tt> member from
the <tt>Arts</tt> class.

An <tt>ArtsPortTableData</tt> object contains a vector of 
<tt>ArtsPortTableEntry</tt> objects.

<sect3>The <tt>ArtsPortTableEntry</tt> Class
<p>

The <Tt>ArtsPortTableEntry</tt> class contains a port number, the packets
sent with a source port equal to the port number, the bytes sent with a
source port equal to the port number, the packets sent with a destination
port equal to the port number and the bytes sent with a destination 
port equal to the port number.

<sect2>The <tt>ArtsPortMatrixData</tt> Class
<p>

The <tt>ArtsPortMatrixData</tt> class is used to hold port matrix data
within an <tt>Arts</tt> object.  When the <tt>Header().Identifier()</tt>
of an <tt>Arts</tt> object is <tt>artsC_OBJECT_PORT_MATRIX</tt>, you may
obtain a pointer to the <tt>ArtsPortMAtrixData</tt> object in the
<tt>Arts</tt> object by calling the <tt>PortMatrixData()</tt> member from
the <tt>Arts</tt> class.

An <tt>ArtsPortMatrixData</tt> object contains a vector of 
<tt>ArtsPortMatrixEntry</tt> objects.

<sect3>The <tt>ArtsPortMatrixEntry</tt> Class
<p>

The <Tt>ArtsPortMatrixEntry</tt> class contains a source port number, a
destination port number, the number of packets sent from the source port
number to the destination port number, and the number of bytes sent from
the source port number to the destination port number.

<sect2>The <tt>ArtsSelectedPortTableData</tt> Clsss
<p>

The <tt>ArtsSelectedPortTableData</tt> class is used to hold selected
port table data within an <tt>Arts</tt> object.  When the
<tt>Header().Identifier()</tt> of an <tt>Arts</tt> object is
<tt>artsC_OBJECT_SELECTED_PORT</tt>, you may obtain a pointer to the
<tt>ArtsSelectedPortTableData</tt> object in the <tt>Arts</tt> object by
calling the <tt>SelectedPortTableData()</tt> member from the <tt>Arts</tt>
class.

The data portion of this object is stored just like that in the
<tt>ArtsPortTableData</tt> class: a vector of
<tt>ArtsPortTableEntry</tt> objects, accessible via the
<tt>PortEntries()</tt> member function.  However, the interpretation of
the data is different than that of the <tt>ArtsPortTableData</tt> class.
Only selected ports (which are held in an <tt>ArtsPortChooser</tt>
object in the <tt>ArtsSelectedPortTableData</tt> class) are allowed to
have inidividual entries, and traffic for ports which aren't in the
selection list is lumped unoder an entry for port 0.  Unlike the
<tt>ArtsPortTableData</tt> class, we only count traffic once, for the
lower of the source or destination port that was in the selection list
(or in the entry for port 0).

<sect2>The <tt>ArtsProtocolTableData</tt> Class
<p>

The <tt>ArtsProtocolTableData</tt> class is used to hold protocol table
data within an <tt>Arts</tt> object.  When the
<tt>Header().Identifier()</tt> of an <tt>Arts</tt> object is
<tt>artsC_OBJECT_PROTO</tt>, you may obtain a pointer to the
<tt>ArtsProtocolTableData</tt> object in the <tt>Arts</tt> object by
calling the <tt>ProtocolTableData()</tt> member from the <tt>Arts</tt>
class.

An <tt>ArtsProtocolTableData</tt> object contains a vector of 
<tt>ArtsProtocolTableEntry</tt> objects.

<sect3>The <tt>ArtsProtocolTableEntry</tt> Class
<p>

The <tt>ArtsProtocolTableEntry</tt> class contains a protocol number,
the number of packets sent using the protocol and the number of bytes
sent using the protocol.

<sect2>The <tt>ArtsTosTableData</tt> Class
<p>

The <tt>ArtsTosTableData</tt> class is used to hold TOS table
data within an <tt>Arts</tt> object.  When the
<tt>Header().Identifier()</tt> of an <tt>Arts</tt> object is
<tt>artsC_OBJECT_TOS</tt>, you may obtain a pointer to the
<tt>ArtsTosTableData</tt> object in the <tt>Arts</tt> object by
calling the <tt>TosTableData()</tt> member from the <tt>Arts</tt>
class.

An <tt>ArtsTosTableData</tt> object contains a vector of 
<tt>ArtsTosTableEntry</tt> objects.

<sect3>The <tt>ArtsTosTableEntry</tt> Class
<p>

The <tt>ArtsTosTableEntry</tt> class contains a TOS value, the number of
packets sent using the TOS and the number of bytes sent using the TOS.

<sect2>The <tt>ArtsInterfaceMatrixData</tt> Class
<p>

The <tt>ArtsInterfaceMatrixData</tt> class is used to hold interface
matrix data within an <tt>Arts</tt> object.  When the
<tt>Header().Identifier()</tt> of an <tt>Arts</tt> object is
<tt>artsC_OBJECT_INTERFACE_MATRIX</tt>, you may obtain a pointer to the
<tt>ArtsInterfaceMatrixData</tt> object in the <tt>Arts</tt> object by
calling the <tt>InterfaceMatrixData()</tt> member from the <tt>Arts</tt>
class.  The interface matrix data is held in a vector of
<tt>ArtsInterfaceMatrixEntry</tt> objects inside the
<tt>ArtsInterfaceMatrixData</tt> class.

<sect3>The <tt>ArtsInterfaceMatrixEntry</tt> Class
<p>

The <tt>ArtsInterfaceMatrixEntry</tt> class contains a source (input)
interface index, a destination (output) interface index, the number of
packets sent from the source interface to the destination interface and
the number of bytes sent from the source interface to the destination
interface.

<sect2>The <tt>ArtsNextHopTableData</tt> Class
<p>

The <tt>ArtsNextHopTableData</tt> class is used to hold nexthop table
data within an <tt>Arts</tt> object.  When the
<tt>Header().Identifier()</tt> of an <tt>Arts</tt> object is
<tt>artsC_OBJECT_NEXT_HOP</tt>, you may obtain a pointer to the
<tt>ArtsNextHopTableData</tt> object in the <tt>Arts</tt> object by
calling the <tt>NextHopTableData()</tt> member from the <tt>Arts</tt>
class.  The nexthop table data is held in a vector of
<tt>ArtsNextHopTableEntry</tt> objects inside the
<tt>ArtsNextHopTableData</tt> class.

<sect3>The <tt>ArtsNextHopTableEntry</tt> Class
<p>

The <tt>ArtsNextHopTableEntry</tt> class contains the IP address of the
nexthop and counters for the packets and bytes of traffic sent via
the nexthop.

<sect2>The <tt>ArtsIpPathData</tt> Class
<p>

Not yet documented, used by the <tt>skitter</tt> package.

<sect2>The <tt>ArtsBGP4RouteTableData</tt> Class
<p>

Not yet documented, used by the <tt>skitter</tt> package.

<sect2>The <tt>ArtsRttTimeSeriesTable</tt> class
<p>

Not yet documented, used by <tt>skping</tt> and <tt>skpingd</tt> from
the <tt>skitter</tt> package.

<sect1>Derived Classes
<p>

For each of the ARTS data types, there is a class derived from
the <tt>Arts</tt> class to represent the data.  An applicaiotn would
typically use one of the derived classes when it knows what type
of data to be stored in a given object.  Typically these classes
are no different than the <tt>Arts</tt> class other than having 
specialized constructors and shortcut calls to members of the
data classes held inside an ARTS object.

<sect2>ArtsAsMatrix
<p>

This class can be used to hold AS matrix data.  An instantiation of
this object is no different than an instantiation of an <tt>Arts</tt>
object except that the <tt>Header().Identifier()</tt> should always
be <tt>artsC_OBJECT_AS_MATRIX</tt>.

<sect2>ArtsNetMatrix
<p>

This class can be used to hold net matrix data.  An instantiation of
this object is no different than an instantiation of an <tt>Arts</tt>
object except that the <tt>Header().Identifier()</tt> should always
be <tt>artsC_OBJECT_NET</tt>.

<sect2>ArtsPortTable
<p>

This class can be used to hold port table data.  An instantiation of
this object is no different than an instantiation of an <tt>Arts</tt>
object except that the <tt>Header().Identifier()</tt> should always
be <tt>artsC_OBJECT_PORT</tt>.

<sect2>ArtsPortMatrix
<p>

This class can be used to hold port matrix data.  An instantiation of
this object is no different than an instantiation of an <tt>Arts</tt>
object except that the <tt>Header().Identifier()</tt> should always
be <tt>artsC_OBJECT_PORT_MATRIX</tt>.

<sect2>ArtsSelectedPortTable
<p>

This class can be used to hold selected port table data.  An
instantiation of this object is no different than an instantiation of an
<tt>Arts</tt> object except that the <tt>Header().Identifier()</tt>
should always be <tt>artsC_OBJECT_SELECTED_PORT</tt>.

<sect2>ArtsProtocolTable
<p>

This class can be used to hold protocol table data.  An instantiation of
this object is no different than an instantiation of an <tt>Arts</tt>
object except that the <tt>Header().Identifier()</tt> should always
be <tt>artsC_OBJECT_PROTO</tt>.

<sect2>ArtsTosTable
<p>
This class can be used to hold TOS table data.  An instantiation of
this object is no different than an instantiation of an <tt>Arts</tt>
object except that the <tt>Header().Identifier()</tt> should always
be <tt>artsC_OBJECT_TOS</tt>.

<sect2>ArtsInterfaceMatrix
<p>

This class can be used to hold interface matrix data.  An instantiation of
this object is no different than an instantiation of an <tt>Arts</tt>
object except that the <tt>Header().Identifier()</tt> should always
be <tt>artsC_OBJECT_INTERFACE_MATRIX</tt>.

<sect2>ArtsNextHopTable
<p>

This class can be used to hold IP nexthop table data.  An instantiation of
this object is no different than an instantiation of an <tt>Arts</tt>
object except that the <tt>Header().Identifier()</tt> should always
be <tt>artsC_OBJECT_NEXT_HOP</tt>.

<sect2>ArtsIpPath
<p>

This class can be used to hold IP forward path data.  An instantiation of
this object is no different than an instantiation of an <tt>Arts</tt>
object except that the <tt>Header().Identifier()</tt> should always
be <tt>artsC_OBJECT_IP_PATH</tt>.

<sect2>ArtsBgp4RouteTable
<p>

This class can be used to hold BGP4 route table data.  An instantiation of
this object is no different than an instantiation of an <tt>Arts</tt>
object except that the <tt>Header().Identifier()</tt> should always
be <tt>artsC_OBJECT_BGP4</tt>.

<sect1>Helper Classes
<p>

<sect2>The <tt>ArtsAsMatrixAggregator</tt> Class
<p>

The <tt>ArtsAsMatrixAggregator</tt> class may be used to aggregate
AS matrix data in the time domain.

<sect2>The <tt>ArtsNetMatrixAggregator</tt> Class
<p>

The <tt>ArtsNetMatrixAggregator</tt> class may be used to aggregate
net matrix data in the time domain.

<sect2>The <tt>ArtsPortTableAggregator</tt> Class
<p>

The <tt>ArtsPortTableAggregator</tt> class may be used to aggregate
port table data in the time domain.

<sect2>The <tt>ArtsPortMatrixAggregator</tt> Class
<p>

The <tt>ArtsPortMatrixAggregator</tt> class may be used to aggregate
port matrix data in the time domain, generating <tt>ArtsPortMatrix</tt>
or <tt>ArtsSelectedPortTable</tt> objects as aggregate output.

<sect2>The <tt>ArtsProtocolTableAggregator</tt> Class
<p>

The <tt>ArtsProtocolTableAggregator</tt> class may be used to aggregate
protocol table data in the time domain.

<sect2>The <tt>ArtsTosTableAggregator</tt> Class
<p>

The <tt>ArtsTosTableAggregator</tt> class may be used to aggregate TOS
table table data in the time domain.

<sect2>The <tt>ArtsInterfaceMatrixAggregator</tt> Class
<p>

The <tt>ArtsInterfaceMatrixAggregator</tt> class may be used to aggregate
interface matrix data in the time domain.

<sect2>The <tt>ArtsNextHopTableAggregator</tt> Class
<p>

The <tt>ArtsNextHopTableAggregator</tt> class may be used to aggregate
nexthop table data in the time domain.

<sect1>More Information
<p>

For more detailed information, see the arts++ Class Library Reference.

<sect>Applications
<p>

<sect1>Data Viewers
<p>

A handul of simple utilities for viewing the contents of ARTS files
are included with <tt>arts++</tt>.  These tools simply read the
contents of ARTS files and produce output on stdout.  They're
really just simple examples of using the class library.  However,
some users may find them useful in their own right, particularly when
working with aggregate data.

<sect2>artsdump
<p>

<em>usage:</em> <tt>artdsump [-v] infile(s)</tt>

<tt>artsdump</tt> is a general utility for viewing the contents of
an ARTS file.  <tt>artsdump</tt> reads all ARTS data from the files
specified on the command line and dumps it to stdout in a 
human-readable form.  

Note that the output format is verbose and not amenable to
post-processing.  The output is not intended to be fed to other
programs.  <tt>artsdump</tt> is intended only to aid the user in quickly
verifying or viewing the entire contents of an ARTS file.

See the manpage (<em>artsdump(l)</em>) for more information.

<sect2>artstoc
<p>

<em>usage:</em> <tt>artstoc [-v] infile(s)</tt>

<tt>artstoc</tt> is a utility that reads ARTS objects from ARTS files
and displays a one-line summary for each object on stdout.  This utility
is typically used to quickly check the type and quantity of objects
stored in an ARTS file.  See the manpage (<em>artstoc(l)</em>) for more
information.

Example output:

<code>
% artstoc arts.19980817
  192.172.226.1  08/17/1998 05:30:44 - 08/17/1998 05:37:42 EDT  protocol table
  192.172.226.1  08/17/1998 05:30:44 - 08/17/1998 05:37:42 EDT  port table
  192.172.226.1  08/17/1998 05:30:44 - 08/17/1998 05:37:42 EDT  AS matrix
  192.172.226.1  08/17/1998 05:38:00 - 08/17/1998 05:48:03 EDT  protocol table
  192.172.226.1  08/17/1998 05:38:00 - 08/17/1998 05:48:03 EDT  port table
  192.172.226.1  08/17/1998 05:38:00 - 08/17/1998 05:48:03 EDT  net matrix
  192.172.226.1  08/17/1998 05:38:00 - 08/17/1998 05:48:03 EDT  AS matrix
  192.172.226.1  08/17/1998 05:48:03 - 08/17/1998 05:52:54 EDT  protocol table
  192.172.226.1  08/17/1998 05:48:03 - 08/17/1998 05:52:54 EDT  port table
  192.172.226.1  08/17/1998 05:48:03 - 08/17/1998 05:52:54 EDT  net matrix
  192.172.226.1  08/17/1998 05:48:03 - 08/17/1998 05:52:54 EDT  AS matrix
</code>

<sect2>artsases
<p>

<tabular ca=ll>
<em>usage:</em> <colsep> <tt>artsases [-v] [-p] [-i ifIndexList] [-l maxEntries] [-t AS] [-r] [-s srcAS]</tt> <rowsep>
 <colsep> <tt>[-d dstAS] infile(s)</tt> <rowsep>
</tabular>

<tt>artsases</tt> displays a summary of each AS matrix object in ARTS 
files.  See the manpage (<em>artsases(l)</em>) for more information.

Example output:

<code>
% artsases arts.19990819
router:  192.172.226.1
ifIndex: 5 (Fddi0/1/0 198.17.46.56)
period:  08/19/1999 13:16:46 - 08/19/1999 13:23:10 EDT
  Src AS  Dst AS           Pkts       Pkts/sec          Bytes       Bits/sec
  ------  ------  -------------  -------------  -------------  -------------
       0       0          37034        96.4427       34022843         708809
     194    1909          15806        41.1615       10086355         210132
    3967    1909           9051        23.5703        8395655         174909
    1224    1909          10086        26.2656        7195383         149904
    6461    1909           4537        11.8151        4977144         103690
    5050    1909          12347        32.1536        4374027        91125.6
    3549    1909           5532        14.4062        3264083        68001.7
   10487    1909           2348        6.11458        2102355        43799.1
    1740    1909           8332        21.6979        1419569        29574.4
      38    1909          11848        30.8542        1308203        27254.2
     297    1909            592        1.54167        1229825        25621.4
    6227    1909            826        2.15104        1168984        24353.8
</code>

<sect2>artsnets
<p>

<tabular ca=ll>
<em>usage:</em> <colsep> <tt>artsnets [-v] [-r] [-p] [-i ifIndexList] [-l maxEntries] [-s srcNet/mask]</tt> <rowsep>
  <colsep> <tt> [-d dstNet/mask] infile(s)</tt> <rowsep>
</tabular>

<tt>artsnets</tt> displays a summary of each net matrix object in ARTS files.
See the manpage (<em>artsnets(l)</em>) for more information.

Example output:

<code>
% artsnets arts.19990819
router:  192.172.226.1
ifIndex: 5 (Fddi0/1/0 198.17.46.56)
period:  08/19/1999 13:16:46 - 08/19/1999 13:23:10 EDT
         Src Network         Dst Network           Pkts          Bytes
  ------------------  ------------------  -------------  -------------
   128.223.161.22/32    224.2.128.143/32          16407       21366381
     192.52.106.0/24  192.172.226.128/27          15606        9822154
      141.142.0.0/16  192.172.226.128/27           9874        6936648
        209.1.0.0/16  192.172.226.128/27           4523        4434591
     128.182.64.0/18  192.172.226.128/27          12347        4374027
      209.249.0.0/16  192.172.226.128/27           2332        2926264
   209.133.123.90/32    224.2.172.238/32           3532        2365867
   128.197.160.29/32    224.2.177.155/32           3740        2310318
  128.223.215.225/32    224.2.176.111/32           1924        2218562
      209.132.0.0/17  192.172.226.128/27           2282        2096629
      128.174.0.0/16  192.172.226.128/27          11841        1307811
      216.200.0.0/16  192.172.226.128/27           1137        1220639
     204.71.192.0/20  192.172.226.128/27           1733        1206023
      63.224.64.0/19    192.172.226.0/26            826        1168984
     216.32.160.0/19   192.172.226.64/26            771         978894
    206.132.128.0/18  192.172.226.128/27           1004         939426
      192.215.0.0/16  192.172.226.128/27            844         926372
    192.203.230.0/24  192.172.226.128/27            326         904292
    216.184.128.0/17  192.172.226.128/27            680         856372
     192.92.126.0/24  192.172.226.128/27           6920         827154
    204.212.128.0/19  192.172.226.128/27           6863         815667
     216.121.96.0/19  192.172.226.128/27            543         791862
   205.253.57.105/32    224.2.177.155/32            783         771311
      209.133.0.0/17  192.172.226.128/27            773         725231
      163.178.0.0/16  192.172.226.128/27           5471         724441
   130.235.133.92/32    224.2.172.238/32            717         704138
   128.223.161.21/32     224.2.244.41/32            620         682022
    207.246.128.0/20  192.172.226.128/27            738         680724
        62.81.0.0/16  192.172.226.128/27           5493         665011
    130.240.60.42/32    224.2.172.238/32           1887         655525
     216.33.160.0/19  192.172.226.128/27            516         645244
       216.49.0.0/18  192.172.226.128/27            680         602690
  141.142.220.101/32    224.2.177.155/32            792         579586
      209.100.0.0/16    192.172.226.0/26            523         530971
     207.82.250.0/23  192.172.226.128/27            792         503945
      203.176.0.0/18  192.172.226.128/27           4477         463073
</code>

<sect2>artsportms
<p>

<tabular ca=ll>
<em>usage:</em> <colsep> <tt>artsportms [-v] [-p] [-i ifIndexList] [-l maxEntries] [-s srcPort] </tt> <rowsep>
  <colsep> <tt> [-d dstPort] infile(s)</tt> <rowsep>
</tabular>

<tt>artsportms</tt> displays a summary of each port matrix object in ARTS
files.  See the manpage (<em>artsportms(l)</em>) for more information.

Example output:

<code>
% artsportms arts.19990819
router:  192.172.226.1
ifIndex: 5 (Fddi0/1/0 198.17.46.56)
period:  08/19/1999 13:16:46 - 08/19/1999 13:23:10 EDT
  srcPort  dstPort           Pkts       Pkts/sec          Bytes       Bits/sec
  -------  -------  -------------  -------------  -------------  -------------
     1038    50562          16318        42.4948       21357457         444947
     3128     4104           2071        5.39323        3057562        63699.2
     3128     4023           1851        4.82031        2731545        56907.2
     2293    51482           3452        8.98958        2351575        48991.1
     1058    62268           1921         5.0026        2218278        46214.1
     1103    55524           2462        6.41146        2014681        41972.5
     3130     3130          12752        33.2083        1317970        27457.7
       80     3373            798        2.07812        1179520        24573.3
    30385      515            778        2.02604        1166636        24304.9
     3128     4125            217       0.565104         875645        18242.6
       80     3599            680        1.77083         856372        17841.1
       80     1495            836        2.17708         853562        17782.5
       80     2133            540        1.40625         791643        16492.6
       80     4089            785        2.04427         778601        16220.9
     1058    55524            783        2.03906         771311          16069
     1071    51482            717        1.86719         704138        14669.5
     1040    52382            614        1.59896         681386        14195.5
     8081     3130           6134         15.974         639488        13322.7
    38566    51482           1796        4.67708         637849        13288.5
       80     1664            538        1.40104         625192        13024.8
     3128     1088            167       0.434896         550598        11470.8
       80     1458            384              1         547682          11410
       80     1501            436        1.13542         513379        10695.4
     7213    55524            542        1.41146         502022        10458.8
       80     1204            415        1.08073         455316        9485.75
     3128     3983            375       0.976562         377234        7859.04
     3100    42616            250       0.651042         368798        7683.29
       80     2824            287       0.747396         349265        7276.35
       80     2488            268       0.697917         332975        6936.98
     8888     1974            320       0.833333         329596        6866.58
       80     4981            247       0.643229         323687        6743.48
     1057    28262            248       0.645833         321873        6705.69
     3128     3101            131       0.341146         300211         6254.4
     1616    55524            389        1.01302         287638        5992.46
       80     2568            208       0.541667         278268        5797.25
</code>

<sect2>artsports
<p>

<em>usage:</em> <tt>artsports [-v] [-n] [-p] [-t] [-i ifIndexList] [-l maxEntries] infile(s)</tt>

<tt>artsports</tt> displays a summary of each port table object and
selected port table object in ARTS files.  See the manpage
(<em>artsports(l)</em>) for more information.

Example output:

<code>
% artsports artsagg.19990819
router:  192.172.226.1
ifIndex: 5 (Fddi0/1/0 198.17.46.56)
period:  08/19/1999 13:16:46 - 08/19/1999 15:38:09 EDT
selected ports: 1-1024,6000,7070
           Port         InPkts        InBytes        OutPkts       OutBytes
          -----  -------------  -------------  -------------  -------------
              0        3842538     1558961934            183         135428
           http         108412        7767342        1156629     1213921483
        printer         103687      154890263              0              0
            ssh          36314        1861912         163627       54043036
         domain            741          47626          24727        6272662
           snmp          37196        3746994             93          15813
       ftp-data           7017         280892           1352        1991027
         svrloc              0              0           5153         831957
           6000           4513         753016              0              0
           smtp           1996         445836           2036         135266
         gopher              0              0            776         418897
            ftp           2805         161339           2290         188024
           pop3              0              0            668         347934
     netbios-ns              0              0           4230         329940
            ntp              0              0           2349         189996
           xfer              0              0             85          96798
             88              0              0            145          70664
            bgp            849          56001             79           3160
         sunrpc            434          58380              0              0
           1024             78          34979            117          17802
           nntp              0              0             60          41470
           auth            189           9250            312          15075
         bootps             74          24272              0              0
          https             10            976             84          23028
      hosts2-ns              0              0             33          21952
            ctf              0              0             17          18517
        nicname              0              0             20           9064
          dnsix              0              0             48           8920
     nameserver              0              0            149           7031
          shell              0              0             37           3718
          login              0              0             25           2992
        ocs_amu             12            756              0              0
       kerberos              4            432              0              0
           7070              0              0              4            339
    netbios-ssn              5            296              0              0
</code>

<sect2>artsprotos
<p>

<em>usage:</em> <tt>artsprotos [-v] [-n] [-p] [-i ifIndexList] infile(s)</tt>

<tt>artsprotos</tt> is a utility that reads protocol table objects
from ARTS files and displays a summary of their contents on stdout.
See the manpage (<em>artsprotos(l)</em>) for more information.

Example output:
<p>

<code>
% artsprotos arts.19990819
router:  192.172.226.1
ifIndex: 1 (Ethernet0/0/0 192.172.226.1)
period:  08/19/1999 13:16:46 - 08/19/1999 13:23:10 EDT
Protocol           Pkts       Pkts/sec          Bytes       Bits/sec
--------  -------------  -------------  -------------  -------------
     udp          10155             26        7278343         151632
    icmp          34042             88        1776480          37010
     tcp           3344              8         361827           7538

router:  192.172.226.1
ifIndex: 5 (Fddi0/1/0 198.17.46.56)
period:  08/19/1999 13:16:46 - 08/19/1999 13:23:10 EDT
Protocol           Pkts       Pkts/sec          Bytes       Bits/sec
--------  -------------  -------------  -------------  -------------
     tcp         128780            335       62367956        1299332
     udp          66574            173       37321072         777522
    icmp          20913             54        1267518          26406
    igmp              3              0            612             12

router:  192.172.226.1
ifIndex: 7 (FastEthernet2/0/0 192.172.226.65)
period:  08/19/1999 13:16:46 - 08/19/1999 13:23:10 EDT
Protocol           Pkts       Pkts/sec          Bytes       Bits/sec
--------  -------------  -------------  -------------  -------------
     tcp          16977             44        2235522          46573
     udp            112              0          11541            240
    icmp              9              0            556             11

router:  192.172.226.1
ifIndex: 8 (Fddi2/1/0 192.172.226.129)
period:  08/19/1999 13:16:46 - 08/19/1999 13:23:10 EDT
Protocol           Pkts       Pkts/sec          Bytes       Bits/sec
--------  -------------  -------------  -------------  -------------
     tcp         137215            357       98659010        2055396
     udp          27301             71        2878374          59966
    icmp           1803              4         133854           2788




</code>

<sect2>artstos
<p>

<em>usage:</em> <tt>artstos [-v] [-n] [-p] [-i ifIndexList] infile(s)</tt>

<tt>artstos</tt> is a utility that reads TOS table objects
from ARTS files and displays a summary of their contents on stdout.
See the manpage (<em>artstos(l)</em>) for more information.

Example output:
<p>
<code>
% artstos arts.19990819
router:  192.172.226.1
ifIndex: 5 (Fddi0/1/0 198.17.46.56)
period:  08/19/1999 13:23:13 - 08/19/1999 13:28:10 EDT
     TOS           Pkts       Pkts/sec          Bytes       Bits/sec
--------  -------------  -------------  -------------  -------------
       0         179070            602       83042852        2236844
       8           1751              5        1040714          28032
      16           4377             14         689586          18574
     192          10593             35         600186          16166
     160             79              0         108484           2922
     136              6              0            682             18
      41             12              0            656             17
     224              8              0            616             16
      96              3              0            164              4
</code>

<sect2>artsintfms
<p>

<em>usage:</em> <tt>artsintfms [-v] [-p] [-i ifIndexList] [-s srcIntfList] [-d dstIntfList] infile(s)</tt>

<tt>artsintfms</tt> displays a summary of each interface matrix object
in ARTS files.  See the manpage (<em>artsintfms(l)</em>) for more information.

Example output:

<code>
% artsintfms -i 1,5 arts.19990819
router:  192.172.226.1
ifIndex: 1 (Ethernet0/0/0 192.172.226.1)
period:  08/19/1999 13:16:46 - 08/19/1999 13:23:10 EDT
  SrcIntf  DstIntf           Pkts       Pkts/sec          Bytes       Bits/sec
  -------  -------  -------------  -------------  -------------  -------------
        1        0           8135        21.1849        7076762         147433
        1        5          38898        101.297        2245081        46772.5
        1        8            508        1.32292          94807        1975.15

router:  192.172.226.1
ifIndex: 5 (Fddi0/1/0 198.17.46.56)
period:  08/19/1999 13:16:46 - 08/19/1999 13:23:10 EDT
  SrcIntf  DstIntf           Pkts       Pkts/sec          Bytes       Bits/sec
  -------  -------  -------------  -------------  -------------  -------------
        5        8         147173        383.263       60293921    1.25612e+06
        5        0          38888        101.271       34223634         712992
        5        1          23364        60.8438        3248003        67666.7
        5        7           6845        17.8255        3191600        66491.7
</code>

<sect2>artsnexthops
<p>

<em>usage:</em> <tt>artsnexthops [-v] [-p] [-i ifIndexList] [-l maxEntries] infile(s)</tt>

<tt>artsnexthops</tt> is a utility that reads nexthop table objects
from ARTS files and displays a summary of their contents on stdout.  See the
manpage (<em>artsnexthops(l)</em>) for more information.

Example output:

<code>
% artsnexthops arts.19990819
router:  192.172.226.1
ifIndex: 1 (Ethernet0/0/0 192.172.226.1)
period:  08/19/1999 13:16:46 - 08/19/1999 13:23:10 EDT
        NextHop           Pkts       Pkts/sec          Bytes       Bits/sec
  -------------  -------------  -------------  -------------  -------------
        0.0.0.0           8135             21        7076762         147432
   198.17.46.10          37602             97        2052755          42765
  198.17.46.205            702              1         145110           3023
192.172.226.145            495              1          91916           1914
   198.17.46.43            507              1          40304            839
  198.17.46.110             67              0           5442            113
192.172.226.147             11              0           2625             54
  198.17.46.112             10              0            564             11
    198.17.46.1              4              0            483             10
   198.17.46.33              6              0            423              8
192.172.226.130              2              0            266              5

router:  192.172.226.1
ifIndex: 5 (Fddi0/1/0 198.17.46.56)
period:  08/19/1999 13:16:46 - 08/19/1999 13:23:10 EDT
        NextHop           Pkts       Pkts/sec          Bytes       Bits/sec
  -------------  -------------  -------------  -------------  -------------
192.172.226.145         123285            321       53931898        1123581
        0.0.0.0          38886            101       34222814         712975
192.172.226.146          23865             62        6359117         132481
 192.172.226.62            812              2        1168086          24335
192.172.226.110            918              2        1160614          24179
 192.172.226.24          18843             49        1109530          23115
 192.172.226.82            913              2         995412          20737
 192.172.226.35           1612              4         736684          15347
192.172.226.112           1780              4         500747          10432
 192.172.226.99            203              0         250952           5228
 192.172.226.30           1993              5         211179           4399
 192.172.226.89           2405              6         150416           3133
192.172.226.107            125              0          87562           1824
192.172.226.122            286              0          21316            444
192.172.226.113            174              0          20025            417
 192.172.226.16             68              0          19684            410
192.172.226.147             23              0           3558             74
192.172.226.104             21              0           2268             47
 192.172.226.44             16              0           1400             29
192.172.226.105              9              0           1384             28
</code>

<sect1>Aggregation Utilities
<p>

It is often useful to reduce the time domain granularity of ARTS
data, to produce summary reports of traffic over long time intervals.
The <tt>arts++</tt> package contains a handful of utilities to
aggregate some types of ARTS data in the time domain.  While these
are primarily examples of using features in the class library, they
are often useful utilities in their own right.

<sect2>artsagg
<p>

<tabular ca=rl>
<em>usage:</em> <colsep> <tt>artsagg [-v] [-i ifIndexList] [-I ifIndexList] [-s portlist] [-T objectTypes] </tt> <rowsep>
  <colsep> <tt> [-h hours] [-o] [-q] outfile infile(s)</tt> <rowsep>
</tabular>

<tt>artsagg</tt> reads AS matrix, net matrix, port matrix, protocol
table, TOS table, interface matrix and IP nexthop table objects from
ARTS files (<tt>infile(s)</tt>) and aggregates them in the time domain,
placing the resulting object(s) into an output file (<tt>outfile</tt>).
See the manpage (<em>artsagg(l)</em>) for more information.

<sect2>artsasagg
<p>

<tabular ca=ll>
<em>usage:</em> <colsep> <tt>artsasagg [-v] [-i ifIndexList] [-I ifIndexList] [-h hours] [-o] </tt> <rowsep>
  <colsep> <tt> [-q] outfile infile(s)</tt> <rowsep>
</tabular>

<tt>artsasagg</tt> reads AS matrix objects from ARTS files
(<tt>infile(s)</tt>) and aggregates them in the time domain, placing the
resulting AS matrix object(s) into an output file (<tt>outfile</tt>).
See the manpage (<em>artsasagg(l)</em>) for more information.

<sect2>artsnetagg
<p>
<tabular ca=ll>
<em>usage:</em> <colsep> <tt>artsnetagg [-v] [-i ifIndexList] [-I ifIndexList] [-h hours] [-o] </tt> <rowsep>
  <colsep> <tt> [-q] outfile infile(s)</tt> <rowsep>
</tabular>

<tt>artsnetagg</tt> reads net matrix objects from ARTS files
(<tt>infile(s)</tt>) and aggregates them in the time domain, placing the
resulting net matrix object(s) into an output file (<tt>outfile</tt>).
See the manpage (<em>artsnetagg(l)</em>) for more information.

<sect2>artsportmagg
<p>

<tabular ca=ll>
<em>usage:</em> <colsep> <tt>artsportmagg [-v] [-i ifIndexList] [-I ifIndexList] [-s portlist] [-h hours] </tt> <rowsep>
  <colsep> <tt> [-o] [-q] outfile infile(s)</tt> <rowsep>
</tabular>

<tt>artsportmagg</tt> reads port matrix objects from ARTS files
(<tt>infile(s)</tt>) and aggregates them in the time domain, placing the
resulting port matrix object(s) or selected port table objects into an
output file (<tt>outfile</tt>).  See the manpage
(<em>artsportmagg(l)</em>) for more information.

<sect2>artsprotoagg
<p>

<tabular ca=ll>
<em>usage:</em> <colsep> <tt>artsprotoagg [-v] [-i ifIndexList] [-I ifIndexList] [-h hours] [-o] </tt> <rowsep>
  <colsep> <tt> [-q] outfile infile(s)</tt> <rowsep>
</tabular>

<tt>artsprotoagg</tt> reads protocol table objects from ARTS files
(<tt>infile(s)</tt>) and aggregates them in the time domain, placing the
resulting protocol table object(s) into an output file
(<tt>outfile</tt>).  See the manpage (<em>artsprotoagg(l)</em>) for more
information.

<sect2>artsintfmagg
<p>

<tabular ca=ll>
<em>usage:</em> <colsep> <tt>artsintfmagg [-v] [-i ifIndexList] [-I ifIndexList] [-h hours] [-o] </tt> <rowsep>
  <colsep> <tt> [-q] outfile infile(s)</tt> <rowsep>
</tabular>

<tt>artsintfmagg</tt> reads interface matrix objects from ARTS files
(<tt>infile(s)</tt>) and aggregates them in the time domain, placing the
resulting interface matrix object(s) into an output file
(<tt>outfile</tt>).  See the manpage (<em>artsintfmagg(l)</em>) for more
information.

<sect2>artsnexthopagg
<p>

<tabular ca=ll>
<em>usage:</em> <colsep> <tt>artsnexthopagg [-v] [-i ifIndexList] [-I ifIndexList] [-q] [-o] </tt> <rowsep>
  <colsep> <tt> [-h hours] outfile infile(s)</tt> <rowsep>
</tabular>

<tt>artsnexthopagg</tt> reads nexthop table objects from ARTS files
(<tt>infile(s)</tt>) and aggregates them in the time domain, placing the
resulting nexthop table object(s) into an output file
(<tt>outfile</tt>).  See the manpage (<em>artsnexthopagg(l)</em>) for more
information.

</article>
