1/*- 2 * Copyright (c) 2006 Vadim Goncharov <vadimnuclight@tpu.ru> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice unmodified, this list of conditions, and the following 10 * disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 * 27 * $FreeBSD$ 28 */ 29 30#ifndef _NETGRAPH_NG_TAG_H_ 31#define _NETGRAPH_NG_TAG_H_ 32 33/* Node type name and magic cookie. */ 34#define NG_TAG_NODE_TYPE "tag" 35#define NGM_TAG_COOKIE 1149771193 36 37/* 38 * The types of tag_cookie, tag_len and tag_id in structures below 39 * must be the same as corresponding members m_tag_cookie, m_tag_len 40 * and m_tag_id in struct m_tag (defined in <sys/mbuf.h>). 41 */ 42 43/* Tag match structure for every (input) hook. */ 44struct ng_tag_hookin { 45 char thisHook[NG_HOOKSIZ]; /* name of hook */ 46 char ifMatch[NG_HOOKSIZ]; /* match dest hook */ 47 char ifNotMatch[NG_HOOKSIZ]; /* !match dest hook */ 48 uint8_t strip; /* strip tag if found */ 49 uint32_t tag_cookie; /* ABI/Module ID */ 50 uint16_t tag_id; /* tag ID */ 51 uint16_t tag_len; /* length of data */ 52 uint8_t tag_data[0]; /* tag data */ 53}; 54 55/* Tag set structure for every (output) hook. */ 56struct ng_tag_hookout { 57 char thisHook[NG_HOOKSIZ]; /* name of hook */ 58 uint32_t tag_cookie; /* ABI/Module ID */ 59 uint16_t tag_id; /* tag ID */ 60 uint16_t tag_len; /* length of data */ 61 uint8_t tag_data[0]; /* tag data */ 62}; 63 64#define NG_TAG_HOOKIN_SIZE(taglen) \ 65 (sizeof(struct ng_tag_hookin) + (taglen)) 66 67#define NG_TAG_HOOKOUT_SIZE(taglen) \ 68 (sizeof(struct ng_tag_hookout) + (taglen)) 69 70/* Keep this in sync with the above structures definitions. */ 71#define NG_TAG_HOOKIN_TYPE_INFO(tdtype) { \ 72 { "thisHook", &ng_parse_hookbuf_type }, \ 73 { "ifMatch", &ng_parse_hookbuf_type }, \ 74 { "ifNotMatch", &ng_parse_hookbuf_type }, \ 75 { "strip", &ng_parse_uint8_type }, \ 76 { "tag_cookie", &ng_parse_uint32_type }, \ 77 { "tag_id", &ng_parse_uint16_type }, \ 78 { "tag_len", &ng_parse_uint16_type }, \ 79 { "tag_data", (tdtype) }, \ 80 { NULL } \ 81} 82 83#define NG_TAG_HOOKOUT_TYPE_INFO(tdtype) { \ 84 { "thisHook", &ng_parse_hookbuf_type }, \ 85 { "tag_cookie", &ng_parse_uint32_type }, \ 86 { "tag_id", &ng_parse_uint16_type }, \ 87 { "tag_len", &ng_parse_uint16_type }, \ 88 { "tag_data", (tdtype) }, \ 89 { NULL } \ 90} 91 92#ifdef NG_TAG_DEBUG 93 94/* Statistics structure for one hook. */ 95struct ng_tag_hookstat { 96 uint64_t recvFrames; 97 uint64_t recvOctets; 98 uint64_t recvMatchFrames; 99 uint64_t recvMatchOctets; 100 uint64_t xmitFrames; 101 uint64_t xmitOctets; 102}; 103 104/* Keep this in sync with the above structure definition. */ 105#define NG_TAG_HOOKSTAT_TYPE_INFO { \ 106 { "recvFrames", &ng_parse_uint64_type }, \ 107 { "recvOctets", &ng_parse_uint64_type }, \ 108 { "recvMatchFrames", &ng_parse_uint64_type }, \ 109 { "recvMatchOctets", &ng_parse_uint64_type }, \ 110 { "xmitFrames", &ng_parse_uint64_type }, \ 111 { "xmitOctets", &ng_parse_uint64_type }, \ 112 { NULL } \ 113} 114 115#endif /* NG_TAG_DEBUG */ 116 117/* Netgraph commands. */ 118enum { 119 NGM_TAG_SET_HOOKIN = 1, /* supply a struct ng_tag_hookin */ 120 NGM_TAG_GET_HOOKIN, /* returns a struct ng_tag_hookin */ 121 NGM_TAG_SET_HOOKOUT, /* supply a struct ng_tag_hookout */ 122 NGM_TAG_GET_HOOKOUT, /* returns a struct ng_tag_hookout */ 123#ifdef NG_TAG_DEBUG 124 NGM_TAG_GET_STATS, /* supply name as char[NG_HOOKSIZ] */ 125 NGM_TAG_CLR_STATS, /* supply name as char[NG_HOOKSIZ] */ 126 NGM_TAG_GETCLR_STATS, /* supply name as char[NG_HOOKSIZ] */ 127#endif 128}; 129 130#endif /* _NETGRAPH_NG_TAG_H_ */ 131