Move background() to sys.[ch].

This commit is contained in:
Nicholas J. Kain 2010-12-24 09:47:09 -05:00
parent 59a0661eb9
commit 8e905d0611
5 changed files with 69 additions and 25 deletions

View File

@ -29,9 +29,6 @@ static struct arpMsg arpreply;
static int arpreply_offset; static int arpreply_offset;
static struct dhcpMessage arp_dhcp_packet; static struct dhcpMessage arp_dhcp_packet;
// from ndhc.c
void background(void);
/* Returns fd of the arp socket, or -1 on failure. */ /* Returns fd of the arp socket, or -1 on failure. */
static int arpping(uint32_t test_nip, const uint8_t *safe_mac, static int arpping(uint32_t test_nip, const uint8_t *safe_mac,
uint32_t from_ip, uint8_t *from_mac, const char *interface) uint32_t from_ip, uint8_t *from_mac, const char *interface)
@ -80,7 +77,6 @@ static int arpping(uint32_t test_nip, const uint8_t *safe_mac,
return arpfd; return arpfd;
} }
// only called from packet.c
void arp_check(struct client_state_t *cs, struct dhcpMessage *packet) void arp_check(struct client_state_t *cs, struct dhcpMessage *packet)
{ {
cs->arpPrevState = cs->dhcpState; cs->arpPrevState = cs->dhcpState;
@ -110,7 +106,6 @@ static void arp_failed(struct client_state_t *cs)
change_listen_mode(cs, LM_RAW); change_listen_mode(cs, LM_RAW);
} }
// only called from timeout.c
void arp_success(struct client_state_t *cs) void arp_success(struct client_state_t *cs)
{ {
struct in_addr temp_addr; struct in_addr temp_addr;

View File

@ -95,8 +95,6 @@ struct client_config_t client_config = {
.arp = "\0", .arp = "\0",
}; };
static char pidfile[MAX_PATH_LENGTH] = PID_FILE_DEFAULT;
static void show_usage(void) static void show_usage(void)
{ {
printf( printf(
@ -184,21 +182,6 @@ static void perform_release(void)
cs.timeout = -1; cs.timeout = -1;
} }
void background(void)
{
static char called;
if (!called && daemon(0, 0) == -1) {
perror("fork");
exit(EXIT_SUCCESS);
}
called = 1; /* Do not fork again. */
if (file_exists(pidfile, "w") == -1) {
log_line("FATAL - cannot open pidfile for write!");
exit(EXIT_FAILURE);
}
write_pid(pidfile);
}
static void setup_signals() static void setup_signals()
{ {
sigset_t mask; sigset_t mask;

49
ndhc/sys.c Normal file
View File

@ -0,0 +1,49 @@
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/epoll.h>
#include "config.h"
#include "log.h"
#include "pidfile.h"
#include "sys.h"
char pidfile[MAX_PATH_LENGTH] = PID_FILE_DEFAULT;
void background(void)
{
static char called;
if (!called && daemon(0, 0) == -1) {
perror("fork");
exit(EXIT_SUCCESS);
}
called = 1; /* Do not fork again. */
if (file_exists(pidfile, "w") == -1) {
log_line("FATAL - cannot open pidfile for write!");
exit(EXIT_FAILURE);
}
write_pid(pidfile);
}
void epoll_add(struct client_state_t *cs, int fd)
{
struct epoll_event ev;
int r;
ev.events = EPOLLIN | EPOLLRDHUP | EPOLLERR | EPOLLHUP;
ev.data.fd = fd;
r = epoll_ctl(cs->epollFd, EPOLL_CTL_ADD, fd, &ev);
if (r == -1)
suicide("epoll_add failed %s", strerror(errno));
}
void epoll_del(struct client_state_t *cs, int fd)
{
struct epoll_event ev;
int r;
ev.events = EPOLLIN | EPOLLRDHUP | EPOLLERR | EPOLLHUP;
ev.data.fd = fd;
r = epoll_ctl(cs->epollFd, EPOLL_CTL_DEL, fd, &ev);
if (r == -1)
suicide("epoll_del failed %s", strerror(errno));
}

20
ndhc/sys.h Normal file
View File

@ -0,0 +1,20 @@
#ifndef SYS_H_
#define SYS_H_
#include <sys/time.h>
#include "ndhc-defines.h"
static inline unsigned long long curms()
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec * 1000ULL + tv.tv_usec / 1000ULL;
}
extern char pidfile[MAX_PATH_LENGTH];
void background(void);
void epoll_add(struct client_state_t *cs, int fd);
void epoll_del(struct client_state_t *cs, int fd);
#endif /* SYS_H_ */

View File

@ -9,9 +9,6 @@
#include "arpping.h" #include "arpping.h"
#include "log.h" #include "log.h"
// from ndhc.c
void background(void);
static void init_selecting_timeout(struct client_state_t *cs) static void init_selecting_timeout(struct client_state_t *cs)
{ {
if (cs->packetNum < NUMPACKETS) { if (cs->packetNum < NUMPACKETS) {