usrNetBootUtil.c
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:4k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* usrNetBootUtil.c - generic utilities for handling network boot parameters */
  2. /* Copyright 1992 - 1998 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01a,05dec97,spm  added DHCP code review modifications
  7. */
  8. /*
  9. DESCRIPTION
  10. This file is included by the configuration tool to handle special cases
  11. associated with starting a network device according to the parameters in the 
  12. boot line. It contains the initialization routines for related components
  13. added by the configuration tool.
  14. NOMANUAL
  15. */
  16. LOCAL STATUS dhcpcBootLineClean (char *);
  17. /******************************************************************************
  18. *
  19. * usrDhcpcLeaseClean - remove DHCP timestamp information from address
  20. *
  21. * This routine deletes any values for the DHCP lease origin and lease duration
  22. * in the selected address string. It is the initialization routine for the 
  23. * INCLUDE_DHCPC_LEASE_CLEAN component which is automatically added when the 
  24. * INCLUDE_NET_INIT component is used, unless the INCLUDE_DHCPC component 
  25. * is also included. If DHCP timestamp values are found, processing can't 
  26. * continue because the corresponding active DHCP lease cannot be maintained.
  27. *
  28. * RETURNS: N/A
  29. *
  30. * NOMANUAL
  31. */
  32. void usrDhcpcLeaseClean (void)
  33.     {
  34.     /* Check address for DHCP lease information. */ 
  35.     if (sysBootParams.flags & SYSFLG_AUTOCONFIG)
  36.         if (dhcpcBootLineClean (pAddrString) == OK)
  37.             {
  38.             printf ("Can't use dynamic address %s without DHCP.n",
  39.                     pAddrString);
  40.             netDevBootFlag = TRUE;    /* Prevents further processing. */
  41.             }
  42.     return;
  43.     }
  44. /******************************************************************************
  45. *
  46. * dhcpcBootLineClean - remove DHCP information from system bootline
  47. *
  48. * This routine removes the DHCP information (lease duration and origin) from 
  49. * the client address string in the bootline. Those values are present
  50. * if the target IP address obtained during system boot was provided by a
  51. * DHCP server. The routine is called if DHCP is not included in a VxWorks 
  52. * image and an automatic configuration protocol was used by the bootstrap
  53. * loader. Under those circumstances, indications of a DHCP lease result are
  54. * treated as an error by the startup code, since the lease cannot be renewed.
  55. *
  56. * RETURNS: OK if DHCP lease data found in bootline, or ERROR otherwise.
  57. *
  58. * NOMANUAL
  59. */
  60. LOCAL STATUS dhcpcBootLineClean
  61.     (
  62.     char *  pAddrString    /* client address string from bootline */
  63.     )
  64.     {
  65.     FAST char *pDelim;
  66.     FAST char *offset;
  67.     STATUS result = ERROR;
  68.     /* Check if lease duration field is present. */
  69.     offset = (char *)index (pAddrString, ':');  /* Find netmask field. */
  70.     if (offset != NULL)
  71.         {
  72.         pDelim = offset + 1;
  73.         offset = (char *)index (pDelim, ':');
  74.         if (offset != NULL)
  75.             {
  76.             /* 
  77.              * Lease duration found - for active DHCP leases,
  78.              * the lease origin field is also present.
  79.              */
  80.             pDelim = offset + 1;
  81.             pDelim = (char *)index (pDelim, ':');
  82.             if (pDelim != NULL)
  83.                  result = OK;     /* Active DHCP lease found. */
  84.             *offset = EOS;    /* Remove DHCP lease information. */
  85.             }
  86.         }
  87.     return (result);
  88.     }
  89. /*******************************************************************************
  90. *
  91. * usrNetmaskGet - remove DHCP timestamp information from address
  92. *
  93. * This routine stores any value for the netmask found in the client 
  94. * address string in the bootline, if needed. It is the initialization
  95. * routine for the INCLUDE_NETMASK_GET component which is automatically
  96. * added when the INCLUDE_NET_INIT component is used. The netmask
  97. * value is not stored if further processing was disabled by an earlier 
  98. * routine.
  99. *
  100. * RETURNS: N/A
  101. *
  102. * NOMANUAL
  103. */
  104. void usrNetmaskGet (void)
  105.     {
  106.     /* 
  107.      * Extract the netmask if processing is not complete. The flag will be
  108.      * set to disable further processing if an error is detected in the
  109.      * address string. It will also be set if the PPP or SLIP device have 
  110.      * been created, since those devices handle any netmask value 
  111.      * independently.
  112.      */
  113.     if (!netDevBootFlag)
  114.         {
  115.         netmask = 0;
  116.         bootNetmaskExtract (pAddrString, &netmask);
  117.         }
  118.     }