diff options
| author | Roy Marples <roy@marples.name> | 2020-11-25 14:19:55 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2020-11-25 14:19:55 +0000 |
| commit | 21d355135157335a8d85a14412c006dff3eb41ff (patch) | |
| tree | 99239a69d53c64e71e14b015709528a5ff523b86 | |
| parent | ba04408c085ddf6b626352dc34f95dace33a78d2 (diff) | |
| download | dhcpcd-21d355135157335a8d85a14412c006dff3eb41ff.tar.xz | |
options: Allow duid to take a value
If a value is given, it overrides /var/db/dhcpcd/duid.
| -rw-r--r-- | src/dhcpcd.8.in | 17 | ||||
| -rw-r--r-- | src/dhcpcd.c | 6 | ||||
| -rw-r--r-- | src/dhcpcd.conf.5.in | 14 | ||||
| -rw-r--r-- | src/if-options.c | 12 |
4 files changed, 40 insertions, 9 deletions
diff --git a/src/dhcpcd.8.in b/src/dhcpcd.8.in index 8c89b209..7533f30b 100644 --- a/src/dhcpcd.8.in +++ b/src/dhcpcd.8.in @@ -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 @@ Use this .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 --git a/src/dhcpcd.c b/src/dhcpcd.c index 71575d1d..7727a48e 100644 --- a/src/dhcpcd.c +++ b/src/dhcpcd.c @@ -841,13 +841,17 @@ dhcpcd_initduid(struct dhcpcd_ctx *ctx, struct interface *ifp) { 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 --git a/src/dhcpcd.conf.5.in b/src/dhcpcd.conf.5.in index 1e7a8631..2afb23c0 100644 --- a/src/dhcpcd.conf.5.in +++ b/src/dhcpcd.conf.5.in @@ -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 @@ is an empty string then 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 @@ 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 .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 --git a/src/if-options.c b/src/if-options.c index d15034dd..509db378 100644 --- a/src/if-options.c +++ b/src/if-options.c @@ -1002,8 +1002,16 @@ parse_option(struct dhcpcd_ctx *ctx, const char *ifname, struct if_options *ifo, 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': |
