summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Lemon <source@isc.org>1997-02-22 12:58:31 +0000
committerTed Lemon <source@isc.org>1997-02-22 12:58:31 +0000
commit6e5382c00db22b9da5e4804970eb7e5754a9634c (patch)
tree10b7e5a3615516b3c51feb382e91e110e6963ba6
parent034aa896ced1e1cd36a0686da3bc39fe33a89c23 (diff)
downloadisc-dhcp-6e5382c00db22b9da5e4804970eb7e5754a9634c.tar.gz
Moved to relay/
-rw-r--r--dhcrelay.8123
-rw-r--r--dhcrelay.c300
2 files changed, 0 insertions, 423 deletions
diff --git a/dhcrelay.8 b/dhcrelay.8
deleted file mode 100644
index 97e2634d..00000000
--- a/dhcrelay.8
+++ /dev/null
@@ -1,123 +0,0 @@
-.\" dhcrelay.8
-.\"
-.\" Copyright (c) 1997 The Internet Software Consortium.
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\"
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. Neither the name of The Internet Software Consortium nor the names
-.\" of its contributors may be used to endorse or promote products derived
-.\" from this software without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE INTERNET SOFTWARE CONSORTIUM AND
-.\" CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
-.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-.\" DISCLAIMED. IN NO EVENT SHALL THE INTERNET SOFTWARE CONSORTIUM OR
-.\" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" This software has been written for the Internet Software Consortium
-.\" by Ted Lemon <mellon@fugue.com> in cooperation with Vixie
-.\" Enterprises. To learn more about the Internet Software Consortium,
-.\" see ``http://www.isc.org/isc''. To learn more about Vixie
-.\" Enterprises, see ``http://www.vix.com''.
-.TH dhcrelay 8
-.SH NAME
-dhcpd - Dynamic Host Configuration Protocol Relay Agent
-.SH SYNOPSIS
-.B dhcrelay
-[
-.B -p
-.I port
-]
-[
-.B -d
-]
-[
-.B -i
-.I if0
-[
-.B ...
-.B -i
-.I ifN
-]
-]
-.I server0
-[
-.I ...serverN
-]
-.SH DESCRIPTION
-The Internet Software Consortium DHCP Relay Agent, dhcrelay, provides a
-means for relaying DHCP and BOOTP requests from a subnet to which
-no DHCP server is directly to one or more DHCP servers on other
-subnets.
-.SH OPERATION
-.PP
-The DHCP Relay Agent listens for DHCP requests on all interfaces
-attached to a host, or only on those interfaces specified on the
-command line with the
-.I -i
-flag. When a query is received, it forwards it to the list of DHCP
-servers specified on the command line. When a reply is received, it
-is broadcast or unicast on the network from whence the original
-request came.
-.PP
-It is possible to specify a set of interfaces on which dhcrelay will
-listen, so that if dhcrelay is connected through one interface to a
-network on which there is no DHCP server, but is connected on another
-interface to a network on which there is a DHCP server, it will not
-relay DHCP and BOOTP requests from the network on which the server
-exists to that server. This is an imperfect solution.
-.SH COMMAND LINE
-.PP
-The names of the network interfaces that dhcrelay should attempt to
-configure may be specified on the command line using the
-.I -i
-option. If no interface names
-are specified on the command line dhcrelay will identify all network
-interfaces, elimininating non-broadcast interfaces if possible, and
-attempt to configure each interface.
-.PP
-If dhcrelay should listen and transmit on a port other than the
-standard (port 67), the
-.B -p
-flag may used. It should be followed by the udp port number that
-dhcrelay should use. This is mostly useful for debugging purposes.
-.PP
-Dhclient will normally run in the foreground until it has configured
-an interface, and then will revert to running in the background.
-To run force dhcrelay to always run as a foreground process, the
-.B -d
-flag should be specified. This is useful when running dhcrelay under
-a debugger, or when running it out of inittab on System V systems.
-.PP
-The name of at least one DHCP server to which DHCP and BOOTP requests
-should be relayed must be specified on the command line.
-.PP
-.SH SEE ALSO
-dhclient(8), dhcpd(8), dhcrelay.conf(5), dhcrelay.leases(5)
-.SH AUTHOR
-.B dhcrelay(8)
-has been written for the Internet Software Consortium
-by Ted Lemon <mellon@fugue.com> in cooperation with Vixie
-Enterprises. To learn more about the Internet Software Consortium,
-see
-.B http://www.vix.com/isc.
-To learn more about Vixie
-Enterprises, see
-.B http://www.vix.com.
-.PP
diff --git a/dhcrelay.c b/dhcrelay.c
deleted file mode 100644
index 2daa98d3..00000000
--- a/dhcrelay.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/* dhcrelay.c
-
- DHCP/BOOTP Relay Agent. */
-
-/*
- * Copyright (c) 1997 The Internet Software Consortium.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of The Internet Software Consortium nor the names
- * of its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INTERNET SOFTWARE CONSORTIUM AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE INTERNET SOFTWARE CONSORTIUM OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * This software has been written for the Internet Software Consortium
- * by Ted Lemon <mellon@fugue.com> in cooperation with Vixie
- * Enterprises. To learn more about the Internet Software Consortium,
- * see ``http://www.vix.com/isc''. To learn more about Vixie
- * Enterprises, see ``http://www.vix.com''.
- */
-
-#ifndef lint
-static char copyright[] =
-"$Id: dhcrelay.c,v 1.2 1997/02/22 12:28:26 mellon Exp $ Copyright (c) 1997 The Internet Software Consortium. All rights reserved.\n";
-#endif /* not lint */
-
-#include "dhcpd.h"
-
-static void usage PROTO ((void));
-
-TIME cur_time;
-TIME default_lease_time = 43200; /* 12 hours... */
-TIME max_lease_time = 86400; /* 24 hours... */
-struct tree_cache *global_options [256];
-
-int log_perror = 1;
-
-#ifdef USE_FALLBACK
-struct interface_info fallback_interface;
-#endif
-
-u_int16_t local_port;
-u_int16_t remote_port;
-int log_priority;
-
-struct server_list {
- struct server_list *next;
- struct sockaddr_in to;
-} *servers;
-
-int main (argc, argv, envp)
- int argc;
- char **argv, **envp;
-{
- int i;
- struct servent *ent;
- struct server_list *sp;
- int no_daemon;
-
-#ifdef SYSLOG_4_2
- openlog ("dhcrelay", LOG_NDELAY);
- log_priority = LOG_DAEMON;
-#else
- openlog ("dhcrelay", LOG_NDELAY, LOG_DAEMON);
-#endif
-
-#if !(defined (DEBUG) || defined (SYSLOG_4_2))
- setlogmask (LOG_UPTO (LOG_INFO));
-#endif
-
- for (i = 1; i < argc; i++) {
- if (!strcmp (argv [i], "-p")) {
- if (++i == argc)
- usage ();
- local_port = htons (atoi (argv [i]));
- debug ("binding to user-specified port %d",
- ntohs (local_port));
- } else if (!strcmp (argv [i], "-d")) {
- no_daemon = 1;
- } else if (!strcmp (argv [i], "-i")) {
- struct interface_info *tmp =
- ((struct interface_info *)
- dmalloc (sizeof *tmp, "specified_interface"));
- if (!tmp)
- error ("Insufficient memory to %s %s",
- "record interface", argv [i]);
- if (++i == argc) {
- usage ();
- }
- memset (tmp, 0, sizeof *tmp);
- strcpy (tmp -> name, argv [i]);
- tmp -> next = interfaces;
- tmp -> flags = INTERFACE_REQUESTED;
- interfaces = tmp;
- } else if (argv [i][0] == '-') {
- usage ();
- } else {
- struct hostent *he;
- he = gethostbyname (argv [i]);
- if (!he) {
- herror (argv [i]);
- } else {
- sp = (struct server_list *)malloc (sizeof *sp);
- if (!sp)
- error ("no memory for server.\n");
- sp -> next = servers;
- servers = sp;
- memcpy (&sp -> to.sin_addr,
- he -> h_addr_list [0], he -> h_length);
- }
- }
- }
- /* Default to the DHCP/BOOTP port. */
- if (!local_port) {
- ent = getservbyname ("dhcps", "udp");
- if (!ent)
- local_port = htons (67);
- else
- local_port = ent -> s_port;
- endservent ();
- }
- remote_port = htons (ntohs (local_port) + 1);
-
- /* We need at least one server. */
- if (!sp) {
- usage ();
- }
-
- /* Set up the server sockaddrs. */
- for (sp = servers; sp; sp = sp -> next) {
- sp -> to.sin_port = remote_port;
- sp -> to.sin_family = AF_INET;
-#ifdef HAVE_SA_LEN
- sp -> to.sin_len = sizeof sp -> to;
-#endif
- }
-
- /* Get the current time... */
- GET_TIME (&cur_time);
-
- /* Discover all the network interfaces. */
- discover_interfaces (DISCOVER_RELAY);
-
- /* Start dispatching packets and timeouts... */
- dispatch (0);
- /*NOTREACHED*/
- return 0;
-}
-
-void relay (ip, packet, length)
- struct interface_info *ip;
- struct dhcp_packet *packet;
- int length;
-{
- struct server_list *sp;
- struct sockaddr_in to;
- struct interface_info *out;
- struct hardware hto;
-
- /* If it's a bootreply, forward it to the client. */
- if (packet -> op == BOOTREPLY) {
-#ifndef USE_FALLBACK
- if (!packet -> flags & htons (BOOTP_BROADCAST)) {
- to.sin_addr = packet -> raw -> ciaddr;
- to.sin_port = remote_port;
- } else
-#endif
- {
- to.sin_addr.s_addr = htonl (INADDR_BROADCAST);
- to.sin_port = remote_port;
- }
- to.sin_family = AF_INET;
-#ifdef HAVE_SA_LEN
- to.sin_len = sizeof to;
-#endif
-
- memcpy (hto.haddr, packet -> chaddr,
- (packet -> hlen > sizeof hto.haddr
- ? sizeof hto.haddr
- : packet -> hlen));
- hto.htype = packet -> htype;
-
- /* Find the interface that corresponds to the giaddr
- in the packet. */
- for (out = interfaces; out; out = out -> next) {
- if (!memcmp (&out -> primary_address,
- &packet -> giaddr,
- sizeof packet -> giaddr))
- break;
- }
- if (!out) {
- warn ("packet to bogus giaddr %s.\n",
- inet_ntoa (packet -> giaddr));
- return;
- }
-
- if (send_packet (out,
- (struct packet *)0,
- packet, length, out -> primary_address,
- &to, &hto) < 0)
- debug ("sendpkt: %m");
- else
- debug ("forwarded BOOTREPLY for %s to %s",
- print_hw_addr (packet -> htype, packet -> hlen,
- packet -> chaddr),
- inet_ntoa (to.sin_addr));
-
- return;
- }
-
- /* If giaddr is set on a BOOTREQUEST, ignore it - it's already
- been gatewayed. */
- if (packet -> giaddr.s_addr) {
- note ("ignoring BOOTREQUEST with giaddr of %s\n",
- inet_ntoa (packet -> giaddr));
- return;
- }
-
- /* Set the giaddr so the server can figure out what net it's
- from and so that we can later forward the response to the
- correct net. */
- packet -> giaddr = ip -> primary_address;
-
- /* Otherwise, it's a BOOTREQUEST, so forward it to all the
- servers. */
- for (sp = servers; sp; sp = sp -> next) {
- if (
-#ifdef USE_FALLBACK
- send_fallback (&fallback_interface,
- (struct packet *)0,
- packet, length, ip -> primary_address,
- &sp -> to, (struct hardware *)0)
-#else
- send_packet (interfaces,
- (struct packet *)0,
- packet, length, ip -> primary_address,
- &sp -> to, (struct hardware *)0)
-#endif
- < 0) {
- debug ("send_packet: %m");
- } else {
- debug ("forwarded BOOTREQUEST for %s to %s",
- print_hw_addr (packet -> htype, packet -> hlen,
- packet -> chaddr),
- inet_ntoa (sp -> to.sin_addr));
- }
- }
-
-}
-
-static void usage ()
-{
- error ("Usage: dhcrelay [-c] [-p <port>] [server1 [... serverN]]");
-}
-
-void cleanup ()
-{
-}
-
-int write_lease (lease)
- struct lease *lease;
-{
- return 1;
-}
-
-int commit_leases ()
-{
- return 1;
-}
-
-void bootp (packet)
- struct packet *packet;
-{
-}
-
-void dhcp (packet)
- struct packet *packet;
-{
-}