aboutsummaryrefslogtreecommitdiff
path: root/sbin/dhclient/dhclient.c
diff options
context:
space:
mode:
authorRob Norris <rob.norris@klarasystems.com>2023-03-14 22:07:18 +0000
committerAllan Jude <allanjude@FreeBSD.org>2023-04-10 23:13:18 +0000
commit461ccb55d50ccf1b5bcfe1310fe32d72f8b0ecdd (patch)
treefd7ebe16e27190d608a207c4d54cc295f03582df /sbin/dhclient/dhclient.c
parent22db5e5d03278471c46799016c177abf95f273cb (diff)
downloadsrc-461ccb55d50ccf1b5bcfe1310fe32d72f8b0ecdd.tar.gz
src-461ccb55d50ccf1b5bcfe1310fe32d72f8b0ecdd.zip
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 <jlduran at gmail dot com> MFC after: 2 months Reviewed by: allanjude, imp Sponsored by: Zenith Electronics LLC Sponsored by: Klara, Inc. Pull Request: #693
Diffstat (limited to 'sbin/dhclient/dhclient.c')
-rw-r--r--sbin/dhclient/dhclient.c13
1 files changed, 11 insertions, 2 deletions
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) {