-:    0:Source:/home/MPI/testing/mpich2/mpich2/src/mpid/ch3/src/mpidi_printf.c
        -:    0:Graph:mpidi_printf.gcno
        -:    0:Data:-
        -:    0:Runs:0
        -:    0:Programs:0
        -:    1:/* -*- Mode: C; c-basic-offset:4 ; -*- */
        -:    2:/*
        -:    3: *  (C) 2001 by Argonne National Laboratory.
        -:    4: *      See COPYRIGHT in top-level directory.
        -:    5: */
        -:    6:
        -:    7:#include "mpidimpl.h"
        -:    8:#include <stdio.h>
        -:    9:#include <stdarg.h>
        -:   10:
        -:   11:/* style: allow:vprintf:1 sig:0 */
        -:   12:/* style: allow:printf:2 sig:0 */
        -:   13:
        -:   14:/* FIXME: What are these routines for?  Who uses them?  Why are they different 
        -:   15:   from the src/util/dbg routines? */
        -:   16:
        -:   17:/*
        -:   18: * Note on thread safety.  These routines originally used 
        -:   19: * MPID_Common_thread_lock/unlock, but that lock was not defined or used
        -:   20: * consistently with the global mutex approach (now defined as
        -:   21: * SINGLE_CS_ENTER/EXIT).  As these debugging routines should also
        -:   22: * be withdrawn in favor of the general messaging utility, the
        -:   23: * Common_thread_lock/unlock has been removed.
        -:   24: */
        -:   25:
        -:   26:#undef MPIDI_dbg_printf
        -:   27:void MPIDI_dbg_printf(int level, char * func, char * fmt, ...)
    #####:   28:{
        -:   29:    /* FIXME: This "unreferenced_arg" is an example of a problem with the 
        -:   30:       API (unneeded level argument) or the code (failure to check the 
        -:   31:       level argument).  Inserting these "unreference_arg" macros erroneously
        -:   32:       suggests that the code is correct with this ununsed argument, and thus
        -:   33:       commits the grave harm of obscuring a real problem */
        -:   34:    MPIU_UNREFERENCED_ARG(level);
        -:   35:    {
        -:   36:	va_list list;
        -:   37:
    #####:   38:	if (MPIR_Process.comm_world)
        -:   39:	{
    #####:   40:	    MPIU_dbglog_printf("[%d] %s(): ", MPIR_Process.comm_world->rank, func);
        -:   41:	}
        -:   42:	else
        -:   43:	{
    #####:   44:	    MPIU_dbglog_printf("[-1] %s(): ", func);
        -:   45:	}
    #####:   46:	va_start(list, fmt);
    #####:   47:	MPIU_dbglog_vprintf(fmt, list);
    #####:   48:	va_end(list);
    #####:   49:	MPIU_dbglog_printf("\n");
    #####:   50:	fflush(stdout);
        -:   51:    }
    #####:   52:}
        -:   53:
        -:   54:#undef MPIDI_err_printf
        -:   55:void MPIDI_err_printf(char * func, char * fmt, ...)
    #####:   56:{
        -:   57:    {
        -:   58:	va_list list;
        -:   59:
    #####:   60:	if (MPIR_Process.comm_world)
        -:   61:	{
    #####:   62:	    printf("[%d] ERROR - %s(): ", MPIR_Process.comm_world->rank, func);
        -:   63:	}
        -:   64:	else
        -:   65:	{
    #####:   66:	    printf("[-1] ERROR - %s(): ", func);
        -:   67:	}
    #####:   68:	va_start(list, fmt);
    #####:   69:	vprintf(fmt, list);
    #####:   70:	va_end(list);
    #####:   71:	printf("\n");
    #####:   72:	fflush(stdout);
        -:   73:    }
    #####:   74:}
        -:   75:
        -:   76:/* FIXME: It would be much better if the routine to print packets used
        -:   77:   routines defined by packet type, making it easier to modify the handling
        -:   78:   of packet types (and allowing channels to customize the printing
        -:   79:   of packets). For example, an array of function pointers, indexed by
        -:   80:   packet type, could be used.
        -:   81:   Also, these routines should not use MPIU_DBG_PRINTF, instead they should
        -:   82:   us a simple fprintf with a style allowance (so that the style checker
        -:   83:   won't flag the use as a possible problem).  
        -:   84:
        -:   85:   This should switch to using a table of functions
        -:   86:
        -:   87:   MPIDI_PktPrintFunctions[pkt->type](stdout,pkt);
        -:   88:
        -:   89:*/
        -:   90:
        -:   91:#ifdef MPICH_DBG_OUTPUT
        -:   92:void MPIDI_DBG_Print_packet(MPIDI_CH3_Pkt_t *pkt)
        -:   93:{
        -:   94:    {
        -:   95:	MPIU_DBG_PRINTF(("MPIDI_CH3_Pkt_t:\n"));
        -:   96:	switch(pkt->type)
        -:   97:	{
        -:   98:	    case MPIDI_CH3_PKT_EAGER_SEND:
        -:   99:		MPIDI_CH3_PktPrint_EagerSend( stdout, pkt );
        -:  100:		break;
        -:  101:	    case MPIDI_CH3_PKT_READY_SEND:
        -:  102:		MPIDI_CH3_PktPrint_ReadySend( stdout, pkt );
        -:  103:		break;
        -:  104:
        -:  105:	    case MPIDI_CH3_PKT_EAGER_SYNC_SEND:
        -:  106:		MPIDI_CH3_PktPrint_EagerSyncSend( stdout, pkt );
        -:  107:		break;
        -:  108:	    case MPIDI_CH3_PKT_EAGER_SYNC_ACK:
        -:  109:		MPIDI_CH3_PktPrint_EagerSyncAck( stdout, pkt );
        -:  110:		break;
        -:  111:
        -:  112:	    case MPIDI_CH3_PKT_RNDV_REQ_TO_SEND:
        -:  113:		MPIDI_CH3_PktPrint_RndvReqToSend( stdout, pkt );
        -:  114:		break;
        -:  115:	    case MPIDI_CH3_PKT_RNDV_CLR_TO_SEND:
        -:  116:		MPIDI_CH3_PktPrint_RndvClrToSend( stdout, pkt );
        -:  117:		break;
        -:  118:	    case MPIDI_CH3_PKT_RNDV_SEND:
        -:  119:		MPIDI_CH3_PktPrint_RndvSend( stdout, pkt );
        -:  120:		break;
        -:  121:
        -:  122:	    case MPIDI_CH3_PKT_CANCEL_SEND_REQ:
        -:  123:		MPIDI_CH3_PktPrint_CancelSendReq( stdout, pkt );
        -:  124:		break;
        -:  125:	    case MPIDI_CH3_PKT_CANCEL_SEND_RESP:
        -:  126:		MPIDI_CH3_PktPrint_CancelSendResp( stdout, pkt );
        -:  127:		break;
        -:  128:
        -:  129:		/* FIXME: Move these RMA descriptions into the RMA code files */
        -:  130:	    case MPIDI_CH3_PKT_PUT:
        -:  131:		MPIDI_CH3_PktPrint_Put( stdout, pkt );
        -:  132:		break;
        -:  133:	    case MPIDI_CH3_PKT_GET:
        -:  134:		MPIDI_CH3_PktPrint_Get( stdout, pkt );
        -:  135:		break;
        -:  136:	    case MPIDI_CH3_PKT_GET_RESP:
        -:  137:		MPIDI_CH3_PktPrint_GetResp( stdout, pkt );
        -:  138:		break;
        -:  139:	    case MPIDI_CH3_PKT_ACCUMULATE:
        -:  140:		MPIDI_CH3_PktPrint_Accumulate( stdout, pkt );
        -:  141:		break;
        -:  142:	    case MPIDI_CH3_PKT_LOCK:
        -:  143:		MPIDI_CH3_PktPrint_Lock( stdout, pkt );
        -:  144:		break;
        -:  145:	    case MPIDI_CH3_PKT_LOCK_PUT_UNLOCK:
        -:  146:		MPIDI_CH3_PktPrint_LockPutUnlock( stdout, pkt );
        -:  147:		break;
        -:  148:	    case MPIDI_CH3_PKT_LOCK_ACCUM_UNLOCK:
        -:  149:		MPIDI_CH3_PktPrint_LockAccumUnlock( stdout, pkt );
        -:  150:		break;
        -:  151:	    case MPIDI_CH3_PKT_LOCK_GET_UNLOCK:
        -:  152:		MPIDI_CH3_PktPrint_LockGetUnlock( stdout, pkt );
        -:  153:		break;
        -:  154:	    case MPIDI_CH3_PKT_PT_RMA_DONE:
        -:  155:		MPIDI_CH3_PktPrint_PtRMADone( stdout, pkt );
        -:  156:		break;
        -:  157:	    case MPIDI_CH3_PKT_LOCK_GRANTED:
        -:  158:		MPIDI_CH3_PktPrint_LockGranted( stdout, pkt );
        -:  159:		break;
        -:  160:		/*
        -:  161:	    case MPIDI_CH3_PKT_SHARED_LOCK_OPS_DONE:
        -:  162:		MPIU_DBG_PRINTF((" type ......... MPIDI_CH3_PKT_SHARED_LOCK_OPS_DONE\n"));
        -:  163:		MPIU_DBG_PRINTF((" source ....... 0x%08X\n", pkt->shared_lock_ops_done.source_win_handle));
        -:  164:		break;
        -:  165:		*/
        -:  166:	    case MPIDI_CH3_PKT_FLOW_CNTL_UPDATE:
        -:  167:		MPIU_DBG_PRINTF((" FLOW_CNTRL_UPDATE\n"));
        -:  168:		break;
        -:  169:
        -:  170:	    case MPIDI_CH3_PKT_CLOSE:
        -:  171:		MPIDI_CH3_PktPrint_Close( stdout, pkt );
        -:  172:		break;
        -:  173:	    
        -:  174:	    default:
        -:  175:		MPIU_DBG_PRINTF((" INVALID PACKET\n"));
        -:  176:		MPIU_DBG_PRINTF((" unknown type ... %d\n", pkt->type));
        -:  177:		MPIU_DBG_PRINTF(("  type .......... EAGER_SEND\n"));
        -:  178:		MPIU_DBG_PRINTF(("   sender_reqid . 0x%08X\n", pkt->eager_send.sender_req_id));
        -:  179:		MPIU_DBG_PRINTF(("   context_id ... %d\n", pkt->eager_send.match.parts.context_id));
        -:  180:		MPIU_DBG_PRINTF(("   data_sz ...... %d\n", pkt->eager_send.data_sz));
        -:  181:		MPIU_DBG_PRINTF(("   tag .......... %d\n", pkt->eager_send.match.parts.tag));
        -:  182:		MPIU_DBG_PRINTF(("   rank ......... %d\n", pkt->eager_send.match.parts.rank));
        -:  183:#ifdef MPID_USE_SEQUENCE_NUMBERS
        -:  184:		MPIU_DBG_PRINTF(("   seqnum ....... %d\n", pkt->eager_send.seqnum));
        -:  185:#endif
        -:  186:		MPIU_DBG_PRINTF(("  type .......... REQ_TO_SEND\n"));
        -:  187:		MPIU_DBG_PRINTF(("   sender_reqid . 0x%08X\n", pkt->rndv_req_to_send.sender_req_id));
        -:  188:		MPIU_DBG_PRINTF(("   context_id ... %d\n", pkt->rndv_req_to_send.match.parts.context_id));
        -:  189:		MPIU_DBG_PRINTF(("   data_sz ...... %d\n", pkt->rndv_req_to_send.data_sz));
        -:  190:		MPIU_DBG_PRINTF(("   tag .......... %d\n", pkt->rndv_req_to_send.match.parts.tag));
        -:  191:		MPIU_DBG_PRINTF(("   rank ......... %d\n", pkt->rndv_req_to_send.match.parts.rank));
        -:  192:#ifdef MPID_USE_SEQUENCE_NUMBERS
        -:  193:		MPIU_DBG_PRINTF(("   seqnum ....... %d\n", pkt->rndv_req_to_send.seqnum));
        -:  194:#endif
        -:  195:		MPIU_DBG_PRINTF(("  type .......... CLR_TO_SEND\n"));
        -:  196:		MPIU_DBG_PRINTF(("   sender_reqid . 0x%08X\n", pkt->rndv_clr_to_send.sender_req_id));
        -:  197:		MPIU_DBG_PRINTF(("   recvr_reqid .. 0x%08X\n", pkt->rndv_clr_to_send.receiver_req_id));
        -:  198:		MPIU_DBG_PRINTF(("  type .......... RNDV_SEND\n"));
        -:  199:		MPIU_DBG_PRINTF(("   recvr_reqid .. 0x%08X\n", pkt->rndv_send.receiver_req_id));
        -:  200:		MPIU_DBG_PRINTF(("  type .......... CANCEL_SEND\n"));
        -:  201:		MPIU_DBG_PRINTF(("   context_id ... %d\n", pkt->cancel_send_req.match.parts.context_id));
        -:  202:		MPIU_DBG_PRINTF(("   tag .......... %d\n", pkt->cancel_send_req.match.parts.tag));
        -:  203:		MPIU_DBG_PRINTF(("   rank ......... %d\n", pkt->cancel_send_req.match.parts.rank));
        -:  204:		MPIU_DBG_PRINTF(("   sender_reqid . 0x%08X\n", pkt->cancel_send_req.sender_req_id));
        -:  205:		MPIU_DBG_PRINTF(("  type .......... CANCEL_SEND_RESP\n"));
        -:  206:		MPIU_DBG_PRINTF(("   sender_reqid . 0x%08X\n", pkt->cancel_send_resp.sender_req_id));
        -:  207:		MPIU_DBG_PRINTF(("   ack .......... %d\n", pkt->cancel_send_resp.ack));
        -:  208:		break;
        -:  209:	}
        -:  210:    }
        -:  211:}
        -:  212:#endif
        -:  213:
        -:  214:
        -:  215:const char * MPIDI_VC_GetStateString(int state)
    #####:  216:{
    #####:  217:    switch (state)
        -:  218:    {
        -:  219:	case MPIDI_VC_STATE_INACTIVE:
    #####:  220:	    return "MPIDI_VC_STATE_INACTIVE";
        -:  221:	case MPIDI_VC_STATE_ACTIVE:
    #####:  222:	    return "MPIDI_VC_STATE_ACTIVE";
        -:  223:	case MPIDI_VC_STATE_LOCAL_CLOSE:
    #####:  224:	    return "MPIDI_VC_STATE_LOCAL_CLOSE";
        -:  225:	case MPIDI_VC_STATE_REMOTE_CLOSE:
    #####:  226:	    return "MPIDI_VC_STATE_REMOTE_CLOSE";
        -:  227:	case MPIDI_VC_STATE_CLOSE_ACKED:
    #####:  228:	    return "MPIDI_VC_STATE_CLOSE_ACKED";
        -:  229:	default:
    #####:  230:	    return "unknown";
        -:  231:    }
        -:  232:}
        -:  233:
        -:  234:/* This routine is not thread safe and should only be used while
        -:  235:   debugging.  It is used to encode a brief description of a message
        -:  236:   packet into a string to make it easy to include in the message log
        -:  237:   output (with no newlines to simplify extracting info from the log file) 
        -:  238:*/
        -:  239:const char *MPIDI_Pkt_GetDescString( MPIDI_CH3_Pkt_t *pkt ) 
    #####:  240:{
        -:  241:    static char pktmsg[256];
        -:  242:
        -:  243:    /* For data messages, the string (...) is (context,tag,rank,size) */
    #####:  244:    switch(pkt->type) {
        -:  245:    case MPIDI_CH3_PKT_EAGER_SEND:
    #####:  246:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  247:		       "EAGER_SEND - (%d,%d,%d,)" MPIDI_MSG_SZ_FMT, 
        -:  248:		       pkt->eager_send.match.parts.context_id,
        -:  249:		       (int)pkt->eager_send.match.parts.tag, 
        -:  250:		       pkt->eager_send.match.parts.rank, 
        -:  251:		       pkt->eager_send.data_sz );
    #####:  252:	break;
        -:  253:    case MPIDI_CH3_PKT_EAGER_SYNC_SEND:
    #####:  254:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  255:		       "EAGER_SYNC_SEND - (%d,%d,%d,)" MPIDI_MSG_SZ_FMT " req=%d", 
        -:  256:		       pkt->eager_sync_send.match.parts.context_id,
        -:  257:		       (int)pkt->eager_sync_send.match.parts.tag, 
        -:  258:		       pkt->eager_sync_send.match.parts.rank, 
        -:  259:		       pkt->eager_sync_send.data_sz,
        -:  260:		       pkt->eager_sync_send.sender_req_id );
    #####:  261:		break;
        -:  262:    case MPIDI_CH3_PKT_EAGER_SYNC_ACK:
    #####:  263:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  264:		       "EAGER_SYNC_ACK - req=%d", 
        -:  265:		       pkt->eager_sync_ack.sender_req_id );
    #####:  266:	break;
        -:  267:    case MPIDI_CH3_PKT_READY_SEND:
    #####:  268:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  269:		       "READY_SEND - (%d,%d,%d,)" MPIDI_MSG_SZ_FMT, 
        -:  270:		       pkt->ready_send.match.parts.context_id,
        -:  271:		       (int)pkt->ready_send.match.parts.tag, 
        -:  272:		       pkt->ready_send.match.parts.rank, 
        -:  273:		       pkt->ready_send.data_sz );
    #####:  274:	break;
        -:  275:    case MPIDI_CH3_PKT_RNDV_REQ_TO_SEND:
    #####:  276:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  277:		       "RNDV_REQ_TO_SEND - (%d,%d,%d,)" MPIDI_MSG_SZ_FMT " req=%d", 
        -:  278:		       pkt->rndv_req_to_send.match.parts.context_id,
        -:  279:		       (int)pkt->rndv_req_to_send.match.parts.tag, 
        -:  280:		       pkt->rndv_req_to_send.match.parts.rank, 
        -:  281:		       pkt->rndv_req_to_send.data_sz,
        -:  282:		       pkt->rndv_req_to_send.sender_req_id );
    #####:  283:	break;
        -:  284:    case MPIDI_CH3_PKT_RNDV_CLR_TO_SEND:
    #####:  285:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  286:		       "RNDV_CLRTO_SEND - req=%d, recv req=%d", 
        -:  287:		       pkt->rndv_clr_to_send.sender_req_id,
        -:  288:		       pkt->rndv_clr_to_send.receiver_req_id );
    #####:  289:		break;
        -:  290:    case MPIDI_CH3_PKT_RNDV_SEND:
    #####:  291:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  292:		       "RNDV_SEND - recv req=%d", 
        -:  293:		       pkt->rndv_send.receiver_req_id );
    #####:  294:	break;
        -:  295:    case MPIDI_CH3_PKT_CANCEL_SEND_REQ:
    #####:  296:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  297:		       "CANCEL_SEND_REQ - req=%d", 
        -:  298:		       pkt->cancel_send_req.sender_req_id );
    #####:  299:	break;
        -:  300:    case MPIDI_CH3_PKT_CANCEL_SEND_RESP:
    #####:  301:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  302:		       "CANCEL_SEND_RESP - req=%d ack=%d", 
        -:  303:		       pkt->cancel_send_resp.sender_req_id, 
        -:  304:		       pkt->cancel_send_resp.ack );
    #####:  305:	break;
        -:  306:    case MPIDI_CH3_PKT_PUT:
    #####:  307:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  308:		       "PUT - (%p,%d,0x%08X)", 
        -:  309:		       pkt->put.addr, 
        -:  310:		       pkt->put.count,
        -:  311:		       pkt->put.target_win_handle );
    #####:  312:		break;
        -:  313:    case MPIDI_CH3_PKT_GET:
    #####:  314:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  315:		       "GET - (%p,%d,0x%08X) req=%d", 
        -:  316:		       pkt->get.addr, 
        -:  317:		       pkt->get.count,
        -:  318:		       pkt->get.target_win_handle,
        -:  319:		       pkt->get.request_handle );
    #####:  320:	break;
        -:  321:    case MPIDI_CH3_PKT_GET_RESP:
    #####:  322:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  323:		       "GET_RESP - req=%d", 
        -:  324:		       pkt->get_resp.request_handle );
    #####:  325:	break;
        -:  326:    case MPIDI_CH3_PKT_ACCUMULATE:
    #####:  327:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  328:		       "ACCUMULATE - (%p,%d,0x%08X)", 
        -:  329:		       pkt->accum.addr,
        -:  330:		       pkt->accum.count, 
        -:  331:		       pkt->accum.target_win_handle );
    #####:  332:	break;
        -:  333:    case MPIDI_CH3_PKT_LOCK:
    #####:  334:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  335:		       "LOCK - %d", 
        -:  336:		       pkt->lock.target_win_handle );
    #####:  337:	break;
        -:  338:    case MPIDI_CH3_PKT_LOCK_PUT_UNLOCK:
    #####:  339:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  340:		       "PUT_UNLOCK - (%p,%d,0x%08X)", 
        -:  341:		       pkt->lock_put_unlock.addr,
        -:  342:		       pkt->lock_put_unlock.count,
        -:  343:		       pkt->lock_put_unlock.target_win_handle );
    #####:  344:	break;
        -:  345:    case MPIDI_CH3_PKT_LOCK_ACCUM_UNLOCK:
    #####:  346:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  347:		       "LOCK_ACCUM_UNLOCK - (%p,%d,0x%08X)", 
        -:  348:		       pkt->lock_accum_unlock.addr,
        -:  349:		       pkt->lock_accum_unlock.count,
        -:  350:		       pkt->lock_accum_unlock.target_win_handle );
    #####:  351:	break;
        -:  352:    case MPIDI_CH3_PKT_LOCK_GET_UNLOCK:
    #####:  353:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  354:		       "LOCK_GET_UNLOCK - (%p,%d,0x%08X) req=%d", 
        -:  355:		       pkt->lock_get_unlock.addr,
        -:  356:		       pkt->lock_get_unlock.count,
        -:  357:		       pkt->lock_get_unlock.target_win_handle, 
        -:  358:		       pkt->lock_get_unlock.request_handle );
    #####:  359:	break;
        -:  360:    case MPIDI_CH3_PKT_PT_RMA_DONE:
        -:  361:	/* There is no rma_done packet type */
    #####:  362:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  363:		       "RMA_DONE - 0x%08X", 
        -:  364:		       pkt->lock_accum_unlock.source_win_handle );
    #####:  365:	break;
        -:  366:    case MPIDI_CH3_PKT_LOCK_GRANTED:
    #####:  367:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  368:		       "LOCK_GRANTED - 0x%08X", 
        -:  369:		       pkt->lock_granted.source_win_handle );
    #####:  370:		break;
        -:  371:    case MPIDI_CH3_PKT_FLOW_CNTL_UPDATE:
    #####:  372:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  373:		       "FLOW_CNTL_UPDATE" );
    #####:  374:	break;
        -:  375:    case MPIDI_CH3_PKT_CLOSE:
    #####:  376:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  377:		       "CLOSE ack=%d", 
        -:  378:		       pkt->close.ack );
    #####:  379:	break;
        -:  380:	    
        -:  381:    default:
    #####:  382:	MPIU_Snprintf( pktmsg, sizeof(pktmsg), 
        -:  383:		       "INVALID PACKET type=%d", pkt->type );
        -:  384:	break;
        -:  385:    }
        -:  386:
    #####:  387:    return pktmsg;
        -:  388:}