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: src/sys/netgraph/ng_tag.h,v 1.1 2006/06/27 12:45:28 glebius Exp $ 28 * $DragonFly: src/sys/netgraph7/ng_tag.h,v 1.2 2008/06/26 23:05:35 dillon Exp $ 29 */ 30 31 #ifndef _NETGRAPH_NG_TAG_H_ 32 #define _NETGRAPH_NG_TAG_H_ 33 34 /* Node type name and magic cookie. */ 35 #define NG_TAG_NODE_TYPE "tag" 36 #define NGM_TAG_COOKIE 1149771193 37 38 /* 39 * The types of tag_cookie, tag_len and tag_id in structures below 40 * must be the same as corresponding members m_tag_cookie, m_tag_len 41 * and m_tag_id in struct m_tag (defined in <sys/mbuf.h>). 42 */ 43 44 /* Tag match structure for every (input) hook. */ 45 struct ng_tag_hookin { 46 char thisHook[NG_HOOKSIZ]; /* name of hook */ 47 char ifMatch[NG_HOOKSIZ]; /* match dest hook */ 48 char ifNotMatch[NG_HOOKSIZ]; /* !match dest hook */ 49 uint8_t strip; /* strip tag if found */ 50 uint32_t tag_cookie; /* ABI/Module ID */ 51 uint16_t tag_id; /* tag ID */ 52 uint16_t tag_len; /* length of data */ 53 uint8_t tag_data[0]; /* tag data */ 54 }; 55 56 /* Tag set structure for every (output) hook. */ 57 struct ng_tag_hookout { 58 char thisHook[NG_HOOKSIZ]; /* name of hook */ 59 uint32_t tag_cookie; /* ABI/Module ID */ 60 uint16_t tag_id; /* tag ID */ 61 uint16_t tag_len; /* length of data */ 62 uint8_t tag_data[0]; /* tag data */ 63 }; 64 65 #define NG_TAG_HOOKIN_SIZE(taglen) \ 66 (sizeof(struct ng_tag_hookin) + (taglen)) 67 68 #define NG_TAG_HOOKOUT_SIZE(taglen) \ 69 (sizeof(struct ng_tag_hookout) + (taglen)) 70 71 /* Keep this in sync with the above structures definitions. */ 72 #define NG_TAG_HOOKIN_TYPE_INFO(tdtype) { \ 73 { "thisHook", &ng_parse_hookbuf_type }, \ 74 { "ifMatch", &ng_parse_hookbuf_type }, \ 75 { "ifNotMatch", &ng_parse_hookbuf_type }, \ 76 { "strip", &ng_parse_uint8_type }, \ 77 { "tag_cookie", &ng_parse_uint32_type }, \ 78 { "tag_id", &ng_parse_uint16_type }, \ 79 { "tag_len", &ng_parse_uint16_type }, \ 80 { "tag_data", (tdtype) }, \ 81 { NULL } \ 82 } 83 84 #define NG_TAG_HOOKOUT_TYPE_INFO(tdtype) { \ 85 { "thisHook", &ng_parse_hookbuf_type }, \ 86 { "tag_cookie", &ng_parse_uint32_type }, \ 87 { "tag_id", &ng_parse_uint16_type }, \ 88 { "tag_len", &ng_parse_uint16_type }, \ 89 { "tag_data", (tdtype) }, \ 90 { NULL } \ 91 } 92 93 #ifdef NG_TAG_DEBUG 94 95 /* Statistics structure for one hook. */ 96 struct ng_tag_hookstat { 97 uint64_t recvFrames; 98 uint64_t recvOctets; 99 uint64_t recvMatchFrames; 100 uint64_t recvMatchOctets; 101 uint64_t xmitFrames; 102 uint64_t xmitOctets; 103 }; 104 105 /* Keep this in sync with the above structure definition. */ 106 #define NG_TAG_HOOKSTAT_TYPE_INFO { \ 107 { "recvFrames", &ng_parse_uint64_type }, \ 108 { "recvOctets", &ng_parse_uint64_type }, \ 109 { "recvMatchFrames", &ng_parse_uint64_type }, \ 110 { "recvMatchOctets", &ng_parse_uint64_type }, \ 111 { "xmitFrames", &ng_parse_uint64_type }, \ 112 { "xmitOctets", &ng_parse_uint64_type }, \ 113 { NULL } \ 114 } 115 116 #endif /* NG_TAG_DEBUG */ 117 118 /* Netgraph commands. */ 119 enum { 120 NGM_TAG_SET_HOOKIN = 1, /* supply a struct ng_tag_hookin */ 121 NGM_TAG_GET_HOOKIN, /* returns a struct ng_tag_hookin */ 122 NGM_TAG_SET_HOOKOUT, /* supply a struct ng_tag_hookout */ 123 NGM_TAG_GET_HOOKOUT, /* returns a struct ng_tag_hookout */ 124 #ifdef NG_TAG_DEBUG 125 NGM_TAG_GET_STATS, /* supply name as char[NG_HOOKSIZ] */ 126 NGM_TAG_CLR_STATS, /* supply name as char[NG_HOOKSIZ] */ 127 NGM_TAG_GETCLR_STATS, /* supply name as char[NG_HOOKSIZ] */ 128 #endif 129 }; 130 131 #endif /* _NETGRAPH_NG_TAG_H_ */ 132