1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _LINUX_IF_HSR_H_ 3#define _LINUX_IF_HSR_H_ 4 5#include <linux/types.h> 6 7struct net_device; 8 9/* used to differentiate various protocols */ 10enum hsr_version { 11 HSR_V0 = 0, 12 HSR_V1, 13 PRP_V1, 14}; 15 16/* HSR Tag. 17 * As defined in IEC-62439-3:2010, the HSR tag is really { ethertype = 0x88FB, 18 * path, LSDU_size, sequence Nr }. But we let eth_header() create { h_dest, 19 * h_source, h_proto = 0x88FB }, and add { path, LSDU_size, sequence Nr, 20 * encapsulated protocol } instead. 21 * 22 * Field names as defined in the IEC:2010 standard for HSR. 23 */ 24struct hsr_tag { 25 __be16 path_and_LSDU_size; 26 __be16 sequence_nr; 27 __be16 encap_proto; 28} __packed; 29 30#define HSR_HLEN 6 31 32#if IS_ENABLED(CONFIG_HSR) 33extern bool is_hsr_master(struct net_device *dev); 34extern int hsr_get_version(struct net_device *dev, enum hsr_version *ver); 35#else 36static inline bool is_hsr_master(struct net_device *dev) 37{ 38 return false; 39} 40static inline int hsr_get_version(struct net_device *dev, 41 enum hsr_version *ver) 42{ 43 return -EINVAL; 44} 45#endif /* CONFIG_HSR */ 46 47#endif /*_LINUX_IF_HSR_H_*/ 48