questions about link-level loopback, PF_PACKET and ETH_P_LOOP
I'm attempting to write a piece of code that will validate the physical ethernet link from a NIC to the nearest router/hub/switch. What I'd like to do is to send out an ethernet packet addressed to me, bounce it off the hub/switch/router, and then read it back in. This is all at the ethernet layer.
Needless to say, I've been having some issues.
1) Is it even possible to do something like this? I notice that tcpdump shows the packets outgoing (and properly formatted) but the packets don't seem to come back to me. Even if I send it out with the broadcast address, I don't seem to get the packet back to the interface that sent it. Is this standard behaviour? Is there any way to send out a packet addressed to myself and have it come back to me?
2) Using ETH_P_LOOP as the protocol in the call to socket(), I can't seem to receive any messages whatsoever. If I set this to ETH_P_ALL, then I get all
messages (including ones with protocol set to ETH_P_LOOP). It almost seems
like ETH_P_LOOP isn't properly handled by the kernel. Is this the case?
The nitty-gritty on this is that I have a machine that has two NICs but only one IP address. I want to do some kind of packet loopback at the ethernet layer to verify that my NIC transceiver is working properly.
If anyone has any bright ideas, I'd be glad to hear them.
Thanks,
Chris
Signature · 4 lines
Chris Friesen | MailStop: 043/33/F10 Nortel Networks | work: (613) 765-0557 3500 Carling Avenue | fax: (613) 765-2986 Nepean, ON K2H 8E9 Canada | email: [email protected]
Quoted 6 lines · Christopher Friesen
I'm attempting to write a piece of code that will validate the physical ethernet link from a NIC to the nearest router/hub/switch. What I'd like to do is to send out an ethernet packet addressed to me, bounce it off the hub/switch/router, and then read it back in. This is all at the ethernet layer.
No properly configured ethernet hub or router will return you the same packet you sent. You can get some of this information out of the drivers though, as their hardware knows the link state, at least the physical layer.
Check out Becker's mii-diag program. There are some options in it to dump out all kinds of neat information about the drivers and link condition.
Quoted 3 lines
The nitty-gritty on this is that I have a machine that has two NICs but only one IP address. I want to do some kind of packet loopback at the ethernet layer to verify that my NIC transceiver is working properly.
Ping your switch. Or use something like ethernet channel bonding.
If both ports are up, then you should be able to send a pkt from one NIC with your other NICs MAC in it, and the switch should deliver that pkt to your other NIC. However, if you don't receive the packet, you cannot determine which one of your links/NICs is bad without going to a third party (which I suggest should be your switch itself).
Signature · 3 lines
Ben Greear <[email protected]> <[email protected]> President of Candela Technologies Inc http://www.candelatech.com ScryMUD: http://scry.wanfear.com http://scry.wanfear.com/~greear