linux/drivers/net
Xie He 126e6099b8 drivers/net/wan/hdlc: Set skb->protocol before transmitting
[ Upstream commit 9fb030a704 ]

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: Xie He <xie.he.0141@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-10-07 08:01:26 +02:00
..
appletalk
arcnet
bonding bonding: fix active-backup failover for current ARP slave 2020-08-26 10:41:05 +02:00
caif
can
dsa net: dsa: rtl8366: Properly clear member config 2020-09-26 18:03:12 +02:00
ethernet net: dec: de2104x: Increase receive ring size for Tulip 2020-10-07 08:01:26 +02:00
fddi
fjes
hamradio
hippi hippi: Fix a size used in a 'pci_free_consistent()' in an error handling path 2020-07-29 10:18:31 +02:00
hyperv hv_netvsc: Remove "unlikely" from netvsc_select_queue 2020-09-23 12:40:34 +02:00
ieee802154 ieee802154/adf7242: check status of adf7242_read_reg 2020-10-01 13:18:16 +02:00
ipvlan ipvlan: fix device features 2020-09-03 11:26:41 +02:00
netdevsim netdevsim: fix unbalaced locking in nsim_create() 2020-07-29 10:18:33 +02:00
phy net: phy: Do not warn in phy_stop() on PHY_DOWN 2020-09-26 18:03:15 +02:00
plip
ppp
slip
team
usb rndis_host: increase sleep time in the query-response loop 2020-10-07 08:01:26 +02:00
vmxnet3 vmxnet3: use correct tcp hdr length when packet is encapsulated 2020-08-19 08:16:23 +02:00
wan drivers/net/wan/hdlc: Set skb->protocol before transmitting 2020-10-07 08:01:26 +02:00
wimax
wireless mwifiex: Increase AES key storage size to 256 bits 2020-10-01 13:18:16 +02:00
xen-netback
Kconfig
LICENSE.SRC
Makefile
Space.c
dummy.c
eql.c
geneve.c geneve: add transport ports in route lookup for geneve 2020-09-26 18:03:11 +02:00
gtp.c gtp: add GTPA_LINK info to msg sent to userspace 2020-09-09 19:12:25 +02:00
ifb.c
loopback.c
macsec.c
macvlan.c macvlan: validate setting of multiple remote source MAC addresses 2020-09-03 11:27:00 +02:00
macvtap.c
mdio.c
mii.c
net_failover.c
netconsole.c
nlmon.c
ntb_netdev.c
rionet.c
sb1000.c
sungem_phy.c
tap.c
thunderbolt.c
tun.c
veth.c
virtio_net.c
vrf.c
vsockmon.c
vxlan.c Revert "vxlan: fix tos value before xmit" 2020-08-11 15:33:41 +02:00
xen-netfront.c xen-netfront: fix potential deadlock in xennet_remove() 2020-08-05 09:59:51 +02:00