rt_names: stop allocating 5k in rwdata
[oweals/busybox.git] / networking / udhcp / dhcpd.h
index 925634461b57170a1fb6757a2d0181175f113cab..40959e4aee841fd2c89de5327256b192c8e593db 100644 (file)
@@ -1,14 +1,8 @@
+/* vi: set sw=4 ts=4: */
 /* dhcpd.h */
 #ifndef _DHCPD_H
 #define _DHCPD_H
 
-#include <netinet/ip.h>
-#include <netinet/udp.h>
-
-#include "libbb_udhcp.h"
-#include "leases.h"
-#include "version.h"
-
 /************************************/
 /* Defaults _you_ may want to tweak */
 /************************************/
@@ -63,6 +57,7 @@
 #define DHCP_T2                        0x3b
 #define DHCP_VENDOR            0x3c
 #define DHCP_CLIENT_ID         0x3d
+#define DHCP_FQDN              0x51
 
 #define DHCP_END               0xFF
 
@@ -99,35 +94,97 @@ struct option_set {
        struct option_set *next;
 };
 
+struct static_lease {
+       uint8_t *mac;
+       uint32_t *ip;
+       struct static_lease *next;
+};
+
 struct server_config_t {
        uint32_t server;                /* Our IP, in network order */
-       uint32_t start;         /* Start address of leases, network order */
+       uint32_t start;                 /* Start address of leases, network order */
        uint32_t end;                   /* End of leases, network order */
        struct option_set *options;     /* List of DHCP options loaded from the config file */
        char *interface;                /* The name of the interface to use */
        int ifindex;                    /* Index number of the interface to use */
-       uint8_t arp[6];         /* Our arp address */
+       uint8_t arp[6];                 /* Our arp address */
        unsigned long lease;            /* lease time in seconds (host order) */
-       unsigned long max_leases;       /* maximum number of leases (including reserved address) */
-       char remaining;                 /* should the lease file be interpreted as lease time remaining, or
-                                        * as the time the lease expires */
-       unsigned long auto_time;        /* how long should udhcpd wait before writing a config file.
+       unsigned long max_leases;       /* maximum number of leases (including reserved address) */
+       char remaining;                 /* should the lease file be interpreted as lease time remaining, or
+                                        * as the time the lease expires */
+       unsigned long auto_time;        /* how long should udhcpd wait before writing a config file.
                                         * if this is zero, it will only write one on SIGUSR1 */
-       unsigned long decline_time;     /* how long an address is reserved if a client returns a
-                                        * decline message */
-       unsigned long conflict_time;    /* how long an arp conflict offender is leased for */
-       unsigned long offer_time;       /* how long an offered address is reserved */
-       unsigned long min_lease;        /* minimum lease a client can request*/
+       unsigned long decline_time;     /* how long an address is reserved if a client returns a
+                                        * decline message */
+       unsigned long conflict_time;    /* how long an arp conflict offender is leased for */
+       unsigned long offer_time;       /* how long an offered address is reserved */
+       unsigned long min_lease;        /* minimum lease a client can request*/
        char *lease_file;
        char *pidfile;
        char *notify_file;              /* What to run whenever leases are written */
        uint32_t siaddr;                /* next server bootp option */
        char *sname;                    /* bootp server name */
        char *boot_file;                /* bootp boot file option */
-};     
+       struct static_lease *static_leases; /* List of ip/mac pairs to assign static leases */
+};
 
 extern struct server_config_t server_config;
 extern struct dhcpOfferedAddr *leases;
-               
+
+
+/*** leases.h ***/
+
+struct dhcpOfferedAddr {
+       uint8_t chaddr[16];
+       uint32_t yiaddr;        /* network order */
+       uint32_t expires;       /* host order */
+};
+
+extern uint8_t blank_chaddr[];
+
+void clear_lease(uint8_t *chaddr, uint32_t yiaddr);
+struct dhcpOfferedAddr *add_lease(uint8_t *chaddr, uint32_t yiaddr, unsigned long lease);
+int lease_expired(struct dhcpOfferedAddr *lease);
+struct dhcpOfferedAddr *oldest_expired_lease(void);
+struct dhcpOfferedAddr *find_lease_by_chaddr(uint8_t *chaddr);
+struct dhcpOfferedAddr *find_lease_by_yiaddr(uint32_t yiaddr);
+uint32_t find_address(int check_expired);
+
+
+/*** static_leases.h ***/
+
+/* Config file will pass static lease info to this function which will add it
+ * to a data structure that can be searched later */
+int addStaticLease(struct static_lease **lease_struct, uint8_t *mac, uint32_t *ip);
+/* Check to see if a mac has an associated static lease */
+uint32_t getIpByMac(struct static_lease *lease_struct, void *arg);
+/* Check to see if an ip is reserved as a static ip */
+uint32_t reservedIp(struct static_lease *lease_struct, uint32_t ip);
+/* Print out static leases just to check what's going on (debug code) */
+void printStaticLeases(struct static_lease **lease_struct);
+
+
+/*** serverpacket.h ***/
+
+int sendOffer(struct dhcpMessage *oldpacket);
+int sendNAK(struct dhcpMessage *oldpacket);
+int sendACK(struct dhcpMessage *oldpacket, uint32_t yiaddr);
+int send_inform(struct dhcpMessage *oldpacket);
+
+
+/*** files.h ***/
+
+struct config_keyword {
+       const char *keyword;
+       int (* const handler)(const char *line, void *var);
+       void *var;
+       const char *def;
+};
+
+int read_config(const char *file);
+void write_leases(void);
+void read_leases(const char *file);
+struct option_set *find_option(struct option_set *opt_list, char code);
+
 
 #endif