1*d7373c82SJulian Elischer /*- 2*d7373c82SJulian Elischer * Copyright (c) 2015 Dmitry Vagin <daemon.hammer@ya.ru> 3*d7373c82SJulian Elischer * All rights reserved. 4*d7373c82SJulian Elischer * 5*d7373c82SJulian Elischer * Redistribution and use in source and binary forms, with or without 6*d7373c82SJulian Elischer * modification, are permitted provided that the following conditions 7*d7373c82SJulian Elischer * are met: 8*d7373c82SJulian Elischer * 1. Redistributions of source code must retain the above copyright 9*d7373c82SJulian Elischer * notice, this list of conditions and the following disclaimer. 10*d7373c82SJulian Elischer * 2. Redistributions in binary form must reproduce the above copyright 11*d7373c82SJulian Elischer * notice, this list of conditions and the following disclaimer in the 12*d7373c82SJulian Elischer * documentation and/or other materials provided with the distribution. 13*d7373c82SJulian Elischer * 14*d7373c82SJulian Elischer * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*d7373c82SJulian Elischer * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*d7373c82SJulian Elischer * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*d7373c82SJulian Elischer * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*d7373c82SJulian Elischer * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*d7373c82SJulian Elischer * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*d7373c82SJulian Elischer * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*d7373c82SJulian Elischer * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*d7373c82SJulian Elischer * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*d7373c82SJulian Elischer * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*d7373c82SJulian Elischer * SUCH DAMAGE. 25*d7373c82SJulian Elischer */ 26*d7373c82SJulian Elischer 27*d7373c82SJulian Elischer #ifndef _NETGRAPH_NG_CHECKSUM_H_ 28*d7373c82SJulian Elischer #define _NETGRAPH_NG_CHECKSUM_H_ 29*d7373c82SJulian Elischer 30*d7373c82SJulian Elischer /* Node type name. */ 31*d7373c82SJulian Elischer #define NG_CHECKSUM_NODE_TYPE "checksum" 32*d7373c82SJulian Elischer 33*d7373c82SJulian Elischer /* Node type cookie. */ 34*d7373c82SJulian Elischer #define NGM_CHECKSUM_COOKIE 439419912 35*d7373c82SJulian Elischer 36*d7373c82SJulian Elischer /* Hook names */ 37*d7373c82SJulian Elischer #define NG_CHECKSUM_HOOK_IN "in" 38*d7373c82SJulian Elischer #define NG_CHECKSUM_HOOK_OUT "out" 39*d7373c82SJulian Elischer 40*d7373c82SJulian Elischer /* Checksum flags */ 41*d7373c82SJulian Elischer #define NG_CHECKSUM_CSUM_IPV4 (CSUM_IP|CSUM_TCP|CSUM_UDP) 42*d7373c82SJulian Elischer #define NG_CHECKSUM_CSUM_IPV6 (CSUM_TCP_IPV6|CSUM_UDP_IPV6) 43*d7373c82SJulian Elischer 44*d7373c82SJulian Elischer /* Netgraph commands understood by this node type */ 45*d7373c82SJulian Elischer enum { 46*d7373c82SJulian Elischer NGM_CHECKSUM_GETDLT = 1, 47*d7373c82SJulian Elischer NGM_CHECKSUM_SETDLT, 48*d7373c82SJulian Elischer NGM_CHECKSUM_GETCONFIG, 49*d7373c82SJulian Elischer NGM_CHECKSUM_SETCONFIG, 50*d7373c82SJulian Elischer NGM_CHECKSUM_GETCLR_STATS, 51*d7373c82SJulian Elischer NGM_CHECKSUM_GET_STATS, 52*d7373c82SJulian Elischer NGM_CHECKSUM_CLR_STATS, 53*d7373c82SJulian Elischer }; 54*d7373c82SJulian Elischer 55*d7373c82SJulian Elischer /* Parsing declarations */ 56*d7373c82SJulian Elischer 57*d7373c82SJulian Elischer #define NG_CHECKSUM_CONFIG_TYPE { \ 58*d7373c82SJulian Elischer { "csum_flags", &ng_parse_uint64_type }, \ 59*d7373c82SJulian Elischer { "csum_offload", &ng_parse_uint64_type }, \ 60*d7373c82SJulian Elischer { NULL } \ 61*d7373c82SJulian Elischer } 62*d7373c82SJulian Elischer 63*d7373c82SJulian Elischer #define NG_CHECKSUM_STATS_TYPE { \ 64*d7373c82SJulian Elischer { "Received", &ng_parse_uint64_type }, \ 65*d7373c82SJulian Elischer { "Processed", &ng_parse_uint64_type }, \ 66*d7373c82SJulian Elischer { "Dropped", &ng_parse_uint64_type }, \ 67*d7373c82SJulian Elischer { NULL } \ 68*d7373c82SJulian Elischer } 69*d7373c82SJulian Elischer 70*d7373c82SJulian Elischer struct ng_checksum_config { 71*d7373c82SJulian Elischer uint64_t csum_flags; 72*d7373c82SJulian Elischer uint64_t csum_offload; 73*d7373c82SJulian Elischer }; 74*d7373c82SJulian Elischer 75*d7373c82SJulian Elischer struct ng_checksum_stats { 76*d7373c82SJulian Elischer uint64_t received; 77*d7373c82SJulian Elischer uint64_t processed; 78*d7373c82SJulian Elischer uint64_t dropped; 79*d7373c82SJulian Elischer }; 80*d7373c82SJulian Elischer 81*d7373c82SJulian Elischer struct ng_checksum_vlan_header { 82*d7373c82SJulian Elischer u_int16_t tag; 83*d7373c82SJulian Elischer u_int16_t etype; 84*d7373c82SJulian Elischer }; 85*d7373c82SJulian Elischer 86*d7373c82SJulian Elischer #endif /* _NETGRAPH_NG_CHECKSUM_H_ */ 87