Magellan Linux

Diff of /trunk/mkinitrd-magellan/busybox/networking/udhcp/dhcpd.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 815 by niro, Sat Sep 1 22:45:15 2007 UTC revision 816 by niro, Fri Apr 24 18:33:46 2009 UTC
# Line 1  Line 1 
1  /* vi: set sw=4 ts=4: */  /* vi: set sw=4 ts=4: */
2  /* dhcpd.h */  /* dhcpd.h */
3    
4  #ifndef _DHCPD_H  #ifndef _DHCPD_H
5  #define _DHCPD_H  #define _DHCPD_H
6    
7    #if __GNUC_PREREQ(4,1)
8    # pragma GCC visibility push(hidden)
9    #endif
10    
11  /************************************/  /************************************/
12  /* Defaults _you_ may want to tweak */  /* Defaults _you_ may want to tweak */
13  /************************************/  /************************************/
14    
15  /* the period of time the client is allowed to use that address */  /* the period of time the client is allowed to use that address */
16  #define LEASE_TIME              (60*60*24*10) /* 10 days of seconds */  #define LEASE_TIME              (60*60*24*10) /* 10 days of seconds */
17  #define LEASES_FILE "/var/lib/misc/udhcpd.leases"  #define LEASES_FILE CONFIG_DHCPD_LEASES_FILE
18    
19  /* where to find the DHCP server configuration file */  /* where to find the DHCP server configuration file */
20  #define DHCPD_CONF_FILE         "/etc/udhcpd.conf"  #define DHCPD_CONF_FILE         "/etc/udhcpd.conf"
21    
 /*****************************************************************/  
 /* Do not modify below here unless you know what you are doing!! */  
 /*****************************************************************/  
   
 /* DHCP protocol -- see RFC 2131 */  
 #define SERVER_PORT 67  
 #define CLIENT_PORT 68  
   
 #define DHCP_MAGIC 0x63825363  
   
 /* DHCP option codes (partial list) */  
 #define DHCP_PADDING 0x00  
 #define DHCP_SUBNET 0x01  
 #define DHCP_TIME_OFFSET 0x02  
 #define DHCP_ROUTER 0x03  
 #define DHCP_TIME_SERVER 0x04  
 #define DHCP_NAME_SERVER 0x05  
 #define DHCP_DNS_SERVER 0x06  
 #define DHCP_LOG_SERVER 0x07  
 #define DHCP_COOKIE_SERVER 0x08  
 #define DHCP_LPR_SERVER 0x09  
 #define DHCP_HOST_NAME 0x0c  
 #define DHCP_BOOT_SIZE 0x0d  
 #define DHCP_DOMAIN_NAME 0x0f  
 #define DHCP_SWAP_SERVER 0x10  
 #define DHCP_ROOT_PATH 0x11  
 #define DHCP_IP_TTL 0x17  
 #define DHCP_MTU 0x1a  
 #define DHCP_BROADCAST 0x1c  
 #define DHCP_NTP_SERVER 0x2a  
 #define DHCP_WINS_SERVER 0x2c  
 #define DHCP_REQUESTED_IP 0x32  
 #define DHCP_LEASE_TIME 0x33  
 #define DHCP_OPTION_OVER 0x34  
 #define DHCP_MESSAGE_TYPE 0x35  
 #define DHCP_SERVER_ID 0x36  
 #define DHCP_PARAM_REQ 0x37  
 #define DHCP_MESSAGE 0x38  
 #define DHCP_MAX_SIZE 0x39  
 #define DHCP_T1 0x3a  
 #define DHCP_T2 0x3b  
 #define DHCP_VENDOR 0x3c  
 #define DHCP_CLIENT_ID 0x3d  
 #define DHCP_FQDN 0x51  
   
 #define DHCP_END 0xFF  
   
   
 #define BOOTREQUEST 1  
 #define BOOTREPLY 2  
   
 #define ETH_10MB 1  
 #define ETH_10MB_LEN 6  
   
 #define DHCPDISCOVER 1  
 #define DHCPOFFER 2  
 #define DHCPREQUEST 3  
 #define DHCPDECLINE 4  
 #define DHCPACK 5  
 #define DHCPNAK 6  
 #define DHCPRELEASE 7  
 #define DHCPINFORM 8  
   
 #define BROADCAST_FLAG 0x8000  
   
 #define OPTION_FIELD 0  
 #define FILE_FIELD 1  
 #define SNAME_FIELD 2  
   
 /* miscellaneous defines */  
 #define MAC_BCAST_ADDR (uint8_t *) "\xff\xff\xff\xff\xff\xff"  
 #define OPT_CODE 0  
 #define OPT_LEN 1  
 #define OPT_DATA 2  
   
