Clean up udhcpd a bit. Constify. Staticize. Remove these functions and
authorAaron Lehmann <aaronl@vitelius.com>
Wed, 21 Aug 2002 11:21:19 +0000 (11:21 -0000)
committerAaron Lehmann <aaronl@vitelius.com>
Wed, 21 Aug 2002 11:21:19 +0000 (11:21 -0000)
inline their contents: print_usage, pidfile_delete, and background.

networking/udhcpc.c

index f13d44d5d00417a2c2a0779088a70c35f893b323..d766ea53bdd09d263b1bd8b098dfc7f220824364 100644 (file)
@@ -248,7 +248,7 @@ struct udp_dhcp_packet {
        struct dhcpMessage data;
 };
 
-struct dhcp_option options[] = {
+static const struct dhcp_option options[] = {
        /* name[10]     flags                                   code */
        {"subnet",      OPTION_IP | OPTION_REQ,                 0x01},
        {"timezone",    OPTION_S32,                             0x02},
@@ -280,7 +280,7 @@ struct dhcp_option options[] = {
 };
 
 /* Lengths of the different option types */
-int option_lengths[] = {
+static const int option_lengths[] = {
        [OPTION_IP] =           4,
        [OPTION_IP_PAIR] =      8,
        [OPTION_BOOLEAN] =      1,
@@ -293,7 +293,7 @@ int option_lengths[] = {
 };
 
 /* get a rough idea of how long an option will be (rounding up...) */
-static int max_option_length[] = {
+static const unsigned char max_option_length[] = {
        [OPTION_IP] =           sizeof("255.255.255.255 "),
        [OPTION_IP_PAIR] =      sizeof("255.255.255.255 ") * 2,
        [OPTION_STRING] =       1,
@@ -305,26 +305,8 @@ static int max_option_length[] = {
        [OPTION_S32] =          sizeof("-2147483684 "),
 };
 
-static void print_usage(void)
-{
-       printf(
-"Usage: udhcpcd [OPTIONS]\n\n"
-"  -c, --clientid=CLIENTID         Client identifier\n"
-"  -H, --hostname=HOSTNAME         Client hostname\n"
-"  -f, --foreground                Do not fork after getting lease\n"
-"  -i, --interface=INTERFACE       Interface to use (default: eth0)\n"
-"  -n, --now                       Exit with failure if lease cannot be\n"
-"                                  immediately negotiated.\n"
-"  -p, --pidfile=file              Store process ID of daemon in file\n"
-"  -q, --quit                      Quit after obtaining lease\n"
-"  -r, --request=IP                IP address to request (default: none)\n"
-"  -s, --script=file               Run file at dhcp events (default:\n"
-"                                  " DEFAULT_SCRIPT ")\n"
-"  -v, --version                   Display version\n"
-       );
-}
 /* return the position of the 'end' option (no bounds checking) */
-int end_option(unsigned char *optionptr) 
+static int end_option(unsigned char *optionptr) 
 {
        int i = 0;
        
@@ -337,7 +319,7 @@ int end_option(unsigned char *optionptr)
 
 /* add an option string to the options (an option string contains an option code,
  * length, then data) */
-int add_option_string(unsigned char *optionptr, unsigned char *string)
+static int add_option_string(unsigned char *optionptr, unsigned char *string)
 {
        int end = end_option(optionptr);
        
@@ -353,7 +335,7 @@ int add_option_string(unsigned char *optionptr, unsigned char *string)
 }
 
 /* add a one to four byte option to a packet */
-int add_simple_option(unsigned char *optionptr, unsigned char code, u_int32_t data)
+static int add_simple_option(unsigned char *optionptr, unsigned char code, u_int32_t data)
 {
        char length = 0;
        int i;
@@ -411,7 +393,7 @@ void init_header(struct dhcpMessage *packet, char type)
        add_simple_option(packet->options, DHCP_MESSAGE_TYPE, type);
 }
 #endif
-u_int16_t checksum(void *addr, int count)
+static u_int16_t checksum(void *addr, int count)
 {
        /* Compute Internet Checksum for "count" bytes
         *         beginning at location "addr".
@@ -437,7 +419,7 @@ u_int16_t checksum(void *addr, int count)
 }
 
 /* Constuct a ip/udp header for a packet, and specify the source and dest hardware address */
-int raw_packet(struct dhcpMessage *payload, u_int32_t source_ip, int source_port,
+static int raw_packet(struct dhcpMessage *payload, u_int32_t source_ip, int source_port,
                   u_int32_t dest_ip, int dest_port, unsigned char *dest_arp, int ifindex)
 {
        int l_fd;
@@ -489,7 +471,7 @@ int raw_packet(struct dhcpMessage *payload, u_int32_t source_ip, int source_port
 }
 
 /* Let the kernel do all the work for packet generation */
-int kernel_packet(struct dhcpMessage *payload, u_int32_t source_ip, int source_port,
+static int kernel_packet(struct dhcpMessage *payload, u_int32_t source_ip, int source_port,
                   u_int32_t dest_ip, int dest_port)
 {
        int n = 1;
@@ -576,7 +558,7 @@ static void add_requests(struct dhcpMessage *packet)
 }
 
 /* Broadcast a DHCP discover packet to the network, with an optionally requested IP */
-int send_discover(unsigned long xid, unsigned long requested)
+static int send_discover(unsigned long xid, unsigned long requested)
 {
        struct dhcpMessage packet;
 
@@ -592,7 +574,7 @@ int send_discover(unsigned long xid, unsigned long requested)
 }
 
 /* Broadcasts a DHCP request message */
-int send_selecting(unsigned long xid, unsigned long server, unsigned long requested)
+static int send_selecting(unsigned long xid, unsigned long server, unsigned long requested)
 {
        struct dhcpMessage packet;
        struct in_addr addr;
@@ -612,7 +594,7 @@ int send_selecting(unsigned long xid, unsigned long server, unsigned long reques
 
 
 /* Unicasts or broadcasts a DHCP renew message */
-int send_renew(unsigned long xid, unsigned long server, unsigned long ciaddr)
+static int send_renew(unsigned long xid, unsigned long server, unsigned long ciaddr)
 {
        struct dhcpMessage packet;
        int ret = 0;
@@ -631,7 +613,7 @@ int send_renew(unsigned long xid, unsigned long server, unsigned long ciaddr)
 }      
 
 /* Create a random xid */
-unsigned long random_xid(void)
+static unsigned long random_xid(void)
 {
        static int initialized;
        if (!initialized) {
@@ -691,7 +673,7 @@ static void renew_requested(int sig)
 }
 
 /* get an option with bounds checking (warning, not aligned). */
-unsigned char *get_option(struct dhcpMessage *packet, int code)
+static unsigned char *get_option(struct dhcpMessage *packet, int code)
 {
        int i, length;
        unsigned char *optionptr;
@@ -757,7 +739,7 @@ static int sprintip(char *dest, char *pre, unsigned char *ip) {
 
 
 /* Fill dest with the text of option 'option'. */
-static void fill_options(char *dest, unsigned char *option, struct dhcp_option *type_p)
+static void fill_options(char *dest, unsigned char *option, const struct dhcp_option *type_p)
 {
        int type, optlen;
        u_int16_t val_u16;
@@ -891,7 +873,7 @@ static char **fill_envp(struct dhcpMessage *packet)
 }
 
 /* Call a script with a par file and env vars */
-void run_script(struct dhcpMessage *packet, const char *name)
+static void run_script(struct dhcpMessage *packet, const char *name)
 {
        int pid;
        char **envp;
@@ -946,7 +928,7 @@ static void release_requested(int sig)
 }
 
 
-int pidfile_acquire(char *pidfile)
+static int pidfile_acquire(char *pidfile)
 {
        int pid_fd;
        if (pidfile == NULL) return -1;
@@ -963,7 +945,7 @@ int pidfile_acquire(char *pidfile)
 }
 
 
-void pidfile_write_release(int pid_fd)
+static void pidfile_write_release(int pid_fd)
 {
        FILE *out;
 
@@ -977,16 +959,11 @@ void pidfile_write_release(int pid_fd)
        close(pid_fd);
 }
 
-
-void pidfile_delete(char *pidfile)
-{
-       if (pidfile) unlink(pidfile);
-}
-
 /* Exit and cleanup */
 static void exit_client(int retval)
 {
-       pidfile_delete(client_config.pidfile);
+       unlink(client_config.pidfile);
+       if (client_config.pidfile) unlink(client_config.pidfile);
        CLOSE_LOG();
        exit(retval);
 }
@@ -1001,23 +978,7 @@ static void terminate(int sig)
 }
 
 
-static void background(void)
-{
-       int pid_fd;
-       if (client_config.quit_after_lease) {
-               exit_client(0);
-       } else if (!client_config.foreground) {
-               pid_fd = pidfile_acquire(client_config.pidfile); /* hold lock during fork. */
-               if (daemon(0, 0) == -1) {
-                       perror("fork");
-                       exit_client(1);
-               }
-               client_config.foreground = 1; /* Do not fork again. */
-               pidfile_write_release(pid_fd);
-       }
-}
-
-int read_interface(char *interface, int *ifindex, u_int32_t *addr, unsigned char *arp)
+static int read_interface(char *interface, int *ifindex, u_int32_t *addr, unsigned char *arp)
 {
        int l_fd;
        struct ifreq ifr;
@@ -1063,7 +1024,7 @@ int read_interface(char *interface, int *ifindex, u_int32_t *addr, unsigned char
 }
 
 
-int listen_socket(unsigned int ip, int port, char *inf)
+static int listen_socket(unsigned int ip, int port, char *inf)
 {
        struct ifreq interface;
        int l_fd;
@@ -1105,7 +1066,7 @@ int listen_socket(unsigned int ip, int port, char *inf)
 }
 
 
-int raw_socket(int ifindex)
+static int raw_socket(int ifindex)
 {
        int l_fd;
        struct sockaddr_ll sock;
@@ -1130,7 +1091,7 @@ int raw_socket(int ifindex)
 }
 
 /* read a packet from socket fd, return -1 on read error, -2 on packet error */
-int get_packet(struct dhcpMessage *packet, int l_fd)
+static int get_packet(struct dhcpMessage *packet, int l_fd)
 {
        int bytes;
        int i;
@@ -1168,7 +1129,7 @@ int get_packet(struct dhcpMessage *packet, int l_fd)
        return bytes;
 }
 
-int get_raw_packet(struct dhcpMessage *payload, int l_fd)
+static int get_raw_packet(struct dhcpMessage *payload, int l_fd)
 {
        int bytes;
        struct udp_dhcp_packet packet;
@@ -1298,7 +1259,21 @@ int udhcpc_main(int argc, char *argv[])
                        strncpy(client_config.hostname + 2, optarg, len);
                        break;
                case 'h':
-                       print_usage();
+                       puts(
+"Usage: udhcpcd [OPTIONS]\n\n"
+"  -c, --clientid=CLIENTID         Client identifier\n"
+"  -H, --hostname=HOSTNAME         Client hostname\n"
+"  -f, --foreground                Do not fork after getting lease\n"
+"  -i, --interface=INTERFACE       Interface to use (default: eth0)\n"
+"  -n, --now                       Exit with failure if lease cannot be\n"
+"                                  immediately negotiated.\n"
+"  -p, --pidfile=file              Store process ID of daemon in file\n"
+"  -q, --quit                      Quit after obtaining lease\n"
+"  -r, --request=IP                IP address to request (default: none)\n"
+"  -s, --script=file               Run file at dhcp events (default:\n"
+"                                  " DEFAULT_SCRIPT ")\n"
+"  -v, --version                   Display version"
+       );
                        return 0;
                case 'i':
                        client_config.interface =  optarg;
@@ -1538,7 +1513,20 @@ int udhcpc_main(int argc, char *argv[])
 
                                        state = BOUND;
                                        change_mode(LISTEN_NONE);
-                                       background();
+                                       {
+                                               int pid_fd2;
+                                               if (client_config.quit_after_lease) {
+                                                       exit_client(0);
+                                               } else if (!client_config.foreground) {
+                                                       pid_fd2 = pidfile_acquire(client_config.pidfile); /* hold lock during fork. */
+                                                       if (daemon(0, 0) == -1) {
+                                                               perror("fork");
+                                                               exit_client(1);
+                                                       }
+                                                       client_config.foreground = 1; /* Do not fork again. */
+                                                       pidfile_write_release(pid_fd2);
+                                               }
+                                       }
                                }
                                else if (*message == DHCPNAK) {
                                        /* return to init state */