Skip to content

Commit

Permalink
fix nasa#759 - removes GetLastSenderId()
Browse files Browse the repository at this point in the history
  • Loading branch information
CDKnightNASA committed Jun 26, 2020
1 parent 1df042b commit 2a17ed2
Show file tree
Hide file tree
Showing 7 changed files with 1 addition and 351 deletions.
11 changes: 0 additions & 11 deletions docs/cFE Application Developers Guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -1769,7 +1769,6 @@ for extracting that field from the header:
| Total Message Length | CFE_SB_GetTotalMsgLength | Command & Telemetry |
| User Data Message Length | CFE_SB_GetUserDataLength | Command & Telemetry |
| Command Code | CFE_SB_GetCmdCode | Command Only |
| Sender ID | CFE_SB_GetLastSenderId | Command & Telemetry |
| Checksum | CFE_SB_GetChecksum | Command Only |

In addition to the function for reading the checksum field, there is
Expand All @@ -1778,15 +1777,6 @@ and compares it to the checksum in the header. The API is called
CFE_SB_ValidateChecksum() and it simply returns a success or failure
indication.

It should be noted that the function, CFE_SB_GetLastSendId, is ideal
for verifying that critical commands are arriving from a legitimate
source. This function allows the Developer(s) to define a strict ICD
between two or more Applications to ensure that an erroneous Application
does not accidentally issue a critical command. However, its use for
routine command verification is discouraged since it would increase the
cross-coupling between Applications and require multiple Applications to
be modified if a command's source changes.

If the Application's data structure definitions don't include the header
information, then the CFE_SB_GetUserData API could be used to obtain
the start address of the SB Message data.
Expand Down Expand Up @@ -1880,7 +1870,6 @@ After a message is received, the SB Message Header accessor functions (as
described in Section 6.5.3) should be used to identify the message so that
the application can react to it appropriately.


#### 6.8 Improving Message Transfer Performance for Large SB Messages