22  struct option_set {  struct option_set {
23   uint8_t *data;   uint8_t *data;
24   struct option_set *next;   struct option_set *next;
25  };  };
26    
27  struct static_lease {  struct static_lease {
28     struct static_lease *next;
29   uint8_t *mac;   uint8_t *mac;
30   uint32_t *ip;   uint32_t *ip;
  struct static_lease *next;  
31  };  };
32    
33  struct server_config_t {  struct server_config_t {
34   uint32_t server; /* Our IP, in network order */   uint32_t server;                /* Our IP, in network order */
35   uint32_t start; /* Start address of leases, network order */  #if ENABLE_FEATURE_UDHCP_PORT
36   uint32_t end; /* End of leases, network order */   uint16_t port;
37   struct option_set *options; /* List of DHCP options loaded from the config file */  #endif
38   char *interface; /* The name of the interface to use */   /* start,end are in host order: we need to compare start <= ip <= end */
39   int ifindex; /* Index number of the interface to use */   uint32_t start_ip;              /* Start address of leases, in host order */
40   uint8_t arp[6]; /* Our arp address */   uint32_t end_ip;                /* End of leases, in host order */
41   unsigned long lease; /* lease time in seconds (host order) */   struct option_set *options;     /* List of DHCP options loaded from the config file */
42   unsigned long max_leases; /* maximum number of leases (including reserved address) */   char *interface;                /* The name of the interface to use */
43   char remaining; /* should the lease file be interpreted as lease time remaining, or   int ifindex;                    /* Index number of the interface to use */
44   * as the time the lease expires */   uint8_t arp[6];                 /* Our arp address */
45   unsigned long auto_time; /* how long should udhcpd wait before writing a config file.   char remaining;                 /* should the lease file be interpreted as lease time remaining, or
46   * if this is zero, it will only write one on SIGUSR1 */                                   * as the time the lease expires */
47   unsigned long decline_time; /* how long an address is reserved if a client returns a   uint32_t lease;                /* lease time in seconds (host order) */
48   * decline message */   uint32_t max_leases;            /* maximum number of leases (including reserved address) */
49   unsigned long conflict_time; /* how long an arp conflict offender is leased for */   uint32_t auto_time;             /* how long should udhcpd wait before writing a config file.
50   unsigned long offer_time; /* how long an offered address is reserved */                                   * if this is zero, it will only write one on SIGUSR1 */
51   unsigned long min_lease; /* minimum lease a client can request*/   uint32_t decline_time;          /* how long an address is reserved if a client returns a
52                                     * decline message */
53     uint32_t conflict_time;         /* how long an arp conflict offender is leased for */
54     uint32_t offer_time;            /* how long an offered address is reserved */
55     uint32_t min_lease;             /* minimum lease a client can request */
56   char *lease_file;   char *lease_file;
57   char *pidfile;   char *pidfile;
58   char *notify_file; /* What to run whenever leases are written */   char *notify_file;              /* What to run whenever leases are written */
59   uint32_t siaddr; /* next server bootp option */   uint32_t siaddr;                /* next server bootp option */
60   char *sname; /* bootp server name */   char *sname;                    /* bootp server name */
61   char *boot_file; /* bootp boot file option */   char *boot_file;                /* bootp boot file option */
62   struct static_lease *static_leases; /* List of ip/mac pairs to assign static leases */   struct static_lease *static_leases; /* List of ip/mac pairs to assign static leases */
63  };  };
64    
65  extern struct server_config_t server_config;  #define server_config (*(struct server_config_t*)&bb_common_bufsiz1)
66    /* client_config sits in 2nd half of bb_common_bufsiz1 */
67    
68    #if ENABLE_FEATURE_UDHCP_PORT
69    #define SERVER_PORT (server_config.port)
70    #else
71    #define SERVER_PORT 67
72    #endif
73    
74  extern struct dhcpOfferedAddr *leases;  extern struct dhcpOfferedAddr *leases;
75    
76    
# Line 140  struct dhcpOfferedAddr { Line 82  struct dhcpOfferedAddr {
82   uint32_t expires; /* host order */   uint32_t expires; /* host order */
83  };  };
84    
85  extern uint8_t blank_chaddr[];  struct dhcpOfferedAddr *add_lease(const uint8_t *chaddr, uint32_t yiaddr, unsigned long lease) FAST_FUNC;
86    int lease_expired(struct dhcpOfferedAddr *lease) FAST_FUNC;
87  void clear_lease(uint8_t *chaddr, uint32_t yiaddr);  struct dhcpOfferedAddr *find_lease_by_chaddr(const uint8_t *chaddr) FAST_FUNC;
88  struct dhcpOfferedAddr *add_lease(uint8_t *chaddr, uint32_t yiaddr, unsigned long lease);  struct dhcpOfferedAddr *find_lease_by_yiaddr(uint32_t yiaddr) FAST_FUNC;
89  int lease_expired(struct dhcpOfferedAddr *lease);  uint32_t find_address(int check_expired) FAST_FUNC;
 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);  
