• Xie He's avatar
    drivers/net/wan/hdlc: Set skb->protocol before transmitting · 9fb030a7
    Xie He authored
    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 <khc@pm.waw.pl>
    Signed-off-by: default avatarXie He <xie.he.0141@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    9fb030a7
hdlc_fr.c 29.4 KB