summaryrefslogtreecommitdiff
path: root/sbin/dhclient/dispatch.c
diff options
context:
space:
mode:
authorHenning Brauer <henning@cvs.openbsd.org>2004-02-04 01:18:27 +0000
committerHenning Brauer <henning@cvs.openbsd.org>2004-02-04 01:18:27 +0000
commitb12ff12eb3ebaff2815c32a57a644eb2e93e8da8 (patch)
treeccf97eb4f75842225541b87484b7b04e22205a78 /sbin/dhclient/dispatch.c
parent7026ca4195738c3917aa0fa16cfed7db4996fd4b (diff)
8579 lines of KNF, ANSO and zap-junk diff without the resulting binary
changing by a single byte. partly from theo
Diffstat (limited to 'sbin/dhclient/dispatch.c')
-rw-r--r--sbin/dhclient/dispatch.c348
1 files changed, 169 insertions, 179 deletions
diff --git a/sbin/dhclient/dispatch.c b/sbin/dhclient/dispatch.c
index c92f1591c44..54ef5aba9e6 100644
--- a/sbin/dhclient/dispatch.c
+++ b/sbin/dhclient/dispatch.c
@@ -46,7 +46,6 @@
#include <poll.h>
#include <net/if_media.h>
-
/* Most boxes has less than 16 interfaces, so this might be a good guess. */
#define INITIAL_IFREQ_COUNT 16
@@ -55,9 +54,9 @@ struct protocol *protocols;
struct timeout *timeouts;
static struct timeout *free_timeouts;
static int interfaces_invalidated;
-void (*bootp_packet_handler) PROTO ((struct interface_info *,
- struct dhcp_packet *, int, unsigned int,
- struct iaddr, struct hardware *));
+void (*bootp_packet_handler)(struct interface_info *,
+ struct dhcp_packet *, int, unsigned int,
+ struct iaddr, struct hardware *);
static int interface_status(struct interface_info *ifinfo);
@@ -68,8 +67,8 @@ int quiet_interface_discovery;
register that interface with the network I/O software, figure out what
subnet it's on, and add it to the list of interfaces. */
-void discover_interfaces (state)
- int state;
+void
+discover_interfaces(int state)
{
struct interface_info *tmp;
struct interface_info *last, *next;
@@ -89,8 +88,7 @@ void discover_interfaces (state)
/* If we already have a list of interfaces, and we're running as
a DHCP server, the interfaces were requested. */
if (interfaces && (state == DISCOVER_SERVER ||
- state == DISCOVER_RELAY ||
- state == DISCOVER_REQUESTED))
+ state == DISCOVER_RELAY || state == DISCOVER_REQUESTED))
ir = 0;
else if (state == DISCOVER_UNCONFIGURED)
ir = INTERFACE_REQUESTED | INTERFACE_AUTOMATIC;
@@ -106,12 +104,12 @@ void discover_interfaces (state)
if ((ifa->ifa_flags & IFF_LOOPBACK) ||
(ifa->ifa_flags & IFF_POINTOPOINT) ||
(!(ifa->ifa_flags & IFF_UP) &&
- state != DISCOVER_UNCONFIGURED))
+ state != DISCOVER_UNCONFIGURED))
continue;
/* See if we've seen an interface that matches this one. */
- for (tmp = interfaces; tmp; tmp = tmp -> next)
- if (!strcmp (tmp -> name, ifa -> ifa_name))
+ for (tmp = interfaces; tmp; tmp = tmp->next)
+ if (!strcmp (tmp->name, ifa->ifa_name))
break;
/* If there isn't already an interface by this name,
@@ -121,25 +119,25 @@ void discover_interfaces (state)
dmalloc (sizeof *tmp, "discover_interfaces"));
if (!tmp)
error ("Insufficient memory to %s %s",
- "record interface", ifa -> ifa_name);
- strlcpy (tmp -> name, ifa -> ifa_name, sizeof(tmp->name));
- tmp -> next = interfaces;
- tmp -> flags = ir;
- tmp -> noifmedia = tmp -> dead = tmp->errors = 0;
+ "record interface", ifa->ifa_name);
+ strlcpy (tmp->name, ifa->ifa_name, sizeof(tmp->name));
+ tmp->next = interfaces;
+ tmp->flags = ir;
+ tmp->noifmedia = tmp->dead = tmp->errors = 0;
interfaces = tmp;
}
/* If we have the capability, extract link information
and record it in a linked list. */
- if (ifa -> ifa_addr->sa_family == AF_LINK) {
+ if (ifa->ifa_addr->sa_family == AF_LINK) {
struct sockaddr_dl *foo = ((struct sockaddr_dl *)
- (ifa -> ifa_addr));
- tmp -> index = foo->sdl_index;
- tmp -> hw_address.hlen = foo -> sdl_alen;
- tmp -> hw_address.htype = HTYPE_ETHER; /* XXX */
- memcpy (tmp -> hw_address.haddr,
- LLADDR (foo), foo -> sdl_alen);
- } else if (ifa -> ifa_addr->sa_family == AF_INET) {
+ (ifa->ifa_addr));
+ tmp->index = foo->sdl_index;
+ tmp->hw_address.hlen = foo->sdl_alen;
+ tmp->hw_address.htype = HTYPE_ETHER; /* XXX */
+ memcpy(tmp->hw_address.haddr,
+ LLADDR (foo), foo->sdl_alen);
+ } else if (ifa->ifa_addr->sa_family == AF_INET) {
struct iaddr addr;
/* Get a pointer to the address... */
@@ -152,58 +150,56 @@ void discover_interfaces (state)
/* If this is the first real IP address we've
found, keep a pointer to ifreq structure in
which we found it. */
- if (!tmp -> ifp) {
- int len = (IFNAMSIZ +
- ifa -> ifa_addr->sa_len);
+ if (!tmp->ifp) {
+ int len = (IFNAMSIZ + ifa->ifa_addr->sa_len);
tif = (struct ifreq *)malloc (len);
if (!tif)
- error ("no space to remember ifp.");
+ error("no space to remember ifp.");
strlcpy(tif->ifr_name, ifa->ifa_name, IFNAMSIZ);
memcpy(&tif->ifr_addr, ifa->ifa_addr,
ifa->ifa_addr->sa_len);
- tmp -> ifp = tif;
- tmp -> primary_address = foo.sin_addr;
+ tmp->ifp = tif;
+ tmp->primary_address = foo.sin_addr;
}
/* Grab the address... */
addr.len = 4;
- memcpy (addr.iabuf, &foo.sin_addr.s_addr,
- addr.len);
+ memcpy(addr.iabuf, &foo.sin_addr.s_addr, addr.len);
/* If there's a registered subnet for this address,
connect it together... */
- if ((subnet = find_subnet (addr))) {
+ if ((subnet = find_subnet(addr))) {
/* If this interface has multiple aliases
on the same subnet, ignore all but the
first we encounter. */
- if (!subnet -> interface) {
- subnet -> interface = tmp;
- subnet -> interface_address = addr;
- } else if (subnet -> interface != tmp) {
+ if (!subnet->interface) {
+ subnet->interface = tmp;
+ subnet->interface_address = addr;
+ } else if (subnet->interface != tmp) {
warn ("Multiple %s %s: %s %s",
"interfaces match the",
"same subnet",
- subnet -> interface -> name,
- tmp -> name);
+ subnet->interface->name,
+ tmp->name);
}
- share = subnet -> shared_network;
- if (tmp -> shared_network &&
- tmp -> shared_network != share) {
+ share = subnet->shared_network;
+ if (tmp->shared_network &&
+ tmp->shared_network != share) {
warn ("Interface %s matches %s",
- tmp -> name,
+ tmp->name,
"multiple shared networks");
} else {
- tmp -> shared_network = share;
+ tmp->shared_network = share;
}
- if (!share -> interface) {
- share -> interface = tmp;
- } else if (share -> interface != tmp) {
+ if (!share->interface) {
+ share->interface = tmp;
+ } else if (share->interface != tmp) {
warn ("Multiple %s %s: %s %s",
"interfaces match the",
"same shared network",
- share -> interface -> name,
- tmp -> name);
+ share->interface->name,
+ tmp->name);
}
}
}
@@ -220,94 +216,92 @@ void discover_interfaces (state)
/* Weed out the interfaces that did not have IP addresses. */
last = (struct interface_info *)0;
for (tmp = interfaces; tmp; tmp = next) {
- next = tmp -> next;
- if ((tmp -> flags & INTERFACE_AUTOMATIC) &&
+ next = tmp->next;
+ if ((tmp->flags & INTERFACE_AUTOMATIC) &&
state == DISCOVER_REQUESTED)
- tmp -> flags &= ~(INTERFACE_AUTOMATIC |
+ tmp->flags &= ~(INTERFACE_AUTOMATIC |
INTERFACE_REQUESTED);
- if (!tmp -> ifp || !(tmp -> flags & INTERFACE_REQUESTED)) {
- if ((tmp -> flags & INTERFACE_REQUESTED) != ir)
- error ("%s: not found", tmp -> name);
+ if (!tmp->ifp || !(tmp->flags & INTERFACE_REQUESTED)) {
+ if ((tmp->flags & INTERFACE_REQUESTED) != ir)
+ error ("%s: not found", tmp->name);
if (!last)
- interfaces = interfaces -> next;
+ interfaces = interfaces->next;
else
- last -> next = tmp -> next;
+ last->next = tmp->next;
/* Remember the interface in case we need to know
about it later. */
- tmp -> next = dummy_interfaces;
+ tmp->next = dummy_interfaces;
dummy_interfaces = tmp;
continue;
}
last = tmp;
- memcpy (&foo, &tmp -> ifp -> ifr_addr,
- sizeof tmp -> ifp -> ifr_addr);
+ memcpy (&foo, &tmp->ifp->ifr_addr, sizeof tmp->ifp->ifr_addr);
/* We must have a subnet declaration for each interface. */
- if (!tmp -> shared_network && (state == DISCOVER_SERVER)) {
- warn ("No subnet declaration for %s (%s).",
- tmp -> name, inet_ntoa (foo.sin_addr));
- warn ("Please write a subnet declaration in your %s",
- "dhcpd.conf file for the");
- error ("network segment to which interface %s %s",
- tmp -> name, "is attached.");
+ if (!tmp->shared_network && (state == DISCOVER_SERVER)) {
+ warn("No subnet declaration for %s (%s).",
+ tmp->name, inet_ntoa (foo.sin_addr));
+ warn("Please write a subnet declaration in your %s",
+ "dhcpd.conf file for the");
+ error("network segment to which interface %s %s",
+ tmp->name, "is attached.");
}
/* Find subnets that don't have valid interface
addresses... */
- for (subnet = (tmp -> shared_network
- ? tmp -> shared_network -> subnets
- : (struct subnet *)0);
- subnet; subnet = subnet -> next_sibling) {
- if (!subnet -> interface_address.len) {
+ for (subnet = (tmp->shared_network ?
+ tmp->shared_network->subnets : NULL);
+ subnet; subnet = subnet->next_sibling) {
+ if (!subnet->interface_address.len) {
/* Set the interface address for this subnet
to the first address we found. */
- subnet -> interface_address.len = 4;
- memcpy (subnet -> interface_address.iabuf,
+ subnet->interface_address.len = 4;
+ memcpy(subnet->interface_address.iabuf,
&foo.sin_addr.s_addr, 4);
}
}
/* Register the interface... */
- if_register_receive (tmp);
- if_register_send (tmp);
+ if_register_receive(tmp);
+ if_register_send(tmp);
}
/* Now register all the remaining interfaces as protocols. */
- for (tmp = interfaces; tmp; tmp = tmp -> next) {
- add_protocol (tmp -> name, tmp -> rfdesc, got_one, tmp);
- }
+ for (tmp = interfaces; tmp; tmp = tmp->next)
+ add_protocol (tmp->name, tmp->rfdesc, got_one, tmp);
freeifaddrs(ifap);
- maybe_setup_fallback ();
+ maybe_setup_fallback();
}
-struct interface_info *setup_fallback ()
+struct interface_info *
+setup_fallback(void)
{
fallback_interface =
- ((struct interface_info *)
- dmalloc (sizeof *fallback_interface, "discover_interfaces"));
+ dmalloc(sizeof *fallback_interface, "discover_interfaces");
if (!fallback_interface)
- error ("Insufficient memory to record fallback interface.");
- memset (fallback_interface, 0, sizeof *fallback_interface);
- strlcpy (fallback_interface -> name, "fallback", IFNAMSIZ);
- fallback_interface -> shared_network =
- new_shared_network ("parse_statement");
- if (!fallback_interface -> shared_network)
- error ("No memory for shared subnet");
- memset (fallback_interface -> shared_network, 0,
- sizeof (struct shared_network));
- fallback_interface -> shared_network -> name = "fallback-net";
+ error("Insufficient memory to record fallback interface.");
+ memset(fallback_interface, 0, sizeof *fallback_interface);
+ strlcpy(fallback_interface->name, "fallback", IFNAMSIZ);
+ fallback_interface->shared_network =
+ new_shared_network("parse_statement");
+ if (!fallback_interface->shared_network)
+ error("No memory for shared subnet");
+ memset(fallback_interface->shared_network, 0,
+ sizeof(struct shared_network));
+ fallback_interface->shared_network->name = "fallback-net";
return fallback_interface;
}
-void reinitialize_interfaces ()
+void
+reinitialize_interfaces(void)
{
struct interface_info *ip;
- for (ip = interfaces; ip; ip = ip -> next) {
+ for (ip = interfaces; ip; ip = ip->next) {
if_reinitialize_receive (ip);
if_reinitialize_send (ip);
}
@@ -323,7 +317,8 @@ void reinitialize_interfaces ()
addressing information from it, and then call through the
bootp_packet_handler hook to try to do something with it. */
-void dispatch ()
+void
+dispatch(void)
{
struct protocol *l;
int nfds = 0;
@@ -334,10 +329,10 @@ void dispatch ()
int to_msec;
nfds = 0;
- for (l = protocols; l; l = l -> next) {
+ for (l = protocols; l; l = l->next)
++nfds;
- }
- fds = (struct pollfd *)malloc ((nfds) * sizeof (struct pollfd));
+
+ fds = malloc((nfds) * sizeof (struct pollfd));
if (fds == NULL)
error ("Can't allocate poll structures.");
@@ -345,14 +340,14 @@ void dispatch ()
/* Call any expired timeouts, and then if there's
still a timeout registered, time out the select
call then. */
- another:
+another:
if (timeouts) {
struct timeout *t;
- if (timeouts -> when <= cur_time) {
+ if (timeouts->when <= cur_time) {
t = timeouts;
- timeouts = timeouts -> next;
- (*(t -> func)) (t -> what);
- t -> next = free_timeouts;
+ timeouts = timeouts->next;
+ (*(t->func)) (t->what);
+ t->next = free_timeouts;
free_timeouts = t;
goto another;
}
@@ -363,7 +358,7 @@ void dispatch ()
* timeout and blocking indefinetely.
*/
- howlong = timeouts -> when - cur_time;
+ howlong = timeouts->when - cur_time;
if (howlong > INT_MAX / 1000)
howlong = INT_MAX / 1000;
to_msec = howlong * 1000;
@@ -373,10 +368,10 @@ void dispatch ()
/* Set up the descriptors to be polled. */
i = 0;
- for (l = protocols; l; l = l -> next) {
- struct interface_info *ip = l -> local;
+ for (l = protocols; l; l = l->next) {
+ struct interface_info *ip = l->local;
if (ip && (l->handler != got_one || !ip->dead)) {
- fds [i].fd = l -> fd;
+ fds [i].fd = l->fd;
fds [i].events = POLLIN;
fds [i].revents = 0;
++i;
@@ -403,14 +398,14 @@ void dispatch ()
GET_TIME (&cur_time);
i = 0;
- for (l = protocols; l; l = l -> next) {
+ for (l = protocols; l; l = l->next) {
struct interface_info *ip;
ip = l->local;
if ((fds [i].revents & POLLIN)) {
fds [i].revents = 0;
if (ip && (l->handler != got_one ||
!ip->dead))
- (*(l -> handler)) (l);
+ (*(l->handler)) (l);
if (interfaces_invalidated)
break;
}
@@ -421,28 +416,28 @@ void dispatch ()
}
-void got_one (l)
- struct protocol *l;
+void
+got_one(struct protocol *l)
{
struct sockaddr_in from;
struct hardware hfrom;
struct iaddr ifrom;
size_t result;
union {
- unsigned char packbuf [4095]; /* Packet input buffer.
+ unsigned char packbuf[4095]; /* Packet input buffer.
Must be as large as largest
possible MTU. */
struct dhcp_packet packet;
} u;
- struct interface_info *ip = l -> local;
+ struct interface_info *ip = l->local;
if ((result =
- receive_packet (ip, u.packbuf, sizeof u, &from, &hfrom)) == -1) {
- warn ("receive_packet failed on %s: %s", ip -> name,
- strerror(errno));
+ receive_packet(ip, u.packbuf, sizeof u, &from, &hfrom)) == -1) {
+ warn("receive_packet failed on %s: %s", ip->name,
+ strerror(errno));
ip->errors++;
- if ((! interface_status(ip))
- || (ip->noifmedia && ip->errors > 20)) {
+ if ((! interface_status(ip)) ||
+ (ip->noifmedia && ip->errors > 20)) {
/* our interface has gone away. */
warn("Interface %s no longer appears valid.",
ip->name);
@@ -459,10 +454,10 @@ void got_one (l)
if (bootp_packet_handler) {
ifrom.len = 4;
- memcpy (ifrom.iabuf, &from.sin_addr, ifrom.len);
+ memcpy(ifrom.iabuf, &from.sin_addr, ifrom.len);
- (*bootp_packet_handler) (ip, &u.packet, result,
- from.sin_port, ifrom, &hfrom);
+ (*bootp_packet_handler)(ip, &u.packet, result,
+ from.sin_port, ifrom, &hfrom);
}
}
@@ -520,51 +515,49 @@ interface_status(struct interface_info *ifinfo)
goto inactive;
}
}
- inactive:
+inactive:
return(0);
- active:
+active:
return(1);
}
-int locate_network (packet)
- struct packet *packet;
+int
+locate_network(struct packet *packet)
{
struct iaddr ia;
/* If this came through a gateway, find the corresponding subnet... */
- if (packet -> raw -> giaddr.s_addr) {
+ if (packet->raw->giaddr.s_addr) {
struct subnet *subnet;
ia.len = 4;
- memcpy (ia.iabuf, &packet -> raw -> giaddr, 4);
+ memcpy (ia.iabuf, &packet->raw->giaddr, 4);
subnet = find_subnet (ia);
if (subnet)
- packet -> shared_network = subnet -> shared_network;
+ packet->shared_network = subnet->shared_network;
else
- packet -> shared_network = (struct shared_network *)0;
- } else {
- packet -> shared_network =
- packet -> interface -> shared_network;
- }
- if (packet -> shared_network)
+ packet->shared_network = (struct shared_network *)0;
+ } else
+ packet->shared_network =
+ packet->interface->shared_network;
+
+ if (packet->shared_network)
return 1;
return 0;
}
-void add_timeout (when, where, what)
- TIME when;
- void (*where) PROTO ((void *));
- void *what;
+void
+add_timeout(TIME when, void (*where)(void *), void *what)
{
struct timeout *t, *q;
/* See if this timeout supersedes an existing timeout. */
t = (struct timeout *)0;
- for (q = timeouts; q; q = q -> next) {
- if (q -> func == where && q -> what == what) {
+ for (q = timeouts; q; q = q->next) {
+ if (q->func == where && q->what == what) {
if (t)
- t -> next = q -> next;
+ t->next = q->next;
else
- timeouts = q -> next;
+ timeouts = q->next;
break;
}
t = q;
@@ -575,57 +568,56 @@ void add_timeout (when, where, what)
if (!q) {
if (free_timeouts) {
q = free_timeouts;
- free_timeouts = q -> next;
- q -> func = where;
- q -> what = what;
+ free_timeouts = q->next;
+ q->func = where;
+ q->what = what;
} else {
q = (struct timeout *)malloc (sizeof (struct timeout));
if (!q)
error ("Can't allocate timeout structure!");
- q -> func = where;
- q -> what = what;
+ q->func = where;
+ q->what = what;
}
}
- q -> when = when;
+ q->when = when;
/* Now sort this timeout into the timeout list. */
/* Beginning of list? */
- if (!timeouts || timeouts -> when > q -> when) {
- q -> next = timeouts;
+ if (!timeouts || timeouts->when > q->when) {
+ q->next = timeouts;
timeouts = q;
return;
}
/* Middle of list? */
- for (t = timeouts; t -> next; t = t -> next) {
- if (t -> next -> when > q -> when) {
- q -> next = t -> next;
- t -> next = q;
+ for (t = timeouts; t->next; t = t->next) {
+ if (t->next->when > q->when) {
+ q->next = t->next;
+ t->next = q;
return;
}
}
/* End of list. */
- t -> next = q;
- q -> next = (struct timeout *)0;
+ t->next = q;
+ q->next = (struct timeout *)0;
}
-void cancel_timeout (where, what)
- void (*where) PROTO ((void *));
- void *what;
+void
+cancel_timeout(void (*where)(void *), void *what)
{
struct timeout *t, *q;
/* Look for this timeout on the list, and unlink it if we find it. */
t = (struct timeout *)0;
- for (q = timeouts; q; q = q -> next) {
- if (q -> func == where && q -> what == what) {
+ for (q = timeouts; q; q = q->next) {
+ if (q->func == where && q->what == what) {
if (t)
- t -> next = q -> next;
+ t->next = q->next;
else
- timeouts = q -> next;
+ timeouts = q->next;
break;
}
t = q;
@@ -633,17 +625,15 @@ void cancel_timeout (where, what)
/* If we found the timeout, put it on the free list. */
if (q) {
- q -> next = free_timeouts;
+ q->next = free_timeouts;
free_timeouts = q;
}
}
/* Add a protocol to the list of protocols... */
-void add_protocol (name, fd, handler, local)
- char *name;
- int fd;
- void (*handler) PROTO ((struct protocol *));
- void *local;
+void
+add_protocol(char *name, int fd, void (*handler)(struct protocol *),
+ void *local)
{
struct protocol *p;
@@ -651,27 +641,27 @@ void add_protocol (name, fd, handler, local)
if (!p)
error ("can't allocate protocol struct for %s", name);
- p -> fd = fd;
- p -> handler = handler;
- p -> local = local;
+ p->fd = fd;
+ p->handler = handler;
+ p->local = local;
- p -> next = protocols;
+ p->next = protocols;
protocols = p;
}
-void remove_protocol (proto)
- struct protocol *proto;
+void
+remove_protocol(struct protocol *proto)
{
struct protocol *p, *next, *prev;
prev = (struct protocol *)0;
for (p = protocols; p; p = next) {
- next = p -> next;
+ next = p->next;
if (p == proto) {
if (prev)
- prev -> next = p -> next;
+ prev->next = p->next;
else
- protocols = p -> next;
+ protocols = p->next;
free (p);
}
}