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 0 55 #define RTCFG_FLAG_READY 1 57 #define _RTCFG_FLAG_STAGE_2_DATA (1 << RTCFG_FLAG_STAGE_2_DATA) 58 #define _RTCFG_FLAG_READY (1 << RTCFG_FLAG_READY) 60 struct rtcfg_frm_head {
61 #if defined(__LITTLE_ENDIAN_BITFIELD) 64 #elif defined(__BIG_ENDIAN_BITFIELD) 68 #error unsupported byte order 70 } __attribute__((packed));
72 struct rtcfg_frm_stage_1_cfg {
73 struct rtcfg_frm_head head;
80 } __attribute__((packed));
82 struct rtcfg_frm_announce {
83 struct rtcfg_frm_head head;
88 } __attribute__((packed));
90 struct rtcfg_frm_stage_2_cfg {
91 struct rtcfg_frm_head head;
97 } __attribute__((packed));
99 struct rtcfg_frm_stage_2_cfg_frag {
100 struct rtcfg_frm_head head;
103 } __attribute__((packed));
105 struct rtcfg_frm_ack_cfg {
106 struct rtcfg_frm_head head;
108 } __attribute__((packed));
110 struct rtcfg_frm_simple {
111 struct rtcfg_frm_head head;
112 } __attribute__((packed));
114 struct rtcfg_frm_dead_station {
115 struct rtcfg_frm_head head;
118 u8 physical_addr[32];
119 } __attribute__((packed));
122 int rtcfg_send_stage_1(
struct rtcfg_connection *conn);
123 int rtcfg_send_stage_2(
struct rtcfg_connection *conn,
int send_data);
124 int rtcfg_send_stage_2_frag(
struct rtcfg_connection *conn);
125 int rtcfg_send_announce_new(
int ifindex);
126 int rtcfg_send_announce_reply(
int ifindex, u8 *dest_mac_addr);
127 int rtcfg_send_ack(
int ifindex);
128 int rtcfg_send_dead_station(
struct rtcfg_connection *conn);
130 int rtcfg_send_simple_frame(
int ifindex,
int frame_id, u8 *dest_addr);
132 #define rtcfg_send_ready(ifindex) \ 133 rtcfg_send_simple_frame(ifindex, RTCFG_ID_READY, NULL) 134 #define rtcfg_send_heartbeat(ifindex) \ 135 rtcfg_send_simple_frame(ifindex, RTCFG_ID_HEARTBEAT, \ 136 device[ifindex].spec.clt.srv_mac_addr) 138 int __init rtcfg_init_frames(
void);
139 void rtcfg_cleanup_frames(
void);