@@ -2387,6 +2387,122 @@ void test_prvProcessEthernetPacket_InterfaceNull( void )
23872387 prvProcessEthernetPacket ( pxNetworkBuffer );
23882388}
23892389
2390+ /**
2391+ * @brief test_prvProcessEthernetPacket_IPv4FrameType_NeedARPResolution
2392+ * To validate the flow to handle IPv4 packets and it needs ARP resolution.
2393+ * But we already have one ARP packet pending so that buffer got released
2394+ * at the end.
2395+ */
2396+ void test_prvProcessEthernetPacket_IPv4FrameType_NeedARPResolution ( void )
2397+ {
2398+ NetworkBufferDescriptor_t xNetworkBuffer ;
2399+ NetworkBufferDescriptor_t * pxNetworkBuffer = & xNetworkBuffer ;
2400+ uint8_t ucEthernetBuffer [ ipconfigTCP_MSS ] = { 0 };
2401+ EthernetHeader_t * pxEthernetHeader ;
2402+ IPPacket_t * pxIPPacket ;
2403+ IPHeader_t * pxIPHeader ;
2404+ struct xNetworkInterface xInterface ;
2405+ NetworkEndPoint_t xNetworkEndPoint = { 0 };
2406+
2407+ pxNetworkBuffer -> xDataLength = ipconfigTCP_MSS ;
2408+ pxNetworkBuffer -> pucEthernetBuffer = ucEthernetBuffer ;
2409+ pxNetworkBuffer -> pxInterface = & xInterface ;
2410+ pxNetworkBuffer -> pxEndPoint = & xNetworkEndPoint ;
2411+
2412+ pxEthernetHeader = ( EthernetHeader_t * ) pxNetworkBuffer -> pucEthernetBuffer ;
2413+ pxEthernetHeader -> usFrameType = ipIPv4_FRAME_TYPE ;
2414+
2415+ pxIPPacket = ( IPPacket_t * ) pxNetworkBuffer -> pucEthernetBuffer ;
2416+ pxIPHeader = & ( pxIPPacket -> xIPHeader );
2417+ pxIPHeader -> ucVersionHeaderLength = 0x45 ;
2418+
2419+ pxARPWaitingNetworkBuffer = ( NetworkBufferDescriptor_t * ) 0x1234ABCD ;
2420+
2421+ prvAllowIPPacketIPv4_ExpectAndReturn ( pxIPPacket , pxNetworkBuffer , ( pxIPHeader -> ucVersionHeaderLength & 0x0FU ) << 2 , eProcessBuffer );
2422+ xCheckRequiresResolution_ExpectAndReturn ( pxNetworkBuffer , pdTRUE );
2423+ vReleaseNetworkBufferAndDescriptor_Expect ( pxNetworkBuffer );
2424+
2425+ prvProcessEthernetPacket ( pxNetworkBuffer );
2426+ }
2427+
2428+ /**
2429+ * @brief test_prvProcessEthernetPacket_IPv6FrameType_NeedNDResolution
2430+ * To validate the flow to handle IPv4 packets and it needs ND resolution.
2431+ * But we already have one ND packet pending so that buffer got released
2432+ * at the end.
2433+ */
2434+ void test_prvProcessEthernetPacket_IPv6FrameType_NeedNDResolution ( void )
2435+ {
2436+ NetworkBufferDescriptor_t xNetworkBuffer ;
2437+ NetworkBufferDescriptor_t * pxNetworkBuffer = & xNetworkBuffer ;
2438+ uint8_t ucEthernetBuffer [ ipconfigTCP_MSS ] = { 0 };
2439+ EthernetHeader_t * pxEthernetHeader ;
2440+ IPPacket_IPv6_t * pxIPv6Packet ;
2441+ IPHeader_IPv6_t * pxIPv6Header ;
2442+ struct xNetworkInterface xInterface ;
2443+ NetworkEndPoint_t xNetworkEndPoint = { 0 };
2444+
2445+ pxNetworkBuffer -> xDataLength = ipconfigTCP_MSS ;
2446+ pxNetworkBuffer -> pucEthernetBuffer = ucEthernetBuffer ;
2447+ pxNetworkBuffer -> pxInterface = & xInterface ;
2448+ pxNetworkBuffer -> pxEndPoint = & xNetworkEndPoint ;
2449+
2450+ pxEthernetHeader = ( EthernetHeader_t * ) pxNetworkBuffer -> pucEthernetBuffer ;
2451+ pxEthernetHeader -> usFrameType = ipIPv6_FRAME_TYPE ;
2452+
2453+ pxIPv6Packet = ( IPPacket_IPv6_t * ) pxNetworkBuffer -> pucEthernetBuffer ;
2454+ pxIPv6Header = & ( pxIPv6Packet -> xIPHeader );
2455+ pxIPv6Header -> ucNextHeader = ipPROTOCOL_TCP ;
2456+
2457+ pxNDWaitingNetworkBuffer = ( NetworkBufferDescriptor_t * ) 0x1234ABCD ;
2458+
2459+ prvAllowIPPacketIPv6_ExpectAndReturn ( pxIPv6Header , pxNetworkBuffer , ipSIZE_OF_IPv6_HEADER , eProcessBuffer );
2460+ xGetExtensionOrder_ExpectAndReturn ( ipPROTOCOL_TCP , 0 , -1 );
2461+ xCheckRequiresResolution_ExpectAndReturn ( pxNetworkBuffer , pdTRUE );
2462+ vReleaseNetworkBufferAndDescriptor_Expect ( pxNetworkBuffer );
2463+
2464+ prvProcessEthernetPacket ( pxNetworkBuffer );
2465+ }
2466+
2467+ /**
2468+ * @brief test_prvProcessEthernetPacket_IPv6FrameType_NeedNDResolution2
2469+ * To validate the flow to handle IPv6 packets and it needs ND resolution.
2470+ * And we don't have any pending ND packet.
2471+ */
2472+ void test_prvProcessEthernetPacket_IPv6FrameType_NeedNDResolution2 ( void )
2473+ {
2474+ NetworkBufferDescriptor_t xNetworkBuffer ;
2475+ NetworkBufferDescriptor_t * pxNetworkBuffer = & xNetworkBuffer ;
2476+ uint8_t ucEthernetBuffer [ ipconfigTCP_MSS ] = { 0 };
2477+ EthernetHeader_t * pxEthernetHeader ;
2478+ IPPacket_IPv6_t * pxIPv6Packet ;
2479+ IPHeader_IPv6_t * pxIPv6Header ;
2480+ struct xNetworkInterface xInterface ;
2481+ NetworkEndPoint_t xNetworkEndPoint = { 0 };
2482+
2483+ pxNetworkBuffer -> xDataLength = ipconfigTCP_MSS ;
2484+ pxNetworkBuffer -> pucEthernetBuffer = ucEthernetBuffer ;
2485+ pxNetworkBuffer -> pxInterface = & xInterface ;
2486+ pxNetworkBuffer -> pxEndPoint = & xNetworkEndPoint ;
2487+
2488+ pxEthernetHeader = ( EthernetHeader_t * ) pxNetworkBuffer -> pucEthernetBuffer ;
2489+ pxEthernetHeader -> usFrameType = ipIPv6_FRAME_TYPE ;
2490+
2491+ pxIPv6Packet = ( IPPacket_IPv6_t * ) pxNetworkBuffer -> pucEthernetBuffer ;
2492+ pxIPv6Header = & ( pxIPv6Packet -> xIPHeader );
2493+ pxIPv6Header -> ucNextHeader = ipPROTOCOL_TCP ;
2494+
2495+ pxNDWaitingNetworkBuffer = NULL ;
2496+
2497+ prvAllowIPPacketIPv6_ExpectAndReturn ( pxIPv6Header , pxNetworkBuffer , ipSIZE_OF_IPv6_HEADER , eProcessBuffer );
2498+ xGetExtensionOrder_ExpectAndReturn ( ipPROTOCOL_TCP , 0 , -1 );
2499+ xCheckRequiresResolution_ExpectAndReturn ( pxNetworkBuffer , pdTRUE );
2500+ vIPTimerStartNDResolution_ExpectAnyArgs ();
2501+
2502+ prvProcessEthernetPacket ( pxNetworkBuffer );
2503+
2504+ TEST_ASSERT_EQUAL_PTR ( pxNetworkBuffer , pxNDWaitingNetworkBuffer );
2505+ }
23902506
23912507/**
23922508 * @brief test_prvProcessIPPacket_HeaderLengthSmaller
0 commit comments