All of lore.kernel.org
 help / color / mirror / Atom feed
From: Graham Shaw <gdshaw-1YjpMCWsJptAfugRpC6u6w@public.gmane.org>
To: mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
Cc: linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: packet(7) omits sll_protocol from required field list for outbound packets
Date: Wed, 06 Jun 2012 22:27:37 +0100	[thread overview]
Message-ID: <4FCFCB49.20504@riscpkg.org> (raw)

The manpage packet(7) currently states that:

"When you send packets it is enough to specify sll_family, sll_addr, 
sll_halen, sll_ifindex."

This is incorrect: you also need to specify sll_protocol.

(The protocol specified when the socket is created is used for filtering 
inbound packets, but not for constructing outbound packets.)

I encountered this while researching a page for my website:

http://www.microhowto.info/howto/send_an_arbitrary_ethernet_frame_using_an_af_packet_socket_in_c.html

To empirically verify the behaviour I took my test code from the above 
page then changed it to use different values for the third argument to 
socket() and the sll_protocol field:

- socket created with ETH_P_ARP, packet sent with ETH_P_ARP:
     packet sent with EtherType of ETH_P_ARP
- socket created with ETH_P_ARP, sll_protocol==0:
     packet sent with EtherType of 0
- socket created with 0x88b5, sll_protocol==htons(ETH_P_ARP):
     packet sent with EtherType of ETH_P_ARP
- socket created with ETH_P_ARP, sll_protocol==htons(0x88b5):
     packet sent with EtherType of 0x88b5

This shows that leaving sll_protocol set to zero does not have the 
desired effect and that it needs to be set to the desired link-layer 
protocol.

There is code in the relevant kernel source file 
(net/packet/af_packet.c) which appears to inspect the value of the 
sll_protocol field and use it as the link-layer protocol number, however 
I am not sufficiently familiar with this subsystem to be fully confident 
of what is happening. The line in question is:

     proto   = saddr->sll_protocol;

In version 3.4 of the kernel this can be found in the functions 
packet_snd and tpacket_snd. In version 2.6.26 it is in packet_sendmsg.

Below is a patch that adds sll_protocol to the list of required fields. 
This may not be the whole truth, since it is not clear what role if any 
sll_protocol, sll_halen or sll_addr would play when the socket type is 
SOCK_RAW, however I'm confident it is more accurate than the page as it 
stands at present:

diff --git a/man7/packet.7 b/man7/packet.7
index 374f6da..fb09f15 100644
--- a/man7/packet.7
+++ b/man7/packet.7
@@ -160,7 +160,9 @@ When you send packets it is enough to specify
  .IR sll_family ,
  .IR sll_addr ,
  .IR sll_halen ,
-.IR sll_ifindex .
+.IR sll_ifindex
+and
+.IR sll_protocol .
  The other fields should be 0.
  .I sll_hatype
  and

Yours,

Graham Shaw
http://gdshaw.net/
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

             reply	other threads:[~2012-06-06 21:27 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-06 21:27 Graham Shaw [this message]
     [not found] ` <4FCFCB49.20504-1YjpMCWsJptAfugRpC6u6w@public.gmane.org>
2015-05-06 13:06   ` packet(7) omits sll_protocol from required field list for outbound packets Michael Kerrisk (man-pages)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4FCFCB49.20504@riscpkg.org \
    --to=gdshaw-1yjpmcwsjptafugrpc6u6w@public.gmane.org \
    --cc=linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.