freebsd-nq/sys/netgraph/ng_source.h
Gleb Smirnoff d8f5d037f8 Major overhaul and cleanup of ng_source node.
Functional changes:
- Cut struct source_hookinfo. Just use hook_p pointer.
- Remove "start_now" command. "start" command now requires number of
  packets to send as argument. "start" command actually starts sending.
  Move the code that actually starts sending from ng_source_rcvmsg()
  to ng_source_start().
- Remove check for NG_SOURCE_ACTIVE in ng_source_stop(). We can be called
  with flag cleared (see begin of ng_source_intr()).
- If NG_SEND_DATA_ONLY() use log(LOG_DEBUG) instead of printf(). Otherwise
  we will *flood* console.
- Add ng_connect_t method, which sends NGM_ETHER_GET_IFNAME command
  to "output" hook. Cut ng_source_request_output_ifp(). Refactor
  ng_source_store_output_ifp() to use ifunit() and don't muck through
  interface list.
- Add "setiface" command, which gives ability to configure interface
  in case when ng_source_connect() failed. This happens, when we are not
  connected directly to ng_ether(4) node.
- Remove KASSERTs, which can never fire.
- Don't check for M_PKTHDR in rcvdata method. netgraph(4) does this
  for us.

Style:
- Assign sc_p = NG_NODE_PRIVATE(node) in declaration, to be
  consistent with style of other nodes.
- Sort variables.
- u_intXX -> uintXX.
- Dots at ends of comments.

Sponsored by:   Rambler
2005-04-05 17:22:05 +00:00

89 lines
3.3 KiB
C

/*
* ng_source.h
*/
/*-
* Copyright 2002 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 <dchapeskie@sandvine.com>
*
* $FreeBSD$
*/
#ifndef _NETGRAPH_NG_SOURCE_H_
#define _NETGRAPH_NG_SOURCE_H_
/* Node type name and magic cookie */
#define NG_SOURCE_NODE_TYPE "source"
#define NGM_SOURCE_COOKIE 1110646684
/* Hook names */
#define NG_SOURCE_HOOK_INPUT "input"
#define NG_SOURCE_HOOK_OUTPUT "output"
/* Statistics structure returned by NGM_SOURCE_GET_STATS */
struct ng_source_stats {
u_int64_t outOctets;
u_int64_t outFrames;
u_int32_t queueOctets;
u_int32_t queueFrames;
struct timeval startTime;
struct timeval endTime;
struct timeval elapsedTime;
};
extern const struct ng_parse_type ng_source_timeval_type;
/* Keep this in sync with the above structure definition */
#define NG_SOURCE_STATS_TYPE_INFO { \
{ "outOctets", &ng_parse_uint64_type }, \
{ "outFrames", &ng_parse_uint64_type }, \
{ "queueOctets", &ng_parse_uint32_type }, \
{ "queueFrames", &ng_parse_uint32_type }, \
{ "startTime", &ng_source_timeval_type }, \
{ "endTime", &ng_source_timeval_type }, \
{ "elapsedTime", &ng_source_timeval_type }, \
{ NULL } \
}
/* Netgraph commands */
enum {
NGM_SOURCE_GET_STATS = 1, /* get stats */
NGM_SOURCE_CLR_STATS, /* clear stats */
NGM_SOURCE_GETCLR_STATS, /* atomically get and clear stats */
NGM_SOURCE_START, /* start sending queued data */
NGM_SOURCE_STOP, /* stop sending queued data */
NGM_SOURCE_CLR_DATA, /* clear the queued data */
NGM_SOURCE_SETIFACE, /* configure downstream iface */
};
#endif /* _NETGRAPH_NG_SOURCE_H_ */