1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2 * vim:expandtab:shiftwidth=8:tabstop=8:
8 #include <portals/api-support.h>
9 #include <portals/lib-types.h>
11 #include "vibnal_wire.h"
14 #define strnlen(s, i) strlen(s)
17 #define BLANK_LINE() \
24 printf (" /* "c" */\n"); \
28 #define STRINGIFY(a) #a
30 #define CHECK_DEFINE(a) \
32 printf (" CLASSERT ("#a" == "STRINGIFY(a)");\n"); \
35 #define CHECK_VALUE(a) \
37 printf (" CLASSERT ("#a" == %d);\n", a); \
40 #define CHECK_MEMBER_OFFSET(s,m) \
42 CHECK_VALUE((int)offsetof(s, m)); \
45 #define CHECK_MEMBER_SIZEOF(s,m) \
47 CHECK_VALUE((int)sizeof(((s *)0)->m)); \
50 #define CHECK_MEMBER(s,m) \
52 CHECK_MEMBER_OFFSET(s, m); \
53 CHECK_MEMBER_SIZEOF(s, m); \
56 #define CHECK_STRUCT(s) \
59 COMMENT ("Checks for struct "#s); \
60 CHECK_VALUE((int)sizeof(s)); \
64 system_string (char *cmdline, char *str, int len)
77 int fd = fileno(stdout);
79 rc = dup2(fds[1], fd);
83 exit(system(cmdline));
85 } else if ((int)pid < 0) {
88 FILE *f = fdopen (fds[0], "r");
95 if (fgets(str, len, f) == NULL)
98 if (waitpid(pid, &rc, 0) != pid)
101 if (!WIFEXITED(rc) ||
102 WEXITSTATUS(rc) != 0)
105 if (strnlen(str, len) == len)
108 if (str[strlen(str) - 1] == '\n')
109 str[strlen(str) - 1] = 0;
116 main (int argc, char **argv)
121 system_string("uname -a", unameinfo, sizeof(unameinfo));
122 system_string("gcc -v 2>&1 | tail -1", gccinfo, sizeof(gccinfo));
124 printf ("void vibnal_assert_wire_constants (void)\n"
126 " /* Wire protocol assertions generated by 'wirecheck'\n"
129 "\n", unameinfo, gccinfo);
133 COMMENT ("Constants...");
134 CHECK_DEFINE (IBNAL_MSG_MAGIC);
135 CHECK_DEFINE (IBNAL_MSG_VERSION);
137 CHECK_DEFINE (IBNAL_MSG_CONNREQ);
138 CHECK_DEFINE (IBNAL_MSG_CONNACK);
139 CHECK_DEFINE (IBNAL_MSG_NOOP);
140 CHECK_DEFINE (IBNAL_MSG_IMMEDIATE);
141 CHECK_DEFINE (IBNAL_MSG_PUT_REQ);
142 CHECK_DEFINE (IBNAL_MSG_PUT_NAK);
143 CHECK_DEFINE (IBNAL_MSG_PUT_ACK);
144 CHECK_DEFINE (IBNAL_MSG_PUT_DONE);
145 CHECK_DEFINE (IBNAL_MSG_GET_REQ);
146 CHECK_DEFINE (IBNAL_MSG_GET_DONE);
148 CHECK_STRUCT (kib_connparams_t);
149 CHECK_MEMBER (kib_connparams_t, ibcp_queue_depth);
150 CHECK_MEMBER (kib_connparams_t, ibcp_max_msg_size);
151 CHECK_MEMBER (kib_connparams_t, ibcp_max_frags);
153 CHECK_STRUCT (kib_immediate_msg_t);
154 CHECK_MEMBER (kib_immediate_msg_t, ibim_hdr);
155 CHECK_MEMBER (kib_immediate_msg_t, ibim_payload[13]);
157 CHECK_STRUCT (kib_rdma_frag_t);
158 CHECK_MEMBER (kib_rdma_frag_t, rf_nob);
159 CHECK_MEMBER (kib_rdma_frag_t, rf_addr_lo);
160 CHECK_MEMBER (kib_rdma_frag_t, rf_addr_hi);
162 CHECK_STRUCT (kib_rdma_desc_t);
163 CHECK_MEMBER (kib_rdma_desc_t, rd_key);
164 CHECK_MEMBER (kib_rdma_desc_t, rd_nfrag);
165 CHECK_MEMBER (kib_rdma_desc_t, rd_frags[13]);
167 CHECK_STRUCT (kib_putreq_msg_t);
168 CHECK_MEMBER (kib_putreq_msg_t, ibprm_hdr);
169 CHECK_MEMBER (kib_putreq_msg_t, ibprm_cookie);
171 CHECK_STRUCT (kib_putack_msg_t);
172 CHECK_MEMBER (kib_putack_msg_t, ibpam_src_cookie);
173 CHECK_MEMBER (kib_putack_msg_t, ibpam_dst_cookie);
174 CHECK_MEMBER (kib_putack_msg_t, ibpam_rd);
176 CHECK_STRUCT (kib_get_msg_t);
177 CHECK_MEMBER (kib_get_msg_t, ibgm_hdr);
178 CHECK_MEMBER (kib_get_msg_t, ibgm_cookie);
179 CHECK_MEMBER (kib_get_msg_t, ibgm_rd);
181 CHECK_STRUCT (kib_completion_msg_t);
182 CHECK_MEMBER (kib_completion_msg_t, ibcm_cookie);
183 CHECK_MEMBER (kib_completion_msg_t, ibcm_status);
185 CHECK_STRUCT (kib_msg_t);
186 CHECK_MEMBER (kib_msg_t, ibm_magic);
187 CHECK_MEMBER (kib_msg_t, ibm_version);
188 CHECK_MEMBER (kib_msg_t, ibm_type);
189 CHECK_MEMBER (kib_msg_t, ibm_credits);
190 CHECK_MEMBER (kib_msg_t, ibm_nob);
191 CHECK_MEMBER (kib_msg_t, ibm_cksum);
192 CHECK_MEMBER (kib_msg_t, ibm_srcnid);
193 CHECK_MEMBER (kib_msg_t, ibm_srcstamp);
194 CHECK_MEMBER (kib_msg_t, ibm_dstnid);
195 CHECK_MEMBER (kib_msg_t, ibm_dststamp);
196 CHECK_MEMBER (kib_msg_t, ibm_seq);
197 CHECK_MEMBER (kib_msg_t, ibm_u.connparams);
198 CHECK_MEMBER (kib_msg_t, ibm_u.immediate);
199 CHECK_MEMBER (kib_msg_t, ibm_u.putreq);
200 CHECK_MEMBER (kib_msg_t, ibm_u.putack);
201 CHECK_MEMBER (kib_msg_t, ibm_u.get);
202 CHECK_MEMBER (kib_msg_t, ibm_u.completion);