Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Dec 2017 22:48:22 +0800
From:      Julian Elischer <julian@freebsd.org>
To:        John Lyon <johnllyon@gmail.com>
Cc:        "freebsd-net@freebsd.org" <freebsd-net@FreeBSD.ORG>, Eugene Grosbein <eugen@grosbein.net>
Subject:   Re: Need Netgraph Help [fixed]
Message-ID:  <4fee4ea6-9b35-afba-6d5d-24ecca3e28c6@freebsd.org>
In-Reply-To: <ac0e236e-f27c-d4ed-8527-010dd025efff@freebsd.org>
References:  <CAKfTJoUMxo7gsio7JJD8Vj_xPgFx5YEBH3_XViFhR0dt59==Dw@mail.gmail.com> <5A3225BF.6020205@omnilan.de> <CAKfTJoX78JhqsvB669Gxsr5UtZkbwuZrnVhOdU2UMacF7FmP1g@mail.gmail.com> <5A32F63E.8010205@grosbein.net> <5A338C5A.20300@omnilan.de> <CAKfTJoW5H82VLyBZ_5_sa9HU7Xbot7imeiP-ogVCNkHGe0_30Q@mail.gmail.com> <2e0525c8-2251-a5f5-45d1-fe44ebe318f7@freebsd.org> <CAKfTJoXe%2BZjDEMbF12-JcwBAs0uQoAFYAC3g1A_d0yM8by-z6g@mail.gmail.com> <ac0e236e-f27c-d4ed-8527-010dd025efff@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 28/12/17 9:59 pm, Julian Elischer wrote:
> On 28/12/17 1:37 am, John Lyon wrote:
>> Julian,
>>
>> Unfortunately, this issue remains unresolved.  I would like to 
>> think that this is just a PEBKAC issue, but I have tried every 
>> permutation of escape characters in case it's an issue with my 
>> syntax and I get the same set of errors.  No matter what I do, I 
>> can't connect the no match hook of an ETF node to the upper hook of 
>> an ng_ether node.  Do you have any insights into why this might be 
>> occurring?
>>
>> By the way, thanks for reaching out to me!  I was going to email 
>> you directly after the holidays since your name and email address 
>> are at the bottom of the relevant Netgraph man pages.  I figured 
>> that must mean if you didn't know the answer, no one does. :-)
>
> what is EAP?
> what about return EAP packets? (are there any?)

