From 461ccb55d50ccf1b5bcfe1310fe32d72f8b0ecdd Mon Sep 17 00:00:00 2001 From: Rob Norris Date: Wed, 15 Mar 2023 09:07:18 +1100 Subject: dhclient: add ability to ignore options in offers A machine might exist on multiple networks, all of which offer, say, default routes or name servers. There's no easy way to indicate in the config that those options are only valid for a single interface. Now, we can write: interface "lan0" { request routers; require routers; } interface "lan1" { ignore routers; } And only take action on default routes offered on lan0. Tested by: Jose Luis Duran MFC after: 2 months Reviewed by: allanjude, imp Sponsored by: Zenith Electronics LLC Sponsored by: Klara, Inc. Pull Request: #693 --- sbin/dhclient/dhclient.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'sbin/dhclient/dhclient.c') diff --git a/sbin/dhclient/dhclient.c b/sbin/dhclient/dhclient.c index da9a567fad04..4261251b6b78 100644 --- a/sbin/dhclient/dhclient.c +++ b/sbin/dhclient/dhclient.c @@ -1039,7 +1039,6 @@ dhcpoffer(struct packet *packet) note("%s from %s", name, piaddr(packet->client_addr)); - /* If this lease doesn't supply the minimum required parameters, blow it off. */ for (i = 0; ip->client->config->required_options[i]; i++) { @@ -1141,8 +1140,9 @@ dhcpoffer(struct packet *packet) struct client_lease * packet_to_lease(struct packet *packet) { + struct interface_info *ip = packet->interface; struct client_lease *lease; - int i; + int i, j; lease = malloc(sizeof(struct client_lease)); @@ -1156,6 +1156,15 @@ packet_to_lease(struct packet *packet) /* Copy the lease options. */ for (i = 0; i < 256; i++) { if (packet->options[i].len) { + int ignored = 0; + for (j = 0; ip->client->config->ignored_options[j]; j++) + if (i == + ip->client->config->ignored_options[j]) { + ignored = 1; + break; + } + if (ignored) + continue; lease->options[i].data = malloc(packet->options[i].len + 1); if (!lease->options[i].data) { -- cgit v1.2.3