Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 07 Nov 2002 09:28:39 -0800
From:      Maksim Yevmenkin <myevmenk@exodus.net>
To:        Steve Tremblett <sjt@cisco.com>
Cc:        freebsd-net@FreeBSD.ORG, freebsd-hackers@FreeBSD.ORG
Subject:   Re: input source for network application
Message-ID:  <3DCAA2C7.12D6ED3E@exodus.net>
References:  <20021107121857.F264@sjt-u10.cisco.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Steve Tremblett wrote:
> 
> I've been toying with the idea of tackling a Netgraph TCP/IP
> implementation and want to hack out some skeleton netgraph nodes just
> to feel things out and play around with parsing.  I'm somewhat confused
> on how to start.  I'd like to be able to tinker as I go and I'd rather
> not have to write 5000 lines of code and complete a mini-stack before
> trying it out :)
> 
> I'm in a bit of a bind.  I want a sequence of ethernet frames to send
> up through this framework.  Hooking to ng_ether will give me this but I
> am restricted to taking ALL frames (thus taking the machine offline) or
> orphaned frames (where I will have to write some sort of traffic
> generator to make frames of an invalid type).  The third option here is
> to hack ng_ether to deliver frames out the lower hook as well as up
> into the kernel IP stack, thus giving me a complete stream without
> taking the box offline.  I've gotten libnet which seems to fit the bill
> to generate any orphans I want, but making a stream of frames by hand
> is a pain.

why do you need ng_ether, ng_tee etc. at all? can't you just write
your code with assumption that there will be one (or few) input
hooks? can't you just connect *user-space* Ethernet/IP frame generator
to the input hook(s) and send frames? that's what i did in HCI/Bluetooth
stack when i had no *real* Bluetooth hardware. i just wrote simple
*user-space* Bluetooth device simulator and connected it to the stack.
then i run VMWare and debug my code. 

you can use tcpdump and save dumps to the file and then just read it
and re-inject them into your node. this way you can test at least
basic stuff, i.e. frame parsing etc.
 
> I've read about ng_tee but haven't had an opportunity to play with it.
> Could I hack together something like this for an input source?  Would
> this allow for uninterrupted operation of the workstation while also
> giving a stream of test data?
> 
>  kernel
>  ip_input()
>       \
>        \-|
>          |- upper hook-\
>       ng_ether          ng_tee---->
>          |- lower hook-/
>          |
>        wire
> 
> In case that diagram doesn't display in your mailer, I'm thinking of
> connecting ng_tee to recieve input from ng_ether's lower hook and pass
> it out through ng_ether's upper hook as well as into the input hook of
> my own netgraph node.
> 
> Does anyone have any suggestions or ideas on tools or methods to assist
> me in starting this venture?  Am I thinking about this problem from the
> right angle or is my head up my ass? :)

see above. 

max

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3DCAA2C7.12D6ED3E>