gethostbyname in GoAhead

Jake Janovetz janovetz at tempest.ece.uiuc.edu
Wed May 24 19:00:13 UTC 2000


This is a neat way of doing things, but it may actually be easier
to tar up your root filesystem, then 'untar' it to the RTEMS 
filesystem.  You can probably attach it to your binary, but I 
have a separate segment of flash devoted to the 'tar'.  (I keep
my /public_html directory in the tar, as well)

    Cheers,
    Jake


On Thu, May 25, 2000 at 12:12:21AM +1000, Chris Johns wrote:
> 
> (Here again as I had the old list address :-()
> 
> gerke.kok at ascom.nl wrote:
> > 
> > I saw your comments on the mailing list and would like to see your C-code
> > for this. I can't get my http server to run either.
> > Thanks.
> > wkr,
> > Gerke
> > PS Perhaps you could mail this to the list?
> > 
> 
> Happy to mail the list as the file is small.
> 
> The `rtems_create_root_fs' can be made after the stack is initialised.
> 
> I have a structure passed from the boot ROM to the RTEMS initialisation
> code with the results of a bootp request. Here it is :
> 
> /*
>  * The configuration of the target.
>  */
> 
> #define BOOT_CFG_MAX_LABEL (128)
> 
> typedef struct boot_configuration
> {
>   unsigned long rom_base;
>   unsigned long rom_size;
>   unsigned long ram_base;
>   unsigned long ram_size;
> 
>   void          *printk;
>   void          *sync_output;
> 
>   unsigned char client_mac[6];
>   unsigned long client_ip;
>   unsigned long client_nm;
>   const char    client_name[BOOT_CFG_MAX_LABEL];
> 
>   unsigned long gateway_ip;
> 
>   unsigned long server_ip;
>   const char    server_name[BOOT_CFG_MAX_LABEL];
>   const char    domain_name[BOOT_CFG_MAX_LABEL];
>   unsigned long log_server;
>   unsigned long dns_server;
>   
>   const char    boot_file_name[BOOT_CFG_MAX_LABEL];
>   
> } boot_configuration;
> 
> 
> -- 
>  Chris Johns, mailto:cjohns at cybertec.com.au mailto:ccj at acm.org
> /*
>   ------------------------------------------------------------------------
>   $Id: rootfs.c,v 1.1 2000/03/27 14:19:03 cjohns Exp $
>   ------------------------------------------------------------------------
>   
>   Copyright (C) Objective Design Systems Ltd Pty 1992-1999
>   All rights reserved (R) Objective Design Systems Ltd Pty 1992-1999
> 
>   Refer to the file LICENSE for detailed terms of usage and warranty.
>   The LICENSE file must be provided with the file.
> 
>   This software with is provided ``as is'' and with NO WARRANTY.
>   
>   ------------------------------------------------------------------------
> 
>   Target initialisation.
>   
>  */
> 
> #include <errno.h>
> #include <stdio.h>
> #include <string.h>
> #include <sys/stat.h>
> #include <sys/types.h>
> #include <fcntl.h>
> #include <unistd.h>
> #include <sys/socket.h>
> #include <netinet/in.h>
> #include <arpa/inet.h>
>  
> #include <boot/configuration.h>
> 
> /*
>  * Table of directorys to make.
>  */
> 
> static const char *directories[2] =
> {
>   "/etc",
>   0
> };
> 
> /*
>  * /etc/host.conf controls the resovler.
>  */
> 
> static const char *etc_host_conf[] =
> {
>   "/etc/host.conf",
>   "hosts,bind\n",
>   0
> };
> 
> /*
>  * /etc/hosts is a list of hosts.
>  */
> 
> static const char *etc_hosts[] =
> {
>   "/etc/hosts",
>   "127.0.0.1  localhost.localdomain  localhost\n",
>   0
> };
> 
> /*
>  * Create enough files to support the networking stack.
>  */
> 
> static int
> make_dirs (const char **dir_table)
> {
>   /*
>    * Create the directory.
>    */
> 
>   while (*dir_table)
>   {
>     if (mkdir (*dir_table, 0755) < 0)
>     {
>       printf ("root fs, cannot make `%s' : %s\n", *dir_table, strerror (errno));
>       return -1;
>     }
>     dir_table++;
>   }
>   return 0;
> }
> 
> /*
>  * Create enough files to support the networking stack.
>  */
> 
> static int
> open_and_write_file (const char **file_table)
> {
>   int fd;
>   
>   /*
>    * Create the file then write the preset data for the
>    * file.
>    */
> 
>   if ((fd = open (*file_table, O_CREAT | O_WRONLY)) < 0)
>   {
>     printf ("root fs, cannot open `%s' : %s\n", *file_table, strerror (errno));
>     return -1;
>   }
> 
>   file_table++;
> 
>   while (*file_table)
>   {
>     if (write (fd, *file_table, strlen (*file_table)) < 0)
>     {
>       close (fd);
>       printf ("root fs, cannot open `%s' : %s\n", *file_table, strerror (errno));
>       return -1;
>     }
>     file_table++;
>   }
>   return fd;
> }
> 
> /*
>  * Write file.
>  */
> 
> static int
> write_file (int fd, const char *buf, const char *fname)
> {
>   if (write (fd, buf, strlen (buf)) < 0)
>   {
>     close (fd);
>     printf ("root fs, cannot write to `%s' : %s\n", fname, strerror (errno));
>     return -1;
>   }
>   return 0;
> }
> 
> /*
>  * Write hosts record.
>  */
> 
> static int
> write_host_rec (int fd, unsigned long cip, const char *cname, const char *dname)
> {
>   char           buf[128];
>   struct in_addr ip;
> 
>   ip.s_addr = cip;
>   
>   if (cname)
>   {
>     if (strlen (cname))
>     {
>       sprintf (buf, "%s  %s", inet_ntoa (ip), cname);
>       
>       if (write_file (fd, buf, "/etc/hosts") < 0)
>         return -1;
>     
>       if (strlen (dname))
>       {
>         sprintf (buf, "  %s.%s",  cname, dname);
> 
>         if (write_file (fd, buf, "/etc/hosts") < 0)
>           return -1;
>       }
> 
>       strcpy (buf, "\n");
>     
>       if (write_file (fd, buf, "/etc/hosts") < 0)
>         return -1;
>     }
>   }
>   return 0;
> }
> 
> /*
>  * Create a root file system.
>  */
> 
> int
> rtems_create_root_fs (boot_configuration *bcfg)
> {
>   int  fd;
>   
>   /*
>    * Create the directories.
>    */
> 
>   if (make_dirs (directories) < 0)
>     return -1;
> 
>   /*
>    * Create a `/etc/host.conf' file.
>    */
> 
>   if ((fd = open_and_write_file (etc_host_conf)) < 0)
>     return -1;
>   close (fd);
> 
>   /*
>    * Create a `/etc/hosts' file.
>    */
> 
>   if ((fd = open_and_write_file (etc_hosts)) < 0)
>     return -1;
> 
>   if (write_host_rec (fd, bcfg->client_ip,
>                       bcfg->client_name, bcfg->domain_name) < 0)
>     return -1;
>     
>   if (write_host_rec (fd, bcfg->server_ip,
>                       bcfg->server_name, bcfg->domain_name) < 0)
>     return -1;
>     
>   close (fd);
> 
>   return 0;
> }
> 


-- 
   janovetz at uiuc.edu    | How can it be that mathematics, being after all a 
 University of Illinois | product of human thought independent of experience,
                        | is so admirably adapted to the objects of reality?
        PP-ASEL         |                                  - Albert Einstein

Disclaimer: The policies of this University certainly do not reflect my
            own opinions, objectives, or agenda.




More information about the users mailing list