X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=lib%2Fpb-protocol%2Fpb-protocol.c;h=ab5ea8a376e1500895ba047b3e656e8ac114fd59;hp=69ea35d2eed735382abe2bf22acc64444311159c;hb=45e9e7a53540e87e2129bb11fd853501131fb795;hpb=37b4861cb01bf6bd9da41aa1b311a87b0d26fc25 diff --git a/lib/pb-protocol/pb-protocol.c b/lib/pb-protocol/pb-protocol.c index 69ea35d..ab5ea8a 100644 --- a/lib/pb-protocol/pb-protocol.c +++ b/lib/pb-protocol/pb-protocol.c @@ -239,6 +239,9 @@ int pb_protocol_system_info_len(const struct system_info *sysinfo) 4 + optional_strlen(bd_info->mountpoint); } + /* BMC MAC */ + len += HWADDR_SIZE; + return len; } @@ -290,6 +293,8 @@ int pb_protocol_config_len(const struct config *config) len += 4 + 4; /* ipmi_bootdev, ipmi_bootdev_persistent */ + len += 4; /* allow_writes */ + len += 4 + optional_strlen(config->lang); return len; @@ -418,6 +423,9 @@ int pb_protocol_serialise_system_info(const struct system_info *sysinfo, pos += pb_protocol_serialise_string(pos, bd_info->mountpoint); } + memcpy(pos, sysinfo->bmc_mac, HWADDR_SIZE); + pos += HWADDR_SIZE; + assert(pos <= buf + buf_len); (void)buf_len; @@ -502,6 +510,9 @@ int pb_protocol_serialise_config(const struct config *config, *(uint32_t *)pos = config->ipmi_bootdev_persistent; pos += 4; + *(uint32_t *)pos = config->allow_writes; + pos += 4; + pos += pb_protocol_serialise_string(pos, config->lang); assert(pos <= buf + buf_len); @@ -845,8 +856,18 @@ int pb_protocol_deserialise_system_info(struct system_info *sysinfo, sysinfo->blockdevs[i] = bd_info; } - rc = 0; + for (i = 0; i < HWADDR_SIZE; i++) { + if (pos[i] != 0) { + sysinfo->bmc_mac = talloc_memdup(sysinfo, pos, HWADDR_SIZE); + break; + } + } + + pos += HWADDR_SIZE; + len -= HWADDR_SIZE; + + rc = 0; out: return rc; } @@ -958,6 +979,10 @@ int pb_protocol_deserialise_config(struct config *config, goto out; config->ipmi_bootdev_persistent = !!tmp; + if (read_u32(&pos, &len, &tmp)) + goto out; + config->allow_writes = !!tmp; + if (read_string(config, &pos, &len, &str)) goto out;