@@ -123,6 +123,141 @@ void test_xIsIPv4Multicast_IsMultiCast( void )
123123 TEST_ASSERT_EQUAL ( pdTRUE , xReturn );
124124}
125125
126+ /**
127+ * @brief test_xIsIPv4Broadcast_BroadcastAddress
128+ * To validate if xIsIPv4Broadcast() when given broadcast address.
129+ */
130+ void test_xIsIPv4Broadcast_BroadcastAddress ( void )
131+ {
132+ BaseType_t xIsBroadcast ;
133+ NetworkEndPoint_t xEndPoints [ 2 ]; /* IPv6->IPv4 */
134+ NetworkEndPoint_t * pxEndPoint = NULL ;
135+
136+ memset ( & xEndPoints [ 0 ], 0 , sizeof ( NetworkEndPoint_t ) );
137+ xEndPoints [ 0 ].bits .bIPv6 = pdTRUE ;
138+ memset ( & xEndPoints [ 1 ], 0 , sizeof ( NetworkEndPoint_t ) );
139+ xEndPoints [ 1 ].bits .bIPv6 = pdFALSE ;
140+ xEndPoints [ 1 ].ipv4_settings .ulIPAddress = FREERTOS_INADDR_BROADCAST ;
141+
142+ FreeRTOS_FirstEndPoint_ExpectAnyArgsAndReturn ( & xEndPoints [ 0 ] );
143+ FreeRTOS_NextEndPoint_ExpectAndReturn ( NULL , & xEndPoints [ 0 ], & xEndPoints [ 1 ] );
144+
145+ xIsBroadcast = xIsIPv4Broadcast (FREERTOS_INADDR_BROADCAST , & pxEndPoint );
146+
147+ TEST_ASSERT_EQUAL ( pdTRUE , xIsBroadcast );
148+ TEST_ASSERT_EQUAL ( & xEndPoints [ 1 ], pxEndPoint );
149+ }
150+
151+ /**
152+ * @brief test_xIsIPv4Broadcast_BroadcastAddressNoPtr
153+ * To validate if xIsIPv4Broadcast() when given broadcast address but
154+ * no input EP pointer.
155+ */
156+ void test_xIsIPv4Broadcast_BroadcastAddressNoPtr ( void )
157+ {
158+ BaseType_t xIsBroadcast ;
159+ NetworkEndPoint_t xEndPoints [ 2 ]; /* IPv6->IPv4 */
160+
161+ memset ( & xEndPoints [ 0 ], 0 , sizeof ( NetworkEndPoint_t ) );
162+ xEndPoints [ 0 ].bits .bIPv6 = pdTRUE ;
163+ memset ( & xEndPoints [ 1 ], 0 , sizeof ( NetworkEndPoint_t ) );
164+ xEndPoints [ 1 ].bits .bIPv6 = pdFALSE ;
165+ xEndPoints [ 1 ].ipv4_settings .ulIPAddress = FREERTOS_INADDR_BROADCAST ;
166+
167+ FreeRTOS_FirstEndPoint_ExpectAnyArgsAndReturn ( & xEndPoints [ 0 ] );
168+ FreeRTOS_NextEndPoint_ExpectAndReturn ( NULL , & xEndPoints [ 0 ], & xEndPoints [ 1 ] );
169+
170+ xIsBroadcast = xIsIPv4Broadcast (FREERTOS_INADDR_BROADCAST , NULL );
171+
172+ TEST_ASSERT_EQUAL ( pdTRUE , xIsBroadcast );
173+ }
174+
175+ /**
176+ * @brief test_xIsIPv4Broadcast_BroadcastAddressNotFREERTOS_INADDR_BROADCAST
177+ * To validate if
178+ * test_xIsIPv4Broadcast_BroadcastAddressNotFREERTOS_INADDR_BROADCAST()
179+ * when given broadcast address but not FREERTOS_INADDR_BROADCAST.
180+ */
181+ void test_xIsIPv4Broadcast_BroadcastAddressNotFREERTOS_INADDR_BROADCAST ( void )
182+ {
183+ BaseType_t xIsBroadcast ;
184+ NetworkEndPoint_t xEndPoints [ 2 ]; /* IPv6->IPv4 */
185+ NetworkEndPoint_t * pxEndPoint = NULL ;
186+
187+ memset ( & xEndPoints [ 0 ], 0 , sizeof ( NetworkEndPoint_t ) );
188+ xEndPoints [ 0 ].bits .bIPv6 = pdTRUE ;
189+ memset ( & xEndPoints [ 1 ], 0 , sizeof ( NetworkEndPoint_t ) );
190+ xEndPoints [ 1 ].bits .bIPv6 = pdFALSE ;
191+ xEndPoints [ 1 ].ipv4_settings .ulBroadcastAddress = 0xFFFF1234 ;
192+
193+ FreeRTOS_FirstEndPoint_ExpectAnyArgsAndReturn ( & xEndPoints [ 0 ] );
194+ FreeRTOS_NextEndPoint_ExpectAndReturn ( NULL , & xEndPoints [ 0 ], & xEndPoints [ 1 ] );
195+
196+ xIsBroadcast = xIsIPv4Broadcast (0xFFFF1234 , & pxEndPoint );
197+
198+ TEST_ASSERT_EQUAL ( pdTRUE , xIsBroadcast );
199+ TEST_ASSERT_EQUAL ( & xEndPoints [ 1 ], pxEndPoint );
200+ }
201+
202+ /**
203+ * @brief test_xIsIPv4Broadcast_NotBroadcastAddress
204+ * To validate if xIsIPv4Broadcast() when given not a broadcast address.
205+ */
206+ void test_xIsIPv4Broadcast_NotBroadcastAddress ( void )
207+ {
208+ BaseType_t xIsBroadcast ;
209+ NetworkEndPoint_t xEndPoints [ 2 ]; /* IPv6->IPv4 */
210+ NetworkEndPoint_t * pxEndPoint = NULL ;
211+
212+ memset ( & xEndPoints [ 0 ], 0 , sizeof ( NetworkEndPoint_t ) );
213+ xEndPoints [ 0 ].bits .bIPv6 = pdTRUE ;
214+ memset ( & xEndPoints [ 1 ], 0 , sizeof ( NetworkEndPoint_t ) );
215+ xEndPoints [ 1 ].bits .bIPv6 = pdFALSE ;
216+ xEndPoints [ 1 ].ipv4_settings .ulIPAddress = FREERTOS_INADDR_BROADCAST ;
217+
218+ FreeRTOS_FirstEndPoint_ExpectAnyArgsAndReturn ( & xEndPoints [ 0 ] );
219+ FreeRTOS_NextEndPoint_ExpectAndReturn ( NULL , & xEndPoints [ 0 ], & xEndPoints [ 1 ] );
220+ FreeRTOS_NextEndPoint_ExpectAndReturn ( NULL , & xEndPoints [ 1 ], NULL );
221+
222+ xIsBroadcast = xIsIPv4Broadcast (0xABCD1235 , & pxEndPoint );
223+
224+ TEST_ASSERT_EQUAL ( pdFALSE , xIsBroadcast );
225+ TEST_ASSERT_EQUAL ( NULL , pxEndPoint );
226+ }
227+
228+ /**
229+ * @brief test_xIsIPv4Broadcast_NoEndPoints
230+ * To validate if xIsIPv4Broadcast() when no endpoints are there.
231+ */
232+ void test_xIsIPv4Broadcast_NoEndPoints ( void )
233+ {
234+ BaseType_t xIsBroadcast ;
235+ NetworkEndPoint_t * pxEndPoint = NULL ;
236+
237+ FreeRTOS_FirstEndPoint_ExpectAnyArgsAndReturn ( NULL );
238+
239+ xIsBroadcast = xIsIPv4Broadcast (0xABCD1235 , & pxEndPoint );
240+
241+ TEST_ASSERT_EQUAL ( pdFALSE , xIsBroadcast );
242+ TEST_ASSERT_EQUAL ( NULL , pxEndPoint );
243+ }
244+
245+ /**
246+ * @brief test_xIsIPv4Broadcast_NoEndPointsNoPtr
247+ * To validate if xIsIPv4Broadcast() when no endpoints are there
248+ * and no pointer given.
249+ */
250+ void test_xIsIPv4Broadcast_NoEndPointsNoPtr ( void )
251+ {
252+ BaseType_t xIsBroadcast ;
253+
254+ FreeRTOS_FirstEndPoint_ExpectAnyArgsAndReturn ( NULL );
255+
256+ xIsBroadcast = xIsIPv4Broadcast (0xABCD1235 , NULL );
257+
258+ TEST_ASSERT_EQUAL ( pdFALSE , xIsBroadcast );
259+ }
260+
126261/**
127262 * @brief test_prvAllowIPPacketIPv4_LessHeaderLength
128263 * To validate if prvAllowIPPacketIPv4() returns eReleaseBuffer when ucVersionHeaderLength
@@ -448,6 +583,46 @@ void test_prvAllowIPPacketIPv4_DestMACBrdCast_DestIPUnicast( void )
448583 TEST_ASSERT_EQUAL ( eReleaseBuffer , eResult );
449584}
450585
586+ /**
587+ * @brief test_prvAllowIPPacketIPv4_DestMACBrdCast_DestIPBroadcastAndIncorrectChkSum
588+ * To validate if prvAllowIPPacketIPv4() when
589+ * destination MAC address is broadcast address and the IP address is broadcast address.
590+ * And the endpoint is up.
591+ */
592+ void test_prvAllowIPPacketIPv4_DestMACBrdCast_DestIPBroadcastAndIncorrectChkSum ( void )
593+ {
594+ eFrameProcessingResult_t eResult ;
595+ IPPacket_t * pxIPPacket ;
596+ NetworkBufferDescriptor_t * pxNetworkBuffer , xNetworkBuffer ;
597+ UBaseType_t uxHeaderLength = 0 ;
598+ uint8_t ucEthBuffer [ ipconfigTCP_MSS ];
599+ IPHeader_t * pxIPHeader ;
600+ NetworkEndPoint_t xEndpoint ;
601+
602+ memset ( ucEthBuffer , 0 , ipconfigTCP_MSS );
603+
604+ pxNetworkBuffer = & xNetworkBuffer ;
605+ pxNetworkBuffer -> pucEthernetBuffer = ucEthBuffer ;
606+ pxNetworkBuffer -> pxEndPoint = & xEndpoint ;
607+ pxIPPacket = ( IPPacket_t * ) pxNetworkBuffer -> pucEthernetBuffer ;
608+ pxIPHeader = & ( pxIPPacket -> xIPHeader );
609+
610+ pxIPHeader -> ucVersionHeaderLength = 0x45 ;
611+
612+ pxIPHeader -> ulDestinationIPAddress = 0xABCDFFFF ;
613+ xEndpoint .ipv4_settings .ulBroadcastAddress = 0xABCDFFFF ;
614+
615+ memcpy ( pxIPPacket -> xEthernetHeader .xDestinationAddress .ucBytes , xBroadcastMACAddress .ucBytes , sizeof ( MACAddress_t ) );
616+
617+ FreeRTOS_FindEndPointOnMAC_ExpectAnyArgsAndReturn ( NULL );
618+
619+ usGenerateChecksum_ExpectAndReturn ( 0U , ( uint8_t * ) & ( pxIPHeader -> ucVersionHeaderLength ), ( size_t ) uxHeaderLength , ipCORRECT_CRC - 1 );
620+
621+ eResult = prvAllowIPPacketIPv4 ( pxIPPacket , pxNetworkBuffer , uxHeaderLength );
622+
623+ TEST_ASSERT_EQUAL ( eReleaseBuffer , eResult );
624+ }
625+
451626/**
452627 * @brief test_prvAllowIPPacketIPv4_SrcMACBrdCast
453628 * To validate if prvAllowIPPacketIPv4() returns eReleaseBuffer when
0 commit comments