Argus 2.0 Record Changes
Carter Bullard
carter at qosient.com
Tue Jul 11 08:10:05 EDT 2000
Gentle people,
I would like to start talking about the fundamental
changes in the record formats for Argus-2.0. Consider
this a starting point for discussion, as these structures
etc... should not be considered complete. Please feel
free to make any statements, comments, suggestions,
outbursts, whatever.
Currently Argus records have this basic format:
struct WriteStruct {
arg_uint32 status;
union {
struct ipWriteStruct ip;
struct arpWriteStruct arp;
struct manInitStruct man_init;
struct manStatStruct man_stat;
} ws_trans_union;
};
I would like to propose extending it to:
struct ArgusStruct {
uint32 sourceId; /* Originating Argi (can be an IP address) */
uint32 seqNumber; /* Sequence number */
uint32 status; /* Argus record status indications */
union {
struct manArgusStruct man;
struct dataArgusStruct data;
} ws_trans_union;
};
The sourceId is needed so we can know who/what generated the Argus
record, the seqNumber gives us some reliability in transport,
and the status answers the questions what type of record and
why was it generated.
I'd like to focus on the data records for this discussion.
struct dataArgusStruct {
timeval startTime; /* Flow report start time in secs, microsecs */
uint32 duration; /* duration in microseconds */
uint32 transactionId; /* Argus tracking ID number */
struct flowStruct; /* Argus flow descriptor */
struct meterStruct; /* Argus meter values (bytes, pkts, etc) */
struct userDataStruct; /* Snapshot (first X bytes) of User data */
};
A proposed flowStruct would include the link, network, and
transport layer flow descriptors, and any MPLS or VLAN tags
that maybe around.
struct flowStruct {
union {
struct etherStruct ether;
struct fddiStruct fddi;
struct atmStruct atm;
struct pppStruct ppp;
} arg_link_descriptor;
union {
struct mplsStruct mpls;
struct vlanPStruct vlan;
} arg_tag_descriptor;
union {
struct ipV4Struct ipV4;
struct ipV6Struct ipV6;
struct arpStruct arp;
struct dhcpStruct dhcp;
} arg_network_descriptor;
union {
struct tcpStruct tcp;
struct udpStruct udp;
struct icmpStruct icmp;
struct igmpStruct igmp;
struct fragStruct frag;
} arg_transport_descriptor;
};
And the meterStruct would contain all the data values.
struct meterStruct {
struct flowMeterStruct src, dst;
};
struct flowMeterStruct {
uint32 pkts, bytes;
uint32 droppkts, dropbytes; /* this may be retransmitted or dropped */
struct ArgusStat activetime, idletime;
};
struct ArgusStat {
uint32 min, max, mean;
};
More information about the argus
mailing list