Commit | Line | Data |
---|---|---|
dcf0cd1c GM |
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef _LINUX_IF_HSR_H_ | |
3 | #define _LINUX_IF_HSR_H_ | |
4 | ||
5f10376b JK |
5 | #include <linux/types.h> |
6 | ||
7 | struct net_device; | |
8 | ||
dcf0cd1c GM |
9 | /* used to differentiate various protocols */ |
10 | enum hsr_version { | |
11 | HSR_V0 = 0, | |
12 | HSR_V1, | |
13 | PRP_V1, | |
14 | }; | |
15 | ||
bf08824a KK |
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 | */ | |
24 | struct 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 | ||
dcf0cd1c GM |
32 | #if IS_ENABLED(CONFIG_HSR) |
33 | extern bool is_hsr_master(struct net_device *dev); | |
34 | extern int hsr_get_version(struct net_device *dev, enum hsr_version *ver); | |
35 | #else | |
36 | static inline bool is_hsr_master(struct net_device *dev) | |
37 | { | |
38 | return false; | |
39 | } | |
40 | static 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_*/ |