www.pudn.com > vxwork_src.rar > usrVxFusion.c
/* usrVxFusion.c - VxFusion distributed objects initialization */
/* Copyright 1999 Wind River Systems, Inc. */
/*
modification history
--------------------
01d,01jun99,drm Adding code to check for and extract shared memory network
information.
01c,19may99,drm Changing windmp to vxfusion.
01b,10mar99,drm changing WindMP to VxFusion to reflect new product name
01a,01sep98,drm written.
*/
/*
DESCRIPTION
This file is used to initialize the VxFusion distributed object support.
NOMANUAL
*/
#ifndef __INCusrVxFusionc
#define __INCusrVxFusionc
/* includes */
#include "vxWorks.h"
#include "vxfusion/distIfLib.h"
#include "vxfusion/distLib.h"
#include "drv/vxfusion/distIfUdp.h"
/*******************************************************************************
*
* usrVxFusionInit - initialize VxFusion (distributed objects)
*
* This function parses the boot string and then calls distInit() to initialize
* VxFusion using the reference UDP adapter. It uses the boot device name and
* unit number to determine the interface which is passed to the UDP adapter
* as adapter-specific configuration data.
*
*
* RETURNS: OK, or ERROR if unsuccessful.
*
* NOMANUAL
*/
STATUS usrVxFusionInit
(
char * bootString /* boot parameter string */
)
{
STATUS rval; /* the return val from distInit() */
BOOT_PARAMS params; /* boot paramters */
char ipStrAddr [INET_ADDR_LEN]; /* ip address portion of string */
u_long ipAddress; /* ipAddress in integer form */
char *pLoc; /* ptr to delimiting character */
char bootDevStr [BOOT_DEV_LEN]; /* boot device */
char interface [BOOT_DEV_LEN]; /* interface */
if (bootString == NULL)
bootString = BOOT_LINE_ADRS;
/* interpret boot command */
if (usrBootLineCrack (bootString, ¶ms) != OK)
return (ERROR);
/*
* Determine the booting network interface. If the booting interface is
* a non-shared memory interface, assume it is an ethernet interface
* and use the ethernet internet address as the node id. If the booting
* interface is a shared memory interface, use the backplane internet
* address as the node id.
*
* Once these values are determined, call distInit() filling in the rest
* of the parameters using the default values.
*/
strcpy (bootDevStr, params.bootDev);
if ( strncmp (bootDevStr, "sm=",3) == 0)
{
/* Shared memory */
pLoc = strchr (bootDevStr,'=');
if (pLoc)
*pLoc = '\0';
sprintf (interface,"%s%d",bootDevStr, params.unitNum);
strncpy (ipStrAddr, params.bad, INET_ADDR_LEN);
ipStrAddr[INET_ADDR_LEN-1] = '\0';
pLoc = strchr (ipStrAddr,':'); /* Strip subnet mask */
if (pLoc)
*pLoc = '\0';
ipAddress = inet_network (ipStrAddr);
}
else
{
/* Not shared memory - assume an ethernet interface */
pLoc = strchr (bootDevStr,'(');
if (pLoc)
*pLoc = '\0';
sprintf (interface,"%s%d",bootDevStr, params.unitNum);
strncpy (ipStrAddr, params.ead, INET_ADDR_LEN);
ipStrAddr[INET_ADDR_LEN-1] = '\0';
pLoc = strchr (ipStrAddr,':'); /* Strip subnet mask */
if (pLoc)
*pLoc = '\0';
ipAddress = inet_network (ipStrAddr);
}
printf ("Initializing VxFusion with parameters: \n");
printf (" node id: 0x%lx\n", ipAddress);
printf (" interface: %s\n", interface);
printf (" max number of TBufs: %u\n", 1 << DIST_MAX_TBUFS_LOG2_DFLT);
printf (" max number of nodes in node DB: %u\n",
1 << DIST_MAX_NODES_LOG2_DFLT);
printf (" max number of queues on this node: %u\n",
1 << DIST_MAX_QUEUES_LOG2_DFLT);
printf (" max number of groups in group DB: %u\n",
1 << DIST_MAX_GROUPS_LOG2_DFLT);
printf (" max number of entries in name DB: %u\n",
1 << DIST_MAX_NAME_DB_ENTRIES_LOG2_DFLT);
printf (" number of clock ticks to wait: ");
if (DIST_MAX_TICKS_TO_WAIT_DFLT < 0)
{
printf ("FOREVER\n");
}
else
{
printf ("%d\n", DIST_MAX_TICKS_TO_WAIT_DFLT);
}
rval = distInit (ipAddress,
distIfUdpInit,
interface,
DIST_MAX_TBUFS_LOG2_DFLT,
DIST_MAX_NODES_LOG2_DFLT,
DIST_MAX_QUEUES_LOG2_DFLT,
DIST_MAX_GROUPS_LOG2_DFLT,
DIST_MAX_NAME_DB_ENTRIES_LOG2_DFLT,
DIST_MAX_TICKS_TO_WAIT_DFLT );
if (rval != OK)
{
printf ("Unable to initialize VxFusion.\n");
return (ERROR);
}
printf ("VxFusion initialization successful.\n");
return (OK);
}
#endif /* __INCusrVxFusionc */