The CAPI message structs itself should be packed and not the location of single fields in the structure.
Unified · Split
| @@ -78,29 +78,29 @@ typedef union actcapi_infoel { /* info element */ · 77 unmodified lines | ||
| 78 | 78 | typedef struct actcapi_msn { |
| 79 | 79 | __u8 eaz; |
| 80 | 80 | __u8 len; /* Length of MSN */ |
| 81 | − __u8 msn[15] __attribute__ ((packed)); | |
| 82 | −} actcapi_msn; | |
| 81 | + __u8 msn[15]; | |
| 82 | +} __attribute__((packed)) actcapi_msn; | |
| 83 | 83 | |
| 84 | 84 | typedef struct actcapi_dlpd { |
| 85 | 85 | __u8 len; /* Length of structure */ |
| 86 | − __u16 dlen __attribute__ ((packed)); /* Data Length */ | |
| 87 | − __u8 laa __attribute__ ((packed)); /* Link Address A */ | |
| 86 | + __u16 dlen; /* Data Length */ | |
| 87 | + __u8 laa; /* Link Address A */ | |
| 88 | 88 | __u8 lab; /* Link Address B */ |
| 89 | 89 | __u8 modulo; /* Modulo Mode */ |
| 90 | 90 | __u8 win; /* Window size */ |
| 91 | 91 | __u8 xid[100]; /* XID Information */ |
| 92 | −} actcapi_dlpd; | |
| 92 | +} __attribute__((packed)) actcapi_dlpd; | |
| 93 | 93 | |
| 94 | 94 | typedef struct actcapi_ncpd { |
| 95 | 95 | __u8 len; /* Length of structure */ |
| 96 | − __u16 lic __attribute__ ((packed)); | |
| 97 | − __u16 hic __attribute__ ((packed)); | |
| 98 | − __u16 ltc __attribute__ ((packed)); | |
| 99 | − __u16 htc __attribute__ ((packed)); | |
| 100 | − __u16 loc __attribute__ ((packed)); | |
| 101 | − __u16 hoc __attribute__ ((packed)); | |
| 102 | − __u8 modulo __attribute__ ((packed)); | |
| 103 | −} actcapi_ncpd; | |
| 96 | + __u16 lic; | |
| 97 | + __u16 hic; | |
| 98 | + __u16 ltc; | |
| 99 | + __u16 htc; | |
| 100 | + __u16 loc; | |
| 101 | + __u16 hoc; | |
| 102 | + __u8 modulo; | |
| 103 | +} __attribute__((packed)) actcapi_ncpd; | |
| 104 | 104 | #define actcapi_ncpi actcapi_ncpd |
| 105 | 105 | |
| 106 | 106 | /* |
| @@ -168,19 +168,19 @@ typedef struct actcapi_msg { · 61 unmodified lines | ||
| 168 | 168 | __u16 manuf_msg; |
| 169 | 169 | __u16 controller; |
| 170 | 170 | actcapi_msn msnmap; |
| 171 | − } manufacturer_req_msn; | |
| 171 | + } __attribute ((packed)) manufacturer_req_msn; | |
| 172 | 172 | /* TODO: TraceInit-req/conf/ind/resp and |
| 173 | 173 | * TraceDump-req/conf/ind/resp |
| 174 | 174 | */ |
| 175 | 175 | struct connect_req { |
| 176 | 176 | __u8 controller; |
| 177 | 177 | __u8 bchan; |
| 178 | − __u32 infomask __attribute__ ((packed)); | |
| 178 | + __u32 infomask; | |
| 179 | 179 | __u8 si1; |
| 180 | 180 | __u8 si2; |
| 181 | 181 | __u8 eaz; |
| 182 | 182 | actcapi_addr addr; |
| 183 | − } connect_req; | |
| 183 | + } __attribute__ ((packed)) connect_req; | |
| 184 | 184 | struct connect_conf { |
| 185 | 185 | __u16 plci; |
| 186 | 186 | __u16 info; |
| @@ -192,7 +192,7 @@ typedef struct actcapi_msg { · 5 unmodified lines | ||
| 192 | 192 | __u8 si2; |
| 193 | 193 | __u8 eaz; |
| 194 | 194 | actcapi_addr addr; |
| 195 | − } connect_ind; | |
| 195 | + } __attribute__ ((packed)) connect_ind; | |
| 196 | 196 | struct connect_resp { |
| 197 | 197 | __u16 plci; |
| 198 | 198 | __u8 rejectcause; |
| @@ -200,14 +200,14 @@ typedef struct actcapi_msg { · 1 unmodified line | ||
| 200 | 200 | struct connect_active_ind { |
| 201 | 201 | __u16 plci; |
| 202 | 202 | actcapi_addr addr; |
| 203 | − } connect_active_ind; | |
| 203 | + } __attribute__ ((packed)) connect_active_ind; | |
| 204 | 204 | struct connect_active_resp { |
| 205 | 205 | __u16 plci; |
| 206 | 206 | } connect_active_resp; |
| 207 | 207 | struct connect_b3_req { |
| 208 | 208 | __u16 plci; |
| 209 | 209 | actcapi_ncpi ncpi; |
| 210 | − } connect_b3_req; | |
| 210 | + } __attribute__ ((packed)) connect_b3_req; | |
| 211 | 211 | struct connect_b3_conf { |
| 212 | 212 | __u16 plci; |
| 213 | 213 | __u16 ncci; |
| @@ -217,12 +217,12 @@ typedef struct actcapi_msg { · 3 unmodified lines | ||
| 217 | 217 | __u16 ncci; |
| 218 | 218 | __u16 plci; |
| 219 | 219 | actcapi_ncpi ncpi; |
| 220 | − } connect_b3_ind; | |
| 220 | + } __attribute__ ((packed)) connect_b3_ind; | |
| 221 | 221 | struct connect_b3_resp { |
| 222 | 222 | __u16 ncci; |
| 223 | 223 | __u8 rejectcause; |
| 224 | − actcapi_ncpi ncpi __attribute__ ((packed)); | |
| 225 | − } connect_b3_resp; | |
| 224 | + actcapi_ncpi ncpi; | |
| 225 | + } __attribute__ ((packed)) connect_b3_resp; | |
| 226 | 226 | struct disconnect_req { |
| 227 | 227 | __u16 plci; |
| 228 | 228 | __u8 cause; |
| @@ -241,14 +241,14 @@ typedef struct actcapi_msg { · 12 unmodified lines | ||
| 241 | 241 | struct connect_b3_active_ind { |
| 242 | 242 | __u16 ncci; |
| 243 | 243 | actcapi_ncpi ncpi; |
| 244 | − } connect_b3_active_ind; | |
| 244 | + } __attribute__ ((packed)) connect_b3_active_ind; | |
| 245 | 245 | struct connect_b3_active_resp { |
| 246 | 246 | __u16 ncci; |
| 247 | 247 | } connect_b3_active_resp; |
| 248 | 248 | struct disconnect_b3_req { |
| 249 | 249 | __u16 ncci; |
| 250 | 250 | actcapi_ncpi ncpi; |
| 251 | − } disconnect_b3_req; | |
| 251 | + } __attribute__ ((packed)) disconnect_b3_req; | |
| 252 | 252 | struct disconnect_b3_conf { |
| 253 | 253 | __u16 ncci; |
| 254 | 254 | __u16 info; |
| @@ -257,7 +257,7 @@ typedef struct actcapi_msg { · 2 unmodified lines | ||
| 257 | 257 | __u16 ncci; |
| 258 | 258 | __u16 info; |
| 259 | 259 | actcapi_ncpi ncpi; |
| 260 | − } disconnect_b3_ind; | |
| 260 | + } __attribute__ ((packed)) disconnect_b3_ind; | |
| 261 | 261 | struct disconnect_b3_resp { |
| 262 | 262 | __u16 ncci; |
| 263 | 263 | } disconnect_b3_resp; |
| @@ -265,7 +265,7 @@ typedef struct actcapi_msg { · 1 unmodified line | ||
| 265 | 265 | __u16 plci; |
| 266 | 266 | actcapi_infonr nr; |
| 267 | 267 | actcapi_infoel el; |
| 268 | − } info_ind; | |
| 268 | + } __attribute__ ((packed)) info_ind; | |
| 269 | 269 | struct info_resp { |
| 270 | 270 | __u16 plci; |
| 271 | 271 | } info_resp; |
| @@ -279,8 +279,8 @@ typedef struct actcapi_msg { · 7 unmodified lines | ||
| 279 | 279 | struct select_b2_protocol_req { |
| 280 | 280 | __u16 plci; |
| 281 | 281 | __u8 protocol; |
| 282 | − actcapi_dlpd dlpd __attribute__ ((packed)); | |
| 283 | − } select_b2_protocol_req; | |
| 282 | + actcapi_dlpd dlpd; | |
| 283 | + } __attribute__ ((packed)) select_b2_protocol_req; | |
| 284 | 284 | struct select_b2_protocol_conf { |
| 285 | 285 | __u16 plci; |
| 286 | 286 | __u16 info; |
| @@ -288,47 +288,47 @@ typedef struct actcapi_msg { · 1 unmodified line | ||
| 288 | 288 | struct select_b3_protocol_req { |
| 289 | 289 | __u16 plci; |
| 290 | 290 | __u8 protocol; |
| 291 | − actcapi_ncpd ncpd __attribute__ ((packed)); | |
| 292 | − } select_b3_protocol_req; | |
| 291 | + actcapi_ncpd ncpd; | |
| 292 | + } __attribute__ ((packed)) select_b3_protocol_req; | |
| 293 | 293 | struct select_b3_protocol_conf { |
| 294 | 294 | __u16 plci; |
| 295 | 295 | __u16 info; |
| 296 | 296 | } select_b3_protocol_conf; |
| 297 | 297 | struct listen_req { |
| 298 | 298 | __u8 controller; |
| 299 | − __u32 infomask __attribute__ ((packed)); | |
| 300 | − __u16 eazmask __attribute__ ((packed)); | |
| 301 | − __u16 simask __attribute__ ((packed)); | |
| 302 | − } listen_req; | |
| 299 | + __u32 infomask; | |
| 300 | + __u16 eazmask; | |
| 301 | + __u16 simask; | |
| 302 | + } __attribute__ ((packed)) listen_req; | |
| 303 | 303 | struct listen_conf { |
| 304 | 304 | __u8 controller; |
| 305 | − __u16 info __attribute__ ((packed)); | |
| 306 | − } listen_conf; | |
| 305 | + __u16 info; | |
| 306 | + } __attribute__ ((packed)) listen_conf; | |
| 307 | 307 | struct data_b3_req { |
| 308 | 308 | __u16 fakencci; |
| 309 | 309 | __u16 datalen; |
| 310 | 310 | __u32 unused; |
| 311 | 311 | __u8 blocknr; |
| 312 | − __u16 flags __attribute__ ((packed)); | |
| 313 | − } data_b3_req; | |
| 312 | + __u16 flags; | |
| 313 | + } __attribute ((packed)) data_b3_req; | |
| 314 | 314 | struct data_b3_ind { |
| 315 | 315 | __u16 fakencci; |
| 316 | 316 | __u16 datalen; |
| 317 | 317 | __u32 unused; |
| 318 | 318 | __u8 blocknr; |
| 319 | − __u16 flags __attribute__ ((packed)); | |
| 320 | − } data_b3_ind; | |
| 319 | + __u16 flags; | |
| 320 | + } __attribute__ ((packed)) data_b3_ind; | |
| 321 | 321 | struct data_b3_resp { |
| 322 | 322 | __u16 ncci; |
| 323 | 323 | __u8 blocknr; |
| 324 | − } data_b3_resp; | |
| 324 | + } __attribute__ ((packed)) data_b3_resp; | |
| 325 | 325 | struct data_b3_conf { |
| 326 | 326 | __u16 ncci; |
| 327 | 327 | __u8 blocknr; |
| 328 | − __u16 info __attribute__ ((packed)); | |
| 329 | − } data_b3_conf; | |
| 328 | + __u16 info; | |
| 329 | + } __attribute__ ((packed)) data_b3_conf; | |
| 330 | 330 | } msg; |
| 331 | −} actcapi_msg; | |
| 331 | +} __attribute__ ((packed)) actcapi_msg; | |
| 332 | 332 | |
| 333 | 333 | static inline unsigned short |
| 334 | 334 | actcapi_nextsmsg(act2000_card *card) |