12b2c95c9SJulian Elischer /* 22b2c95c9SJulian Elischer * ng_eiface.h 32b2c95c9SJulian Elischer * 42b2c95c9SJulian Elischer * Copyright (c) 1999-2001, Vitaly V Belekhov 52b2c95c9SJulian Elischer * All rights reserved. 62b2c95c9SJulian Elischer * 72b2c95c9SJulian Elischer * Redistribution and use in source and binary forms, with or without 82b2c95c9SJulian Elischer * modification, are permitted provided that the following conditions 92b2c95c9SJulian Elischer * are met: 102b2c95c9SJulian Elischer * 1. Redistributions of source code must retain the above copyright 112b2c95c9SJulian Elischer * notice unmodified, this list of conditions, and the following 122b2c95c9SJulian Elischer * disclaimer. 132b2c95c9SJulian Elischer * 2. Redistributions in binary form must reproduce the above copyright 142b2c95c9SJulian Elischer * notice, this list of conditions and the following disclaimer in the 152b2c95c9SJulian Elischer * documentation and/or other materials provided with the distribution. 162b2c95c9SJulian Elischer * 172b2c95c9SJulian Elischer * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 182b2c95c9SJulian Elischer * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 192b2c95c9SJulian Elischer * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 202b2c95c9SJulian Elischer * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 212b2c95c9SJulian Elischer * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 222b2c95c9SJulian Elischer * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 232b2c95c9SJulian Elischer * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 242b2c95c9SJulian Elischer * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 252b2c95c9SJulian Elischer * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 262b2c95c9SJulian Elischer * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 272b2c95c9SJulian Elischer * SUCH DAMAGE. 282b2c95c9SJulian Elischer * 292b2c95c9SJulian Elischer * $FreeBSD$ 302b2c95c9SJulian Elischer */ 312b2c95c9SJulian Elischer 322b2c95c9SJulian Elischer #ifndef _NETGRAPH_EIFACE_H_ 332b2c95c9SJulian Elischer #define _NETGRAPH_EIFACE_H_ 342b2c95c9SJulian Elischer 352b2c95c9SJulian Elischer /* Node type name and magic cookie */ 362b2c95c9SJulian Elischer #define NG_EIFACE_NODE_TYPE "eiface" 372b2c95c9SJulian Elischer #define NGM_EIFACE_COOKIE 948105892 382b2c95c9SJulian Elischer 392b2c95c9SJulian Elischer /* Interface base name */ 402b2c95c9SJulian Elischer #define NG_EIFACE_EIFACE_NAME "nge" 412b2c95c9SJulian Elischer #define NG_EIFACE_EIFACE_NAME_MAX 15 422b2c95c9SJulian Elischer 432b2c95c9SJulian Elischer /* My hook names */ 442b2c95c9SJulian Elischer #define NG_EIFACE_HOOK_ETHER "ether" 452b2c95c9SJulian Elischer 462b2c95c9SJulian Elischer /* MTU bounds */ 472b2c95c9SJulian Elischer #define NG_EIFACE_MTU_MIN 72 482b2c95c9SJulian Elischer #define NG_EIFACE_MTU_MAX 2312 492b2c95c9SJulian Elischer #define NG_EIFACE_MTU_DEFAULT 1500 502b2c95c9SJulian Elischer 512b2c95c9SJulian Elischer /* Netgraph commands */ 522b2c95c9SJulian Elischer enum { 532b2c95c9SJulian Elischer NGM_EIFACE_GET_IFNAME = 1, /* returns struct ng_eiface_ifname */ 542b2c95c9SJulian Elischer NGM_EIFACE_GET_IFADDRS, /* returns list of addresses */ 552b2c95c9SJulian Elischer NGM_EIFACE_SET, /* set ethernet address */ 562b2c95c9SJulian Elischer }; 572b2c95c9SJulian Elischer 582b2c95c9SJulian Elischer struct ng_eiface_ifname { 592b2c95c9SJulian Elischer char ngif_name[NG_EIFACE_EIFACE_NAME_MAX + 1]; 602b2c95c9SJulian Elischer }; 612b2c95c9SJulian Elischer 622b2c95c9SJulian Elischer struct ng_eiface_par { 632b2c95c9SJulian Elischer u_char oct0; 642b2c95c9SJulian Elischer u_char oct1; 652b2c95c9SJulian Elischer u_char oct2; 662b2c95c9SJulian Elischer u_char oct3; 672b2c95c9SJulian Elischer u_char oct4; 682b2c95c9SJulian Elischer u_char oct5; 692b2c95c9SJulian Elischer }; 702b2c95c9SJulian Elischer 712b2c95c9SJulian Elischer static const struct ng_parse_struct_info ng_eiface_par_fields = { 722b2c95c9SJulian Elischer { 732b2c95c9SJulian Elischer { "oct0", &ng_parse_int8_type }, 742b2c95c9SJulian Elischer { "oct1", &ng_parse_int8_type }, 752b2c95c9SJulian Elischer { "oct2", &ng_parse_int8_type }, 762b2c95c9SJulian Elischer { "oct3", &ng_parse_int8_type }, 772b2c95c9SJulian Elischer { "oct4", &ng_parse_int8_type }, 782b2c95c9SJulian Elischer { "oct5", &ng_parse_int8_type }, 792b2c95c9SJulian Elischer { NULL }, 802b2c95c9SJulian Elischer } 812b2c95c9SJulian Elischer }; 822b2c95c9SJulian Elischer 832b2c95c9SJulian Elischer static const struct ng_parse_type ng_eiface_par_type = { 842b2c95c9SJulian Elischer &ng_parse_struct_type, 852b2c95c9SJulian Elischer &ng_eiface_par_fields 862b2c95c9SJulian Elischer }; 872b2c95c9SJulian Elischer 882b2c95c9SJulian Elischer static const struct ng_cmdlist ng_eiface_cmdlist[] = { 892b2c95c9SJulian Elischer { 902b2c95c9SJulian Elischer NGM_EIFACE_COOKIE, 912b2c95c9SJulian Elischer NGM_EIFACE_SET, 922b2c95c9SJulian Elischer "set", 932b2c95c9SJulian Elischer &ng_eiface_par_type, 942b2c95c9SJulian Elischer NULL 952b2c95c9SJulian Elischer }, 962b2c95c9SJulian Elischer { 0 } 972b2c95c9SJulian Elischer }; 982b2c95c9SJulian Elischer 992b2c95c9SJulian Elischer 1002b2c95c9SJulian Elischer #endif /* _NETGRAPH_EIFACE_H_ */ 101