dhcpv4_lease(struct interface *iface, enum dhcpv4_msg msg, const uint8_t *mac,
const uint32_t reqaddr, uint32_t *leasetime, const char *hostname,
const size_t hostname_len, const bool accept_fr_nonce, bool *incl_fr_opt,
- uint32_t *fr_serverid, const uint8_t *reqopts, const size_t reqopts_len)
+ uint32_t *fr_serverid)
{
struct dhcp_assignment *a = find_assignment_by_hwaddr(iface, mac);
struct lease *l = config_find_lease_by_mac(mac);
}
}
- if (reqopts_len > 0) {
- a->reqopts = realloc(a->reqopts, reqopts_len);
- if (a->reqopts) {
- memcpy(a->reqopts, reqopts, reqopts_len);
- a->reqopts_len = reqopts_len;
- }
- }
-
if (!(a->flags & OAF_BOUND)) {
a->accept_fr_nonce = accept_fr_nonce;
*incl_fr_opt = accept_fr_nonce;
return;
break;
case DHCPV4_OPT_REQOPTS:
- req_opts = opt->data;
- req_opts_len = opt->len;
+ if (opt->len > 0) {
+ req_opts = opt->data;
+ req_opts_len = opt->len;
+ }
break;
case DHCPV4_OPT_USER_CLASS:
if (iface->filter_class) {
case DHCPV4_MSG_RELEASE:
a = dhcpv4_lease(iface, req_msg, req->chaddr, req_addr,
&req_leasetime, req_hostname, req_hostname_len,
- req_accept_fr, &incl_fr_opt, &fr_serverid,
- req_opts, req_opts_len);
+ req_accept_fr, &incl_fr_opt, &fr_serverid);
break;
case DHCPV4_MSG_INFORM:
break;
dhcpv4_put(&reply, &cursor, DHCPV4_OPT_DNSSERVER,
4 * iface->dhcpv4_dns_cnt, iface->dhcpv4_dns);
- for (size_t opt = 0; a && opt < a->reqopts_len; opt++) {
- switch (a->reqopts[opt]) {
+ for (size_t opt = 0; a && opt < req_opts_len; opt++) {
+ switch (req_opts[opt]) {
case DHCPV4_OPT_NTPSERVER:
dhcpv4_put(&reply, &cursor, DHCPV4_OPT_NTPSERVER,
4 * iface->dhcpv4_ntp_cnt, iface->dhcpv4_ntp);
blobmsg_add_string(&b, "hostname", (c->hostname) ? c->hostname : "");
blobmsg_add_u8(&b, "accept-reconf", c->accept_fr_nonce);
- if (c->reqopts_len > 0) {
- buf = blobmsg_alloc_string_buffer(&b, "reqopts", c->reqopts_len * 4 + 1);
- for (size_t i = 0; i < c->reqopts_len; i++)
- buf += snprintf(buf, 5, "%" PRIu8 ",", c->reqopts[i]);
- buf[-1] = '\0';
- blobmsg_add_string_buffer(&b);
- }
-
m = blobmsg_open_array(&b, "flags");
if (c->flags & OAF_BOUND)
blobmsg_add_string(&b, NULL, "bound");