25 #ifndef __RTCFG_FRAME_H_
26 #define __RTCFG_FRAME_H_
28 #include <linux/init.h>
29 #include <linux/if_packet.h>
30 #include <asm/byteorder.h>
32 #include <rtcfg/rtcfg_event.h>
35 #define ETH_RTCFG 0x9022
37 #define RTCFG_SKB_PRIO \
38 RTSKB_PRIO_VALUE(QUEUE_MIN_PRIO-1, RTSKB_DEF_NRT_CHANNEL)
40 #define RTCFG_ID_STAGE_1_CFG 0
41 #define RTCFG_ID_ANNOUNCE_NEW 1
42 #define RTCFG_ID_ANNOUNCE_REPLY 2
43 #define RTCFG_ID_STAGE_2_CFG 3
44 #define RTCFG_ID_STAGE_2_CFG_FRAG 4
45 #define RTCFG_ID_ACK_CFG 5
46 #define RTCFG_ID_READY 6
47 #define RTCFG_ID_HEARTBEAT 7
48 #define RTCFG_ID_DEAD_STATION 8
50 #define RTCFG_ADDRSIZE_MAC 0
51 #define RTCFG_ADDRSIZE_IP 4
52 #define RTCFG_MAX_ADDRSIZE RTCFG_ADDRSIZE_IP
54 #define RTCFG_FLAG_STAGE_2_DATA 1
55 #define RTCFG_FLAG_READY 2
58 struct rtcfg_frm_head {
59 #if defined(__LITTLE_ENDIAN_BITFIELD)
62 #elif defined(__BIG_ENDIAN_BITFIELD)
66 #error unsupported byte order
68 } __attribute__((packed));
70 struct rtcfg_frm_stage_1_cfg {
71 struct rtcfg_frm_head head;
78 } __attribute__((packed));
80 struct rtcfg_frm_announce {
81 struct rtcfg_frm_head head;
86 } __attribute__((packed));
88 struct rtcfg_frm_stage_2_cfg {
89 struct rtcfg_frm_head head;
95 } __attribute__((packed));
97 struct rtcfg_frm_stage_2_cfg_frag {
98 struct rtcfg_frm_head head;
101 } __attribute__((packed));
103 struct rtcfg_frm_ack_cfg {
104 struct rtcfg_frm_head head;
106 } __attribute__((packed));
108 struct rtcfg_frm_simple {
109 struct rtcfg_frm_head head;
110 } __attribute__((packed));
112 struct rtcfg_frm_dead_station {
113 struct rtcfg_frm_head head;
116 u8 physical_addr[32];
117 } __attribute__((packed));
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);
128 int rtcfg_send_simple_frame(
int ifindex,
int frame_id, u8 *dest_addr);
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)
136 int __init rtcfg_init_frames(
void);
137 void rtcfg_cleanup_frames(
void);