110d7ccabSJulian Elischer.\" 210d7ccabSJulian Elischer.\" Copyright (c) 2001, FreeBSD Inc. 310d7ccabSJulian Elischer.\" All rights reserved. 410d7ccabSJulian Elischer.\" 510d7ccabSJulian Elischer.\" Redistribution and use in source and binary forms, with or without 610d7ccabSJulian Elischer.\" modification, are permitted provided that the following conditions 710d7ccabSJulian Elischer.\" are met: 810d7ccabSJulian Elischer.\" 1. Redistributions of source code must retain the above copyright 910d7ccabSJulian Elischer.\" notice unmodified, this list of conditions, and the following 1010d7ccabSJulian Elischer.\" disclaimer. 1110d7ccabSJulian Elischer.\" 2. Redistributions in binary form must reproduce the above copyright 1210d7ccabSJulian Elischer.\" notice, this list of conditions and the following disclaimer in the 1310d7ccabSJulian Elischer.\" documentation and/or other materials provided with the distribution. 1410d7ccabSJulian Elischer.\" 1510d7ccabSJulian Elischer.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1610d7ccabSJulian Elischer.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1710d7ccabSJulian Elischer.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1810d7ccabSJulian Elischer.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1910d7ccabSJulian Elischer.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2010d7ccabSJulian Elischer.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2110d7ccabSJulian Elischer.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2210d7ccabSJulian Elischer.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2310d7ccabSJulian Elischer.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2410d7ccabSJulian Elischer.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2510d7ccabSJulian Elischer.\" SUCH DAMAGE. 2610d7ccabSJulian Elischer.\" 27c60bda17SJoel Dahl.Dd November 13, 2012 2810d7ccabSJulian Elischer.Dt NG_ETF 4 2975595bf1SRuslan Ermilov.Os 3010d7ccabSJulian Elischer.Sh NAME 3110d7ccabSJulian Elischer.Nm ng_etf 3210d7ccabSJulian Elischer.Nd Ethertype filtering netgraph node type 3310d7ccabSJulian Elischer.Sh SYNOPSIS 34fbad9e2dSRuslan Ermilov.In netgraph.h 3575595bf1SRuslan Ermilov.In netgraph/ng_etf.h 3610d7ccabSJulian Elischer.Sh DESCRIPTION 3710d7ccabSJulian ElischerThe 3810d7ccabSJulian Elischer.Nm etf 3910d7ccabSJulian Elischernode type multiplexes and filters data between hooks on the basis 40c5f116aaSChristian Bruefferof the ethertype found in an Ethernet header, presumed to be in the 4175595bf1SRuslan Ermilovfirst 14 bytes of the data. 4275595bf1SRuslan ErmilovIncoming Ethernet frames are accepted on the 4310d7ccabSJulian Elischer.Em downstream 4410d7ccabSJulian Elischerhook and if the ethertype matches a value which the node has been configured 4510d7ccabSJulian Elischerto filter, the packet is forwarded out the hook which was identified 4675595bf1SRuslan Ermilovat the time that value was configured. 4775595bf1SRuslan ErmilovIf it does not match a configured 4810d7ccabSJulian Elischervalue, it is passed to the 4910d7ccabSJulian Elischer.Em nomatch 5075595bf1SRuslan Ermilovhook. 5175595bf1SRuslan ErmilovIf the 5210d7ccabSJulian Elischer.Em nomatch 5310d7ccabSJulian Elischerhook is not connected, the packet is dropped. 5410d7ccabSJulian Elischer.Pp 5510d7ccabSJulian ElischerPackets travelling in the other direction (towards the 5610d7ccabSJulian Elischer.Em downstream 5710d7ccabSJulian Elischerhook) are also examined and filtered. 5875595bf1SRuslan ErmilovIf a packet has an ethertype that matches one of the values configured 5910d7ccabSJulian Elischerinto the node, it must have arrived in on the hook for which that value 6075595bf1SRuslan Ermilovwas configured, otherwise it will be discarded. 6175595bf1SRuslan ErmilovEthertypes of values other 6270299572SJulian Elischerthan those configured by the control messages must have arrived via the 6310d7ccabSJulian Elischer.Em nomatch 6410d7ccabSJulian Elischerhook. 6510d7ccabSJulian Elischer.Sh HOOKS 6610d7ccabSJulian ElischerThis node type supports the following hooks: 67c60bda17SJoel Dahl.Bl -tag -width ".Aq Em any legal name" 6810d7ccabSJulian Elischer.It Em downstream 6910d7ccabSJulian ElischerTypically this hook would be connected to a 7010d7ccabSJulian Elischer.Xr ng_ether 4 7110d7ccabSJulian Elischernode, using the 7210d7ccabSJulian Elischer.Em lower 7310d7ccabSJulian Elischerhook. 7410d7ccabSJulian Elischer.It Em nomatch 7510d7ccabSJulian ElischerTypically this hook would also be connected to an 7610d7ccabSJulian Elischer.Xr ng_ether 4 7710d7ccabSJulian Elischertype node using the 7810d7ccabSJulian Elischer.Em upper 7910d7ccabSJulian Elischerhook. 8075595bf1SRuslan Ermilov.It Aq Em "any legal name" 8110d7ccabSJulian ElischerAny other hook name will be accepted and can be used as the match target 8275595bf1SRuslan Ermilovof an ethertype. 8375595bf1SRuslan ErmilovTypically this hook would be attached to 8410d7ccabSJulian Elischera protocol handling node that requires and generates packets 8510d7ccabSJulian Elischerwith a particular set of ethertypes. 8610d7ccabSJulian Elischer.El 8710d7ccabSJulian Elischer.Sh CONTROL MESSAGES 8810d7ccabSJulian ElischerThis node type supports the generic control messages, plus the following: 8975595bf1SRuslan Ermilov.Bl -tag -width 4n 90c60bda17SJoel Dahl.It Dv NGM_ETF_GET_STATUS Pq Ic getstatus 9110d7ccabSJulian ElischerThis command returns a 9275595bf1SRuslan Ermilov.Vt "struct ng_etfstat" 9310d7ccabSJulian Elischercontaining node statistics for packet counts. 94c60bda17SJoel Dahl.It Dv NGM_ETF_SET_FILTER Pq Ic setfilter 9510d7ccabSJulian ElischerSets the a new ethertype filter into the node and specifies the hook to and 9675595bf1SRuslan Ermilovfrom which packets of that type should use. 9775595bf1SRuslan ErmilovThe hook and ethertype 9875595bf1SRuslan Ermilovare specified in a structure of type 9975595bf1SRuslan Ermilov.Vt "struct ng_etffilter" : 10010d7ccabSJulian Elischer.Bd -literal -offset 4n 10110d7ccabSJulian Elischerstruct ng_etffilter { 10289624a34SHartmut Brandt char matchhook[NG_HOOKSIZ]; /* hook name */ 103c60bda17SJoel Dahl uint16_t ethertype; /* this ethertype to this hook */ 10410d7ccabSJulian Elischer}; 10510d7ccabSJulian Elischer.Ed 10610d7ccabSJulian Elischer.El 10710d7ccabSJulian Elischer.Sh EXAMPLES 10875595bf1SRuslan ErmilovUsing 10975595bf1SRuslan Ermilov.Xr ngctl 8 11075595bf1SRuslan Ermilovit is possible to set a filter in place from the command line 11110d7ccabSJulian Elischeras follows: 11210d7ccabSJulian Elischer.Bd -literal -offset 4n 11310d7ccabSJulian Elischer#!/bin/sh 11455191e94SMarius StroblETHER_IF=fxp0 11510d7ccabSJulian ElischerMATCH1=0x834 11610d7ccabSJulian ElischerMATCH2=0x835 11710d7ccabSJulian Elischercat <<DONE >/tmp/xwert 118c5f116aaSChristian Brueffer# Make a new ethertype filter and attach to the Ethernet lower hook. 11910d7ccabSJulian Elischer# first remove left over bits from last time. 12010d7ccabSJulian Elischershutdown ${ETHER_IF}:lower 12110d7ccabSJulian Elischermkpeer ${ETHER_IF}: etf lower downstream 12210d7ccabSJulian Elischer# Give it a name to easily refer to it. 12310d7ccabSJulian Elischername ${ETHER_IF}:lower etf 12410d7ccabSJulian Elischer# Connect the nomatch hook to the upper part of the same interface. 12510d7ccabSJulian Elischer# All unmatched packets will act as if the filter is not present. 12610d7ccabSJulian Elischerconnect ${ETHER_IF}: etf: upper nomatch 12710d7ccabSJulian ElischerDONE 12810d7ccabSJulian Elischerngctl -f /tmp/xwert 12910d7ccabSJulian Elischer 13010d7ccabSJulian Elischer# something to set a hook to catch packets and show them. 13110d7ccabSJulian Elischerecho "Unrecognised packets:" 13210d7ccabSJulian Elischernghook -a etf: newproto & 13310d7ccabSJulian Elischer# Filter two random ethertypes to that hook. 13410d7ccabSJulian Elischerngctl 'msg etf: setfilter { matchhook="newproto" ethertype=${MATCH1} } 13510d7ccabSJulian Elischerngctl 'msg etf: setfilter { matchhook="newproto" ethertype=${MATCH2} } 13610d7ccabSJulian Elischer.Ed 13710d7ccabSJulian Elischer.Sh SHUTDOWN 13810d7ccabSJulian ElischerThis node shuts down upon receipt of a 13975595bf1SRuslan Ermilov.Dv NGM_SHUTDOWN 14010d7ccabSJulian Elischercontrol message, or when all hooks have been disconnected. 14110d7ccabSJulian Elischer.Sh SEE ALSO 14210d7ccabSJulian Elischer.Xr netgraph 4 , 14310d7ccabSJulian Elischer.Xr ng_ether 4 , 14475595bf1SRuslan Ermilov.Xr ngctl 8 , 14510d7ccabSJulian Elischer.Xr nghook 8 14610d7ccabSJulian Elischer.Sh HISTORY 14710d7ccabSJulian ElischerThe 14810d7ccabSJulian Elischer.Nm 14910d7ccabSJulian Elischernode type was implemented in 15010d7ccabSJulian Elischer.Fx 5.0 . 15110d7ccabSJulian Elischer.Sh AUTHORS 152*6c899950SBaptiste Daroussin.An Julian Elischer Aq Mt julian@FreeBSD.org 153