Occasionally, there is a need for large quantities of data to be passed
Expand Down
1 change: 0 additions & 1 deletion docs/src/cfe_api.dox
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,6 @@
<LI> #CFE_SB_GetTotalMsgLength - \copybrief CFE_SB_GetTotalMsgLength
<LI> #CFE_SB_GetMsgTime - \copybrief CFE_SB_GetMsgTime
<LI> #CFE_SB_GetCmdCode - \copybrief CFE_SB_GetCmdCode
<LI> #CFE_SB_GetLastSenderId - \copybrief CFE_SB_GetLastSenderId
<LI> #CFE_SB_MessageStringGet - \copybrief CFE_SB_MessageStringGet
</UL>
<LI> \ref CFEAPISBChecksum
Expand Down
41 changes: 0 additions & 41 deletions fsw/cfe-core/src/inc/cfe_sb.h
Original file line number Diff line number Diff line change
Expand Up @@ -208,16 +208,6 @@ typedef struct {
extern CFE_SB_Qos_t CFE_SB_Default_Qos;/**< \brief Defines a default priority and reliabilty for off-board routing */


/** \brief Message Sender Identification Type Definition
**
** Parameter used in #CFE_SB_GetLastSenderId API which allows the receiver of a message
** to validate the sender of the message.
**/
typedef struct {
uint32 ProcessorId;/**< \brief Processor Id from which the message was sent */
char AppName[OS_MAX_API_NAME];/**< \brief Application that sent the message */
} CFE_SB_SenderId_t;

/****************** Function Prototypes **********************/

/** @defgroup CFEAPISBPipe cFE Pipe Management APIs
Expand Down Expand Up @@ -1173,37 +1163,6 @@ uint16 CFE_SB_GetCmdCode(CFE_SB_MsgPtr_t MsgPtr);
**/
CFE_TIME_SysTime_t CFE_SB_GetMsgTime(CFE_SB_MsgPtr_t MsgPtr);

/*****************************************************************************/
/**
** \brief Retrieve the application Info of the sender for the last message.
**
** \par Description
** This routine can be used after a successful #CFE_SB_RcvMsg call
** to find out which application sent the message that was received.
**
** \par Assumptions, External Events, and Notes:
** Note - If an error occurs in this API, the *Ptr value may be NULL or
** random. Therefore, it is recommended that the return code be tested
** for CFE_SUCCESS before reading the sender information.
**
** \param[in] Ptr A pointer to a local variable of type #CFE_SB_SenderId_t.
** Typically a caller declares a ptr of type CFE_SB_SenderId_t
** (i.e. CFE_SB_SenderId_t *Ptr) then gives the address of that
** pointer (&Ptr) for this parameter. After a successful call
** to this API, *Ptr will point to the first byte of the
** CFE_SB_SenderId_t structure containing the sender information
** for the last message received on the given pipe. This should
** be used as a read-only pointer (in systems with an MMU, writes
** to this pointer may cause a memory protection fault). The *Ptr
** is valid only until the next call to CFE_SB_RcvMsg for the
** same pipe.
**
** \param[in] PipeId The pipe ID of the pipe the message was taken from.
**
** \return The last sender's application ID
**/
uint32 CFE_SB_GetLastSenderId(CFE_SB_SenderId_t **Ptr,CFE_SB_PipeId_t PipeId);

/******************************************************************************/
/**
** \brief Copies a string out of a software bus message
Expand Down
73 changes: 0 additions & 73 deletions fsw/cfe-core/src/sb/cfe_sb_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -1320,13 +1320,6 @@ int32 CFE_SB_SendMsgFull(CFE_SB_Msg_t *MsgPtr,
RtgTblPtr->SeqCnt);
}/* end if */

/* store the sender information */
if(CFE_SB.SenderReporting != 0)
{
BufDscPtr->Sender.ProcessorId = CFE_PSP_GetProcessorId();
strncpy(&BufDscPtr->Sender.AppName[0],CFE_SB_GetAppTskName(TskId,FullName),OS_MAX_API_NAME);
}

/* At this point there must be at least one destination for pkt */

/* Send the packet to all destinations */
Expand Down Expand Up @@ -1620,72 +1613,6 @@ int32 CFE_SB_RcvMsg(CFE_SB_MsgPtr_t *BufPtr,
}/* end CFE_SB_RcvMsg */


/*
* Function: CFE_SB_GetLastSenderId - See API and header file for details
*/
uint32 CFE_SB_GetLastSenderId(CFE_SB_SenderId_t **Ptr,CFE_SB_PipeId_t PipeId)
{

CFE_SB_BufferD_t *Ptr2BufDescriptor;
uint32 TskId = 0;
uint32 AppId = 0xFFFFFFFF;
char FullName[(OS_MAX_API_NAME * 2)];

TskId = OS_TaskGetId();

/* validate ptr - note: must validate ptr before pipe id validation */
/* because an invalid pipe id sets the callers pointer to NULL */
if(Ptr == NULL){
CFE_EVS_SendEventWithAppID(CFE_SB_LSTSNDER_ERR1_EID,CFE_EVS_EventType_ERROR,CFE_SB.AppId,
"SB GetLastSender Err:Rcvd Null Ptr,Pipe=%d,App=%s",
(int)PipeId,CFE_SB_GetAppTskName(TskId,FullName));
return CFE_SB_BAD_ARGUMENT;
}/* end if */

/* validate pipe id */
if(CFE_SB_ValidatePipeId(PipeId)!=CFE_SUCCESS){
*Ptr = NULL;
CFE_EVS_SendEventWithAppID(CFE_SB_LSTSNDER_ERR2_EID,CFE_EVS_EventType_ERROR,CFE_SB.AppId,
"SB GetLastSender Err:Rcvd Invalid Pipe=%d,App=%s",
(int)PipeId,CFE_SB_GetAppTskName(TskId,FullName));
return CFE_SB_BAD_ARGUMENT;
}/* end if */

CFE_ES_GetAppID(&AppId);

CFE_SB_LockSharedData(__func__,__LINE__);

/* verify requestor is owner of pipe */
if(CFE_SB.PipeTbl[PipeId].AppId != AppId){
*Ptr = NULL;
CFE_SB_UnlockSharedData(__func__,__LINE__);
CFE_EVS_SendEventWithAppID(CFE_SB_GLS_INV_CALLER_EID,CFE_EVS_EventType_ERROR,CFE_SB.AppId,
"SB GetLastSender Err:Caller(%s) is not the owner of pipe %d",
CFE_SB_GetAppTskName(TskId,FullName),(int)PipeId);
return CFE_SB_BAD_ARGUMENT;
}/* end if */

/* Get ptr to buffer descriptor for the last msg received on the given pipe */
Ptr2BufDescriptor = CFE_SB.PipeTbl[PipeId].CurrentBuff;

if ( Ptr2BufDescriptor == NULL )
{
*Ptr = NULL;
CFE_SB.PipeTbl[PipeId].LastSender = CFE_SB_INVALID_MSG_ID;
CFE_SB_UnlockSharedData(__func__,__LINE__);
return CFE_SB_NO_MSG_RECV;
}
else
{
/* Set the receivers pointer to the adr of 'Sender' struct in buf descriptor */
*Ptr = (CFE_SB_SenderId_t *) &Ptr2BufDescriptor -> Sender;
CFE_SB_UnlockSharedData(__func__,__LINE__);
return CFE_SUCCESS;
}

}/* end CFE_SB_GetLastSenderId */


/*
* Function: CFE_SB_ZeroCopyGetPtr - See API and header file for details
*/
Expand Down
1 change: 0 additions & 1 deletion fsw/cfe-core/src/sb/cfe_sb_priv.h
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,6 @@ typedef struct {
uint16 UseCount;
uint32 Size;
void *Buffer;
CFE_SB_SenderId_t Sender;
} CFE_SB_BufferD_t;


Expand Down
116 changes: 0 additions & 116 deletions fsw/cfe-core/unit-test/sb_UT.c
Original file line number Diff line number Diff line change
Expand Up @@ -3332,11 +3332,6 @@ void Test_RcvMsg_API(void)
SB_UT_ADD_SUBTEST(Test_RcvMsg_InvalidPipeId);
SB_UT_ADD_SUBTEST(Test_RcvMsg_InvalidTimeout);
SB_UT_ADD_SUBTEST(Test_RcvMsg_Poll);
SB_UT_ADD_SUBTEST(Test_RcvMsg_GetLastSenderNull);
SB_UT_ADD_SUBTEST(Test_RcvMsg_GetLastSenderInvalidPipe);
SB_UT_ADD_SUBTEST(Test_RcvMsg_GetLastSenderInvalidCaller);
SB_UT_ADD_SUBTEST(Test_RcvMsg_GetLastSenderNoValidSender);
SB_UT_ADD_SUBTEST(Test_RcvMsg_GetLastSenderSuccess);
SB_UT_ADD_SUBTEST(Test_RcvMsg_Timeout);
SB_UT_ADD_SUBTEST(Test_RcvMsg_PipeReadError);
SB_UT_ADD_SUBTEST(Test_RcvMsg_PendForever);
Expand Down Expand Up @@ -3405,117 +3400,6 @@ void Test_RcvMsg_Poll(void)

} /* end Test_RcvMsg_Poll */

