Changeset 847375f in rtems


Ignore:
Timestamp:
Nov 19, 1998, 5:35:49 PM (21 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, master
Children:
2e26bbd
Parents:
df4eb76e
Message:

Patch from Eric Norum <eric@…>:

1) Socket timeout field changed from short' to long'. This makes longer

timeouts possible. With a 1 kHz system clock the old system allowed
timeouts only up to a little over 30 seconds! This change is a
slightly cleaned-up version of the patch proposed by Ian Lance Taylor.

2) Major changes to BOOTP/DHCP reply handling. Now supports much of

RFC2132. These changes were done at the request of, and with the
assistance of, Erik Ivanenko.

If you're making changes, you might want to change the network
supplement Essentially just do a global search and replace of BOOTP
with BOOTP/DHCP.

Files:
29 edited

Legend:

Unmodified
Added
Removed
  • c/src/exec/libnetworking/kern/uipc_socket.c

    rdf4eb76e r847375f  
    5050#include <sys/signalvar.h>
    5151#include <sys/sysctl.h>
     52#include <limits.h>
    5253
    5354static int somaxconn = SOMAXCONN;
     
    949950                    {
    950951                        struct timeval *tv;
    951                         short val;
     952                        unsigned long val;
    952953
    953954                        if (m == NULL || m->m_len < sizeof (*tv)) {
     
    956957                        }
    957958                        tv = mtod(m, struct timeval *);
    958                         if (tv->tv_sec > SHRT_MAX / hz - hz) {
     959                        if (tv->tv_sec >= (ULONG_MAX - hz) / hz) {
    959960                                error = EDOM;
    960961                                goto bad;
     
    10661067                case SO_RCVTIMEO:
    10671068                    {
    1068                         int val = (optname == SO_SNDTIMEO ?
     1069                        unsigned long val = (optname == SO_SNDTIMEO ?
    10691070                             so->so_snd.sb_timeo : so->so_rcv.sb_timeo);
    10701071
  • c/src/exec/libnetworking/nfs/bootp_subr.c

    rdf4eb76e r847375f  
    683683}
    684684
     685static int dhcpOptionOverload = 0;
     686static char dhcp_gotgw = 0;
     687static char dhcp_gotnetmask = 0;
     688static char dhcp_gotserver = 0;
     689static char dhcp_gotlogserver = 0;
     690static struct sockaddr_in dhcp_netmask;
     691static struct sockaddr_in dhcp_gw;
     692
     693static void
     694processOptions (unsigned char *optbuf, int optbufSize)
     695{
     696  int j = 0;
     697  int len;
     698  int code, ncode;
     699  char *p;
     700
     701  ncode = optbuf[0];
     702  while (j < optbufSize) {
     703    code = optbuf[j] = ncode;
     704    if (code == 255)
     705      return;
     706    if (code == 0) {
     707      j++;
     708      continue;
     709    }
     710    len = optbuf[j+1];
     711    j += 2;
     712    if ((len + j) >= optbufSize) {
     713      printf ("Truncated field for code %d", code);
     714      return;
     715    }
     716    ncode = optbuf[j+len];
     717    optbuf[j+len] = '\0';
     718    p = &optbuf[j];
     719    j += len;
     720
     721    /*
     722     * Process the option
     723     */
     724    switch (code) {
     725    case 1:
     726      /* Subnet mask */
     727      if (len!=4)
     728        panic("bootpc: subnet mask len is %d",len);
     729      bcopy (p, &dhcp_netmask.sin_addr, 4);
     730      dhcp_gotnetmask = 1;
     731      break;
     732
     733    case 2:    /* Time offset, unused */
     734      break;
     735
     736    case 3:
     737      /* Routers */
     738      if (len % 4)
     739        panic ("bootpc: Router Len is %d", len);
     740      if (len > 0) {
     741        bcopy(p, &dhcp_gw.sin_addr, 4);
     742        dhcp_gotgw = 1;
     743      }
     744      break;
     745
     746    case 6:
     747      /* Domain Name servers */
     748      if (len % 4)
     749        panic ("bootpc: DNS Len is %d", len);
     750      {
     751      int dlen = 0;
     752      while ((dlen < len) &&
     753             (rtems_bsdnet_nameserver_count < sizeof rtems_bsdnet_config.name_server /
     754        sizeof rtems_bsdnet_config.name_server[0])) {
     755        bcopy (p+dlen,
     756        &rtems_bsdnet_nameserver[rtems_bsdnet_nameserver_count],
     757        4);
     758        printip("Domain Name Server",
     759          rtems_bsdnet_nameserver[rtems_bsdnet_nameserver_count]);
     760        rtems_bsdnet_nameserver_count++;
     761        dlen += 4;
     762      }
     763      }
     764      break;
     765
     766    case 12:
     767      /* Host name */
     768      if (len>=MAXHOSTNAMELEN)
     769        panic ("bootpc: hostname >=%d bytes", MAXHOSTNAMELEN);
     770      if (sethostname (p, len) < 0)
     771        panic("Can't set host name");
     772      printf("Hostname is %s\n", p);
     773      break;
     774
     775    case 7:
     776      /* Log servers */
     777      if (len % 4)
     778        panic ("bootpc: Log server Len is %d", len);
     779      if (len > 0) {
     780        bcopy(p, &rtems_bsdnet_log_host_address, 4);
     781        dhcp_gotlogserver = 1;
     782      }
     783      break;
     784
     785    case 15:
     786      /* Domain name */
     787      if (p[0]) {
     788        rtems_bsdnet_domain_name = strdup (p);
     789        printf("Domain name is %s\n", rtems_bsdnet_domain_name);
     790      }
     791      break;
     792
     793    case 16:  /* Swap server IP address. unused */
     794      break;
     795
     796    case 52:
     797      /* DHCP option override */
     798      if (len != 1)
     799        panic ("bootpc: DHCP option overload len is %d", len);
     800      dhcpOptionOverload = p[0];
     801      break;
     802
     803    case 128: /* Site-specific option for DHCP servers that
     804               *   a) don't supply tag 54
     805               * and
     806               *   b) don't supply the server address in siaddr
     807               * For example, on Solaris 2.6 in.dhcpd, include in the dhcptab:
     808               *    Bootsrv s Site,128,IP,1,1
     809               * and use that symbol in the macro that defines the client:
     810               *    Bootsrv=<tftp-server-ip-address>
     811               */
     812    case 54:
     813      /* DHCP server */
     814      if (len != 4)
     815        panic ("bootpc: DHCP server len is %d", len);
     816      bcopy(p, &rtems_bsdnet_bootp_server_address, 4);
     817      dhcp_gotserver = 1;
     818      break;
     819
     820    case 66:
     821      /* DHCP server name option */
     822      if (p[0])
     823        rtems_bsdnet_bootp_server_name = strdup (p);
     824      break;
     825
     826    case 67:
     827      /* DHCP bootfile option */
     828      if (p[0])
     829        rtems_bsdnet_bootp_boot_file_name = strdup (p);
     830      break;
     831
     832    default:
     833      printf ("Ignoring BOOTP/DHCP option code %d\n", code);
     834      break;
     835    }
     836  }
     837}
     838
     839#define EALEN 6
     840
    685841void
    686842bootpc_init(void)
     
    693849  struct ifnet *ifp;
    694850  struct socket *so;
     851  int j;
    695852  int error;
    696   int code,ncode,len;
    697   int j;
    698   char *p;
    699   unsigned int ip;
    700 
    701853  struct sockaddr_in myaddr;
    702   struct sockaddr_in netmask;
    703   struct sockaddr_in gw;
    704   int gotgw=0;
    705   int gotnetmask=0;
    706 #if !defined(__rtems__)
    707   int gotrootpath=0;
    708   int gotswappath=0;
    709 #endif
    710   char lookup_path[24];
    711 
    712 #define EALEN 6
    713 #if !defined(__rtems__)
    714   unsigned char ea[EALEN];
    715 #endif
    716854  struct ifaddr *ifa;
    717855  struct sockaddr_dl *sdl = NULL;
     
    724862  if (nfs_diskless_valid)
    725863    return;
    726 
    727   /*
    728    * Bump time if 0.
    729   if (!time.tv_sec)
    730     time.tv_sec++;
    731    */
    732864
    733865  /*
     
    804936    panic("BOOTP call failed -- error %d", error);
    805937 
     938  /*
     939   * Initialize network address structures
     940   */
    806941  bzero(&myaddr,sizeof(myaddr));
    807   bzero(&netmask,sizeof(netmask));
    808   bzero(&gw,sizeof(gw));
    809 
     942  bzero(&dhcp_netmask,sizeof(dhcp_netmask));
     943  bzero(&dhcp_gw,sizeof(dhcp_gw));
    810944  myaddr.sin_len = sizeof(myaddr);
    811945  myaddr.sin_family = AF_INET;
    812 
    813   netmask.sin_len = sizeof(netmask);
    814   netmask.sin_family = AF_INET;
    815 
    816   gw.sin_len = sizeof(gw);
    817   gw.sin_family= AF_INET;
    818 
    819   rtems_bsdnet_bootp_server_address = reply.siaddr;
    820   rtems_bsdnet_log_host_address = reply.siaddr;
    821 
     946  dhcp_netmask.sin_len = sizeof(dhcp_netmask);
     947  dhcp_netmask.sin_family = AF_INET;
     948  dhcp_gw.sin_len = sizeof(dhcp_gw);
     949  dhcp_gw.sin_family= AF_INET;
     950
     951  /*
     952   * Set our address
     953   */
    822954  myaddr.sin_addr = reply.yiaddr;
    823 
    824   ip = ntohl(myaddr.sin_addr.s_addr);
    825   sprintf(lookup_path,"swap.%d.%d.%d.%d",
    826           ip >> 24, (ip >> 16) & 255 ,(ip >> 8) & 255 ,ip & 255 );
    827 
    828955  printip("My ip address",myaddr.sin_addr);
    829956
    830   printip("Server ip address",reply.siaddr);
    831 
    832   gw.sin_addr = reply.giaddr;
    833   printip("Gateway ip address",reply.giaddr);
    834 
    835   if (reply.sname[0])
    836     printf("Server name is %s\n",reply.sname);
    837   if (reply.file[0])
    838     printf("boot file is %s\n",reply.file);
    839   rtems_bsdnet_bootp_boot_file_name = strdup (reply.file);
     957  /*
     958   * Process BOOTP/DHCP options
     959   */
    840960  if (reply.vend[0]==99 && reply.vend[1]==130 &&
    841961      reply.vend[2]==83 && reply.vend[3]==99) {
    842     j=4;
    843     ncode = reply.vend[j];
    844     while (j<sizeof(reply.vend)) {
    845       code = reply.vend[j] = ncode;
    846       if (code==255)
    847         break;
    848       if (code==0) {
    849         j++;
    850         continue;
    851       }
    852       len = reply.vend[j+1];
    853       j+=2;
    854       if (len+j>=sizeof(reply.vend)) {
    855         printf("Truncated field");
    856         break;
    857       }
    858       ncode = reply.vend[j+len];
    859       reply.vend[j+len]='\0';
    860       p = &reply.vend[j];
    861       switch (code) {
    862       case 1:
    863         if (len!=4)
    864           panic("bootpc: subnet mask len is %d",len);
    865         bcopy(&reply.vend[j],&netmask.sin_addr,4);
    866         gotnetmask=1;
    867         printip("Subnet mask",netmask.sin_addr);
    868         break;
    869       case 6:
    870         /* Domain Name servers */
    871         if (len % 4)
    872           panic("bootpc: DNS Len is %d",len);
    873         {
    874         int dlen = 0;
    875         while ((dlen < len) &&
    876           (rtems_bsdnet_nameserver_count < sizeof rtems_bsdnet_config.name_server /
    877                                   sizeof rtems_bsdnet_config.name_server[0])) {
    878             bcopy(&reply.vend[j+dlen],
    879                         &rtems_bsdnet_nameserver[rtems_bsdnet_nameserver_count],
    880                         4);
    881             printip("Domain Name Server",
    882                         rtems_bsdnet_nameserver[rtems_bsdnet_nameserver_count]);
    883             rtems_bsdnet_nameserver_count++;
    884             dlen += 4;
    885           }
    886         }
    887         break;
    888       case 16:  /* Swap server IP address. unused */
    889       case 2:
    890         /* Time offset */
    891         break;
    892       case 3:
    893         /* Routers */
    894         if (len % 4)
    895           panic("bootpc: Router Len is %d",len);
    896         if (len > 0) {
    897           bcopy(&reply.vend[j],&gw.sin_addr,4);
    898           printip("Router",gw.sin_addr);
    899           gotgw=1;
    900         }
    901         break;
    902       case 7:
    903         /* Log servers */
    904         if (len % 4)
    905           panic("bootpc: Log server len is %d",len);
    906         if (len > 0) {
    907           bcopy(&reply.vend[j],&rtems_bsdnet_log_host_address,4);
    908           printip("Log server",rtems_bsdnet_log_host_address);
    909         }
    910         break;
    911       case 12:
    912         if (len>=MAXHOSTNAMELEN)
    913           panic("bootpc: hostname  >=%d bytes",MAXHOSTNAMELEN);
    914         if (sethostname (&reply.vend[j], len) < 0)
    915           panic("Can't set host name");
    916         printf("Hostname is %.*s\n",len,&reply.vend[j]);
    917         break;
    918       case 15:
    919         /* Domain name */
    920         rtems_bsdnet_domain_name = strdup (&reply.vend[j]);
    921         if (rtems_bsdnet_domain_name)
    922                 printf("Domain name is %s\n", rtems_bsdnet_domain_name);
    923         break;
    924       default:
    925         printf("Ignoring field type %d\n",code);
    926       }
    927       j+=len;
    928     }
    929   }
    930 
    931   if (!gotnetmask) {
     962    processOptions (&reply.vend[4], sizeof(reply.vend) - 4);
     963  }
     964  if (dhcpOptionOverload & 1) {
     965    processOptions (reply.file, sizeof reply.file);
     966  }
     967  else {
     968    if (reply.file[0])
     969      rtems_bsdnet_bootp_boot_file_name = strdup (reply.file);
     970  }
     971  if (dhcpOptionOverload & 2) {
     972    processOptions (reply.sname, sizeof reply.sname);
     973  }
     974  else {
     975    if (reply.sname[0])
     976      rtems_bsdnet_bootp_server_name = strdup (reply.sname);
     977  }
     978  if (rtems_bsdnet_bootp_server_name)
     979    printf ("Server name is %s\n", rtems_bsdnet_bootp_server_name);
     980  if (rtems_bsdnet_bootp_boot_file_name)
     981    printf ("Boot file is %s\n", rtems_bsdnet_bootp_boot_file_name);
     982
     983  /*
     984   * Use defaults if values were not supplied by BOOTP/DHCP options
     985   */
     986  if (!dhcp_gotnetmask) {
    932987    if (IN_CLASSA(ntohl(myaddr.sin_addr.s_addr)))
    933       netmask.sin_addr.s_addr = htonl(IN_CLASSA_NET);
     988      dhcp_netmask.sin_addr.s_addr = htonl(IN_CLASSA_NET);
    934989    else if (IN_CLASSB(ntohl(myaddr.sin_addr.s_addr)))
    935       netmask.sin_addr.s_addr = htonl(IN_CLASSB_NET);
     990      dhcp_netmask.sin_addr.s_addr = htonl(IN_CLASSB_NET);
    936991    else
    937       netmask.sin_addr.s_addr = htonl(IN_CLASSC_NET);
    938   }
    939   if (!gotgw) {
    940     /* Use proxyarp */
    941     gw.sin_addr.s_addr = myaddr.sin_addr.s_addr;
    942   }
    943  
    944 #if 0
    945   bootpboot_p_iflist();
    946   bootpboot_p_rtlist();
    947 #endif
     992      dhcp_netmask.sin_addr.s_addr = htonl(IN_CLASSC_NET);
     993  }
     994  printip ("Subnet mask", dhcp_netmask.sin_addr);
     995  if (!dhcp_gotserver)
     996   rtems_bsdnet_bootp_server_address = reply.siaddr;
     997  printip ("Server ip address" ,rtems_bsdnet_bootp_server_address);
     998  if (!dhcp_gotgw)
     999    dhcp_gw.sin_addr = reply.giaddr;
     1000  printip ("Gateway ip address", dhcp_gw.sin_addr);
     1001  if (!dhcp_gotlogserver)
     1002    rtems_bsdnet_log_host_address = rtems_bsdnet_bootp_server_address;
     1003  printip ("Log server ip address", rtems_bsdnet_log_host_address);
     1004 
     1005  /*
     1006   * Configure the interface with the new settings
     1007   */
    9481008  error = bootpc_adjust_interface(&ireq,so,
    949                                   &myaddr,&netmask,&gw,procp);
    950  
     1009                                  &myaddr,&dhcp_netmask,&dhcp_gw,procp);
    9511010  soclose(so);
    952 
    953 #if 0
    954   bootpboot_p_iflist();
    955   bootpboot_p_rtlist();
    956 #endif
    957 
    958 
    959 #if 0
    960     myaddr.sin_addr.s_addr | ~ netmask.sin_addr.s_addr;
    961 #endif
    962 
    963 #if 0
    964   bootpboot_p_iflist();
    965   bootpboot_p_rtlist();
    966 #endif
    967   return;
    968 }
     1011}
  • c/src/exec/libnetworking/rtems/rtems_bsdnet.h

    rdf4eb76e r847375f  
    1212 */
    1313extern struct in_addr rtems_bsdnet_bootp_server_address;
     14extern char *rtems_bsdnet_bootp_server_name;
    1415extern char *rtems_bsdnet_bootp_boot_file_name;
    1516
  • c/src/exec/libnetworking/rtems/rtems_glue.c

    rdf4eb76e r847375f  
    8686struct in_addr rtems_bsdnet_bootp_server_address;
    8787char *rtems_bsdnet_bootp_boot_file_name;
     88char *rtems_bsdnet_bootp_server_name;
    8889char *rtems_bsdnet_domain_name;
    8990struct in_addr rtems_bsdnet_nameserver[sizeof rtems_bsdnet_config.name_server /
  • c/src/exec/libnetworking/sys/socketvar.h

    rdf4eb76e r847375f  
    7373                                           connections */
    7474        short   so_qlimit;              /* max number queued connections */
    75         short   so_timeo;               /* connection timeout */
     75        u_long  so_timeo;               /* connection timeout */
    7676        u_short so_error;               /* error affecting connection */
    7777        pid_t   so_pgid;                /* pgid for signals */
     
    8989                struct  selinfo sb_sel; /* process selecting read/write */
    9090                short   sb_flags;       /* flags, see below */
    91                 short   sb_timeo;       /* timeout for read/write */
     91                u_long  sb_timeo;       /* timeout for read/write */
    9292        } so_rcv, so_snd;
    9393#define SB_MAX          (256*1024)      /* default for max chars in sockbuf */
  • c/src/exec/posix/src/psignal.c

    rdf4eb76e r847375f  
    208208  _ISR_Disable( level );
    209209    _POSIX_signals_Pending &= ~mask;
    210     if ( !_POSIX_signals_Pending )
     210    if ( !_POSIX_signals_Pending && _Thread_Do_post_task_switch_extension )
    211211      _Thread_Do_post_task_switch_extension--;
    212212  _ISR_Enable( level );
  • c/src/exec/score/headers/thread.h

    rdf4eb76e r847375f  
    178178
    179179  boolean                               is_preemptible;
     180  void                                 *rtems_ada_self;
    180181  unsigned32                            cpu_time_budget;
    181182  Thread_CPU_budget_algorithms          budget_algorithm;
     
    192193};
    193194
     195/*
     196 *  Self for the GNU Ada Run-Time
     197 */
     198
     199SCORE_EXTERN void *rtems_ada_self;
     200 
    194201/*
    195202 *  The following defines the information control block used to
  • c/src/exec/score/include/rtems/score/thread.h

    rdf4eb76e r847375f  
    178178
    179179  boolean                               is_preemptible;
     180  void                                 *rtems_ada_self;
    180181  unsigned32                            cpu_time_budget;
    181182  Thread_CPU_budget_algorithms          budget_algorithm;
     
    192193};
    193194
     195/*
     196 *  Self for the GNU Ada Run-Time
     197 */
     198
     199SCORE_EXTERN void *rtems_ada_self;
     200 
    194201/*
    195202 *  The following defines the information control block used to
  • c/src/exec/score/src/thread.c

    rdf4eb76e r847375f  
    272272    _Context_Switch_necessary = FALSE;
    273273    _Thread_Executing = heir;
     274    executing->rtems_ada_self = rtems_ada_self;
     275    rtems_ada_self = heir->rtems_ada_self;
    274276    _ISR_Enable( level );
    275277
     
    437439  void                *fp_area;
    438440  void                *extensions_area;
     441
     442  /*
     443   *  Initialize the Ada self pointer
     444   */
     445
     446  the_thread->rtems_ada_self = NULL;
    439447
    440448  /*
  • c/src/lib/libbsp/powerpc/psim/startup/device-tree

    rdf4eb76e r847375f  
    11#/openprom/init/register/pc 0
    22#/openprom/options/smp 2
    3 /openprom/options/oea-memory-size 4194304
     3#/openprom/options/oea-memory-size 4194304
     4/openprom/options/oea-memory-size 8388608
  • c/src/lib/libbsp/powerpc/psim/startup/linkcmds

    rdf4eb76e r847375f  
    2020   __DYNAMIC = 0;    */
    2121PROVIDE (PSIM_INSTRUCTIONS_PER_MICROSECOND = 100);
     22PROVIDE (CPU_PPC_CLICKS_PER_MS = 16667);
    2223MEMORY
    2324  {
    24         RAM : ORIGIN = 0, LENGTH = 4M
     25        RAM : ORIGIN = 0, LENGTH = 8M
    2526        EPROM : ORIGIN = 0xFFF00000, LENGTH = 0x20000
    2627  }
     
    6869  .rodata         : { *(.rodata) *(.gnu.linkonce.r*) } >RAM
    6970  .rodata1        : { *(.rodata1)       } >RAM
    70   _etext = .;
     71  PROVIDE (_etext = .);
    7172  PROVIDE (etext = .);
    7273  PROVIDE (__SDATA2_START__ = .);
     
    140141  PROVIDE (edata = .);
    141142
    142   PROVIDE (RAM_END = 0x3f0000);
     143  PROVIDE (RAM_END = 0x7f0000);
    143144  .sbss      :
    144145  {
  • c/src/lib/libnetworking/kern/uipc_socket.c

    rdf4eb76e r847375f  
    5050#include <sys/signalvar.h>
    5151#include <sys/sysctl.h>
     52#include <limits.h>
    5253
    5354static int somaxconn = SOMAXCONN;
     
    949950                    {
    950951                        struct timeval *tv;
    951                         short val;
     952                        unsigned long val;
    952953
    953954                        if (m == NULL || m->m_len < sizeof (*tv)) {
     
    956957                        }
    957958                        tv = mtod(m, struct timeval *);
    958                         if (tv->tv_sec > SHRT_MAX / hz - hz) {
     959                        if (tv->tv_sec >= (ULONG_MAX - hz) / hz) {
    959960                                error = EDOM;
    960961                                goto bad;
     
    10661067                case SO_RCVTIMEO:
    10671068                    {
    1068                         int val = (optname == SO_SNDTIMEO ?
     1069                        unsigned long val = (optname == SO_SNDTIMEO ?
    10691070                             so->so_snd.sb_timeo : so->so_rcv.sb_timeo);
    10701071
  • c/src/lib/libnetworking/nfs/bootp_subr.c

    rdf4eb76e r847375f  
    683683}
    684684
     685static int dhcpOptionOverload = 0;
     686static char dhcp_gotgw = 0;
     687static char dhcp_gotnetmask = 0;
     688static char dhcp_gotserver = 0;
     689static char dhcp_gotlogserver = 0;
     690static struct sockaddr_in dhcp_netmask;
     691static struct sockaddr_in dhcp_gw;
     692
     693static void
     694processOptions (unsigned char *optbuf, int optbufSize)
     695{
     696  int j = 0;
     697  int len;
     698  int code, ncode;
     699  char *p;
     700
     701  ncode = optbuf[0];
     702  while (j < optbufSize) {
     703    code = optbuf[j] = ncode;
     704    if (code == 255)
     705      return;
     706    if (code == 0) {
     707      j++;
     708      continue;
     709    }
     710    len = optbuf[j+1];
     711    j += 2;
     712    if ((len + j) >= optbufSize) {
     713      printf ("Truncated field for code %d", code);
     714      return;
     715    }
     716    ncode = optbuf[j+len];
     717    optbuf[j+len] = '\0';
     718    p = &optbuf[j];
     719    j += len;
     720
     721    /*
     722     * Process the option
     723     */
     724    switch (code) {
     725    case 1:
     726      /* Subnet mask */
     727      if (len!=4)
     728        panic("bootpc: subnet mask len is %d",len);
     729      bcopy (p, &dhcp_netmask.sin_addr, 4);
     730      dhcp_gotnetmask = 1;
     731      break;
     732
     733    case 2:    /* Time offset, unused */
     734      break;
     735
     736    case 3:
     737      /* Routers */
     738      if (len % 4)
     739        panic ("bootpc: Router Len is %d", len);
     740      if (len > 0) {
     741        bcopy(p, &dhcp_gw.sin_addr, 4);
     742        dhcp_gotgw = 1;
     743      }
     744      break;
     745
     746    case 6:
     747      /* Domain Name servers */
     748      if (len % 4)
     749        panic ("bootpc: DNS Len is %d", len);
     750      {
     751      int dlen = 0;
     752      while ((dlen < len) &&
     753             (rtems_bsdnet_nameserver_count < sizeof rtems_bsdnet_config.name_server /
     754        sizeof rtems_bsdnet_config.name_server[0])) {
     755        bcopy (p+dlen,
     756        &rtems_bsdnet_nameserver[rtems_bsdnet_nameserver_count],
     757        4);
     758        printip("Domain Name Server",
     759          rtems_bsdnet_nameserver[rtems_bsdnet_nameserver_count]);
     760        rtems_bsdnet_nameserver_count++;
     761        dlen += 4;
     762      }
     763      }
     764      break;
     765
     766    case 12:
     767      /* Host name */
     768      if (len>=MAXHOSTNAMELEN)
     769        panic ("bootpc: hostname >=%d bytes", MAXHOSTNAMELEN);
     770      if (sethostname (p, len) < 0)
     771        panic("Can't set host name");
     772      printf("Hostname is %s\n", p);
     773      break;
     774
     775    case 7:
     776      /* Log servers */
     777      if (len % 4)
     778        panic ("bootpc: Log server Len is %d", len);
     779      if (len > 0) {
     780        bcopy(p, &rtems_bsdnet_log_host_address, 4);
     781        dhcp_gotlogserver = 1;
     782      }
     783      break;
     784
     785    case 15:
     786      /* Domain name */
     787      if (p[0]) {
     788        rtems_bsdnet_domain_name = strdup (p);
     789        printf("Domain name is %s\n", rtems_bsdnet_domain_name);
     790      }
     791      break;
     792
     793    case 16:  /* Swap server IP address. unused */
     794      break;
     795
     796    case 52:
     797      /* DHCP option override */
     798      if (len != 1)
     799        panic ("bootpc: DHCP option overload len is %d", len);
     800      dhcpOptionOverload = p[0];
     801      break;
     802
     803    case 128: /* Site-specific option for DHCP servers that
     804               *   a) don't supply tag 54
     805               * and
     806               *   b) don't supply the server address in siaddr
     807               * For example, on Solaris 2.6 in.dhcpd, include in the dhcptab:
     808               *    Bootsrv s Site,128,IP,1,1
     809               * and use that symbol in the macro that defines the client:
     810               *    Bootsrv=<tftp-server-ip-address>
     811               */
     812    case 54:
     813      /* DHCP server */
     814      if (len != 4)
     815        panic ("bootpc: DHCP server len is %d", len);
     816      bcopy(p, &rtems_bsdnet_bootp_server_address, 4);
     817      dhcp_gotserver = 1;
     818      break;
     819
     820    case 66:
     821      /* DHCP server name option */
     822      if (p[0])
     823        rtems_bsdnet_bootp_server_name = strdup (p);
     824      break;
     825
     826    case 67:
     827      /* DHCP bootfile option */
     828      if (p[0])
     829        rtems_bsdnet_bootp_boot_file_name = strdup (p);
     830      break;
     831
     832    default:
     833      printf ("Ignoring BOOTP/DHCP option code %d\n", code);
     834      break;
     835    }
     836  }
     837}
     838
     839#define EALEN 6
     840
    685841void
    686842bootpc_init(void)
     
    693849  struct ifnet *ifp;
    694850  struct socket *so;
     851  int j;
    695852  int error;
    696   int code,ncode,len;
    697   int j;
    698   char *p;
    699   unsigned int ip;
    700 
    701853  struct sockaddr_in myaddr;
    702   struct sockaddr_in netmask;
    703   struct sockaddr_in gw;
    704   int gotgw=0;
    705   int gotnetmask=0;
    706 #if !defined(__rtems__)
    707   int gotrootpath=0;
    708   int gotswappath=0;
    709 #endif
    710   char lookup_path[24];
    711 
    712 #define EALEN 6
    713 #if !defined(__rtems__)
    714   unsigned char ea[EALEN];
    715 #endif
    716854  struct ifaddr *ifa;
    717855  struct sockaddr_dl *sdl = NULL;
     
    724862  if (nfs_diskless_valid)
    725863    return;
    726 
    727   /*
    728    * Bump time if 0.
    729   if (!time.tv_sec)
    730     time.tv_sec++;
    731    */
    732864
    733865  /*
     
    804936    panic("BOOTP call failed -- error %d", error);
    805937 
     938  /*
     939   * Initialize network address structures
     940   */
    806941  bzero(&myaddr,sizeof(myaddr));
    807   bzero(&netmask,sizeof(netmask));
    808   bzero(&gw,sizeof(gw));
    809 
     942  bzero(&dhcp_netmask,sizeof(dhcp_netmask));
     943  bzero(&dhcp_gw,sizeof(dhcp_gw));
    810944  myaddr.sin_len = sizeof(myaddr);
    811945  myaddr.sin_family = AF_INET;
    812 
    813   netmask.sin_len = sizeof(netmask);
    814   netmask.sin_family = AF_INET;
    815 
    816   gw.sin_len = sizeof(gw);
    817   gw.sin_family= AF_INET;
    818 
    819   rtems_bsdnet_bootp_server_address = reply.siaddr;
    820   rtems_bsdnet_log_host_address = reply.siaddr;
    821 
     946  dhcp_netmask.sin_len = sizeof(dhcp_netmask);
     947  dhcp_netmask.sin_family = AF_INET;
     948  dhcp_gw.sin_len = sizeof(dhcp_gw);
     949  dhcp_gw.sin_family= AF_INET;
     950
     951  /*
     952   * Set our address
     953   */
    822954  myaddr.sin_addr = reply.yiaddr;
    823 
    824   ip = ntohl(myaddr.sin_addr.s_addr);
    825   sprintf(lookup_path,"swap.%d.%d.%d.%d",
    826           ip >> 24, (ip >> 16) & 255 ,(ip >> 8) & 255 ,ip & 255 );
    827 
    828955  printip("My ip address",myaddr.sin_addr);
    829956
    830   printip("Server ip address",reply.siaddr);
    831 
    832   gw.sin_addr = reply.giaddr;
    833   printip("Gateway ip address",reply.giaddr);
    834 
    835   if (reply.sname[0])
    836     printf("Server name is %s\n",reply.sname);
    837   if (reply.file[0])
    838     printf("boot file is %s\n",reply.file);
    839   rtems_bsdnet_bootp_boot_file_name = strdup (reply.file);
     957  /*
     958   * Process BOOTP/DHCP options
     959   */
    840960  if (reply.vend[0]==99 && reply.vend[1]==130 &&
    841961      reply.vend[2]==83 && reply.vend[3]==99) {
    842     j=4;
    843     ncode = reply.vend[j];
    844     while (j<sizeof(reply.vend)) {
    845       code = reply.vend[j] = ncode;
    846       if (code==255)
    847         break;
    848       if (code==0) {
    849         j++;
    850         continue;
    851       }
    852       len = reply.vend[j+1];
    853       j+=2;
    854       if (len+j>=sizeof(reply.vend)) {
    855         printf("Truncated field");
    856         break;
    857       }
    858       ncode = reply.vend[j+len];
    859       reply.vend[j+len]='\0';
    860       p = &reply.vend[j];
    861       switch (code) {
    862       case 1:
    863         if (len!=4)
    864           panic("bootpc: subnet mask len is %d",len);
    865         bcopy(&reply.vend[j],&netmask.sin_addr,4);
    866         gotnetmask=1;
    867         printip("Subnet mask",netmask.sin_addr);
    868         break;
    869       case 6:
    870         /* Domain Name servers */
    871         if (len % 4)
    872           panic("bootpc: DNS Len is %d",len);
    873         {
    874         int dlen = 0;
    875         while ((dlen < len) &&
    876           (rtems_bsdnet_nameserver_count < sizeof rtems_bsdnet_config.name_server /
    877                                   sizeof rtems_bsdnet_config.name_server[0])) {
    878             bcopy(&reply.vend[j+dlen],
    879                         &rtems_bsdnet_nameserver[rtems_bsdnet_nameserver_count],
    880                         4);
    881             printip("Domain Name Server",
    882                         rtems_bsdnet_nameserver[rtems_bsdnet_nameserver_count]);
    883             rtems_bsdnet_nameserver_count++;
    884             dlen += 4;
    885           }
    886         }
    887         break;
    888       case 16:  /* Swap server IP address. unused */
    889       case 2:
    890         /* Time offset */
    891         break;
    892       case 3:
    893         /* Routers */
    894         if (len % 4)
    895           panic("bootpc: Router Len is %d",len);
    896         if (len > 0) {
    897           bcopy(&reply.vend[j],&gw.sin_addr,4);
    898           printip("Router",gw.sin_addr);
    899           gotgw=1;
    900         }
    901         break;
    902       case 7:
    903         /* Log servers */
    904         if (len % 4)
    905           panic("bootpc: Log server len is %d",len);
    906         if (len > 0) {
    907           bcopy(&reply.vend[j],&rtems_bsdnet_log_host_address,4);
    908           printip("Log server",rtems_bsdnet_log_host_address);
    909         }
    910         break;
    911       case 12:
    912         if (len>=MAXHOSTNAMELEN)
    913           panic("bootpc: hostname  >=%d bytes",MAXHOSTNAMELEN);
    914         if (sethostname (&reply.vend[j], len) < 0)
    915           panic("Can't set host name");
    916         printf("Hostname is %.*s\n",len,&reply.vend[j]);
    917         break;
    918       case 15:
    919         /* Domain name */
    920         rtems_bsdnet_domain_name = strdup (&reply.vend[j]);
    921         if (rtems_bsdnet_domain_name)
    922                 printf("Domain name is %s\n", rtems_bsdnet_domain_name);
    923         break;
    924       default:
    925         printf("Ignoring field type %d\n",code);
    926       }
    927       j+=len;
    928     }
    929   }
    930 
    931   if (!gotnetmask) {
     962    processOptions (&reply.vend[4], sizeof(reply.vend) - 4);
     963  }
     964  if (dhcpOptionOverload & 1) {
     965    processOptions (reply.file, sizeof reply.file);
     966  }
     967  else {
     968    if (reply.file[0])
     969      rtems_bsdnet_bootp_boot_file_name = strdup (reply.file);
     970  }
     971  if (dhcpOptionOverload & 2) {
     972    processOptions (reply.sname, sizeof reply.sname);
     973  }
     974  else {
     975    if (reply.sname[0])
     976      rtems_bsdnet_bootp_server_name = strdup (reply.sname);
     977  }
     978  if (rtems_bsdnet_bootp_server_name)
     979    printf ("Server name is %s\n", rtems_bsdnet_bootp_server_name);
     980  if (rtems_bsdnet_bootp_boot_file_name)
     981    printf ("Boot file is %s\n", rtems_bsdnet_bootp_boot_file_name);
     982
     983  /*
     984   * Use defaults if values were not supplied by BOOTP/DHCP options
     985   */
     986  if (!dhcp_gotnetmask) {
    932987    if (IN_CLASSA(ntohl(myaddr.sin_addr.s_addr)))
    933       netmask.sin_addr.s_addr = htonl(IN_CLASSA_NET);
     988      dhcp_netmask.sin_addr.s_addr = htonl(IN_CLASSA_NET);
    934989    else if (IN_CLASSB(ntohl(myaddr.sin_addr.s_addr)))
    935       netmask.sin_addr.s_addr = htonl(IN_CLASSB_NET);
     990      dhcp_netmask.sin_addr.s_addr = htonl(IN_CLASSB_NET);
    936991    else
    937       netmask.sin_addr.s_addr = htonl(IN_CLASSC_NET);
    938   }
    939   if (!gotgw) {
    940     /* Use proxyarp */
    941     gw.sin_addr.s_addr = myaddr.sin_addr.s_addr;
    942   }
    943  
    944 #if 0
    945   bootpboot_p_iflist();
    946   bootpboot_p_rtlist();
    947 #endif
     992      dhcp_netmask.sin_addr.s_addr = htonl(IN_CLASSC_NET);
     993  }
     994  printip ("Subnet mask", dhcp_netmask.sin_addr);
     995  if (!dhcp_gotserver)
     996   rtems_bsdnet_bootp_server_address = reply.siaddr;
     997  printip ("Server ip address" ,rtems_bsdnet_bootp_server_address);
     998  if (!dhcp_gotgw)
     999    dhcp_gw.sin_addr = reply.giaddr;
     1000  printip ("Gateway ip address", dhcp_gw.sin_addr);
     1001  if (!dhcp_gotlogserver)
     1002    rtems_bsdnet_log_host_address = rtems_bsdnet_bootp_server_address;
     1003  printip ("Log server ip address", rtems_bsdnet_log_host_address);
     1004 
     1005  /*
     1006   * Configure the interface with the new settings
     1007   */
    9481008  error = bootpc_adjust_interface(&ireq,so,
    949                                   &myaddr,&netmask,&gw,procp);
    950  
     1009                                  &myaddr,&dhcp_netmask,&dhcp_gw,procp);
    9511010  soclose(so);
    952 
    953 #if 0
    954   bootpboot_p_iflist();
    955   bootpboot_p_rtlist();
    956 #endif
    957 
    958 
    959 #if 0
    960     myaddr.sin_addr.s_addr | ~ netmask.sin_addr.s_addr;
    961 #endif
    962 
    963 #if 0
    964   bootpboot_p_iflist();
    965   bootpboot_p_rtlist();
    966 #endif
    967   return;
    968 }
     1011}
  • c/src/lib/libnetworking/rtems/rtems_bsdnet.h

    rdf4eb76e r847375f  
    1212 */
    1313extern struct in_addr rtems_bsdnet_bootp_server_address;
     14extern char *rtems_bsdnet_bootp_server_name;
    1415extern char *rtems_bsdnet_bootp_boot_file_name;
    1516
  • c/src/lib/libnetworking/rtems/rtems_glue.c

    rdf4eb76e r847375f  
    8686struct in_addr rtems_bsdnet_bootp_server_address;
    8787char *rtems_bsdnet_bootp_boot_file_name;
     88char *rtems_bsdnet_bootp_server_name;
    8889char *rtems_bsdnet_domain_name;
    8990struct in_addr rtems_bsdnet_nameserver[sizeof rtems_bsdnet_config.name_server /
  • c/src/lib/libnetworking/sys/socketvar.h

    rdf4eb76e r847375f  
    7373                                           connections */
    7474        short   so_qlimit;              /* max number queued connections */
    75         short   so_timeo;               /* connection timeout */
     75        u_long  so_timeo;               /* connection timeout */
    7676        u_short so_error;               /* error affecting connection */
    7777        pid_t   so_pgid;                /* pgid for signals */
     
    8989                struct  selinfo sb_sel; /* process selecting read/write */
    9090                short   sb_flags;       /* flags, see below */
    91                 short   sb_timeo;       /* timeout for read/write */
     91                u_long  sb_timeo;       /* timeout for read/write */
    9292        } so_rcv, so_snd;
    9393#define SB_MAX          (256*1024)      /* default for max chars in sockbuf */
  • c/src/libnetworking/kern/uipc_socket.c

    rdf4eb76e r847375f  
    5050#include <sys/signalvar.h>
    5151#include <sys/sysctl.h>
     52#include <limits.h>
    5253
    5354static int somaxconn = SOMAXCONN;
     
    949950                    {
    950951                        struct timeval *tv;
    951                         short val;
     952                        unsigned long val;
    952953
    953954                        if (m == NULL || m->m_len < sizeof (*tv)) {
     
    956957                        }
    957958                        tv = mtod(m, struct timeval *);
    958                         if (tv->tv_sec > SHRT_MAX / hz - hz) {
     959                        if (tv->tv_sec >= (ULONG_MAX - hz) / hz) {
    959960                                error = EDOM;
    960961                                goto bad;
     
    10661067                case SO_RCVTIMEO:
    10671068                    {
    1068                         int val = (optname == SO_SNDTIMEO ?
     1069                        unsigned long val = (optname == SO_SNDTIMEO ?
    10691070                             so->so_snd.sb_timeo : so->so_rcv.sb_timeo);
    10701071
  • c/src/libnetworking/nfs/bootp_subr.c

    rdf4eb76e r847375f  
    683683}
    684684
     685static int dhcpOptionOverload = 0;
     686static char dhcp_gotgw = 0;
     687static char dhcp_gotnetmask = 0;
     688static char dhcp_gotserver = 0;
     689static char dhcp_gotlogserver = 0;
     690static struct sockaddr_in dhcp_netmask;
     691static struct sockaddr_in dhcp_gw;
     692
     693static void
     694processOptions (unsigned char *optbuf, int optbufSize)
     695{
     696  int j = 0;
     697  int len;
     698  int code, ncode;
     699  char *p;
     700
     701  ncode = optbuf[0];
     702  while (j < optbufSize) {
     703    code = optbuf[j] = ncode;
     704    if (code == 255)
     705      return;
     706    if (code == 0) {
     707      j++;
     708      continue;
     709    }
     710    len = optbuf[j+1];
     711    j += 2;
     712    if ((len + j) >= optbufSize) {
     713      printf ("Truncated field for code %d", code);
     714      return;
     715    }
     716    ncode = optbuf[j+len];
     717    optbuf[j+len] = '\0';
     718    p = &optbuf[j];
     719    j += len;
     720
     721    /*
     722     * Process the option
     723     */
     724    switch (code) {
     725    case 1:
     726      /* Subnet mask */
     727      if (len!=4)
     728        panic("bootpc: subnet mask len is %d",len);
     729      bcopy (p, &dhcp_netmask.sin_addr, 4);
     730      dhcp_gotnetmask = 1;
     731      break;
     732
     733    case 2:    /* Time offset, unused */
     734      break;
     735
     736    case 3:
     737      /* Routers */
     738      if (len % 4)
     739        panic ("bootpc: Router Len is %d", len);
     740      if (len > 0) {
     741        bcopy(p, &dhcp_gw.sin_addr, 4);
     742        dhcp_gotgw = 1;
     743      }
     744      break;
     745
     746    case 6:
     747      /* Domain Name servers */
     748      if (len % 4)
     749        panic ("bootpc: DNS Len is %d", len);
     750      {
     751      int dlen = 0;
     752      while ((dlen < len) &&
     753             (rtems_bsdnet_nameserver_count < sizeof rtems_bsdnet_config.name_server /
     754        sizeof rtems_bsdnet_config.name_server[0])) {
     755        bcopy (p+dlen,
     756        &rtems_bsdnet_nameserver[rtems_bsdnet_nameserver_count],
     757        4);
     758        printip("Domain Name Server",
     759          rtems_bsdnet_nameserver[rtems_bsdnet_nameserver_count]);
     760        rtems_bsdnet_nameserver_count++;
     761        dlen += 4;
     762      }
     763      }
     764      break;
     765
     766    case 12:
     767      /* Host name */
     768      if (len>=MAXHOSTNAMELEN)
     769        panic ("bootpc: hostname >=%d bytes", MAXHOSTNAMELEN);
     770      if (sethostname (p, len) < 0)
     771        panic("Can't set host name");
     772      printf("Hostname is %s\n", p);
     773      break;
     774
     775    case 7:
     776      /* Log servers */
     777      if (len % 4)
     778        panic ("bootpc: Log server Len is %d", len);
     779      if (len > 0) {
     780        bcopy(p, &rtems_bsdnet_log_host_address, 4);
     781        dhcp_gotlogserver = 1;
     782      }
     783      break;
     784
     785    case 15:
     786      /* Domain name */
     787      if (p[0]) {
     788        rtems_bsdnet_domain_name = strdup (p);
     789        printf("Domain name is %s\n", rtems_bsdnet_domain_name);
     790      }
     791      break;
     792
     793    case 16:  /* Swap server IP address. unused */
     794      break;
     795
     796    case 52:
     797      /* DHCP option override */
     798      if (len != 1)
     799        panic ("bootpc: DHCP option overload len is %d", len);
     800      dhcpOptionOverload = p[0];
     801      break;
     802
     803    case 128: /* Site-specific option for DHCP servers that
     804               *   a) don't supply tag 54
     805               * and
     806               *   b) don't supply the server address in siaddr
     807               * For example, on Solaris 2.6 in.dhcpd, include in the dhcptab:
     808               *    Bootsrv s Site,128,IP,1,1
     809               * and use that symbol in the macro that defines the client:
     810               *    Bootsrv=<tftp-server-ip-address>
     811               */
     812    case 54:
     813      /* DHCP server */
     814      if (len != 4)
     815        panic ("bootpc: DHCP server len is %d", len);
     816      bcopy(p, &rtems_bsdnet_bootp_server_address, 4);
     817      dhcp_gotserver = 1;
     818      break;
     819
     820    case 66:
     821      /* DHCP server name option */
     822      if (p[0])
     823        rtems_bsdnet_bootp_server_name = strdup (p);
     824      break;
     825
     826    case 67:
     827      /* DHCP bootfile option */
     828      if (p[0])
     829        rtems_bsdnet_bootp_boot_file_name = strdup (p);
     830      break;
     831
     832    default:
     833      printf ("Ignoring BOOTP/DHCP option code %d\n", code);
     834      break;
     835    }
     836  }
     837}
     838
     839#define EALEN 6
     840
    685841void
    686842bootpc_init(void)
     
    693849  struct ifnet *ifp;
    694850  struct socket *so;
     851  int j;
    695852  int error;
    696   int code,ncode,len;
    697   int j;
    698   char *p;
    699   unsigned int ip;
    700 
    701853  struct sockaddr_in myaddr;
    702   struct sockaddr_in netmask;
    703   struct sockaddr_in gw;
    704   int gotgw=0;
    705   int gotnetmask=0;
    706 #if !defined(__rtems__)
    707   int gotrootpath=0;
    708   int gotswappath=0;
    709 #endif
    710   char lookup_path[24];
    711 
    712 #define EALEN 6
    713 #if !defined(__rtems__)
    714   unsigned char ea[EALEN];
    715 #endif
    716854  struct ifaddr *ifa;
    717855  struct sockaddr_dl *sdl = NULL;
     
    724862  if (nfs_diskless_valid)
    725863    return;
    726 
    727   /*
    728    * Bump time if 0.
    729   if (!time.tv_sec)
    730     time.tv_sec++;
    731    */
    732864
    733865  /*
     
    804936    panic("BOOTP call failed -- error %d", error);
    805937 
     938  /*
     939   * Initialize network address structures
     940   */
    806941  bzero(&myaddr,sizeof(myaddr));
    807   bzero(&netmask,sizeof(netmask));
    808   bzero(&gw,sizeof(gw));
    809 
     942  bzero(&dhcp_netmask,sizeof(dhcp_netmask));
     943  bzero(&dhcp_gw,sizeof(dhcp_gw));
    810944  myaddr.sin_len = sizeof(myaddr);
    811945  myaddr.sin_family = AF_INET;
    812 
    813   netmask.sin_len = sizeof(netmask);
    814   netmask.sin_family = AF_INET;
    815 
    816   gw.sin_len = sizeof(gw);
    817   gw.sin_family= AF_INET;
    818 
    819   rtems_bsdnet_bootp_server_address = reply.siaddr;
    820   rtems_bsdnet_log_host_address = reply.siaddr;
    821 
     946  dhcp_netmask.sin_len = sizeof(dhcp_netmask);
     947  dhcp_netmask.sin_family = AF_INET;
     948  dhcp_gw.sin_len = sizeof(dhcp_gw);
     949  dhcp_gw.sin_family= AF_INET;
     950
     951  /*
     952   * Set our address
     953   */
    822954  myaddr.sin_addr = reply.yiaddr;
    823 
    824   ip = ntohl(myaddr.sin_addr.s_addr);
    825   sprintf(lookup_path,"swap.%d.%d.%d.%d",
    826           ip >> 24, (ip >> 16) & 255 ,(ip >> 8) & 255 ,ip & 255 );
    827 
    828955  printip("My ip address",myaddr.sin_addr);
    829956
    830   printip("Server ip address",reply.siaddr);
    831 
    832   gw.sin_addr = reply.giaddr;
    833   printip("Gateway ip address",reply.giaddr);
    834 
    835   if (reply.sname[0])
    836     printf("Server name is %s\n",reply.sname);
    837   if (reply.file[0])
    838     printf("boot file is %s\n",reply.file);
    839   rtems_bsdnet_bootp_boot_file_name = strdup (reply.file);
     957  /*
     958   * Process BOOTP/DHCP options
     959   */
    840960  if (reply.vend[0]==99 && reply.vend[1]==130 &&
    841961      reply.vend[2]==83 && reply.vend[3]==99) {
    842     j=4;
    843     ncode = reply.vend[j];
    844     while (j<sizeof(reply.vend)) {
    845       code = reply.vend[j] = ncode;
    846       if (code==255)
    847         break;
    848       if (code==0) {
    849         j++;
    850         continue;
    851       }
    852       len = reply.vend[j+1];
    853       j+=2;
    854       if (len+j>=sizeof(reply.vend)) {
    855         printf("Truncated field");
    856         break;
    857       }
    858       ncode = reply.vend[j+len];
    859       reply.vend[j+len]='\0';
    860       p = &reply.vend[j];
    861       switch (code) {
    862       case 1:
    863         if (len!=4)
    864           panic("bootpc: subnet mask len is %d",len);
    865         bcopy(&reply.vend[j],&netmask.sin_addr,4);
    866         gotnetmask=1;
    867         printip("Subnet mask",netmask.sin_addr);
    868         break;
    869       case 6:
    870         /* Domain Name servers */
    871         if (len % 4)
    872           panic("bootpc: DNS Len is %d",len);
    873         {
    874         int dlen = 0;
    875         while ((dlen < len) &&
    876           (rtems_bsdnet_nameserver_count < sizeof rtems_bsdnet_config.name_server /
    877                                   sizeof rtems_bsdnet_config.name_server[0])) {
    878             bcopy(&reply.vend[j+dlen],
    879                         &rtems_bsdnet_nameserver[rtems_bsdnet_nameserver_count],
    880                         4);
    881             printip("Domain Name Server",
    882                         rtems_bsdnet_nameserver[rtems_bsdnet_nameserver_count]);
    883             rtems_bsdnet_nameserver_count++;
    884             dlen += 4;
    885           }
    886         }
    887         break;
    888       case 16:  /* Swap server IP address. unused */
    889       case 2:
    890         /* Time offset */
    891         break;
    892       case 3:
    893         /* Routers */
    894         if (len % 4)
    895           panic("bootpc: Router Len is %d",len);
    896         if (len > 0) {
    897           bcopy(&reply.vend[j],&gw.sin_addr,4);
    898           printip("Router",gw.sin_addr);
    899           gotgw=1;
    900         }
    901         break;
    902       case 7:
    903         /* Log servers */
    904         if (len % 4)
    905           panic("bootpc: Log server len is %d",len);
    906         if (len > 0) {
    907           bcopy(&reply.vend[j],&rtems_bsdnet_log_host_address,4);
    908           printip("Log server",rtems_bsdnet_log_host_address);
    909         }
    910         break;
    911       case 12:
    912         if (len>=MAXHOSTNAMELEN)
    913           panic("bootpc: hostname  >=%d bytes",MAXHOSTNAMELEN);
    914         if (sethostname (&reply.vend[j], len) < 0)
    915           panic("Can't set host name");
    916         printf("Hostname is %.*s\n",len,&reply.vend[j]);
    917         break;
    918       case 15:
    919         /* Domain name */
    920         rtems_bsdnet_domain_name = strdup (&reply.vend[j]);
    921         if (rtems_bsdnet_domain_name)
    922                 printf("Domain name is %s\n", rtems_bsdnet_domain_name);
    923         break;
    924       default:
    925         printf("Ignoring field type %d\n",code);
    926       }
    927       j+=len;
    928     }
    929   }
    930 
    931   if (!gotnetmask) {
     962    processOptions (&reply.vend[4], sizeof(reply.vend) - 4);
     963  }
     964  if (dhcpOptionOverload & 1) {
     965    processOptions (reply.file, sizeof reply.file);
     966  }
     967  else {
     968    if (reply.file[0])
     969      rtems_bsdnet_bootp_boot_file_name = strdup (reply.file);
     970  }
     971  if (dhcpOptionOverload & 2) {
     972    processOptions (reply.sname, sizeof reply.sname);
     973  }
     974  else {
     975    if (reply.sname[0])
     976      rtems_bsdnet_bootp_server_name = strdup (reply.sname);
     977  }
     978  if (rtems_bsdnet_bootp_server_name)
     979    printf ("Server name is %s\n", rtems_bsdnet_bootp_server_name);
     980  if (rtems_bsdnet_bootp_boot_file_name)
     981    printf ("Boot file is %s\n", rtems_bsdnet_bootp_boot_file_name);
     982
     983  /*
     984   * Use defaults if values were not supplied by BOOTP/DHCP options
     985   */
     986  if (!dhcp_gotnetmask) {
    932987    if (IN_CLASSA(ntohl(myaddr.sin_addr.s_addr)))
    933       netmask.sin_addr.s_addr = htonl(IN_CLASSA_NET);
     988      dhcp_netmask.sin_addr.s_addr = htonl(IN_CLASSA_NET);
    934989    else if (IN_CLASSB(ntohl(myaddr.sin_addr.s_addr)))
    935       netmask.sin_addr.s_addr = htonl(IN_CLASSB_NET);
     990      dhcp_netmask.sin_addr.s_addr = htonl(IN_CLASSB_NET);
    936991    else
    937       netmask.sin_addr.s_addr = htonl(IN_CLASSC_NET);
    938   }
    939   if (!gotgw) {
    940     /* Use proxyarp */
    941     gw.sin_addr.s_addr = myaddr.sin_addr.s_addr;
    942   }
    943  
    944 #if 0
    945   bootpboot_p_iflist();
    946   bootpboot_p_rtlist();
    947 #endif
     992      dhcp_netmask.sin_addr.s_addr = htonl(IN_CLASSC_NET);
     993  }
     994  printip ("Subnet mask", dhcp_netmask.sin_addr);
     995  if (!dhcp_gotserver)
     996   rtems_bsdnet_bootp_server_address = reply.siaddr;
     997  printip ("Server ip address" ,rtems_bsdnet_bootp_server_address);
     998  if (!dhcp_gotgw)
     999    dhcp_gw.sin_addr = reply.giaddr;
     1000  printip ("Gateway ip address", dhcp_gw.sin_addr);
     1001  if (!dhcp_gotlogserver)
     1002    rtems_bsdnet_log_host_address = rtems_bsdnet_bootp_server_address;
     1003  printip ("Log server ip address", rtems_bsdnet_log_host_address);
     1004 
     1005  /*
     1006   * Configure the interface with the new settings
     1007   */
    9481008  error = bootpc_adjust_interface(&ireq,so,
    949                                   &myaddr,&netmask,&gw,procp);
    950  
     1009                                  &myaddr,&dhcp_netmask,&dhcp_gw,procp);
    9511010  soclose(so);
    952 
    953 #if 0
    954   bootpboot_p_iflist();
    955   bootpboot_p_rtlist();
    956 #endif
    957 
    958 
    959 #if 0
    960     myaddr.sin_addr.s_addr | ~ netmask.sin_addr.s_addr;
    961 #endif
    962 
    963 #if 0
    964   bootpboot_p_iflist();
    965   bootpboot_p_rtlist();
    966 #endif
    967   return;
    968 }
     1011}
  • c/src/libnetworking/rtems/rtems_bsdnet.h

    rdf4eb76e r847375f  
    1212 */
    1313extern struct in_addr rtems_bsdnet_bootp_server_address;
     14extern char *rtems_bsdnet_bootp_server_name;
    1415extern char *rtems_bsdnet_bootp_boot_file_name;
    1516
  • c/src/libnetworking/rtems/rtems_glue.c

    rdf4eb76e r847375f  
    8686struct in_addr rtems_bsdnet_bootp_server_address;
    8787char *rtems_bsdnet_bootp_boot_file_name;
     88char *rtems_bsdnet_bootp_server_name;
    8889char *rtems_bsdnet_domain_name;
    8990struct in_addr rtems_bsdnet_nameserver[sizeof rtems_bsdnet_config.name_server /
  • c/src/libnetworking/sys/socketvar.h

    rdf4eb76e r847375f  
    7373                                           connections */
    7474        short   so_qlimit;              /* max number queued connections */
    75         short   so_timeo;               /* connection timeout */
     75        u_long  so_timeo;               /* connection timeout */
    7676        u_short so_error;               /* error affecting connection */
    7777        pid_t   so_pgid;                /* pgid for signals */
     
    8989                struct  selinfo sb_sel; /* process selecting read/write */
    9090                short   sb_flags;       /* flags, see below */
    91                 short   sb_timeo;       /* timeout for read/write */
     91                u_long  sb_timeo;       /* timeout for read/write */
    9292        } so_rcv, so_snd;
    9393#define SB_MAX          (256*1024)      /* default for max chars in sockbuf */
  • cpukit/libnetworking/kern/uipc_socket.c

    rdf4eb76e r847375f  
    5050#include <sys/signalvar.h>
    5151#include <sys/sysctl.h>
     52#include <limits.h>
    5253
    5354static int somaxconn = SOMAXCONN;
     
    949950                    {
    950951                        struct timeval *tv;
    951                         short val;
     952                        unsigned long val;
    952953
    953954                        if (m == NULL || m->m_len < sizeof (*tv)) {
     
    956957                        }
    957958                        tv = mtod(m, struct timeval *);
    958                         if (tv->tv_sec > SHRT_MAX / hz - hz) {
     959                        if (tv->tv_sec >= (ULONG_MAX - hz) / hz) {
    959960                                error = EDOM;
    960961                                goto bad;
     
    10661067                case SO_RCVTIMEO:
    10671068                    {
    1068                         int val = (optname == SO_SNDTIMEO ?
     1069                        unsigned long val = (optname == SO_SNDTIMEO ?
    10691070                             so->so_snd.sb_timeo : so->so_rcv.sb_timeo);
    10701071
  • cpukit/libnetworking/nfs/bootp_subr.c

    rdf4eb76e r847375f  
    683683}
    684684
     685static int dhcpOptionOverload = 0;
     686static char dhcp_gotgw = 0;
     687static char dhcp_gotnetmask = 0;
     688static char dhcp_gotserver = 0;
     689static char dhcp_gotlogserver = 0;
     690static struct sockaddr_in dhcp_netmask;
     691static struct sockaddr_in dhcp_gw;
     692
     693static void
     694processOptions (unsigned char *optbuf, int optbufSize)
     695{
     696  int j = 0;
     697  int len;
     698  int code, ncode;
     699  char *p;
     700
     701  ncode = optbuf[0];
     702  while (j < optbufSize) {
     703    code = optbuf[j] = ncode;
     704    if (code == 255)
     705      return;
     706    if (code == 0) {
     707      j++;
     708      continue;
     709    }
     710    len = optbuf[j+1];
     711    j += 2;
     712    if ((len + j) >= optbufSize) {
     713      printf ("Truncated field for code %d", code);
     714      return;
     715    }
     716    ncode = optbuf[j+len];
     717    optbuf[j+len] = '\0';
     718    p = &optbuf[j];
     719    j += len;
     720
     721    /*
     722     * Process the option
     723     */
     724    switch (code) {
     725    case 1:
     726      /* Subnet mask */
     727      if (len!=4)
     728        panic("bootpc: subnet mask len is %d",len);
     729      bcopy (p, &dhcp_netmask.sin_addr, 4);
     730      dhcp_gotnetmask = 1;
     731      break;
     732
     733    case 2:    /* Time offset, unused */
     734      break;
     735
     736    case 3:
     737      /* Routers */
     738      if (len % 4)
     739        panic ("bootpc: Router Len is %d", len);
     740      if (len > 0) {
     741        bcopy(p, &dhcp_gw.sin_addr, 4);
     742        dhcp_gotgw = 1;
     743      }
     744      break;
     745
     746    case 6:
     747      /* Domain Name servers */
     748      if (len % 4)
     749        panic ("bootpc: DNS Len is %d", len);
     750      {
     751      int dlen = 0;
     752      while ((dlen < len) &&
     753             (rtems_bsdnet_nameserver_count < sizeof rtems_bsdnet_config.name_server /
     754        sizeof rtems_bsdnet_config.name_server[0])) {
     755        bcopy (p+dlen,
     756        &rtems_bsdnet_nameserver[rtems_bsdnet_nameserver_count],
     757        4);
     758        printip("Domain Name Server",
     759          rtems_bsdnet_nameserver[rtems_bsdnet_nameserver_count]);
     760        rtems_bsdnet_nameserver_count++;
     761        dlen += 4;
     762      }
     763      }
     764      break;
     765
     766    case 12:
     767      /* Host name */
     768      if (len>=MAXHOSTNAMELEN)
     769        panic ("bootpc: hostname >=%d bytes", MAXHOSTNAMELEN);
     770      if (sethostname (p, len) < 0)
     771        panic("Can't set host name");
     772      printf("Hostname is %s\n", p);
     773      break;
     774
     775    case 7:
     776      /* Log servers */
     777      if (len % 4)
     778        panic ("bootpc: Log server Len is %d", len);
     779      if (len > 0) {
     780        bcopy(p, &rtems_bsdnet_log_host_address, 4);
     781        dhcp_gotlogserver = 1;
     782      }
     783      break;
     784
     785    case 15:
     786      /* Domain name */
     787      if (p[0]) {
     788        rtems_bsdnet_domain_name = strdup (p);
     789        printf("Domain name is %s\n", rtems_bsdnet_domain_name);
     790      }
     791      break;
     792
     793    case 16:  /* Swap server IP address. unused */
     794      break;
     795
     796    case 52:
     797      /* DHCP option override */
     798      if (len != 1)
     799        panic ("bootpc: DHCP option overload len is %d", len);
     800      dhcpOptionOverload = p[0];
     801      break;
     802
     803    case 128: /* Site-specific option for DHCP servers that
     804               *   a) don't supply tag 54
     805               * and
     806               *   b) don't supply the server address in siaddr
     807               * For example, on Solaris 2.6 in.dhcpd, include in the dhcptab:
     808               *    Bootsrv s Site,128,IP,1,1
     809               * and use that symbol in the macro that defines the client:
     810               *    Bootsrv=<tftp-server-ip-address>
     811               */
     812    case 54:
     813      /* DHCP server */
     814      if (len != 4)
     815        panic ("bootpc: DHCP server len is %d", len);
     816      bcopy(p, &rtems_bsdnet_bootp_server_address, 4);
     817      dhcp_gotserver = 1;
     818      break;
     819
     820    case 66:
     821      /* DHCP server name option */
     822      if (p[0])
     823        rtems_bsdnet_bootp_server_name = strdup (p);
     824      break;
     825
     826    case 67:
     827      /* DHCP bootfile option */
     828      if (p[0])
     829        rtems_bsdnet_bootp_boot_file_name = strdup (p);
     830      break;
     831
     832    default:
     833      printf ("Ignoring BOOTP/DHCP option code %d\n", code);
     834      break;
     835    }
     836  }
     837}
     838
     839#define EALEN 6
     840
    685841void
    686842bootpc_init(void)
     
    693849  struct ifnet *ifp;
    694850  struct socket *so;
     851  int j;
    695852  int error;
    696   int code,ncode,len;
    697   int j;
    698   char *p;
    699   unsigned int ip;
    700 
    701853  struct sockaddr_in myaddr;
    702   struct sockaddr_in netmask;
    703   struct sockaddr_in gw;
    704   int gotgw=0;
    705   int gotnetmask=0;
    706 #if !defined(__rtems__)
    707   int gotrootpath=0;
    708   int gotswappath=0;
    709 #endif
    710   char lookup_path[24];
    711 
    712 #define EALEN 6
    713 #if !defined(__rtems__)
    714   unsigned char ea[EALEN];
    715 #endif
    716854  struct ifaddr *ifa;
    717855  struct sockaddr_dl *sdl = NULL;
     
    724862  if (nfs_diskless_valid)
    725863    return;
    726 
    727   /*
    728    * Bump time if 0.
    729   if (!time.tv_sec)
    730     time.tv_sec++;
    731    */
    732864
    733865  /*
     
    804936    panic("BOOTP call failed -- error %d", error);
    805937 
     938  /*
     939   * Initialize network address structures
     940   */
    806941  bzero(&myaddr,sizeof(myaddr));
    807   bzero(&netmask,sizeof(netmask));
    808   bzero(&gw,sizeof(gw));
    809 
     942  bzero(&dhcp_netmask,sizeof(dhcp_netmask));
     943  bzero(&dhcp_gw,sizeof(dhcp_gw));
    810944  myaddr.sin_len = sizeof(myaddr);
    811945  myaddr.sin_family = AF_INET;
    812 
    813   netmask.sin_len = sizeof(netmask);
    814   netmask.sin_family = AF_INET;
    815 
    816   gw.sin_len = sizeof(gw);
    817   gw.sin_family= AF_INET;
    818 
    819   rtems_bsdnet_bootp_server_address = reply.siaddr;
    820   rtems_bsdnet_log_host_address = reply.siaddr;
    821 
     946  dhcp_netmask.sin_len = sizeof(dhcp_netmask);
     947  dhcp_netmask.sin_family = AF_INET;
     948  dhcp_gw.sin_len = sizeof(dhcp_gw);
     949  dhcp_gw.sin_family= AF_INET;
     950
     951  /*
     952   * Set our address
     953   */
    822954  myaddr.sin_addr = reply.yiaddr;
    823 
    824   ip = ntohl(myaddr.sin_addr.s_addr);
    825   sprintf(lookup_path,"swap.%d.%d.%d.%d",
    826           ip >> 24, (ip >> 16) & 255 ,(ip >> 8) & 255 ,ip & 255 );
    827 
    828955  printip("My ip address",myaddr.sin_addr);
    829956
    830   printip("Server ip address",reply.siaddr);
    831 
    832   gw.sin_addr = reply.giaddr;
    833   printip("Gateway ip address",reply.giaddr);
    834 
    835   if (reply.sname[0])
    836     printf("Server name is %s\n",reply.sname);
    837   if (reply.file[0])
    838     printf("boot file is %s\n",reply.file);
    839   rtems_bsdnet_bootp_boot_file_name = strdup (reply.file);
     957  /*
     958   * Process BOOTP/DHCP options
     959   */
    840960  if (reply.vend[0]==99 && reply.vend[1]==130 &&
    841961      reply.vend[2]==83 && reply.vend[3]==99) {
    842     j=4;
    843     ncode = reply.vend[j];
    844     while (j<sizeof(reply.vend)) {
    845       code = reply.vend[j] = ncode;
    846       if (code==255)
    847         break;
    848       if (code==0) {
    849         j++;
    850         continue;
    851       }
    852       len = reply.vend[j+1];
    853       j+=2;
    854       if (len+j>=sizeof(reply.vend)) {
    855         printf("Truncated field");
    856         break;
    857       }
    858       ncode = reply.vend[j+len];
    859       reply.vend[j+len]='\0';
    860       p = &reply.vend[j];
    861       switch (code) {
    862       case 1:
    863         if (len!=4)
    864           panic("bootpc: subnet mask len is %d",len);
    865         bcopy(&reply.vend[j],&netmask.sin_addr,4);
    866         gotnetmask=1;
    867         printip("Subnet mask",netmask.sin_addr);
    868         break;
    869       case 6:
    870         /* Domain Name servers */
    871         if (len % 4)
    872           panic("bootpc: DNS Len is %d",len);
    873         {
    874         int dlen = 0;
    875         while ((dlen < len) &&
    876           (rtems_bsdnet_nameserver_count < sizeof rtems_bsdnet_config.name_server /
    877                                   sizeof rtems_bsdnet_config.name_server[0])) {
    878             bcopy(&reply.vend[j+dlen],
    879                         &rtems_bsdnet_nameserver[rtems_bsdnet_nameserver_count],
    880                         4);
    881             printip("Domain Name Server",
    882                         rtems_bsdnet_nameserver[rtems_bsdnet_nameserver_count]);
    883             rtems_bsdnet_nameserver_count++;
    884             dlen += 4;
    885           }
    886         }
    887         break;
    888       case 16:  /* Swap server IP address. unused */
    889       case 2:
    890         /* Time offset */
    891         break;
    892       case 3:
    893         /* Routers */
    894         if (len % 4)
    895           panic("bootpc: Router Len is %d",len);
    896         if (len > 0) {
    897           bcopy(&reply.vend[j],&gw.sin_addr,4);
    898           printip("Router",gw.sin_addr);
    899           gotgw=1;
    900         }
    901         break;
    902       case 7:
    903         /* Log servers */
    904         if (len % 4)
    905           panic("bootpc: Log server len is %d",len);
    906         if (len > 0) {
    907           bcopy(&reply.vend[j],&rtems_bsdnet_log_host_address,4);
    908           printip("Log server",rtems_bsdnet_log_host_address);
    909         }
    910         break;
    911       case 12:
    912         if (len>=MAXHOSTNAMELEN)
    913           panic("bootpc: hostname  >=%d bytes",MAXHOSTNAMELEN);
    914         if (sethostname (&reply.vend[j], len) < 0)
    915           panic("Can't set host name");
    916         printf("Hostname is %.*s\n",len,&reply.vend[j]);
    917         break;
    918       case 15:
    919         /* Domain name */
    920         rtems_bsdnet_domain_name = strdup (&reply.vend[j]);
    921         if (rtems_bsdnet_domain_name)
    922                 printf("Domain name is %s\n", rtems_bsdnet_domain_name);
    923         break;
    924       default:
    925         printf("Ignoring field type %d\n",code);
    926       }
    927       j+=len;
    928     }
    929   }
    930 
    931   if (!gotnetmask) {
     962    processOptions (&reply.vend[4], sizeof(reply.vend) - 4);
     963  }
     964  if (dhcpOptionOverload & 1) {
     965    processOptions (reply.file, sizeof reply.file);
     966  }
     967  else {
     968    if (reply.file[0])
     969      rtems_bsdnet_bootp_boot_file_name = strdup (reply.file);
     970  }
     971  if (dhcpOptionOverload & 2) {
     972    processOptions (reply.sname, sizeof reply.sname);
     973  }
     974  else {
     975    if (reply.sname[0])
     976      rtems_bsdnet_bootp_server_name = strdup (reply.sname);
     977  }
     978  if (rtems_bsdnet_bootp_server_name)
     979    printf ("Server name is %s\n", rtems_bsdnet_bootp_server_name);
     980  if (rtems_bsdnet_bootp_boot_file_name)
     981    printf ("Boot file is %s\n", rtems_bsdnet_bootp_boot_file_name);
     982
     983  /*
     984   * Use defaults if values were not supplied by BOOTP/DHCP options
     985   */
     986  if (!dhcp_gotnetmask) {
    932987    if (IN_CLASSA(ntohl(myaddr.sin_addr.s_addr)))
    933       netmask.sin_addr.s_addr = htonl(IN_CLASSA_NET);
     988      dhcp_netmask.sin_addr.s_addr = htonl(IN_CLASSA_NET);
    934989    else if (IN_CLASSB(ntohl(myaddr.sin_addr.s_addr)))
    935       netmask.sin_addr.s_addr = htonl(IN_CLASSB_NET);
     990      dhcp_netmask.sin_addr.s_addr = htonl(IN_CLASSB_NET);
    936991    else
    937       netmask.sin_addr.s_addr = htonl(IN_CLASSC_NET);
    938   }
    939   if (!gotgw) {
    940     /* Use proxyarp */
    941     gw.sin_addr.s_addr = myaddr.sin_addr.s_addr;
    942   }
    943  
    944 #if 0
    945   bootpboot_p_iflist();
    946   bootpboot_p_rtlist();
    947 #endif
     992      dhcp_netmask.sin_addr.s_addr = htonl(IN_CLASSC_NET);
     993  }
     994  printip ("Subnet mask", dhcp_netmask.sin_addr);
     995  if (!dhcp_gotserver)
     996   rtems_bsdnet_bootp_server_address = reply.siaddr;
     997  printip ("Server ip address" ,rtems_bsdnet_bootp_server_address);
     998  if (!dhcp_gotgw)
     999    dhcp_gw.sin_addr = reply.giaddr;
     1000  printip ("Gateway ip address", dhcp_gw.sin_addr);
     1001  if (!dhcp_gotlogserver)
     1002    rtems_bsdnet_log_host_address = rtems_bsdnet_bootp_server_address;
     1003  printip ("Log server ip address", rtems_bsdnet_log_host_address);
     1004 
     1005  /*
     1006   * Configure the interface with the new settings
     1007   */
    9481008  error = bootpc_adjust_interface(&ireq,so,
    949                                   &myaddr,&netmask,&gw,procp);
    950  
     1009                                  &myaddr,&dhcp_netmask,&dhcp_gw,procp);
    9511010  soclose(so);
    952 
    953 #if 0
    954   bootpboot_p_iflist();
    955   bootpboot_p_rtlist();
    956 #endif
    957 
    958 
    959 #if 0
    960     myaddr.sin_addr.s_addr | ~ netmask.sin_addr.s_addr;
    961 #endif
    962 
    963 #if 0
    964   bootpboot_p_iflist();
    965   bootpboot_p_rtlist();
    966 #endif
    967   return;
    968 }
     1011}
  • cpukit/libnetworking/rtems/rtems_bsdnet.h

    rdf4eb76e r847375f  
    1212 */
    1313extern struct in_addr rtems_bsdnet_bootp_server_address;
     14extern char *rtems_bsdnet_bootp_server_name;
    1415extern char *rtems_bsdnet_bootp_boot_file_name;
    1516
  • cpukit/libnetworking/rtems/rtems_glue.c

    rdf4eb76e r847375f  
    8686struct in_addr rtems_bsdnet_bootp_server_address;
    8787char *rtems_bsdnet_bootp_boot_file_name;
     88char *rtems_bsdnet_bootp_server_name;
    8889char *rtems_bsdnet_domain_name;
    8990struct in_addr rtems_bsdnet_nameserver[sizeof rtems_bsdnet_config.name_server /
  • cpukit/libnetworking/sys/socketvar.h

    rdf4eb76e r847375f  
    7373                                           connections */
    7474        short   so_qlimit;              /* max number queued connections */
    75         short   so_timeo;               /* connection timeout */
     75        u_long  so_timeo;               /* connection timeout */
    7676        u_short so_error;               /* error affecting connection */
    7777        pid_t   so_pgid;                /* pgid for signals */
     
    8989                struct  selinfo sb_sel; /* process selecting read/write */
    9090                short   sb_flags;       /* flags, see below */
    91                 short   sb_timeo;       /* timeout for read/write */
     91                u_long  sb_timeo;       /* timeout for read/write */
    9292        } so_rcv, so_snd;
    9393#define SB_MAX          (256*1024)      /* default for max chars in sockbuf */
  • cpukit/posix/src/psignal.c

    rdf4eb76e r847375f  
    208208  _ISR_Disable( level );
    209209    _POSIX_signals_Pending &= ~mask;
    210     if ( !_POSIX_signals_Pending )
     210    if ( !_POSIX_signals_Pending && _Thread_Do_post_task_switch_extension )
    211211      _Thread_Do_post_task_switch_extension--;
    212212  _ISR_Enable( level );
  • cpukit/score/include/rtems/score/thread.h

    rdf4eb76e r847375f  
    178178
    179179  boolean                               is_preemptible;
     180  void                                 *rtems_ada_self;
    180181  unsigned32                            cpu_time_budget;
    181182  Thread_CPU_budget_algorithms          budget_algorithm;
     
    192193};
    193194
     195/*
     196 *  Self for the GNU Ada Run-Time
     197 */
     198
     199SCORE_EXTERN void *rtems_ada_self;
     200 
    194201/*
    195202 *  The following defines the information control block used to
  • cpukit/score/src/thread.c

    rdf4eb76e r847375f  
    272272    _Context_Switch_necessary = FALSE;
    273273    _Thread_Executing = heir;
     274    executing->rtems_ada_self = rtems_ada_self;
     275    rtems_ada_self = heir->rtems_ada_self;
    274276    _ISR_Enable( level );
    275277
     
    437439  void                *fp_area;
    438440  void                *extensions_area;
     441
     442  /*
     443   *  Initialize the Ada self pointer
     444   */
     445
     446  the_thread->rtems_ada_self = NULL;
    439447
    440448  /*
Note: See TracChangeset for help on using the changeset viewer.