gethostbyname in GoAhead

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


Oops.  I just came into a whole slew of emails and started reading
them backwards.  Big mistake...  This was already addressed.

   Cheers,
   Jake



On Wed, May 24, 2000 at 02:00:13PM -0500, Jake Janovetz wrote:
> 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.

-- 
   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