Mercurial > hg > dhcpcd
changeset 5273:3a33b39120eb draft
DHCP6: Use interface vendorclassid rather than context
This allows the vendor class to be turned off as well.
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Wed, 27 May 2020 21:49:05 +0100 |
| parents | 97e87c65302e |
| children | f0c6e0c1d52a |
| files | src/dhcp6.c |
| diffstat | 1 files changed, 9 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/dhcp6.c Wed May 27 15:53:21 2020 +0000 +++ b/src/dhcp6.c Wed May 27 21:49:05 2020 +0100 @@ -262,21 +262,22 @@ size_t len, vlen, i; uint8_t *p; const struct vivco *vivco; - char vendor[VENDORCLASSID_MAX_LEN]; struct dhcp6_option o; ifo = ifp->options; len = sizeof(uint32_t); /* IANA PEN */ if (ifo->vivco_en) { + vlen = 0; for (i = 0, vivco = ifo->vivco; i < ifo->vivco_len; i++, vivco++) - len += sizeof(uint16_t) + vivco->len; - vlen = 0; /* silence bogus gcc warning */ - } else { - vlen = strlcpy(vendor, ifp->ctx->vendor, sizeof(vendor)); + vlen += sizeof(uint16_t) + vivco->len; + len += vlen; + } else if (ifo->vendorclassid[0] != '\0') { + vlen = (size_t)ifo->vendorclassid[0]; len += sizeof(uint16_t) + vlen; - } + } else + return 0; if (len > UINT16_MAX) { logerrx("%s: DHCPv6 Vendor Class too big", ifp->name); @@ -307,11 +308,11 @@ memcpy(p, vivco->data, vivco->len); p += vivco->len; } - } else if (vlen) { + } else if (ifo->vendorclassid[0] != '\0') { hvlen = htons((uint16_t)vlen); memcpy(p, &hvlen, sizeof(hvlen)); p += sizeof(hvlen); - memcpy(p, vendor, (size_t)vlen); + memcpy(p, ifo->vendorclassid + 1, (size_t)vlen); } }