90    
91    
92  /*** static_leases.h ***/  /*** static_leases.h ***/
93    
94  /* Config file will pass static lease info to this function which will add it  /* Config file will pass static lease info to this function which will add it
95   * to a data structure that can be searched later */   * to a data structure that can be searched later */
96  int addStaticLease(struct static_lease **lease_struct, uint8_t *mac, uint32_t *ip);  int addStaticLease(struct static_lease **lease_struct, uint8_t *mac, uint32_t *ip) FAST_FUNC;
97  /* Check to see if a mac has an associated static lease */  /* Check to see if a mac has an associated static lease */
98  uint32_t getIpByMac(struct static_lease *lease_struct, void *arg);  uint32_t getIpByMac(struct static_lease *lease_struct, void *arg) FAST_FUNC;
99  /* Check to see if an ip is reserved as a static ip */  /* Check to see if an ip is reserved as a static ip */
100  uint32_t reservedIp(struct static_lease *lease_struct, uint32_t ip);  uint32_t reservedIp(struct static_lease *lease_struct, uint32_t ip) FAST_FUNC;
101  /* Print out static leases just to check what's going on (debug code) */  /* Print out static leases just to check what's going on (debug code) */
102  void printStaticLeases(struct static_lease **lease_struct);  void printStaticLeases(struct static_lease **lease_struct) FAST_FUNC;
103    
104    
105  /*** serverpacket.h ***/  /*** serverpacket.h ***/
106    
107  int sendOffer(struct dhcpMessage *oldpacket);  int send_offer(struct dhcpMessage *oldpacket) FAST_FUNC;
108  int sendNAK(struct dhcpMessage *oldpacket);  int send_NAK(struct dhcpMessage *oldpacket) FAST_FUNC;
109  int sendACK(struct dhcpMessage *oldpacket, uint32_t yiaddr);  int send_ACK(struct dhcpMessage *oldpacket, uint32_t yiaddr) FAST_FUNC;
110  int send_inform(struct dhcpMessage *oldpacket);  int send_inform(struct dhcpMessage *oldpacket) FAST_FUNC;
111    
112    
113  /*** files.h ***/  /*** files.h ***/
114    
115  struct config_keyword {  void read_config(const char *file) FAST_FUNC;
116   const char *keyword;  void write_leases(void) FAST_FUNC;
117   int (* const handler)(const char *line, void *var);  void read_leases(const char *file) FAST_FUNC;
118   void *var;  struct option_set *find_option(struct option_set *opt_list, uint8_t code) FAST_FUNC;
  const char *def;  
 };  
119    
 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);  
120    
121    #if __GNUC_PREREQ(4,1)
122    # pragma GCC visibility pop
123    #endif
124    
125  #endif  #endif

Legend:
Removed from v.815  
changed lines
  Added in v.816