Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 5 Jun 2003 18:10:45 -0500
From:      "Khoa To" <takhoa@rice.edu>
To:        <freebsd-net@freebsd.org>
Subject:   netgraph hook for iface node
Message-ID:  <CCEKKLAOJBNJACCJGFFAOENNCAAA.takhoa@rice.edu>

next in thread | raw e-mail | index | archive | help
Hello,

I need to implement a routing protocol on top of IP (i.e. the packet is
encapsulated within an IP packet).  I'm new to network programming, and from
searching the web, it looks like netgraph can help me a lot.  But I have
some problems with applying netgraph to my implementation, and I am
wondering if someone can help me or give me some pointers.  (I would like to
implement the code in user space as much as possible)

I think I should use an iface node if I want to get an IP packet.  I tried
and successfully get IP packets printed out on the console when I:
- Configure the iface node with the command "ifconfig ng0 1.1.1.1 2.2.2.2"
- Used "nghook -a ng0: inet" to connect to the inet hook from the user space
- Ping 2.2.2.2

But how do I connect this iface node to the regular ethernet interface so
that I can capture IP packets coming from the wire to my regular ethernet
card?  I can get raw ethernet packets by hooking to the "lower" hook of
eth0, but I want the Ethernet codes to do the parsing for me and give me a
clean IP packet.  I tried to connect the upper hook of eth0 to the inet hook
(it probably the wrong way to do it anyway), but I couldn't because I
already connected the inet hook to my user level program via nghook.

Also, on the way down (i.e. from the application layer), after I assemble my
protocol-specific packet, is there a hook in netgraph that I can pass the
packet to that would do all the IP encapsulation and generate checksums,
etc. and send it down to the network interface for transmission?  (Or what
type of node that I should create that would allow me to do that?)

I really appreciate any hints/help that you guys can provide.

Thank you very much,
Khoa.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CCEKKLAOJBNJACCJGFFAOENNCAAA.takhoa>