mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-02 01:19:21 +00:00
dcf0cd1cc5
Add support for offloading of HSR/PRP (IEC 62439-3) tag insertion tag removal, duplicate generation and forwarding. For HSR, insertion involves the switch adding a 6 byte HSR header after the 14 byte Ethernet header. For PRP it adds a 6 byte trailer. Tag removal involves automatically stripping the HSR/PRP header/trailer in the switch. This is possible when the switch also performs auto deduplication using the HSR/PRP header/trailer (making it no longer required). Forwarding involves automatically forwarding between redundant ports in an HSR. This is crucial because delay is accumulated as a frame passes through each node in the ring. Duplication involves the switch automatically sending a single frame from the CPU port to both redundant ports. This is required because the inserted HSR/PRP header/trailer must contain the same sequence number on the frames sent out both redundant ports. Export is_hsr_master so DSA can tell them apart from other devices in dsa_slave_changeupper. Signed-off-by: George McCollister <george.mccollister@gmail.com> Reviewed-by: Vladimir Oltean <olteanv@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
27 lines
586 B
C
27 lines
586 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _LINUX_IF_HSR_H_
|
|
#define _LINUX_IF_HSR_H_
|
|
|
|
/* used to differentiate various protocols */
|
|
enum hsr_version {
|
|
HSR_V0 = 0,
|
|
HSR_V1,
|
|
PRP_V1,
|
|
};
|
|
|
|
#if IS_ENABLED(CONFIG_HSR)
|
|
extern bool is_hsr_master(struct net_device *dev);
|
|
extern int hsr_get_version(struct net_device *dev, enum hsr_version *ver);
|
|
#else
|
|
static inline bool is_hsr_master(struct net_device *dev)
|
|
{
|
|
return false;
|
|
}
|
|
static inline int hsr_get_version(struct net_device *dev,
|
|
enum hsr_version *ver)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
#endif /* CONFIG_HSR */
|
|
|
|
#endif /*_LINUX_IF_HSR_H_*/
|