# HG changeset patch # User Roy Marples # Date 1606313995 0 # Node ID 0c4608a6cc2affab3af679496770181f11b2586a # Parent dba7608e00b388aff97858c3ef7f63e3dd85875c options: Allow duid to take a value If a value is given, it overrides /var/db/dhcpcd/duid. diff -r dba7608e00b3 -r 0c4608a6cc2a src/dhcpcd.8.in --- a/src/dhcpcd.8.in Wed Nov 25 14:05:18 2020 +0000 +++ b/src/dhcpcd.8.in Wed Nov 25 14:19:55 2020 +0000 @@ -24,7 +24,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd November 20, 2020 +.Dd November 25, 2020 .Dt DHCPCD 8 .Os .Sh NAME @@ -264,18 +264,29 @@ .Ar script instead of the default .Pa @SCRIPT@ . -.It Fl D , Fl Fl duid +.It Fl D , Fl Fl duid Op Ar ll | lt | uuid | value Use a DHCP Unique Identifier. If a system UUID is available, that will be used to create a DUID-UUID, otheriwse if persistent storage is available then a DUID-LLT (link local address + time) is generated, otherwise DUID-LL is generated (link local address). +The DUID type can be hinted as an optional parameter if the file +.Pa @DBDIR@/duid +does not exist. +If not +.Va ll , +.Va lt +or +.Va uuid +then +.Va value +will be converted from 00:11:22:33 format. This, plus the IAID will be used as the .Fl I , Fl Fl clientid . The DUID generated will be held in .Pa @DBDIR@/duid and should not be copied to other hosts. -This file also takes precedence over the above rules. +This file also takes precedence over the above rules except for setting a value. .It Fl d , Fl Fl debug Echo debug messages to the stderr and syslog. .It Fl E , Fl Fl lastlease diff -r dba7608e00b3 -r 0c4608a6cc2a src/dhcpcd.c --- a/src/dhcpcd.c Wed Nov 25 14:05:18 2020 +0000 +++ b/src/dhcpcd.c Wed Nov 25 14:19:55 2020 +0000 @@ -841,13 +841,17 @@ { char buf[DUID_LEN * 3]; - if (ctx->duid != NULL) + if (ctx->duid != NULL) { + if (ifp == NULL) + goto log; return; + } duid_init(ctx, ifp); if (ctx->duid == NULL) return; +log: loginfox("DUID %s", hwaddr_ntoa(ctx->duid, ctx->duid_len, buf, sizeof(buf))); } diff -r dba7608e00b3 -r 0c4608a6cc2a src/dhcpcd.conf.5.in --- a/src/dhcpcd.conf.5.in Wed Nov 25 14:05:18 2020 +0000 +++ b/src/dhcpcd.conf.5.in Wed Nov 25 14:19:55 2020 +0000 @@ -24,7 +24,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd October 25, 2020 +.Dd November 25, 2020 .Dt DHCPCD.CONF 5 .Os .Sh NAME @@ -211,7 +211,7 @@ sends a default .Ar clientid of the hardware family and the hardware address. -.It Ic duid Op ll | lt | uuid +.It Ic duid Op ll | lt | uuid | value Use a DHCP Unique Identifier. If a system UUID is available, that will be used to create a DUID-UUID, otheriwse if persistent storage is available then a DUID-LLT @@ -220,12 +220,20 @@ The DUID type can be hinted as an optional parameter if the file .Pa @DBDIR@/duid does not exist. +If not +.Va ll , +.Va lt +or +.Va uuid +then +.Va value +will be converted from 00:11:22:33 format. This, plus the IAID will be used as the .Ic clientid . The DUID generated will be held in .Pa @DBDIR@/duid and should not be copied to other hosts. -This file also takes precedence over the above rules. +This file also takes precedence over the above rules except for setting a value. .It Ic iaid Ar iaid Set the Interface Association Identifier to .Ar iaid . diff -r dba7608e00b3 -r 0c4608a6cc2a src/if-options.c --- a/src/if-options.c Wed Nov 25 14:05:18 2020 +0000 +++ b/src/if-options.c Wed Nov 25 14:19:55 2020 +0000 @@ -1002,8 +1002,16 @@ else if (strcmp(arg, "uuid") == 0) ctx->duid_type = DUID_UUID; else { - logwarnx("%s: invalid duid type", arg); - ctx->duid_type = DUID_DEFAULT; + dl = hwaddr_aton(NULL, arg); + if (dl != 0) { + no = realloc(ctx->duid, dl); + if (no == NULL) + logerrx(__func__); + else { + ctx->duid = no; + ctx->duid_len = hwaddr_aton(no, arg); + } + } } break; case 'E':