/*
** Test receive last message response to a null sender ID
*/
void Test_RcvMsg_GetLastSenderNull(void)
{
CFE_SB_PipeId_t PipeId;
uint32 PipeDepth = 10;

SETUP(CFE_SB_CreatePipe(&PipeId, PipeDepth, "RcvMsgTestPipe"));

ASSERT_EQ(CFE_SB_GetLastSenderId(NULL, PipeId), CFE_SB_BAD_ARGUMENT);

EVTCNT(2);

EVTSENT(CFE_SB_LSTSNDER_ERR1_EID);

TEARDOWN(CFE_SB_DeletePipe(PipeId));

} /* end Test_RcvMsg_GetLastSenderNull */

/*
** Test receive last message response to an invalid pipe ID
*/
void Test_RcvMsg_GetLastSenderInvalidPipe(void)
{
CFE_SB_PipeId_t PipeId;
CFE_SB_PipeId_t InvalidPipeId = 250;
CFE_SB_SenderId_t *GLSPtr;
uint32 PipeDepth = 10;

SETUP(CFE_SB_CreatePipe(&PipeId, PipeDepth, "RcvMsgTestPipe"));

ASSERT_EQ(CFE_SB_GetLastSenderId(&GLSPtr, InvalidPipeId), CFE_SB_BAD_ARGUMENT);

EVTCNT(2);

EVTSENT(CFE_SB_LSTSNDER_ERR2_EID);

TEARDOWN(CFE_SB_DeletePipe(PipeId));

} /* end Test_RcvMsg_GetLastSenderInvalidPipe */

