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

VxWorks

开发平台:

C/C++

  1. /* usrVxFusion.c - VxFusion distributed objects initialization */
  2. /* Copyright 1999 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01d,01jun99,drm  Adding code to check for and extract shared memory network
  7.                  information.
  8. 01c,19may99,drm  Changing windmp to vxfusion.
  9. 01b,10mar99,drm  changing WindMP to VxFusion to reflect new product name
  10. 01a,01sep98,drm  written.
  11. */
  12. /*
  13. DESCRIPTION
  14. This file is used to initialize the VxFusion distributed object support.  
  15. NOMANUAL
  16. */
  17. #ifndef  __INCusrVxFusionc
  18. #define  __INCusrVxFusionc
  19. /* includes */
  20. #include "vxWorks.h"
  21. #include "vxfusion/distIfLib.h"
  22. #include "vxfusion/distLib.h"
  23. #include "drv/vxfusion/distIfUdp.h"
  24. /*******************************************************************************
  25. *
  26. * usrVxFusionInit - initialize VxFusion (distributed objects)
  27. * This function parses the boot string and then calls distInit() to initialize
  28. * VxFusion using the reference UDP adapter.  It uses the boot device name and 
  29. * unit number to determine the interface which is passed to the UDP adapter
  30. * as adapter-specific configuration data.
  31. *
  32. *
  33. * RETURNS: OK, or ERROR if unsuccessful.
  34. *
  35. * NOMANUAL
  36. */
  37. STATUS usrVxFusionInit 
  38.     (
  39.     char * bootString       /* boot parameter string */
  40.     )
  41.     {
  42.     STATUS rval;                            /* the return val from distInit() */
  43.     BOOT_PARAMS   params;                   /* boot paramters */
  44.     char ipStrAddr [INET_ADDR_LEN];         /* ip address portion of string */
  45.     u_long ipAddress;                       /* ipAddress in integer form */
  46.     char *pLoc;                             /* ptr to delimiting character */
  47.     char bootDevStr [BOOT_DEV_LEN];         /* boot device */
  48.     char interface [BOOT_DEV_LEN];          /* interface */
  49.     if (bootString == NULL)
  50.         bootString = BOOT_LINE_ADRS;
  51.     /* interpret boot command */
  52.     if (usrBootLineCrack (bootString, &params) != OK)
  53.         return (ERROR);
  54.     /*
  55.      * Determine the booting network interface.  If the booting interface is
  56.      * a non-shared memory interface, assume it is an ethernet interface
  57.      * and use the ethernet internet address as the node id.  If the booting
  58.      * interface is a shared memory interface, use the backplane internet
  59.      * address as the node id.
  60.      *
  61.      * Once these values are determined, call distInit() filling in the rest
  62.      * of the parameters using the default values.
  63.      */
  64.     strcpy (bootDevStr, params.bootDev);
  65.     if ( strncmp (bootDevStr, "sm=",3) == 0)
  66.         {
  67.         /* Shared memory */
  68.         pLoc = strchr (bootDevStr,'=');
  69.         if (pLoc)
  70.             *pLoc = '';
  71.         sprintf (interface,"%s%d",bootDevStr, params.unitNum);
  72.         strncpy (ipStrAddr, params.bad, INET_ADDR_LEN);
  73.         ipStrAddr[INET_ADDR_LEN-1] = '';
  74.         pLoc = strchr (ipStrAddr,':');  /* Strip subnet mask */
  75.         if (pLoc)
  76.             *pLoc = '';
  77.         ipAddress = inet_network (ipStrAddr);
  78.         }
  79.     else
  80.         {
  81.         /* Not shared memory - assume an ethernet interface */
  82.         pLoc = strchr (bootDevStr,'(');
  83.         if (pLoc)
  84.             *pLoc = '';
  85.         sprintf (interface,"%s%d",bootDevStr, params.unitNum);
  86.         strncpy (ipStrAddr, params.ead, INET_ADDR_LEN);
  87.         ipStrAddr[INET_ADDR_LEN-1] = '';
  88.         pLoc = strchr (ipStrAddr,':');  /* Strip subnet mask */
  89.         if (pLoc)
  90.             *pLoc = '';
  91.         ipAddress = inet_network (ipStrAddr);
  92.         }
  93.     printf ("Initializing VxFusion with parameters: n");
  94.     printf ("  node id: 0x%lxn", ipAddress);
  95.     printf ("  interface: %sn", interface);
  96.     printf ("  max number of TBufs: %un", 1 << DIST_MAX_TBUFS_LOG2_DFLT);
  97.     printf ("  max number of nodes in node DB: %un", 
  98.             1 << DIST_MAX_NODES_LOG2_DFLT);
  99.     printf ("  max number of queues on this node: %un", 
  100.             1 << DIST_MAX_QUEUES_LOG2_DFLT);
  101.     printf ("  max number of groups in group DB: %un", 
  102.             1 << DIST_MAX_GROUPS_LOG2_DFLT);
  103.     printf ("  max number of entries in name DB: %un", 
  104.             1 << DIST_MAX_NAME_DB_ENTRIES_LOG2_DFLT);
  105.     printf ("  number of clock ticks to wait: ");
  106.     if (DIST_MAX_TICKS_TO_WAIT_DFLT < 0)
  107.        {
  108.        printf ("FOREVERn");
  109.        }
  110.     else 
  111.        { 
  112.        printf ("%dn", DIST_MAX_TICKS_TO_WAIT_DFLT); 
  113.        }
  114.     rval = distInit (ipAddress,
  115.                      distIfUdpInit,
  116.                      interface,
  117.                      DIST_MAX_TBUFS_LOG2_DFLT,
  118.                      DIST_MAX_NODES_LOG2_DFLT,
  119.                      DIST_MAX_QUEUES_LOG2_DFLT,
  120.                      DIST_MAX_GROUPS_LOG2_DFLT,
  121.                      DIST_MAX_NAME_DB_ENTRIES_LOG2_DFLT,
  122.                      DIST_MAX_TICKS_TO_WAIT_DFLT );
  123.     if (rval != OK)
  124.         {
  125.         printf ("Unable to initialize VxFusion.n");
  126.         return (ERROR);
  127.         }
  128.     printf ("VxFusion initialization successful.n");
  129.     return (OK);
  130.     }
  131. #endif /* __INCusrVxFusionc */