mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-08-29 05:17:57 +00:00
Add support for alias declaration
This commit is contained in:
parent
e6e5d8749e
commit
f79e49f3ee
@ -3,7 +3,7 @@
|
||||
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.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -42,7 +42,7 @@
|
||||
|
||||
#ifndef lint
|
||||
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 */
|
||||
|
||||
#include "dhcpd.h"
|
||||
@ -113,7 +113,7 @@ int read_client_conf ()
|
||||
|
||||
/* lease-file :== client-lease-statements EOF
|
||||
client-lease-statements :== <nil>
|
||||
| client-lease-statements client-lease-statement */
|
||||
| client-lease-statements LEASE client-lease-statement */
|
||||
|
||||
void read_client_leases ()
|
||||
{
|
||||
@ -152,7 +152,8 @@ void read_client_leases ()
|
||||
SELECT_TIMEOUT number |
|
||||
SCRIPT string |
|
||||
interface-declaration |
|
||||
client-lease-statement */
|
||||
LEASE client-lease-statement |
|
||||
ALIAS client-lease-statement */
|
||||
|
||||
void parse_client_statement (cfile, ip, config)
|
||||
FILE *cfile;
|
||||
@ -222,6 +223,10 @@ void parse_client_statement (cfile, ip, config)
|
||||
parse_client_lease_statement (cfile, 1);
|
||||
return;
|
||||
|
||||
case ALIAS:
|
||||
parse_client_lease_statement (cfile, 2);
|
||||
return;
|
||||
|
||||
default:
|
||||
parse_warn ("expecting a statement.");
|
||||
skip_to_semi (cfile);
|
||||
@ -434,7 +439,7 @@ void make_client_config (ip, config)
|
||||
}
|
||||
|
||||
/* client-lease-statement :==
|
||||
LEASE RBRACE client-lease-declarations LBRACE
|
||||
RBRACE client-lease-declarations LBRACE
|
||||
|
||||
client-lease-declarations :==
|
||||
<nil> |
|
||||
@ -489,6 +494,12 @@ void parse_client_lease_statement (cfile, is_static)
|
||||
if (!ip -> client)
|
||||
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 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
|
||||
|
@ -56,7 +56,7 @@
|
||||
|
||||
#ifndef lint
|
||||
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 */
|
||||
|
||||
#include "dhcpd.h"
|
||||
@ -185,6 +185,9 @@ int main (argc, argv, envp)
|
||||
/* Call the script with the list of interfaces. */
|
||||
for (ip = interfaces; ip; ip = ip -> next) {
|
||||
script_init (ip, "PREINIT", (struct string_list *)0);
|
||||
if (ip -> client -> alias)
|
||||
script_write_params (ip, "alias_",
|
||||
ip -> client -> alias);
|
||||
script_go (ip);
|
||||
}
|
||||
}
|
||||
@ -430,6 +433,8 @@ void dhcpack (packet)
|
||||
if (ip -> client -> active)
|
||||
script_write_params (ip, "old_", ip -> client -> active);
|
||||
script_write_params (ip, "new_", ip -> client -> new);
|
||||
if (ip -> client -> alias)
|
||||
script_write_params (ip, "alias_", ip -> client -> alias);
|
||||
script_go (ip);
|
||||
|
||||
/* Replace the old active lease with the new one. */
|
||||
@ -855,6 +860,9 @@ void state_panic (ip)
|
||||
ip -> client -> active -> medium);
|
||||
script_write_params (ip, "new_",
|
||||
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
|
||||
yet need renewal, go into BOUND state and
|
||||
@ -908,6 +916,8 @@ void state_panic (ip)
|
||||
and try again later. */
|
||||
note ("No working leases in persistent database - sleeping.\n");
|
||||
script_init (ip, "FAIL", (struct string_list *)0);
|
||||
if (ip -> client -> alias)
|
||||
script_write_params (ip, "alias_", ip -> client -> alias);
|
||||
script_go (ip);
|
||||
ip -> client -> state = S_INIT;
|
||||
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. */
|
||||
script_init (ip, "EXPIRE", (struct string_list *)0);
|
||||
script_write_params (ip, "old_", ip -> client -> active);
|
||||
if (ip -> client -> alias)
|
||||
script_write_params (ip, "alias_",
|
||||
ip -> client -> alias);
|
||||
script_go (ip);
|
||||
|
||||
ip -> client -> state = S_INIT;
|
||||
|
21
clparse.c
21
clparse.c
@ -3,7 +3,7 @@
|
||||
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.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -42,7 +42,7 @@
|
||||
|
||||
#ifndef lint
|
||||
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 */
|
||||
|
||||
#include "dhcpd.h"
|
||||
@ -113,7 +113,7 @@ int read_client_conf ()
|
||||
|
||||
/* lease-file :== client-lease-statements EOF
|
||||
client-lease-statements :== <nil>
|
||||
| client-lease-statements client-lease-statement */
|
||||
| client-lease-statements LEASE client-lease-statement */
|
||||
|
||||
void read_client_leases ()
|
||||
{
|
||||
@ -152,7 +152,8 @@ void read_client_leases ()
|
||||
SELECT_TIMEOUT number |
|
||||
SCRIPT string |
|
||||
interface-declaration |
|
||||
client-lease-statement */
|
||||
LEASE client-lease-statement |
|
||||
ALIAS client-lease-statement */
|
||||
|
||||
void parse_client_statement (cfile, ip, config)
|
||||
FILE *cfile;
|
||||
@ -222,6 +223,10 @@ void parse_client_statement (cfile, ip, config)
|
||||
parse_client_lease_statement (cfile, 1);
|
||||
return;
|
||||
|
||||
case ALIAS:
|
||||
parse_client_lease_statement (cfile, 2);
|
||||
return;
|
||||
|
||||
default:
|
||||
parse_warn ("expecting a statement.");
|
||||
skip_to_semi (cfile);
|
||||
@ -434,7 +439,7 @@ void make_client_config (ip, config)
|
||||
}
|
||||
|
||||
/* client-lease-statement :==
|
||||
LEASE RBRACE client-lease-declarations LBRACE
|
||||
RBRACE client-lease-declarations LBRACE
|
||||
|
||||
client-lease-declarations :==
|
||||
<nil> |
|
||||
@ -489,6 +494,12 @@ void parse_client_lease_statement (cfile, is_static)
|
||||
if (!ip -> client)
|
||||
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 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
|
||||
|
@ -3,7 +3,7 @@
|
||||
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.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -42,7 +42,7 @@
|
||||
|
||||
#ifndef lint
|
||||
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 */
|
||||
|
||||
#include "dhcpd.h"
|
||||
@ -355,6 +355,8 @@ static int intern (atom, dfv)
|
||||
case 'a':
|
||||
if (!strcasecmp (atom + 1, "llow"))
|
||||
return ALLOW;
|
||||
if (!strcasecmp (atom + 1, "lias"))
|
||||
return ALIAS;
|
||||
break;
|
||||
case 'b':
|
||||
if (!strcasecmp (atom + 1, "ootp"))
|
||||
|
@ -3,7 +3,7 @@
|
||||
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.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -42,7 +42,7 @@
|
||||
|
||||
#ifndef lint
|
||||
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 */
|
||||
|
||||
#include "dhcpd.h"
|
||||
@ -355,6 +355,8 @@ static int intern (atom, dfv)
|
||||
case 'a':
|
||||
if (!strcasecmp (atom + 1, "llow"))
|
||||
return ALLOW;
|
||||
if (!strcasecmp (atom + 1, "lias"))
|
||||
return ALIAS;
|
||||
break;
|
||||
case 'b':
|
||||
if (!strcasecmp (atom + 1, "ootp"))
|
||||
|
15
dhclient.c
15
dhclient.c
@ -56,7 +56,7 @@
|
||||
|
||||
#ifndef lint
|
||||
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 */
|
||||
|
||||
#include "dhcpd.h"
|
||||
@ -185,6 +185,9 @@ int main (argc, argv, envp)
|
||||
/* Call the script with the list of interfaces. */
|
||||
for (ip = interfaces; ip; ip = ip -> next) {
|
||||
script_init (ip, "PREINIT", (struct string_list *)0);
|
||||
if (ip -> client -> alias)
|
||||
script_write_params (ip, "alias_",
|
||||
ip -> client -> alias);
|
||||
script_go (ip);
|
||||
}
|
||||
}
|
||||
@ -430,6 +433,8 @@ void dhcpack (packet)
|
||||
if (ip -> client -> active)
|
||||
script_write_params (ip, "old_", ip -> client -> active);
|
||||
script_write_params (ip, "new_", ip -> client -> new);
|
||||
if (ip -> client -> alias)
|
||||
script_write_params (ip, "alias_", ip -> client -> alias);
|
||||
script_go (ip);
|
||||
|
||||
/* Replace the old active lease with the new one. */
|
||||
@ -855,6 +860,9 @@ void state_panic (ip)
|
||||
ip -> client -> active -> medium);
|
||||
script_write_params (ip, "new_",
|
||||
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
|
||||
yet need renewal, go into BOUND state and
|
||||
@ -908,6 +916,8 @@ void state_panic (ip)
|
||||
and try again later. */
|
||||
note ("No working leases in persistent database - sleeping.\n");
|
||||
script_init (ip, "FAIL", (struct string_list *)0);
|
||||
if (ip -> client -> alias)
|
||||
script_write_params (ip, "alias_", ip -> client -> alias);
|
||||
script_go (ip);
|
||||
ip -> client -> state = S_INIT;
|
||||
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. */
|
||||
script_init (ip, "EXPIRE", (struct string_list *)0);
|
||||
script_write_params (ip, "old_", ip -> client -> active);
|
||||
if (ip -> client -> alias)
|
||||
script_write_params (ip, "alias_",
|
||||
ip -> client -> alias);
|
||||
script_go (ip);
|
||||
|
||||
ip -> client -> state = S_INIT;
|
||||
|
4
dhcpd.h
4
dhcpd.h
@ -3,7 +3,7 @@
|
||||
Definitions for dhcpd... */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995, 1996 The Internet Software Consortium.
|
||||
* Copyright (c) 1995, 1996, 1997 The Internet Software Consortium.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -130,6 +130,7 @@ struct lease {
|
||||
#define DISCOVER_RUNNING 0
|
||||
#define DISCOVER_SERVER 1
|
||||
#define DISCOVER_UNCONFIGURED 2
|
||||
#define DISCOVER_RELAY 3
|
||||
|
||||
/* Group of declarations that share common parameters. */
|
||||
struct group {
|
||||
@ -252,6 +253,7 @@ struct client_state {
|
||||
struct client_lease *new; /* New lease. */
|
||||
struct client_lease *offered_leases; /* Leases offered to us. */
|
||||
struct client_lease *leases; /* Leases we currently hold. */
|
||||
struct client_lease *alias; /* Alias lease. */
|
||||
|
||||
enum dhcp_state state; /* Current state for this interface. */
|
||||
struct iaddr destination; /* Where to send packet. */
|
||||
|
@ -3,7 +3,7 @@
|
||||
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.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -110,6 +110,7 @@
|
||||
#define DEFAULT 314
|
||||
#define MEDIA 315
|
||||
#define MEDIUM 316
|
||||
#define ALIAS 317
|
||||
|
||||
#define is_identifier(x) ((x) >= FIRST_TOKEN && \
|
||||
(x) != STRING && \
|
||||
|
@ -3,7 +3,7 @@
|
||||
Definitions for dhcpd... */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995, 1996 The Internet Software Consortium.
|
||||
* Copyright (c) 1995, 1996, 1997 The Internet Software Consortium.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -130,6 +130,7 @@ struct lease {
|
||||
#define DISCOVER_RUNNING 0
|
||||
#define DISCOVER_SERVER 1
|
||||
#define DISCOVER_UNCONFIGURED 2
|
||||
#define DISCOVER_RELAY 3
|
||||
|
||||
/* Group of declarations that share common parameters. */
|
||||
struct group {
|
||||
@ -252,6 +253,7 @@ struct client_state {
|
||||
struct client_lease *new; /* New lease. */
|
||||
struct client_lease *offered_leases; /* Leases offered to us. */
|
||||
struct client_lease *leases; /* Leases we currently hold. */
|
||||
struct client_lease *alias; /* Alias lease. */
|
||||
|
||||
enum dhcp_state state; /* Current state for this interface. */
|
||||
struct iaddr destination; /* Where to send packet. */
|
||||
|
@ -3,7 +3,7 @@
|
||||
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.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -110,6 +110,7 @@
|
||||
#define DEFAULT 314
|
||||
#define MEDIA 315
|
||||
#define MEDIUM 316
|
||||
#define ALIAS 317
|
||||
|
||||
#define is_identifier(x) ((x) >= FIRST_TOKEN && \
|
||||
(x) != STRING && \
|
||||
|
Loading…
x
Reference in New Issue
Block a user