@@ -2325,7 +2325,7 @@ void test_vDHCPv6Process_DifferentDHCPServerRespondedWhileInProcess()
23252325
23262326 xEndPoint .pxDHCPMessage = & xDHCPMessage ;
23272327
2328- FreeRTOS_recvfrom_Stub ( FreeRTOS_recvfrom__DHCPv6_LoopedCall );
2328+ FreeRTOS_recvfrom_Stub ( FreeRTOS_recvfrom_DHCPv6_LoopedCall );
23292329 xTaskGetTickCount_IgnoreAndReturn ( 0 );
23302330 FreeRTOS_ReleaseUDPPayloadBuffer_ExpectAnyArgs ();
23312331 FreeRTOS_ReleaseUDPPayloadBuffer_ExpectAnyArgs ();
@@ -2337,6 +2337,90 @@ void test_vDHCPv6Process_DifferentDHCPServerRespondedWhileInProcess()
23372337 TEST_ASSERT_EQUAL ( eInitialWait , xEndPoint .xDHCPData .eDHCPState );
23382338}
23392339
2340+ /**
2341+ * @brief Check if vDHCPv6Process can handle packets from a different
2342+ * DHCP server while vDHCPv6Process is already processing responses from
2343+ * server running on different port on the same server.
2344+ */
2345+ void test_vDHCPv6Process_DifferentPortWhileInProcess ()
2346+ {
2347+ NetworkEndPoint_t xEndPoint ;
2348+ DHCPMessage_IPv6_t xDHCPMessage ;
2349+ struct xSOCKET xLocalDHCPv6Socket ;
2350+
2351+ memset ( & xEndPoint , 0 , sizeof ( NetworkEndPoint_t ) );
2352+ memset ( & xLocalDHCPv6Socket , 0 , sizeof ( struct xSOCKET ) );
2353+ memset ( & xDHCPMessage , 0 , sizeof ( DHCPMessage_IPv6_t ) );
2354+
2355+ pxNetworkEndPoints = & xEndPoint ;
2356+
2357+ memcpy ( xEndPoint .xMACAddress .ucBytes , ucDefaultMACAddress , sizeof ( ucDefaultMACAddress ) );
2358+ memcpy ( xEndPoint .ipv6_settings .xPrefix .ucBytes , & xDefaultNetPrefix .ucBytes , sizeof ( IPv6_Address_t ) );
2359+ xEndPoint .ipv6_settings .uxPrefixLength = 64 ;
2360+ xEndPoint .bits .bIPv6 = pdTRUE ;
2361+ xEndPoint .bits .bWantDHCP = pdTRUE ;
2362+
2363+ xEndPoint .xDHCPData .eDHCPState = eWaitingOffer ;
2364+ xEndPoint .xDHCPData .eExpectedState = eWaitingOffer ;
2365+ xEndPoint .xDHCPData .ulTransactionId = TEST_DHCPV6_TRANSACTION_ID ;
2366+ xEndPoint .xDHCPData .xDHCPSocket = & xLocalDHCPv6Socket ;
2367+ memcpy ( xEndPoint .xDHCPData .ucClientDUID , ucTestDHCPv6OptionClientID , sizeof ( ucTestDHCPv6OptionClientID ) );
2368+
2369+ xEndPoint .pxDHCPMessage = & xDHCPMessage ;
2370+
2371+ FreeRTOS_recvfrom_Stub ( FreeRTOS_recvfrom_DHCPv6_LoopedCall_DifferentPort );
2372+ xTaskGetTickCount_IgnoreAndReturn ( 0 );
2373+ FreeRTOS_ReleaseUDPPayloadBuffer_ExpectAnyArgs ();
2374+ FreeRTOS_ReleaseUDPPayloadBuffer_ExpectAnyArgs ();
2375+
2376+ prvPrepareAdvertiseStatusCodeLongMessage ();
2377+
2378+ vDHCPv6Process ( pdFALSE , & xEndPoint );
2379+
2380+ TEST_ASSERT_EQUAL ( eInitialWait , xEndPoint .xDHCPData .eDHCPState );
2381+ }
2382+
2383+
2384+ /**
2385+ * @brief Check if vDHCPv6Process FreeRTOS_recvfrom returns 0
2386+ */
2387+ void test_vDHCPv6Process_RecvFromReturnsZero ()
2388+ {
2389+ NetworkEndPoint_t xEndPoint ;
2390+ DHCPMessage_IPv6_t xDHCPMessage ;
2391+ struct xSOCKET xLocalDHCPv6Socket ;
2392+
2393+ memset ( & xEndPoint , 0 , sizeof ( NetworkEndPoint_t ) );
2394+ memset ( & xLocalDHCPv6Socket , 0 , sizeof ( struct xSOCKET ) );
2395+ memset ( & xDHCPMessage , 0 , sizeof ( DHCPMessage_IPv6_t ) );
2396+
2397+ pxNetworkEndPoints = & xEndPoint ;
2398+
2399+ memcpy ( xEndPoint .xMACAddress .ucBytes , ucDefaultMACAddress , sizeof ( ucDefaultMACAddress ) );
2400+ memcpy ( xEndPoint .ipv6_settings .xPrefix .ucBytes , & xDefaultNetPrefix .ucBytes , sizeof ( IPv6_Address_t ) );
2401+ xEndPoint .ipv6_settings .uxPrefixLength = 64 ;
2402+ xEndPoint .bits .bIPv6 = pdTRUE ;
2403+ xEndPoint .bits .bWantDHCP = pdTRUE ;
2404+
2405+ xEndPoint .xDHCPData .eDHCPState = eWaitingOffer ;
2406+ xEndPoint .xDHCPData .eExpectedState = eWaitingOffer ;
2407+ xEndPoint .xDHCPData .ulTransactionId = TEST_DHCPV6_TRANSACTION_ID ;
2408+ xEndPoint .xDHCPData .xDHCPSocket = & xLocalDHCPv6Socket ;
2409+ memcpy ( xEndPoint .xDHCPData .ucClientDUID , ucTestDHCPv6OptionClientID , sizeof ( ucTestDHCPv6OptionClientID ) );
2410+
2411+ xEndPoint .pxDHCPMessage = & xDHCPMessage ;
2412+
2413+ FreeRTOS_recvfrom_Stub ( FreeRTOS_recvfrom_DHCPv6_ReturnZero );
2414+ xTaskGetTickCount_IgnoreAndReturn ( 0 );
2415+ FreeRTOS_ReleaseUDPPayloadBuffer_ExpectAnyArgs ();
2416+
2417+ prvPrepareAdvertiseStatusCodeLongMessage ();
2418+
2419+ vDHCPv6Process ( pdFALSE , & xEndPoint );
2420+
2421+ TEST_ASSERT_EQUAL ( eWaitingOffer , xEndPoint .xDHCPData .eDHCPState );
2422+ }
2423+
23402424/**
23412425 * @brief Receive the message when global endpoint list is empty.
23422426 */
0 commit comments