oops left out a line from the cut-n-paste...
>
> I think this is what you want:
> $ sudo ngctl list
> There are 7 total nodes:
>   Name: igb0            Type: ether           ID: 00000001   Num 
> hooks: 0
>   Name: igb1            Type: ether           ID: 00000002   Num 
> hooks: 0
>   Name: ix0             Type: ether           ID: 00000003   Num 
> hooks: 0
>   Name: ix1             Type: ether           ID: 00000004   Num 
> hooks: 0
>   Name: tap0            Type: ether           ID: 00000005   Num 
> hooks: 0
>   Name: bridge3         Type: ether           ID: 00000006   Num 
> hooks: 0
>   Name: ngctl7372       Type: socket          ID: 00000007   Num 
> hooks: 0
> $ sudo kldload ng_etf
$ sudo ngctl mkpeer ix0: etf lower downstream
> $ sudo ngctl name ix0:lower eapfilter
> $ sudo ngctl connect eapfilter: ix0: nomatch upper
> $ sudo ngctl connect eapfilter: ix1: eapout lower
> $ sudo ngctl show eapfilter:
>   Name: eapfilter       Type: etf             ID: 00000021   Num 
> hooks: 3
>   Local hook      Peer name       Peer type    Peer ID Peer hook
>   ----------      ---------       --------- ------- ---------
>   eapout          ix1             ether 00000004        lower
>   nomatch         ix0             ether 00000003        upper
>   downstream      ix0             ether 00000003        lower
> $ sudo ngctl msg eapfilter: 'setfilter { matchhook="eapout" 
> ethertype=0x888e }'
> $
>
>
>>
>> Thanks.
>>
>>
>> --------------------------------
>> John L. Lyon
>> PGP Key Available At:
>> https://www.dropbox.com/s/skmedtscs0tgex7/02150BFE.asc
>>
>> On Wed, Dec 27, 2017 at 10:32 AM, Julian Elischer 
>> <julian@freebsd.org <mailto:julian@freebsd.org>> wrote:
>>
>>     John did you get a resolution to this issue?
>>
>>
>>     On 16/12/17 2:59 am, John Lyon wrote:
>>
>>         Harry and Eugene (and others),
>>
>>         I appreciate all of your help.  It's been really
>>         insightful.  Although I
>>         feel like I'm getting much closer to the solution, I don't
>>         think my problem
>>         has been diagnosed.  I've outlined my thought process
>>         below.  Can you
>>         please tell me if I am misunderstanding something?
>>         Admittedly, I am not a
>>         kernel developer and my C language skills have atrophied the
>>         last few
>>         years.  However, I've reviewed my script and I looked in the
>>         code for
>>         ng_etf.c and I don't think I am violating any of the
>>         requirements for
>>         linking a hook for no match.
>>
>>         As Eugene stated:
>>
>>                 1) referenced "matchook" exists and you should not
>>                 use "indirect name"
>>
>>         here,
>>
>>                 only hook own name, or else you get error ENOENT (No
>>                 such file or
>>
>>         directory);
>>
>>         This does not seem to be a problem as the upper and lower
>>         hooks for the em1
>>         already exist (I can confirm this).
>>
>>                 2) referenced "matchook" is *not* downstream hook,
>>                 or else you get error
>>                 EINVAL (Invalid argument);
>>
>>         I read the ng_etf.c file in the source tree and found this
>>         little snippet:
>>
>>         /* and is not the downstream hook */
>>         if (hook == etfp->downstream_hook.hook) {
>>              error = EINVAL;
>>              break;
>>         }
>>
>>         This appears to be an error check to make sure you are not
>>         creating a cycle
>>         in the graph by referencing the ETF node's own downstream
>>         hook (i.e.
>>         filtering incoming traffic and circularly feeding
>>         non-matching frames back
>>         into the ETF's own filter).  I'm not doing this.  I am
>>         feeding non-matching
>>         packets into the *lower* hook of another ether node and not
>>         back into the
>>         *downstream* hook of the etf node I am creating.  As a
>>         result, my netgraph
>>         should not be triggering this error condition.
>>
>>                 3) it was not already configured, or else you get
>>                 error EEXIST (File
>>
>>         exists).
>>
>>         I am not getting this error, so it appears not to be an
>>         issue in my case.
>>
>>         What am I missing here?  The man page states that "*any
>>         other *hook" can be
>>
>>         used for the non-matching packets.  So the man page says
>>         this should work,
>>         and there's no explicit error condition that I see (caveat,
>>         I have not
>>         written in C for at least 10 years  - PEBKAC is entirely
>>         possible) that
>>         would be triggered in the ng_etf code.  So what is going 
>> wrong?
>>
>>         Thanks for all of your help, patience, and understanding.
>>
>>
>>         --------------------------------
>>         John L. Lyon
>>         PGP Key Available At:
>>         https://www.dropbox.com/s/skmedtscs0tgex7/02150BFE.asc
>> <https://www.dropbox.com/s/skmedtscs0tgex7/02150BFE.asc>;
>>
>>         On Fri, Dec 15, 2017 at 3:48 AM, Harry Schmalzbauer
>>         <freebsd@omnilan.de <mailto:freebsd@omnilan.de>>
>>         wrote:
>>
>>             Bezüglich Eugene Grosbein's Nachricht vom 14.12.2017
>>             23:07 (localtime):
>>
>>                 15.12.2017 4:27, John Lyon wrote:
>>
>>                             I'm a new Netgraph user, but am having
>>                             some problems with a simple
>>                             Netgraph
>>                             script I have written. Unfortunately,
>>                             the error message is cryptic
>>
>>             and I
>>
>>                             can't tell what I am doing wrong since
>>                             my script closely follows the
>>                             example provided in the ng_etf man page.
>>
>>                             For some context, I'm trying to filter
>>                             EAP traffic coming in on my LAN
>>                             interface.  Any ethernet frames that
>>                             correspond to EAP traffic need
>>
>>             to be
>>
>>                             immediately forwarded from the LAN
>>                             interface to my WAN interface.  All
>>                             other ethernet frames coming in on my
>>                             LAN interface need to be
>>
>>             handled by
>>
>>                             the kernel's network stack.  A (horrid)
>>                             ASCII art representation of my
>>                             desired netgraph would look like this:
>>
>>                             lower -> em0 -> downstream -> ETF -> no
>>                             match -> upper em0
>>                                             -> match ->
>>                             lower em1
>>
>>                             The script I have written is this:
>>
>>                                  #! /bin/sh
>>                                  ngctl mkpeer em0: etf lower 
>> downstream
>>                                  ngctl name em0:lower lan_filter
>>                                  ngctl connect em0: lan_filter:
>>                             upper nomatch
>>                                  ngctl msg lan_filter: setfilter {
>>                             matchhook="em1:lower"
>>                             ethertype=0x888e }
>>
>>                             Unfortunately, the last line of my
>>                             script generates the following
>>
>>             error
>>
>>                             message:
>>
>>                                  ngctl: send msg: Invalid Argument
>>
>>                 For "setfilter" command to work, ng_etf requires that:
>>
>>                 1) referenced "matchook" exists and you should not
>>                 use "indirect name"
>>
>>             here,
>>
>>                 only hook own name, or else you get error ENOENT (No
>>                 such file or
>>
>>             directory);
>>
>>                 2) referenced "matchook" is *not* downstream hook,
>>                 or else you get error
>>                 EINVAL (Invalid argument);
>>                 3) it was not already configured, or else you get
>>                 error EEXIST (File
>>
>>             exists).
>>
>>             Eugene kindly looked into the code and found that the
>>             error is due to
>>             wrong matchhook definition.
>>             I've never had any contact with ng_etf yet, but
>>             according to the man
>>             page, you need to set the (additional) filter hook by
>>             'nghook -a
>>             lan_filter: mydrain' and use 'matchhook=mydrain' for the
>>             'msg' command.
>>
>>             Do idea about the intention, so for the rest you have to
>>             tweak as needed.
>>
>>             -harry
>>
>>
>>         _______________________________________________
>>         freebsd-net@freebsd.org <mailto:freebsd-net@freebsd.org>
>>         mailing list
>>         https://lists.freebsd.org/mailman/listinfo/freebsd-net
>> <https://lists.freebsd.org/mailman/listinfo/freebsd-net>;
>>         To unsubscribe, send any mail to
>>         "freebsd-net-unsubscribe@freebsd.org
>>         <mailto:freebsd-net-unsubscribe@freebsd.org>"
>>
>>
>>
>>
>
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"
>
>




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4fee4ea6-9b35-afba-6d5d-24ecca3e28c6>