Xenomai  3.1
rtcfg_frame.h
1 /***
2  *
3  * include/rtcfg/rtcfg_frame.h
4  *
5  * Real-Time Configuration Distribution Protocol
6  *
7  * Copyright (C) 2003 Jan Kiszka <jan.kiszka@web.de>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22  *
23  */
24 
25 #ifndef __RTCFG_FRAME_H_
26 #define __RTCFG_FRAME_H_
27 
28 #include <linux/init.h>
29 #include <linux/if_packet.h>
30 #include <asm/byteorder.h>
31 
32 #include <rtcfg/rtcfg_event.h>
33 
34 #define ETH_RTCFG 0x9022
35 
36 #define RTCFG_SKB_PRIO \
37  RTSKB_PRIO_VALUE(QUEUE_MIN_PRIO - 1, RTSKB_DEF_NRT_CHANNEL)
38 
39 #define RTCFG_ID_STAGE_1_CFG 0
40 #define RTCFG_ID_ANNOUNCE_NEW 1
41 #define RTCFG_ID_ANNOUNCE_REPLY 2
42 #define RTCFG_ID_STAGE_2_CFG 3
43 #define RTCFG_ID_STAGE_2_CFG_FRAG 4
44 #define RTCFG_ID_ACK_CFG 5
45 #define RTCFG_ID_READY 6
46 #define RTCFG_ID_HEARTBEAT 7
47 #define RTCFG_ID_DEAD_STATION 8
48 
49 #define RTCFG_ADDRSIZE_MAC 0
50 #define RTCFG_ADDRSIZE_IP 4
51 #define RTCFG_MAX_ADDRSIZE RTCFG_ADDRSIZE_IP
52 
53 #define RTCFG_FLAG_STAGE_2_DATA 0
54 #define RTCFG_FLAG_READY 1
55 
56 #define _RTCFG_FLAG_STAGE_2_DATA (1 << RTCFG_FLAG_STAGE_2_DATA)
57 #define _RTCFG_FLAG_READY (1 << RTCFG_FLAG_READY)
58 
59 struct rtcfg_frm_head {
60 #if defined(__LITTLE_ENDIAN_BITFIELD)
61  u8 id : 5;
62  u8 version : 3;
63 #elif defined(__BIG_ENDIAN_BITFIELD)
64  u8 version : 3;
65  u8 id : 5;
66 #else
67 #error unsupported byte order
68 #endif
69 } __attribute__((packed));
70 
71 struct rtcfg_frm_stage_1_cfg {
72  struct rtcfg_frm_head head;
73  u8 addr_type;
74  u8 client_addr[0];
75  u8 server_addr[0];
76  u8 burstrate;
77  u16 cfg_len;
78  u8 cfg_data[0];
79 } __attribute__((packed));
80 
81 struct rtcfg_frm_announce {
82  struct rtcfg_frm_head head;
83  u8 addr_type;
84  u8 addr[0];
85  u8 flags;
86  u8 burstrate;
87 } __attribute__((packed));
88 
89 struct rtcfg_frm_stage_2_cfg {
90  struct rtcfg_frm_head head;
91  u8 flags;
92  u32 stations;
93  u16 heartbeat_period;
94  u32 cfg_len;
95  u8 cfg_data[0];
96 } __attribute__((packed));
97 
98 struct rtcfg_frm_stage_2_cfg_frag {
99  struct rtcfg_frm_head head;
100  u32 frag_offs;
101  u8 cfg_data[0];
102 } __attribute__((packed));
103 
104 struct rtcfg_frm_ack_cfg {
105  struct rtcfg_frm_head head;
106  u32 ack_len;
107 } __attribute__((packed));
108 
109 struct rtcfg_frm_simple {
110  struct rtcfg_frm_head head;
111 } __attribute__((packed));
112 
113 struct rtcfg_frm_dead_station {
114  struct rtcfg_frm_head head;
115  u8 addr_type;
116  u8 logical_addr[0];
117  u8 physical_addr[32];
118 } __attribute__((packed));
119 
120 int rtcfg_send_stage_1(struct rtcfg_connection *conn);
121 int rtcfg_send_stage_2(struct rtcfg_connection *conn, int send_data);
122 int rtcfg_send_stage_2_frag(struct rtcfg_connection *conn);
123 int rtcfg_send_announce_new(int ifindex);
124 int rtcfg_send_announce_reply(int ifindex, u8 *dest_mac_addr);
125 int rtcfg_send_ack(int ifindex);
126 int rtcfg_send_dead_station(struct rtcfg_connection *conn);
127 
128 int rtcfg_send_simple_frame(int ifindex, int frame_id, u8 *dest_addr);
129 
130 #define rtcfg_send_ready(ifindex) \
131  rtcfg_send_simple_frame(ifindex, RTCFG_ID_READY, NULL)
132 #define rtcfg_send_heartbeat(ifindex) \
133  rtcfg_send_simple_frame(ifindex, RTCFG_ID_HEARTBEAT, \
134  device[ifindex].spec.clt.srv_mac_addr)
135 
136 int __init rtcfg_init_frames(void);
137 void rtcfg_cleanup_frames(void);
138 
139 #endif /* __RTCFG_FRAME_H_ */
static int __attribute__((cold))
Test if a mutex structure contains a valid autoinitializer.
Definition: mutex.c:177