dhcp/libdhcp_control.h
David Cantrell 3b727ca6ac - Ensure that Perl and Perl modules are not added as dependencies (#234688)
- Reorganize patches by feature/bug per packaging guidelines (#225691)
- Move the following files from patches to source files:
    linux.dbus-example, linux, Makefile.dist, dhcp4client.h,
    libdhcp_control.h
- Compile with -fno-strict-aliasing as ISC coding standards generally don't
    agree well with gcc 4.x.x
2007-04-01 20:52:27 +00:00

125 lines
4.6 KiB
C

/* libdhcp_control.h
*
* DHCP client control API for libdhcp, a minimal interface to the
* ISC dhcp IPv4 client libdhcp4client library,
* and to the dhcpv6 DHCPv6 client libdhcp6client library.
*
* Each DHCP client library must include this file to be controlled
* by libdhcp.
*
* Copyright(C) Jason Vas Dias <jvdias@redhat.com> Red Hat Inc. May 2006
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation at
* http://www.fsf.org/licensing/licenses/gpl.txt
* and included in this software distribution as the "LICENSE" file.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef LIBDHCP_CONTROL_H
#define LIBDHCP_CONTROL_H
#include <stdint.h>
#define LOG_FATAL 8
typedef enum dhcp_state_e {
/* DHCPv4 client states
* third callback arg will be a 'struct client_state *'
*/
DHC4_NBI, /* failed: no broadcast interfaces found */
DHC4_PREINIT, /* configuration started - bring the interface "UP" */
DHC4_BOUND, /* lease obtained */
DHC4_RENEW, /* lease renewed */
DHC4_REBOOT, /* have valid lease, but now obtained a different one */
DHC4_REBIND, /* new, different lease */
DHC4_STOP, /* remove old lease */
DHC4_MEDIUM, /* media selection begun */
DHC4_TIMEOUT, /* timed out contacting DHCP server */
DHC4_FAIL, /* all attempts to contact server timed out, sleeping */
DHC4_EXPIRE, /* lease has expired, renewing */
DHC4_RELEASE, /* releasing lease */
/* This state raised by both clients: */
DHC_TIMEDOUT, /* libdhcp_control timeout has been exceeded */
/* DHCPv6 client states: */
DHC6_BOUND, /* new lease obtained - arg is optinfo * */
DHC6_REBIND, /* existing expired lease rebound - arg is optinfo * */
DHC6_RELEASE /* existing lease expired - arg is dhcp6_iaidaddr*/
} DHCP_State;
struct libdhcp_control_s;
/* ala syslog(3): LOG_EMERG=0 - LOG_DEBUG=7 (+ LOG_FATAL=8 : finished -> 1) */
typedef int (*LIBDHCP_Error_Handler) (struct libdhcp_control_s *ctl,
int priority, const char *fmt,
va_list ap);
/* The DHCP clients will call the users' callback on important state change
* events, with the second arg set to the client DHCP_State, and the third
* arg set to a client specific pointer as described below. */
typedef int (*LIBDHCP_Callback) (struct libdhcp_control_s *control,
enum dhcp_state_e, void*);
typedef struct libdhcp_control_s {
/* the DHCP clients' main loop calls this on state changes */
LIBDHCP_Callback callback;
/* LIBDHCP_Capability bits to enable */
uint16_t capability;
/* set to one to make clients exit their main loop */
uint8_t finished;
/* set to one to decline the lease (DHCPv4 only) */
uint8_t decline;
/* (timeout+now) == time after which clients MUST return */
time_t timeout;
/* clients set this to time(0) on entering main loop */
time_t now;
/* user data pointer */
void *arg;
LIBDHCP_Error_Handler eh;
} LIBDHCP_Control;
/* DHCP client "capabilities" */
typedef enum libdhcp_capability_e {
/* use / do not use persistent lease database files */
DHCP_USE_LEASE_DATABASE = 1,
/* use / do not use pid file */
DHCP_USE_PID_FILE = 2,
/*
* DHCPv6 supports these capabilities in process,
* while the DHCPv4 client will fork and exec the dhclient-script to
* implement them if these bits are set - otherwise, if no bits are set,
* the callback is called and the script is not run.
*/
/* configure interfaces UP/DOWN as required */
DHCP_CONFIGURE_INTERFACES = 4,
/* configure interface addresses as required */
DHCP_CONFIGURE_ADDRESSES = 8,
/* configure routes as required */
DHCP_CONFIGURE_ROUTES = 16,
/* configure resolv.conf as required */
DHCP_CONFIGURE_RESOLVER = 32,
/* DHCPv6 only: */
/* configure radvd.conf & restart radvd as required */
DHCP_CONFIGURE_RADVD = 64,
} LIBDHCP_Capability;
#endif