ng_source(4)
NAME
ng_source - netgraph node for traffic generation
SYNOPSIS
#include <sys/types.h> #include <netgraph/ng_source.h>
DESCRIPTION
- The source node acts as a source of packets according to the
- parameters
set up using control messages and input packets. The - ng_source node type
is used primarily for testing and benchmarking.
HOOKS
- The source node has two hooks: input and output. The output
- hook must
remain connected, its disconnection will shutdown the node.
OPERATION
- The operation of the node is as follows. Packets received
- on the input
hook are queued internally. When output hook is connected, - ng_source
node assumes that its neighbour node is of ng_ether(4) node - type. The
neighbour is queried for its interface name. The ng_source - node then
uses queue of the interface for its evil purposes. The - ng_source node
also disables autosrc option on neighbour ng_ether(4) node. - If interface
name cannot be obtained automatically, it should be config - ured explicitly
with the NGM_SOURCE_SETIFACE control message, and autosrc - should be
turned off on ng_ether(4) node manually. - Once interface is configured, upon receipt of a
- NGM_SOURCE_START control
message the node starts sending the previously queued pack - ets out the
output hook on every clock tick as fast as the connected in - terface will
take them. While active, on every clock tick the node - checks the available space in the interface queue and sends that many pack
- ets out its
output hook. Once the number of packets indicated in the - start message
has been sent, or upon receipt of a NGM_SOURCE_STOP message, - the node
stops sending data.
CONTROL MESSAGES
- This node type supports the generic control messages as well
- as the following, which must be sent with the NGM_SOURCE_COOKIE at
- tached.
- NGM_SOURCE_GET_STATS (getstats)
- Returns a structure containing the following fields:
- outOctets
The number of octets/bytes sent out theoutput hook.
- outFrames
- The number of frames/packets sent out the
- output hook.
- queueOctets
- The number of octets queued from the input
- hook.
- queueFrames
- The number of frames queued from the input
- hook.
- startTime
- The time the last start message was re
- ceived.
- endTime
- The time the last end message was received
- or the output
packet count was reached. - elapsedTime
- Either endTime - startTime or current time
- startTime.
- NGM_SOURCE_CLR_STATS (clrstats)
- Clears and resets the statistics returned by
- getstats (except
queueOctets and queueFrames). - NGM_SOURCE_GETCLR_STATS (getclrstats)
- As getstats but clears the statistics at the same
- time.
- NGM_SOURCE_START (start)
- This message requires a single uint64_t parameter
- which is the
number of packets to send before stopping. Node - starts sending
the queued packets out the output hook. The output - hook must be
connected and node must have interface configured. - NGM_SOURCE_STOP (stop)
- Stops the node if it is active.
- NGM_SOURCE_CLR_DATA (clrdata)
- Clears the packets queued from the input hook.
- NGM_SOURCE_SETIFACE (setiface)
- This message requires the name of the interface to
- be configured
as an argument. - NGM_SOURCE_SETPPS (setpps)
- This message requires a single uint32_t parameter
- which puts
upper limit on the amount of packets sent per sec - ond.
SHUTDOWN
- This node shuts down upon receipt of a NGM_SHUTDOWN control
- message, when
all hooks have been disconnected, or when the output hook - has been disconnected.
EXAMPLES
- Attach the node to an ng_ether(4) node for an interface. If
- ng_ether is
not already loaded you will need to do so. For example, - these commands
load the ng_ether module and attach the output hook of a new - source node
to orphans hook of the bge0: ng_ether node.
kldload ng_ether
ngctl mkpeer bge0: source orphans output- At this point the new node can be referred to as ``bge0:or
- phans''. The
node can be given its own name like this:
ngctl name bge0:orphans src0- After which it can be referred to as ``src0:''.
- Once created, packets need to be sent to the node, the TCL
- net package
can be used to generate these packets: - [Sandvine specific TCL code example omitted]
- To feed the output of the above TCL script to the source
- node's input
hook via nghook(8):
tcl genPacket | nghook bge0:orphans input- To check that the node has queued these packets you can get
- the node
statistics:
ngctl msg bge0:orphans getstats
Args: { queueOctets=64 queueFrames=1 }- Send as many packets as required out the output hook:
ngctl msg bge0:orphans start 16- Either wait for them to be sent (periodically fetching stats
- if desired)
or send the stop message:
ngctl msg bge0:orphans stop- Check the statistics (here we use getclrstats to also clear
- the statistics):
ngctl msg bge0:orphans getclrstats
Args: { outOctets=1024 outFrames=16 queueOctets=64- queueFrames=1
startTime={ tv_sec=1035305880 tv_usec=758036 } end - Time={ tv_sec=1035305880
tv_usec=759041 } elapsedTime={ tv_usec=1005 } } - The times are from struct timevals, the tv_sec field is sec
- onds since the
Epoch and can be converted into a date string via TCL's - [clock format] or
via the date(1) command:
date -r 1035305880
Tue Oct 22 12:58:00 EDT 2002
SEE ALSO
HISTORY
The ng_source node type was implemented in FreeBSD 4.8.
AUTHORS
- Dave Chapeskie <dchapeskie@SANDVINE.com>
- BSD December 5, 2005