From: Ted Lemon Date: Sat, 22 Feb 1997 12:25:32 +0000 (+0000) Subject: Add support for alias declaration X-Git-Tag: DHCP_970222~28 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f79e49f3eeccfca7b37c12a1b94e4a68fa3b28de;p=thirdparty%2Fdhcp.git Add support for alias declaration --- diff --git a/client/clparse.c b/client/clparse.c index 5dc9bd783..80ad82a59 100644 --- a/client/clparse.c +++ b/client/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 :== - | 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 :== | @@ -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 diff --git a/client/dhclient.c b/client/dhclient.c index 922c4c245..150547b8b 100644 --- a/client/dhclient.c +++ b/client/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; diff --git a/clparse.c b/clparse.c index 5dc9bd783..80ad82a59 100644 --- a/clparse.c +++ b/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 :== - | 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 :== | @@ -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 diff --git a/common/conflex.c b/common/conflex.c index 490c9678e..a13f26605 100644 --- a/common/conflex.c +++ b/common/conflex.c @@ -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")) diff --git a/conflex.c b/conflex.c index 490c9678e..a13f26605 100644 --- a/conflex.c +++ b/conflex.c @@ -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")) diff --git a/dhclient.c b/dhclient.c index 922c4c245..150547b8b 100644 --- a/dhclient.c +++ b/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; diff --git a/dhcpd.h b/dhcpd.h index b316fd043..6863b8b6d 100644 --- a/dhcpd.h +++ b/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. */ diff --git a/dhctoken.h b/dhctoken.h index afc197882..b46611987 100644 --- a/dhctoken.h +++ b/dhctoken.h @@ -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 && \ diff --git a/includes/dhcpd.h b/includes/dhcpd.h index b316fd043..6863b8b6d 100644 --- a/includes/dhcpd.h +++ b/includes/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. */ diff --git a/includes/dhctoken.h b/includes/dhctoken.h index afc197882..b46611987 100644 --- a/includes/dhctoken.h +++ b/includes/dhctoken.h @@ -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 && \