diff options
Diffstat (limited to 'share/man/man4/ng_source.4')
-rw-r--r-- | share/man/man4/ng_source.4 | 349 |
1 files changed, 349 insertions, 0 deletions
diff --git a/share/man/man4/ng_source.4 b/share/man/man4/ng_source.4 new file mode 100644 index 0000000..7c55751 --- /dev/null +++ b/share/man/man4/ng_source.4 @@ -0,0 +1,349 @@ +.\" Copyright 2002-2007 Sandvine Inc. +.\" All rights reserved. +.\" +.\" Subject to the following obligations and disclaimer of warranty, use and +.\" redistribution of this software, in source or object code forms, with or +.\" without modifications are expressly permitted by Sandvine Inc.; provided, +.\" however, that: +.\" 1. Any and all reproductions of the source or object code must include the +.\" copyright notice above and the following disclaimer of warranties; and +.\" 2. No rights are granted, in any manner or form, to use Sandvine Inc. +.\" trademarks, including the mark "SANDVINE" on advertising, endorsements, +.\" or otherwise except as such appears in the above copyright notice or in +.\" the software. +.\" +.\" THIS SOFTWARE IS BEING PROVIDED BY SANDVINE "AS IS", AND TO THE MAXIMUM +.\" EXTENT PERMITTED BY LAW, SANDVINE MAKES NO REPRESENTATIONS OR WARRANTIES, +.\" EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, +.\" ANY AND ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +.\" PURPOSE, OR NON-INFRINGEMENT. SANDVINE DOES NOT WARRANT, GUARANTEE, OR +.\" MAKE ANY REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE +.\" USE OF THIS SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY +.\" OR OTHERWISE. IN NO EVENT SHALL SANDVINE BE LIABLE FOR ANY DAMAGES +.\" RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING +.\" WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +.\" PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR +.\" SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +.\" THIS SOFTWARE, EVEN IF SANDVINE IS ADVISED OF THE POSSIBILITY OF SUCH +.\" DAMAGE. +.\" +.\" Author: Dave Chapeskie +.\" $FreeBSD$ +.\" +.Dd March 1, 2007 +.Dt NG_SOURCE 4 +.Os +.Sh NAME +.Nm ng_source +.Nd netgraph node for traffic generation +.Sh SYNOPSIS +.In sys/types.h +.In netgraph/ng_source.h +.Sh DESCRIPTION +The +.Nm source +node acts as a source of packets according to the parameters set up +using control messages and input packets. +The +.Nm +node type is used primarily for testing and benchmarking. +.Sh HOOKS +The +.Nm source +node has two hooks: +.Va input +and +.Va output . +The +.Va output +hook must remain connected, its disconnection will shutdown the node. +.Sh OPERATION +The operation of the node is as follows. +Packets received on the +.Va input +hook are queued internally. +When +.Va output +hook is connected, +.Nm +node assumes that its neighbour node is of +.Xr ng_ether 4 +node type. +The neighbour is queried for its interface name. +The +.Nm +node then uses queue of the interface for its evil purposes. +The +.Nm +node also disables +.Va autosrc +option on neighbour +.Xr ng_ether 4 +node. +If interface name cannot be obtained automatically, it should +be configured explicitly with the +.Dv NGM_SOURCE_SETIFACE +control message, and +.Va autosrc +should be turned off on +.Xr ng_ether 4 +node manually. +.Pp +Once interface is configured, upon receipt of a +.Dv NGM_SOURCE_START +control message the node starts sending +the previously queued packets out the +.Va output +hook on every clock tick as fast +as the connected interface will take them. +While active, on every clock tick the node checks the available space +in the interface queue and sends that many packets out its +.Va output +hook. +Once the number of packets indicated in the start message has been +sent, or upon receipt of a +.Dv NGM_SOURCE_STOP +message, the node stops sending data. +.Sh CONTROL MESSAGES +This node type supports the generic control messages as well as the following, +which must be sent with the +.Dv NGM_SOURCE_COOKIE +attached. +.Bl -tag -width indent +.It Dv NGM_SOURCE_GET_STATS Pq Ic getstats +Returns a structure containing the following fields: +.Bl -tag -width indent +.It Va outOctets +The number of octets/bytes sent out the +.Va output +hook. +.It Va outFrames +The number of frames/packets sent out the +.Va output +hook. +.It Va queueOctets +The number of octets queued from the +.Va input +hook. +.It Va queueFrames +The number of frames queued from the +.Va input +hook. +.It Va startTime +The time the last start message was received. +.It Va endTime +The time the last end message was received or +the output packet count was reached. +.It Va elapsedTime +Either +.Va endTime Li \- Va startTime +or current time +\- +.Va startTime . +.El +.It Dv NGM_SOURCE_CLR_STATS Pq Ic clrstats +Clears and resets the statistics returned by +.Ic getstats +(except +.Va queueOctets +and +.Va queueFrames ) . +.It Dv NGM_SOURCE_GETCLR_STATS Pq Ic getclrstats +As +.Ic getstats +but clears the statistics at the same time. +.It Dv NGM_SOURCE_START Pq Ic start +This message requires a single +.Vt uint64_t +parameter which is the number of packets to +send before stopping. +Node starts sending the queued packets out the +.Va output +hook. +The +.Va output +hook must be connected and node must have +interface configured. +.It Dv NGM_SOURCE_STOP Pq Ic stop +Stops the node if it is active. +.It Dv NGM_SOURCE_CLR_DATA Pq Ic clrdata +Clears the packets queued from the +.Va input +hook. +.It Dv NGM_SOURCE_SETIFACE Pq Ic setiface +This message requires the name of the interface +to be configured as an argument. +.It Dv NGM_SOURCE_SETPPS Pq Ic setpps +This message requires a single +.Vt uint32_t +parameter which puts upper limit on the amount of packets +sent per second. +.It Dv NGM_SOURCE_SET_TIMESTAMP Pq Ic settimestamp +This message specifies that a timestamp (in the format of a +.Vt "struct timeval" ) +should be inserted in the transmitted packets. +This message requires a structure containing the following fields: +.Bl -tag -width indent +.It Va offset +The offset from the beginning of the packet at which the timestamp is to be +inserted. +.It Va flags +Set to 1 to enable the timestamp. +.El +.It Dv NGM_SOURCE_GET_TIMESTAMP Pq Ic gettimestamp +Returns the current timestamp settings in the form of the structure described +above. +.It Dv NGM_SOURCE_SET_COUNTER Pq Ic setcounter +This message specifies that a counter should be embedded in transmitted +packets. +Up to four counters may be independently configured. +This message requires a structure containing the following fields: +.Bl -tag -width indent +.It Va offset +The offset from the beginning of the packet at which the counter is to be +inserted. +.It Va flags +Set to 1 to enable the counter. +.It Va width +The byte width of the counter. +It may be 1, 2, or 4. +.It Va next_val +The value for the next insertion of the counter. +.It Va min_val +The minimum value to be used by the counter. +.It Va max_val +The maximum value to be used by the counter. +.It Va increment +The value to be added to the counter after each insertion. +It may be negative. +.It Va index +The counter to be configured, from 0 to 3. +.El +.It Dv NGM_SOURCE_GET_COUNTER Pq Ic getcounter +This message requires a single +.Vt uint8_t +parameter which specifies the counter to query. +Returns the current counter settings in the form of the structure described +above. +.El +.Sh SHUTDOWN +This node shuts down upon receipt of a +.Dv NGM_SHUTDOWN +control message, when all hooks have been disconnected, or when the +.Va output +hook has been disconnected. +.Sh EXAMPLES +Attach the node to an +.Xr ng_ether 4 +node for an interface. +If +.Nm ng_ether +is +not already loaded you will need to do so. +For example, these commands +load the +.Nm ng_ether +module and attach the +.Va output +hook of a new +.Nm source +node to +.Va orphans +hook of the +.Li bge0: +.Nm ng_ether +node. +.Bd -literal -offset indent +kldload ng_ether +ngctl mkpeer bge0: source orphans output +.Ed +.Pp +At this point the new node can be referred to as +.Dq Li bge0:orphans . +The +node can be given its own name like this: +.Pp +.Dl "ngctl name bge0:orphans src0" +.Pp +After which it can be referred to as +.Dq Li src0: . +.Pp +Once created, packets can be sent to the node as raw binary data. +Each packet must be delivered in a separate netgraph message. +.Pp +The following example uses a short Perl script to convert the hex +representation of an ICMP packet to binary and deliver it to the +.Nm source +node's +.Va input +hook via +.Xr nghook 8 : +.Bd -literal -offset indent +perl -pe 's/(..)[ \et\en]*/chr(hex($1))/ge' <<EOF | nghook src0: input +ff ff ff ff ff ff 00 00 00 00 00 00 08 00 45 00 +00 54 cb 13 00 00 40 01 b9 87 c0 a8 2b 65 0a 00 +00 01 08 00 f8 d0 c9 76 00 00 45 37 01 73 00 01 +04 0a 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 +16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 +26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 +36 37 +EOF +.Ed +.Pp +To check that the node has queued these packets you can get the node +statistics: +.Bd -literal -offset indent +ngctl msg bge0:orphans getstats +Args: { queueOctets=64 queueFrames=1 } +.Ed +.Pp +Send as many packets as required out the +.Va output +hook: +.Pp +.Dl "ngctl msg bge0:orphans start 16" +.Pp +Either wait for them to be sent (periodically fetching stats if desired) +or send the stop message: +.Pp +.Dl "ngctl msg bge0:orphans stop" +.Pp +Check the statistics (here we use +.Ic getclrstats +to also clear the statistics): +.Bd -literal -offset indent +ngctl msg bge0:orphans getclrstats +Args: { outOctets=1024 outFrames=16 queueOctets=64 queueFrames=1 +startTime={ tv_sec=1035305880 tv_usec=758036 } endTime={ tv_sec=1035305880 +tv_usec=759041 } elapsedTime={ tv_usec=1005 } } +.Ed +.Pp +The times are from +.Vt "struct timeval" Ns s , +the +.Va tv_sec +field is seconds since +the Epoch and can be converted into a date string via TCL's [clock +format] or via the +.Xr date 1 +command: +.Bd -literal -offset indent +date -r 1035305880 +Tue Oct 22 12:58:00 EDT 2002 +.Ed +.Sh SEE ALSO +.Xr netgraph 4 , +.Xr ng_echo 4 , +.Xr ng_hole 4 , +.Xr ng_tee 4 , +.Xr ngctl 8 , +.Xr nghook 8 +.Sh HISTORY +The +.Nm +node type was implemented in +.Fx 4.8 . +.Sh AUTHORS +.An Dave Chapeskie |