From: Xie He <xie.he.0...@gmail.com> Date: Wed, 16 Sep 2020 14:25:07 -0700
> This patch sets skb->protocol before transmitting frames on the HDLC > device, so that a user listening on the HDLC device with an AF_PACKET > socket will see outgoing frames' sll_protocol field correctly set and > consistent with that of incoming frames. > > 1. Control frames in hdlc_cisco and hdlc_ppp > > When these drivers send control frames, skb->protocol is not set. > > This value should be set to htons(ETH_P_HDLC), because when receiving > control frames, their skb->protocol is set to htons(ETH_P_HDLC). > > When receiving, hdlc_type_trans in hdlc.h is called, which then calls > cisco_type_trans or ppp_type_trans. The skb->protocol of control frames > is set to htons(ETH_P_HDLC) so that the control frames can be received > by hdlc_rcv in hdlc.c, which calls cisco_rx or ppp_rx to process the > control frames. > > 2. hdlc_fr > > When this driver sends control frames, skb->protocol is set to internal > values used in this driver. > > When this driver sends data frames (from upper stacked PVC devices), > skb->protocol is the same as that of the user data packet being sent on > the upper PVC device (for normal PVC devices), or is htons(ETH_P_802_3) > (for Ethernet-emulating PVC devices). > > However, skb->protocol for both control frames and data frames should be > set to htons(ETH_P_HDLC), because when receiving, all frames received on > the HDLC device will have their skb->protocol set to htons(ETH_P_HDLC). > > When receiving, hdlc_type_trans in hdlc.h is called, and because this > driver doesn't provide a type_trans function in struct hdlc_proto, > all frames will have their skb->protocol set to htons(ETH_P_HDLC). > The frames are then received by hdlc_rcv in hdlc.c, which calls fr_rx > to process the frames (control frames are consumed and data frames > are re-received on upper PVC devices). > > Cc: Krzysztof Halasa <k...@pm.waw.pl> > Signed-off-by: Xie He <xie.he.0...@gmail.com> Applied, thank you.