need help with ip_output

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I am stuck designing a net driver that sits on top of a module performing
physical
routing layer.  The lower layer must switch (route) the outgoing packet to
the appropriate physical channel on the same interface. The physical layer
does not
use an address resolution protocol, the destination physical address is
computed
dynamically from the next hop IP address.

I am coming from BSD-style stacks, where the ip output actually carries the
next
hop IP address.  So there, the code looks [simplified API] something like
this:

stack code:
	output(pkt, dst_ip_addr)

net driver code:
output(pkt, dst_ip_addr)
{
	dest_hw_addr = hw_rt_resolve(dst_ip_addr)  // dynamically compute phys
dest addr
	fill_hw_header(pkt, dst_hw_addr) // fill phys layer header
	hw_tx(pkt)	// enqueue pkt for transmission in the lower phys layer module
}

Now the problem.
I can't figure out how to get hold of the destination IP address (next hop)
during the output processing!

None of the linux netif docs suggests how to do this, but maybe I am
missing something.
It appears to me that the Ethernet ARP paradigm drives the design of the
stack, but
I need to implement a general, non-protocol but dynamic address resolution
mechanism.

Conceptually, I need something like the hard_header() method, except it
would have
to pass down the IP address, rather than the phys address as it does now.
Alternately, if the next hop IP address is somewhere in the skb (there's a
undocumented
"dst" field;could it be there?), I could fish it out of there.

I'd appreciate any pointers to either what I've missed, or how this could
be implemented.
Thanks.

-Zdenek




-
: send the line "unsubscribe linux-net" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux