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
#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"
/* 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 ()
{
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;
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);
}
/* client-lease-statement :==
- LEASE RBRACE client-lease-declarations LBRACE
+ RBRACE client-lease-declarations LBRACE
client-lease-declarations :==
<nil> |
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
#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"
/* 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);
}
}
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. */
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
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,
/* 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;
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
#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"
/* 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 ()
{
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;
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);
}
/* client-lease-statement :==
- LEASE RBRACE client-lease-declarations LBRACE
+ RBRACE client-lease-declarations LBRACE
client-lease-declarations :==
<nil> |
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
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
#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"
case 'a':
if (!strcasecmp (atom + 1, "llow"))
return ALLOW;
+ if (!strcasecmp (atom + 1, "lias"))
+ return ALIAS;
break;
case 'b':
if (!strcasecmp (atom + 1, "ootp"))
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
#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"
case 'a':
if (!strcasecmp (atom + 1, "llow"))
return ALLOW;
+ if (!strcasecmp (atom + 1, "lias"))
+ return ALIAS;
break;
case 'b':
if (!strcasecmp (atom + 1, "ootp"))
#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"
/* 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);
}
}
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. */
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
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,
/* 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;
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
#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 {
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. */
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
#define DEFAULT 314
#define MEDIA 315
#define MEDIUM 316
+#define ALIAS 317
#define is_identifier(x) ((x) >= FIRST_TOKEN && \
(x) != STRING && \
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
#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 {
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. */
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
#define DEFAULT 314
#define MEDIA 315
#define MEDIUM 316
+#define ALIAS 317
#define is_identifier(x) ((x) >= FIRST_TOKEN && \
(x) != STRING && \