2 CTDB protocol marshalling
4 Copyright (C) Amitay Isaacs 2015
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, see <http://www.gnu.org/licenses/>.
21 #include "system/network.h"
27 #include "protocol_api.h"
29 int ctdb_req_header_verify(struct ctdb_req_header
*h
, uint32_t operation
)
31 if (h
->length
< sizeof(struct ctdb_req_header
)) {
35 if (h
->ctdb_magic
!= CTDB_MAGIC
) {
39 if (h
->ctdb_version
!= CTDB_PROTOCOL
) {
43 if (operation
!= 0 && h
->operation
!= operation
) {
50 void ctdb_req_header_fill(struct ctdb_req_header
*h
, uint32_t generation
,
51 uint32_t operation
, uint32_t destnode
,
52 uint32_t srcnode
, uint32_t reqid
)
54 h
->length
= sizeof(struct ctdb_req_header
);
55 h
->ctdb_magic
= CTDB_MAGIC
;
56 h
->ctdb_version
= CTDB_PROTOCOL
;
57 h
->generation
= generation
;
58 h
->operation
= operation
;
59 h
->destnode
= destnode
;
64 size_t ctdb_req_header_len(struct ctdb_req_header
*h
)
66 return sizeof(struct ctdb_req_header
);
69 void ctdb_req_header_push(struct ctdb_req_header
*h
, uint8_t *buf
)
71 memcpy(buf
, h
, sizeof(struct ctdb_req_header
));
74 int ctdb_req_header_pull(uint8_t *buf
, size_t buflen
,
75 struct ctdb_req_header
*h
)
77 if (buflen
< sizeof(struct ctdb_req_header
)) {
81 memcpy(h
, buf
, sizeof(struct ctdb_req_header
));