2
0
mirror of https://gitlab.isc.org/isc-projects/dhcp synced 2025-09-04 08:15:14 +00:00

Add support for alias declaration

This commit is contained in:
Ted Lemon
1997-02-22 12:25:32 +00:00
parent e6e5d8749e
commit f79e49f3ee
10 changed files with 78 additions and 20 deletions

View File

@@ -3,7 +3,7 @@
Parser for dhclient config and lease files... */ Parser for dhclient config and lease files... */
/* /*
* Copyright (c) 1995, 1996, 1997 The Internet Software Consortium. * Copyright (c) 1997 The Internet Software Consortium.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -42,7 +42,7 @@
#ifndef lint #ifndef lint
static char copyright[] = static char copyright[] =
"$Id: clparse.c,v 1.3 1997/02/22 08:38:32 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n"; "$Id: clparse.c,v 1.4 1997/02/22 12:23:22 mellon Exp $ Copyright (c) 1997 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */ #endif /* not lint */
#include "dhcpd.h" #include "dhcpd.h"
@@ -113,7 +113,7 @@ int read_client_conf ()
/* lease-file :== client-lease-statements EOF /* lease-file :== client-lease-statements EOF
client-lease-statements :== <nil> client-lease-statements :== <nil>
| client-lease-statements client-lease-statement */ | client-lease-statements LEASE client-lease-statement */
void read_client_leases () void read_client_leases ()
{ {
@@ -152,7 +152,8 @@ void read_client_leases ()
SELECT_TIMEOUT number | SELECT_TIMEOUT number |
SCRIPT string | SCRIPT string |
interface-declaration | interface-declaration |
client-lease-statement */ LEASE client-lease-statement |
ALIAS client-lease-statement */
void parse_client_statement (cfile, ip, config) void parse_client_statement (cfile, ip, config)
FILE *cfile; FILE *cfile;
@@ -222,6 +223,10 @@ void parse_client_statement (cfile, ip, config)
parse_client_lease_statement (cfile, 1); parse_client_lease_statement (cfile, 1);
return; return;
case ALIAS:
parse_client_lease_statement (cfile, 2);
return;
default: default:
parse_warn ("expecting a statement."); parse_warn ("expecting a statement.");
skip_to_semi (cfile); skip_to_semi (cfile);
@@ -434,7 +439,7 @@ void make_client_config (ip, config)
} }
/* client-lease-statement :== /* client-lease-statement :==
LEASE RBRACE client-lease-declarations LBRACE RBRACE client-lease-declarations LBRACE
client-lease-declarations :== client-lease-declarations :==
<nil> | <nil> |
@@ -489,6 +494,12 @@ void parse_client_lease_statement (cfile, is_static)
if (!ip -> client) if (!ip -> client)
make_client_state (ip); make_client_state (ip);
/* If this is an alias lease, it doesn't need to be sorted in. */
if (is_static == 2) {
ip -> client -> alias = lease;
return;
}
/* The last lease in the lease file on a particular interface is /* The last lease in the lease file on a particular interface is
the active lease for that interface. Of course, we don't know the active lease for that interface. Of course, we don't know
what the last lease in the file is until we've parsed the whole what the last lease in the file is until we've parsed the whole

View File

@@ -56,7 +56,7 @@
#ifndef lint #ifndef lint
static char copyright[] = static char copyright[] =
"$Id: dhclient.c,v 1.25 1997/02/22 08:44:15 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n"; "$Id: dhclient.c,v 1.26 1997/02/22 12:24:28 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */ #endif /* not lint */
#include "dhcpd.h" #include "dhcpd.h"
@@ -185,6 +185,9 @@ int main (argc, argv, envp)
/* Call the script with the list of interfaces. */ /* Call the script with the list of interfaces. */
for (ip = interfaces; ip; ip = ip -> next) { for (ip = interfaces; ip; ip = ip -> next) {
script_init (ip, "PREINIT", (struct string_list *)0); script_init (ip, "PREINIT", (struct string_list *)0);
if (ip -> client -> alias)
script_write_params (ip, "alias_",
ip -> client -> alias);
script_go (ip); script_go (ip);
} }
} }
@@ -430,6 +433,8 @@ void dhcpack (packet)
if (ip -> client -> active) if (ip -> client -> active)
script_write_params (ip, "old_", ip -> client -> active); script_write_params (ip, "old_", ip -> client -> active);
script_write_params (ip, "new_", ip -> client -> new); script_write_params (ip, "new_", ip -> client -> new);
if (ip -> client -> alias)
script_write_params (ip, "alias_", ip -> client -> alias);
script_go (ip); script_go (ip);
/* Replace the old active lease with the new one. */ /* Replace the old active lease with the new one. */
@@ -855,6 +860,9 @@ void state_panic (ip)
ip -> client -> active -> medium); ip -> client -> active -> medium);
script_write_params (ip, "new_", script_write_params (ip, "new_",
ip -> client -> active); ip -> client -> active);
if (ip -> client -> alias)
script_write_params (ip, "alias_",
ip -> client -> alias);
/* If the old lease is still good and doesn't /* If the old lease is still good and doesn't
yet need renewal, go into BOUND state and yet need renewal, go into BOUND state and
@@ -908,6 +916,8 @@ void state_panic (ip)
and try again later. */ and try again later. */
note ("No working leases in persistent database - sleeping.\n"); note ("No working leases in persistent database - sleeping.\n");
script_init (ip, "FAIL", (struct string_list *)0); script_init (ip, "FAIL", (struct string_list *)0);
if (ip -> client -> alias)
script_write_params (ip, "alias_", ip -> client -> alias);
script_go (ip); script_go (ip);
ip -> client -> state = S_INIT; ip -> client -> state = S_INIT;
add_timeout (cur_time + ip -> client -> config -> retry_interval, add_timeout (cur_time + ip -> client -> config -> retry_interval,
@@ -932,6 +942,9 @@ void send_request (ip)
/* Run the client script with the new parameters. */ /* Run the client script with the new parameters. */
script_init (ip, "EXPIRE", (struct string_list *)0); script_init (ip, "EXPIRE", (struct string_list *)0);
script_write_params (ip, "old_", ip -> client -> active); script_write_params (ip, "old_", ip -> client -> active);
if (ip -> client -> alias)
script_write_params (ip, "alias_",
ip -> client -> alias);
script_go (ip); script_go (ip);
ip -> client -> state = S_INIT; ip -> client -> state = S_INIT;

View File

@@ -3,7 +3,7 @@
Parser for dhclient config and lease files... */ Parser for dhclient config and lease files... */
/* /*
* Copyright (c) 1995, 1996, 1997 The Internet Software Consortium. * Copyright (c) 1997 The Internet Software Consortium.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -42,7 +42,7 @@
#ifndef lint #ifndef lint
static char copyright[] = static char copyright[] =
"$Id: clparse.c,v 1.3 1997/02/22 08:38:32 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n"; "$Id: clparse.c,v 1.4 1997/02/22 12:23:22 mellon Exp $ Copyright (c) 1997 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */ #endif /* not lint */
#include "dhcpd.h" #include "dhcpd.h"
@@ -113,7 +113,7 @@ int read_client_conf ()
/* lease-file :== client-lease-statements EOF /* lease-file :== client-lease-statements EOF
client-lease-statements :== <nil> client-lease-statements :== <nil>
| client-lease-statements client-lease-statement */ | client-lease-statements LEASE client-lease-statement */
void read_client_leases () void read_client_leases ()
{ {
@@ -152,7 +152,8 @@ void read_client_leases ()
SELECT_TIMEOUT number | SELECT_TIMEOUT number |
SCRIPT string | SCRIPT string |
interface-declaration | interface-declaration |
client-lease-statement */ LEASE client-lease-statement |
ALIAS client-lease-statement */
void parse_client_statement (cfile, ip, config) void parse_client_statement (cfile, ip, config)
FILE *cfile; FILE *cfile;
@@ -222,6 +223,10 @@ void parse_client_statement (cfile, ip, config)
parse_client_lease_statement (cfile, 1); parse_client_lease_statement (cfile, 1);
return; return;
case ALIAS:
parse_client_lease_statement (cfile, 2);
return;
default: default:
parse_warn ("expecting a statement."); parse_warn ("expecting a statement.");
skip_to_semi (cfile); skip_to_semi (cfile);
@@ -434,7 +439,7 @@ void make_client_config (ip, config)
} }
/* client-lease-statement :== /* client-lease-statement :==
LEASE RBRACE client-lease-declarations LBRACE RBRACE client-lease-declarations LBRACE
client-lease-declarations :== client-lease-declarations :==
<nil> | <nil> |
@@ -489,6 +494,12 @@ void parse_client_lease_statement (cfile, is_static)
if (!ip -> client) if (!ip -> client)
make_client_state (ip); make_client_state (ip);
/* If this is an alias lease, it doesn't need to be sorted in. */
if (is_static == 2) {
ip -> client -> alias = lease;
return;
}
/* The last lease in the lease file on a particular interface is /* The last lease in the lease file on a particular interface is
the active lease for that interface. Of course, we don't know the active lease for that interface. Of course, we don't know
what the last lease in the file is until we've parsed the whole what the last lease in the file is until we've parsed the whole

View File

@@ -3,7 +3,7 @@
Lexical scanner for dhcpd config file... */ Lexical scanner for dhcpd config file... */
/* /*
* Copyright (c) 1995, 1996 The Internet Software Consortium. * Copyright (c) 1995, 1996, 1997 The Internet Software Consortium.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -42,7 +42,7 @@
#ifndef lint #ifndef lint
static char copyright[] = static char copyright[] =
"$Id: conflex.c,v 1.21 1997/02/22 08:29:24 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n"; "$Id: conflex.c,v 1.22 1997/02/22 12:23:40 mellon Exp $ Copyright (c) 1995, 1996, 1997 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */ #endif /* not lint */
#include "dhcpd.h" #include "dhcpd.h"
@@ -355,6 +355,8 @@ static int intern (atom, dfv)
case 'a': case 'a':
if (!strcasecmp (atom + 1, "llow")) if (!strcasecmp (atom + 1, "llow"))
return ALLOW; return ALLOW;
if (!strcasecmp (atom + 1, "lias"))
return ALIAS;
break; break;
case 'b': case 'b':
if (!strcasecmp (atom + 1, "ootp")) if (!strcasecmp (atom + 1, "ootp"))

View File

@@ -3,7 +3,7 @@
Lexical scanner for dhcpd config file... */ Lexical scanner for dhcpd config file... */
/* /*
* Copyright (c) 1995, 1996 The Internet Software Consortium. * Copyright (c) 1995, 1996, 1997 The Internet Software Consortium.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -42,7 +42,7 @@
#ifndef lint #ifndef lint
static char copyright[] = static char copyright[] =
"$Id: conflex.c,v 1.21 1997/02/22 08:29:24 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n"; "$Id: conflex.c,v 1.22 1997/02/22 12:23:40 mellon Exp $ Copyright (c) 1995, 1996, 1997 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */ #endif /* not lint */
#include "dhcpd.h" #include "dhcpd.h"
@@ -355,6 +355,8 @@ static int intern (atom, dfv)
case 'a': case 'a':
if (!strcasecmp (atom + 1, "llow")) if (!strcasecmp (atom + 1, "llow"))
return ALLOW; return ALLOW;
if (!strcasecmp (atom + 1, "lias"))
return ALIAS;
break; break;
case 'b': case 'b':
if (!strcasecmp (atom + 1, "ootp")) if (!strcasecmp (atom + 1, "ootp"))

View File

@@ -56,7 +56,7 @@
#ifndef lint #ifndef lint
static char copyright[] = static char copyright[] =
"$Id: dhclient.c,v 1.25 1997/02/22 08:44:15 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n"; "$Id: dhclient.c,v 1.26 1997/02/22 12:24:28 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */ #endif /* not lint */
#include "dhcpd.h" #include "dhcpd.h"
@@ -185,6 +185,9 @@ int main (argc, argv, envp)
/* Call the script with the list of interfaces. */ /* Call the script with the list of interfaces. */
for (ip = interfaces; ip; ip = ip -> next) { for (ip = interfaces; ip; ip = ip -> next) {
script_init (ip, "PREINIT", (struct string_list *)0); script_init (ip, "PREINIT", (struct string_list *)0);
if (ip -> client -> alias)
script_write_params (ip, "alias_",
ip -> client -> alias);
script_go (ip); script_go (ip);
} }
} }
@@ -430,6 +433,8 @@ void dhcpack (packet)
if (ip -> client -> active) if (ip -> client -> active)
script_write_params (ip, "old_", ip -> client -> active); script_write_params (ip, "old_", ip -> client -> active);
script_write_params (ip, "new_", ip -> client -> new); script_write_params (ip, "new_", ip -> client -> new);
if (ip -> client -> alias)
script_write_params (ip, "alias_", ip -> client -> alias);
script_go (ip); script_go (ip);
/* Replace the old active lease with the new one. */ /* Replace the old active lease with the new one. */
@@ -855,6 +860,9 @@ void state_panic (ip)
ip -> client -> active -> medium); ip -> client -> active -> medium);
script_write_params (ip, "new_", script_write_params (ip, "new_",
ip -> client -> active); ip -> client -> active);
if (ip -> client -> alias)
script_write_params (ip, "alias_",
ip -> client -> alias);
/* If the old lease is still good and doesn't /* If the old lease is still good and doesn't
yet need renewal, go into BOUND state and yet need renewal, go into BOUND state and
@@ -908,6 +916,8 @@ void state_panic (ip)
and try again later. */ and try again later. */
note ("No working leases in persistent database - sleeping.\n"); note ("No working leases in persistent database - sleeping.\n");
script_init (ip, "FAIL", (struct string_list *)0); script_init (ip, "FAIL", (struct string_list *)0);
if (ip -> client -> alias)
script_write_params (ip, "alias_", ip -> client -> alias);
script_go (ip); script_go (ip);
ip -> client -> state = S_INIT; ip -> client -> state = S_INIT;
add_timeout (cur_time + ip -> client -> config -> retry_interval, add_timeout (cur_time + ip -> client -> config -> retry_interval,
@@ -932,6 +942,9 @@ void send_request (ip)
/* Run the client script with the new parameters. */ /* Run the client script with the new parameters. */
script_init (ip, "EXPIRE", (struct string_list *)0); script_init (ip, "EXPIRE", (struct string_list *)0);
script_write_params (ip, "old_", ip -> client -> active); script_write_params (ip, "old_", ip -> client -> active);
if (ip -> client -> alias)
script_write_params (ip, "alias_",
ip -> client -> alias);
script_go (ip); script_go (ip);
ip -> client -> state = S_INIT; ip -> client -> state = S_INIT;

View File

@@ -3,7 +3,7 @@
Definitions for dhcpd... */ Definitions for dhcpd... */
/* /*
* Copyright (c) 1995, 1996 The Internet Software Consortium. * Copyright (c) 1995, 1996, 1997 The Internet Software Consortium.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -130,6 +130,7 @@ struct lease {
#define DISCOVER_RUNNING 0 #define DISCOVER_RUNNING 0
#define DISCOVER_SERVER 1 #define DISCOVER_SERVER 1
#define DISCOVER_UNCONFIGURED 2 #define DISCOVER_UNCONFIGURED 2
#define DISCOVER_RELAY 3
/* Group of declarations that share common parameters. */ /* Group of declarations that share common parameters. */
struct group { struct group {
@@ -252,6 +253,7 @@ struct client_state {
struct client_lease *new; /* New lease. */ struct client_lease *new; /* New lease. */
struct client_lease *offered_leases; /* Leases offered to us. */ struct client_lease *offered_leases; /* Leases offered to us. */
struct client_lease *leases; /* Leases we currently hold. */ struct client_lease *leases; /* Leases we currently hold. */
struct client_lease *alias; /* Alias lease. */
enum dhcp_state state; /* Current state for this interface. */ enum dhcp_state state; /* Current state for this interface. */
struct iaddr destination; /* Where to send packet. */ struct iaddr destination; /* Where to send packet. */

View File

@@ -3,7 +3,7 @@
Tokens for config file lexer and parser. */ Tokens for config file lexer and parser. */
/* /*
* Copyright (c) 1995, 1996 The Internet Software Consortium. * Copyright (c) 1995, 1996, 1997 The Internet Software Consortium.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -110,6 +110,7 @@
#define DEFAULT 314 #define DEFAULT 314
#define MEDIA 315 #define MEDIA 315
#define MEDIUM 316 #define MEDIUM 316
#define ALIAS 317
#define is_identifier(x) ((x) >= FIRST_TOKEN && \ #define is_identifier(x) ((x) >= FIRST_TOKEN && \
(x) != STRING && \ (x) != STRING && \

View File

@@ -3,7 +3,7 @@
Definitions for dhcpd... */ Definitions for dhcpd... */
/* /*
* Copyright (c) 1995, 1996 The Internet Software Consortium. * Copyright (c) 1995, 1996, 1997 The Internet Software Consortium.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -130,6 +130,7 @@ struct lease {
#define DISCOVER_RUNNING 0 #define DISCOVER_RUNNING 0
#define DISCOVER_SERVER 1 #define DISCOVER_SERVER 1
#define DISCOVER_UNCONFIGURED 2 #define DISCOVER_UNCONFIGURED 2
#define DISCOVER_RELAY 3
/* Group of declarations that share common parameters. */ /* Group of declarations that share common parameters. */
struct group { struct group {
@@ -252,6 +253,7 @@ struct client_state {
struct client_lease *new; /* New lease. */ struct client_lease *new; /* New lease. */
struct client_lease *offered_leases; /* Leases offered to us. */ struct client_lease *offered_leases; /* Leases offered to us. */
struct client_lease *leases; /* Leases we currently hold. */ struct client_lease *leases; /* Leases we currently hold. */
struct client_lease *alias; /* Alias lease. */
enum dhcp_state state; /* Current state for this interface. */ enum dhcp_state state; /* Current state for this interface. */
struct iaddr destination; /* Where to send packet. */ struct iaddr destination; /* Where to send packet. */

View File

@@ -3,7 +3,7 @@
Tokens for config file lexer and parser. */ Tokens for config file lexer and parser. */
/* /*
* Copyright (c) 1995, 1996 The Internet Software Consortium. * Copyright (c) 1995, 1996, 1997 The Internet Software Consortium.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -110,6 +110,7 @@
#define DEFAULT 314 #define DEFAULT 314
#define MEDIA 315 #define MEDIA 315
#define MEDIUM 316 #define MEDIUM 316
#define ALIAS 317
#define is_identifier(x) ((x) >= FIRST_TOKEN && \ #define is_identifier(x) ((x) >= FIRST_TOKEN && \
(x) != STRING && \ (x) != STRING && \