busybox/networking/udhcp/dhcpd.h
<<
>>
Prefs
   1/* vi: set sw=4 ts=4: */
   2/*
   3 * Licensed under GPLv2, see file LICENSE in this source tree.
   4 */
   5#ifndef UDHCP_DHCPD_H
   6#define UDHCP_DHCPD_H 1
   7
   8PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
   9
  10/* Defaults you may want to tweak */
  11/* Default max_lease_sec */
  12#define DEFAULT_LEASE_TIME      (60*60*24 * 10)
  13#define LEASES_FILE             CONFIG_DHCPD_LEASES_FILE
  14/* Where to find the DHCP server configuration file */
  15#define DHCPD_CONF_FILE         "/etc/udhcpd.conf"
  16
  17
  18struct static_lease;
  19
  20struct server_data_t {
  21        char *interface;                /* interface to use */
  22//TODO: ifindex, server_nip, server_mac
  23// are obtained from interface name.
  24// Instead of querying them *once*, create update_server_network_data_cache()
  25// and call it before any usage of these fields.
  26// update_server_network_data_cache() must re-query data
  27// if more than N seconds have passed after last use.
  28        int ifindex;
  29        uint32_t server_nip;
  30#if ENABLE_FEATURE_UDHCP_PORT
  31        uint16_t port;
  32#endif
  33        uint8_t server_mac[6];          /* our MAC address (used only for ARP probing) */
  34        struct option_set *options;     /* list of DHCP options loaded from the config file */
  35        /* start,end are in host order: we need to compare start <= ip <= end */
  36        uint32_t start_ip;              /* start address of leases, in host order */
  37        uint32_t end_ip;                /* end of leases, in host order */
  38        uint32_t max_lease_sec;         /* maximum lease time (host order) */
  39        uint32_t min_lease_sec;         /* minimum lease time a client can request */
  40        uint32_t max_leases;            /* maximum number of leases (including reserved addresses) */
  41        uint32_t auto_time;             /* how long should udhcpd wait before writing a config file.
  42                                         * if this is zero, it will only write one on SIGUSR1 */
  43        uint32_t decline_time;          /* how long an address is reserved if a client returns a
  44                                         * decline message */
  45        uint32_t conflict_time;         /* how long an arp conflict offender is leased for */
  46        uint32_t offer_time;            /* how long an offered address is reserved */
  47        uint32_t siaddr_nip;            /* "next server" bootp option */
  48        char *lease_file;
  49        char *pidfile;
  50        char *notify_file;              /* what to run whenever leases are written */
  51        char *sname;                    /* bootp server name */
  52        char *boot_file;                /* bootp boot file option */
  53        struct static_lease *static_leases; /* List of ip/mac pairs to assign static leases */
  54} FIX_ALIASING;
  55
  56#define server_data (*(struct server_data_t*)bb_common_bufsiz1)
  57/* client_data sits in 2nd half of bb_common_bufsiz1 */
  58
  59#if ENABLE_FEATURE_UDHCP_PORT
  60#define SERVER_PORT  (server_data.port)
  61#define SERVER_PORT6 (server_data.port)
  62#else
  63#define SERVER_PORT  67
  64#define SERVER_PORT6 547
  65#endif
  66
  67
  68typedef uint32_t leasetime_t;
  69typedef int32_t signed_leasetime_t;
  70
  71struct dyn_lease {
  72        /* Unix time when lease expires. Kept in memory in host order.
  73         * When written to file, converted to network order
  74         * and adjusted (current time subtracted) */
  75        leasetime_t expires;
  76        /* "nip": IP in network order */
  77        uint32_t lease_nip;
  78        /* We use lease_mac[6], since e.g. ARP probing uses
  79         * only 6 first bytes anyway. We check received dhcp packets
  80         * that their hlen == 6 and thus chaddr has only 6 significant bytes
  81         * (dhcp packet has chaddr[16], not [6])
  82         */
  83        uint8_t lease_mac[6];
  84        char hostname[20];
  85        uint8_t pad[2];
  86        /* total size is a multiply of 4 */
  87} PACKED;
  88
  89POP_SAVED_FUNCTION_VISIBILITY
  90
  91#endif
  92