Mercurial > hg > dhcpcd
changeset 5551:0c4608a6cc2a draft
options: Allow duid to take a value
If a value is given, it overrides /var/db/dhcpcd/duid.
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Wed, 25 Nov 2020 14:19:55 +0000 |
| parents | dba7608e00b3 |
| children | 66dc60bf133d |
| files | src/dhcpcd.8.in src/dhcpcd.c src/dhcpcd.conf.5.in src/if-options.c |
| diffstat | 4 files changed, 40 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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))); }
--- 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 .
--- 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':