/*
** Test receive last message response to an invalid owner ID
*/
void Test_RcvMsg_GetLastSenderInvalidCaller(void)
{
CFE_SB_PipeId_t PipeId;
CFE_SB_SenderId_t *GLSPtr;
uint32 PipeDepth = 10;
uint32 OrigPipeOwner;

SETUP(CFE_SB_CreatePipe(&PipeId, PipeDepth, "RcvMsgTestPipe"));

/* Change pipe owner ID to execute 'invalid caller' code */
OrigPipeOwner = CFE_SB.PipeTbl[PipeId].AppId;
CFE_SB.PipeTbl[PipeId].AppId = OrigPipeOwner + 1;
ASSERT_EQ(CFE_SB_GetLastSenderId(&GLSPtr, PipeId), CFE_SB_BAD_ARGUMENT);

EVTCNT(2);

EVTSENT(CFE_SB_GLS_INV_CALLER_EID);

/* Restore original pipe owner apid */
CFE_SB.PipeTbl[PipeId].AppId = OrigPipeOwner;
TEARDOWN(CFE_SB_DeletePipe(PipeId));

} /* end Test_RcvMsg_GetLastSenderInvalidCaller */


void Test_RcvMsg_GetLastSenderNoValidSender(void)
{
CFE_SB_PipeId_t PipeId;
CFE_SB_SenderId_t *GLSPtr;
uint32 PipeDepth = 10;

SETUP(CFE_SB_CreatePipe(&PipeId, PipeDepth, "RcvMsgTestPipe"));
ASSERT_EQ(CFE_SB_GetLastSenderId(&GLSPtr, PipeId), CFE_SB_NO_MSG_RECV);

EVTCNT(1);

TEARDOWN(CFE_SB_DeletePipe(PipeId));

} /* end Test_RcvMsg_GetLastSenderNoValidSender */


/*
** Test successful receive last message request
*/
void Test_RcvMsg_GetLastSenderSuccess(void)
{
CFE_SB_PipeId_t PipeId;
CFE_SB_SenderId_t *GLSPtr;
SB_UT_Test_Tlm_t TlmPkt;
CFE_SB_MsgPtr_t TlmPktPtr = (CFE_SB_MsgPtr_t) &TlmPkt;
CFE_SB_MsgPtr_t PtrToMsg;
uint32 PipeDepth = 10;

SETUP(CFE_SB_CreatePipe(&PipeId, PipeDepth, "RcvMsgTestPipe"));
CFE_SB_InitMsg(&TlmPkt, SB_UT_TLM_MID, sizeof(TlmPkt), true);
SETUP(CFE_SB_Subscribe(SB_UT_TLM_MID, PipeId));
SETUP(CFE_SB_SendMsg(TlmPktPtr));
SETUP(CFE_SB_RcvMsg(&PtrToMsg, PipeId,CFE_SB_PEND_FOREVER));
ASSERT(CFE_SB_GetLastSenderId(&GLSPtr, PipeId));

EVTCNT(3);

TEARDOWN(CFE_SB_DeletePipe(PipeId));

} /* end Test_RcvMsg_GetLastSenderSuccess */

/*
** Test receiving a message response to a timeout
*/
Expand Down
Loading

0 comments on commit 2a17ed2

Please sign in to comment.