<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.nsnam.org/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zhiheng</id>
	<title>Nsnam - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.nsnam.org/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zhiheng"/>
	<link rel="alternate" type="text/html" href="https://www.nsnam.org/wiki/Special:Contributions/Zhiheng"/>
	<updated>2026-04-18T08:58:47Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12711</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12711"/>
		<updated>2022-10-11T05:10:48Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Project Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution so that they can focus on other performance aspects. With the help of the example provided, ns-3 users can enable auto-generated neighbor cache in different scopes.  Documentation was added to help users to understand and unit test cases were added to verify the fundamental behavior. The project was divided into 2 phases, and the phase-wise work is available below.&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
= Merge Requests and  Commits =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Project Details =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my GSoC branch: [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc link].&lt;br /&gt;
&lt;br /&gt;
The second method, which is also the final chosen one, is adding a helper to automatically generate neighbor caches. Users could use the helper after IP addresses are assigned, and the helper will iterate devices in the scope chosen by users to fill up neighbor caches properly by auto-generated entries. We choose this method because it's can achieve the same effect with much neater modification. It doesn't need the new data structure for shared neighbor cache and new child class. We completed a static neighbor cache generating helper and corresponding example and test during phase 1, which is included in this MR: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 link].&lt;br /&gt;
&lt;br /&gt;
== Phase 2 ==&lt;br /&gt;
&lt;br /&gt;
During Phase 2, we worked on a dynamic neighbor cache, which makes the auto-generated neighbor cache update by IP addresses added/removed, and an example is along with this feature.  I also worked on documentation and all the comments and suggestions provided by my mentors and the reviewers. &lt;br /&gt;
&lt;br /&gt;
MR submitted during this phase: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 link]&lt;br /&gt;
&lt;br /&gt;
=Build Project=&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 1==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-example.cc&lt;br /&gt;
* To run the test: ./test.py -s neighbor-cache&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 2==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-dynamic.cc&lt;br /&gt;
* To run the test: ./test.py -s neighbor-cache&lt;br /&gt;
&lt;br /&gt;
= Other Works =&lt;br /&gt;
&lt;br /&gt;
Apart from the deliverable code above, I also did the following jobs on the side during the program:&lt;br /&gt;
* Fixed a couple of issues I found when I dug into ns-3 source code.&lt;br /&gt;
* Test the influence of link state changes and series of &amp;lt;em&amp;gt; ip neigh flush &amp;lt;/em&amp;gt; cmd on permanent entries in Linux.&lt;br /&gt;
* Test the DAD behavior when on/off in Linux by Wireshark.&lt;br /&gt;
&lt;br /&gt;
= Proposal vs. Actual Work =&lt;br /&gt;
&lt;br /&gt;
We completed the proposed work with a method different from the proposal. That method was raised during the community bonding period and was discussed and decided during phase 1. The method we chose functionally achieves our goals with neater modification.&lt;br /&gt;
&lt;br /&gt;
=Future Work=&lt;br /&gt;
&lt;br /&gt;
During phase 2, when modifying neighbor cache NUD_STATE, I found the related code in &amp;lt;em&amp;gt; ReceiveLLA &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; HandleNA &amp;lt;/em&amp;gt; has an improper structure and have multiple logical mistakes, I planned to refactor the code. For this task, I already opened up an [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1035 MR].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Acknowledgement =&lt;br /&gt;
&lt;br /&gt;
I would like to thank my mentors, and the whole ns-3 community for every suggestion, discussion, and comment which helps me to deal with all the difficulties and problems I meet through the GSoC period. It was a great experience working with ns-3 community, I learned not only about technology and knowledge but also cooperation and communication, which will definitely help me in the future. I would also like to thank Google for providing this opportunity.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12709</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12709"/>
		<updated>2022-09-28T00:29:42Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Project Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
* '''Final Report:'''[https://www.nsnam.org/wiki/GSOC2022NeighborCacheFinalReport link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Write examples and tests for them&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Write examples and tests for them&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 13 - June 19&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior about permanent entries in Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;br /&gt;
&lt;br /&gt;
'''Week2'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 20 - June 26&lt;br /&gt;
&lt;br /&gt;
* Implemented static perfect cache on both IPv4 and IPv6 by new helper class.&lt;br /&gt;
* Start adding tests and examples for perfect ARP/NDP&lt;br /&gt;
* Tested DAD behavior when interface disable ARP/NDP  in Linux.&lt;br /&gt;
&lt;br /&gt;
'''Week3'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 27 - July 3&lt;br /&gt;
&lt;br /&gt;
* Implemented a subclass of Icmpv6L4Protocol for disable DAD&lt;br /&gt;
* Create two example for perfect ARP/NDP, the one is simple csma, another is double wifi. Meet problems when creating global routing in double wifi example, fix by using nix-vector routing instead.&lt;br /&gt;
* Draft Merge Request of static perfect cache with two examples. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
&lt;br /&gt;
'''Week4'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 4 - July 10&lt;br /&gt;
&lt;br /&gt;
* Add test for perfect ARP/NDP.&lt;br /&gt;
* Add user-level API for updating perfect cache after IP address changes.&lt;br /&gt;
* Update MR based on comments. Fix mistakes and improve iteration logic. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
* Continue and refine the work on the dynamical perfect cache. Perfect cache updating will base on IP addresses added/removed instead of link up/down.&lt;br /&gt;
&lt;br /&gt;
'''Week5'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 11 - July 17&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* Implement dynamical perfect ARP on locally shared cache per network.&lt;br /&gt;
* Add new perfect-arp-cache and perfect-arp-l3-protocol.&lt;br /&gt;
* Add addAddressCallback and removeAddressCallback to make it perfect caches updated dynamically by IP addresses change.&lt;br /&gt;
* Use a new data structure for perfect cache, ''std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache;'' The key is network address and the value is the pointer to the unorder_map of normal caches. This new structure is used to differentiate a case that when an interface has multiple IP addresses from different networks, its perfect cache would contain entries from different networks.&lt;br /&gt;
* Overwite ''ArpCache::Lookup'',''ArpCache::Add'',''ArpCache::Remove'' for the new data structure of perfect ARP cache.&lt;br /&gt;
&lt;br /&gt;
'''Week6'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 18 - July 24&lt;br /&gt;
&lt;br /&gt;
* Update the ARP/NDISC cache to make them ordered.&lt;br /&gt;
* modify examples to show populate cache with interfaceContainer.&lt;br /&gt;
* replace the word perfect from the code with more technical words.&lt;br /&gt;
&lt;br /&gt;
'''Week7'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 25 - July 31&lt;br /&gt;
&lt;br /&gt;
* Refactor Icmpv6L4Protocol::ReceiveLLA and Icmpv6L4Protocol::HandleNA, change the nesting of if statement to switch case of NUD_STATE&lt;br /&gt;
* Add new NUD_STATE: STATIC_AUTOGENERATED. The entries generated by perfect ARP/NDP will use the new state&lt;br /&gt;
* Update printout in test and example, because of the new state and ARP/NDISC cache reorder.&lt;br /&gt;
&lt;br /&gt;
'''Week8 - Week9'''&lt;br /&gt;
&lt;br /&gt;
Duration: August 1 - August 14&lt;br /&gt;
&lt;br /&gt;
I'm not fully involved in GSoC program these days because of some personal issue&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* add function to flush all auto-generated entries&lt;br /&gt;
* add remove callbacks in ipv4interface to enable dynamical perfect cache&lt;br /&gt;
* delete the double wifi example and modify the simple example to a detailed one to show all API and sending a data stream to show how perfect cache reduces the packet drop rate in some situation.&lt;br /&gt;
&lt;br /&gt;
'''Week10 - Week11'''&lt;br /&gt;
&lt;br /&gt;
Duration: August 15 - August 28&lt;br /&gt;
&lt;br /&gt;
* Complete the update on the static neighbor cache, which is ready to be merged.&lt;br /&gt;
* Update the MR of dynamic neighbor cache based on comments.&lt;br /&gt;
&lt;br /&gt;
'''Week10 - Week11'''&lt;br /&gt;
Duration: August 29 - September 4&lt;br /&gt;
&lt;br /&gt;
*  [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 MR]on static neighbor cache has been merged. &lt;br /&gt;
* Update the [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 MR] of dynamic neighbor cache based on comments.&lt;br /&gt;
* Refactor on NUD_STATE process on icmpv6.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12698</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12698"/>
		<updated>2022-09-19T05:33:03Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Merge Requests and  Commits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects. With the help of the example provided, ns-3 users can enable auto-generated neighbor cache in different scopes.  Documentation was added to help users to understand and unit test cases were added to verify the fundamental behavior. The project was divided into 2 phases, and the phase-wise work is available below.&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
= Merge Requests and  Commits =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Project Details =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my GSoC branch: [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc link].&lt;br /&gt;
&lt;br /&gt;
The second method, which is also the final chosen one, is adding a helper to automatically generate neighbor caches. Users could use the helper after IP addresses are assigned, and the helper will iterate devices in the scope chosen by users to fill up neighbor caches properly by auto-generated entries. We choose this method because it's can achieve the same effect with much neater modification. It doesn't need the new data structure for shared neighbor cache and new child class. We completed a static neighbor cache generating helper and corresponding example and test during phase 1, which is included in this MR: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 link].&lt;br /&gt;
&lt;br /&gt;
== Phase 2 ==&lt;br /&gt;
&lt;br /&gt;
During Phase 2, we worked on a dynamic neighbor cache, which makes the auto-generated neighbor cache update by IP addresses added/removed, and an example is along with this feature.  I also worked on documentation and all the comments and suggestions provided by my mentors and the reviewers. &lt;br /&gt;
&lt;br /&gt;
MR submitted during this phase: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 link]&lt;br /&gt;
&lt;br /&gt;
=Build Project=&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 1==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-example.cc&lt;br /&gt;
* To run the test: ./test.py -s neighbor-cache&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 2==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-dynamic.cc&lt;br /&gt;
* To run the test: ./test.py -s neighbor-cache&lt;br /&gt;
&lt;br /&gt;
= Other Works =&lt;br /&gt;
&lt;br /&gt;
Apart from the deliverable code above, I also did the following jobs on the side during the program:&lt;br /&gt;
* Fixed a couple of issues I found when I dug into ns-3 source code.&lt;br /&gt;
* Test the influence of link state changes and series of &amp;lt;em&amp;gt; ip neigh flush &amp;lt;/em&amp;gt; cmd on permanent entries in Linux.&lt;br /&gt;
* Test the DAD behavior when on/off in Linux by Wireshark.&lt;br /&gt;
&lt;br /&gt;
= Proposal vs. Actual Work =&lt;br /&gt;
&lt;br /&gt;
We completed the proposed work with a method different from the proposal. That method was raised during the community bonding period and was discussed and decided during phase 1. The method we chose functionally achieves our goals with neater modification.&lt;br /&gt;
&lt;br /&gt;
=Future Work=&lt;br /&gt;
&lt;br /&gt;
During phase 2, when modifying neighbor cache NUD_STATE, I found the related code in &amp;lt;em&amp;gt; ReceiveLLA &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; HandleNA &amp;lt;/em&amp;gt; has an improper structure and have multiple logical mistakes, I planned to refactor the code. For this task, I already opened up an [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1035 MR].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Acknowledgement =&lt;br /&gt;
&lt;br /&gt;
I would like to thank my mentors, and the whole ns-3 community for every suggestion, discussion, and comment which helps me to deal with all the difficulties and problems I meet through the GSoC period. It was a great experience working with ns-3 community, I learned not only about technology and knowledge but also cooperation and communication, which will definitely help me in the future. I would also like to thank Google for providing this opportunity.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12684</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12684"/>
		<updated>2022-09-12T07:04:12Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Steps to build the code for Phase 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects. With the help of the example provided, ns-3 users can enable auto-generated neighbor cache in different scopes.  Documentation was added to help users to understand and unit test cases were added to verify the fundamental behavior. The project was divided into 2 phases, and the phase-wise work is available below.&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
= Merge Requests and  Commits =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache] || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Project Details =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my GSoC branch: [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc link].&lt;br /&gt;
&lt;br /&gt;
The second method, which is also the final chosen one, is adding a helper to automatically generate neighbor caches. Users could use the helper after IP addresses are assigned, and the helper will iterate devices in the scope chosen by users to fill up neighbor caches properly by auto-generated entries. We choose this method because it's can achieve the same effect with much neater modification. It doesn't need the new data structure for shared neighbor cache and new child class. We completed a static neighbor cache generating helper and corresponding example and test during phase 1, which is included in this MR: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 link].&lt;br /&gt;
&lt;br /&gt;
== Phase 2 ==&lt;br /&gt;
&lt;br /&gt;
During Phase 2, we worked on a dynamic neighbor cache, which makes the auto-generated neighbor cache update by IP addresses added/removed, and an example is along with this feature.  I also worked on documentation and all the comments and suggestions provided by my mentors and the reviewers. &lt;br /&gt;
&lt;br /&gt;
MR submitted during this phase: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 link]&lt;br /&gt;
&lt;br /&gt;
=Build Project=&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 1==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-example.cc&lt;br /&gt;
* To run the test: ./test.py -s neighbor-cache&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 2==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-dynamic.cc&lt;br /&gt;
* To run the test: ./test.py -s neighbor-cache&lt;br /&gt;
&lt;br /&gt;
= Other Works =&lt;br /&gt;
&lt;br /&gt;
Apart from the deliverable code above, I also did the following jobs on the side during the program:&lt;br /&gt;
* Fixed a couple of issues I found when I dug into ns-3 source code.&lt;br /&gt;
* Test the influence of link state changes and series of &amp;lt;em&amp;gt; ip neigh flush &amp;lt;/em&amp;gt; cmd on permanent entries in Linux.&lt;br /&gt;
* Test the DAD behavior when on/off in Linux by Wireshark.&lt;br /&gt;
&lt;br /&gt;
= Proposal vs. Actual Work =&lt;br /&gt;
&lt;br /&gt;
We completed the proposed work with a method different from the proposal. That method was raised during the community bonding period and was discussed and decided during phase 1. The method we chose functionally achieves our goals with neater modification.&lt;br /&gt;
&lt;br /&gt;
=Future Work=&lt;br /&gt;
&lt;br /&gt;
During phase 2, when modifying neighbor cache NUD_STATE, I found the related code in &amp;lt;em&amp;gt; ReceiveLLA &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; HandleNA &amp;lt;/em&amp;gt; has an improper structure and have multiple logical mistakes, I planned to refactor the code. For this task, I already opened up an [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1035 MR].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Acknowledgement =&lt;br /&gt;
&lt;br /&gt;
I would like to thank my mentors, and the whole ns-3 community for every suggestion, discussion, and comment which helps me to deal with all the difficulties and problems I meet through the GSoC period. It was a great experience working with ns-3 community, I learned not only about technology and knowledge but also cooperation and communication, which will definitely help me in the future. I would also like to thank Google for providing this opportunity.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12683</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12683"/>
		<updated>2022-09-10T07:03:46Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Acknowledgement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects. With the help of the example provided, ns-3 users can enable auto-generated neighbor cache in different scopes.  Documentation was added to help users to understand and unit test cases were added to verify the fundamental behavior. The project was divided into 2 phases, and the phase-wise work is available below.&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
= Merge Requests and  Commits =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache] || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Project Details =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my GSoC branch: [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc link].&lt;br /&gt;
&lt;br /&gt;
The second method, which is also the final chosen one, is adding a helper to automatically generate neighbor caches. Users could use the helper after IP addresses are assigned, and the helper will iterate devices in the scope chosen by users to fill up neighbor caches properly by auto-generated entries. We choose this method because it's can achieve the same effect with much neater modification. It doesn't need the new data structure for shared neighbor cache and new child class. We completed a static neighbor cache generating helper and corresponding example and test during phase 1, which is included in this MR: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 link].&lt;br /&gt;
&lt;br /&gt;
== Phase 2 ==&lt;br /&gt;
&lt;br /&gt;
During Phase 2, we worked on a dynamic neighbor cache, which makes the auto-generated neighbor cache update by IP addresses added/removed, and an example is along with this feature.  I also worked on documentation and all the comments and suggestions provided by my mentors and the reviewers. &lt;br /&gt;
&lt;br /&gt;
MR submitted during this phase: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 link]&lt;br /&gt;
&lt;br /&gt;
=Build Project=&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 1==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-example.cc&lt;br /&gt;
* To run the test: ./test.py -s neighbor-cache&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 2==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-dynamic.cc&lt;br /&gt;
&lt;br /&gt;
= Other Works =&lt;br /&gt;
&lt;br /&gt;
Apart from the deliverable code above, I also did the following jobs on the side during the program:&lt;br /&gt;
* Fixed a couple of issues I found when I dug into ns-3 source code.&lt;br /&gt;
* Test the influence of link state changes and series of &amp;lt;em&amp;gt; ip neigh flush &amp;lt;/em&amp;gt; cmd on permanent entries in Linux.&lt;br /&gt;
* Test the DAD behavior when on/off in Linux by Wireshark.&lt;br /&gt;
&lt;br /&gt;
= Proposal vs. Actual Work =&lt;br /&gt;
&lt;br /&gt;
We completed the proposed work with a method different from the proposal. That method was raised during the community bonding period and was discussed and decided during phase 1. The method we chose functionally achieves our goals with neater modification.&lt;br /&gt;
&lt;br /&gt;
=Future Work=&lt;br /&gt;
&lt;br /&gt;
During phase 2, when modifying neighbor cache NUD_STATE, I found the related code in &amp;lt;em&amp;gt; ReceiveLLA &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; HandleNA &amp;lt;/em&amp;gt; has an improper structure and have multiple logical mistakes, I planned to refactor the code. For this task, I already opened up an [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1035 MR].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Acknowledgement =&lt;br /&gt;
&lt;br /&gt;
I would like to thank my mentors, and the whole ns-3 community for every suggestion, discussion, and comment which helps me to deal with all the difficulties and problems I meet through the GSoC period. It was a great experience working with ns-3 community, I learned not only about technology and knowledge but also cooperation and communication, which will definitely help me in the future. I would also like to thank Google for providing this opportunity.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12682</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12682"/>
		<updated>2022-09-10T07:01:39Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects. With the help of the example provided, ns-3 users can enable auto-generated neighbor cache in different scopes.  Documentation was added to help users to understand and unit test cases were added to verify the fundamental behavior. The project was divided into 2 phases, and the phase-wise work is available below.&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
= Merge Requests and  Commits =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache] || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Project Details =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my GSoC branch: [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc link].&lt;br /&gt;
&lt;br /&gt;
The second method, which is also the final chosen one, is adding a helper to automatically generate neighbor caches. Users could use the helper after IP addresses are assigned, and the helper will iterate devices in the scope chosen by users to fill up neighbor caches properly by auto-generated entries. We choose this method because it's can achieve the same effect with much neater modification. It doesn't need the new data structure for shared neighbor cache and new child class. We completed a static neighbor cache generating helper and corresponding example and test during phase 1, which is included in this MR: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 link].&lt;br /&gt;
&lt;br /&gt;
== Phase 2 ==&lt;br /&gt;
&lt;br /&gt;
During Phase 2, we worked on a dynamic neighbor cache, which makes the auto-generated neighbor cache update by IP addresses added/removed, and an example is along with this feature.  I also worked on documentation and all the comments and suggestions provided by my mentors and the reviewers. &lt;br /&gt;
&lt;br /&gt;
MR submitted during this phase: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 link]&lt;br /&gt;
&lt;br /&gt;
=Build Project=&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 1==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-example.cc&lt;br /&gt;
* To run the test: ./test.py -s neighbor-cache&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 2==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-dynamic.cc&lt;br /&gt;
&lt;br /&gt;
= Other Works =&lt;br /&gt;
&lt;br /&gt;
Apart from the deliverable code above, I also did the following jobs on the side during the program:&lt;br /&gt;
* Fixed a couple of issues I found when I dug into ns-3 source code.&lt;br /&gt;
* Test the influence of link state changes and series of &amp;lt;em&amp;gt; ip neigh flush &amp;lt;/em&amp;gt; cmd on permanent entries in Linux.&lt;br /&gt;
* Test the DAD behavior when on/off in Linux by Wireshark.&lt;br /&gt;
&lt;br /&gt;
= Proposal vs. Actual Work =&lt;br /&gt;
&lt;br /&gt;
We completed the proposed work with a method different from the proposal. That method was raised during the community bonding period and was discussed and decided during phase 1. The method we chose functionally achieves our goals with neater modification.&lt;br /&gt;
&lt;br /&gt;
=Future Work=&lt;br /&gt;
&lt;br /&gt;
During phase 2, when modifying neighbor cache NUD_STATE, I found the related code in &amp;lt;em&amp;gt; ReceiveLLA &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; HandleNA &amp;lt;/em&amp;gt; has an improper structure and have multiple logical mistakes, I planned to refactor the code. For this task, I already opened up an [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1035 MR].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Acknowledgement =&lt;br /&gt;
&lt;br /&gt;
I would like to thank my mentors, and the whole ns-3 community for every suggestion, discussion, and comment which helps me to deal with all the difficulties and problems I meet through the GSoC period. It was a great experience working with ns-3, I learned not only about technology and knowledge but also cooperation and communication, which will definitely help me in the future. I would also like to thank Google for providing this opportunity.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12681</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12681"/>
		<updated>2022-09-10T07:00:58Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects. With the help of the example provided, ns-3 users can enable auto-generated neighbor cache in different scopes.  Documentation was added to help users to understand and unit test cases were added to verify the fundamental behavior. The project was divided into 2 phases, and the phase-wise work is available below.&lt;br /&gt;
&lt;br /&gt;
= Merge Requests and  Commits =&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache] || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Project Details =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my GSoC branch: [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc link].&lt;br /&gt;
&lt;br /&gt;
The second method, which is also the final chosen one, is adding a helper to automatically generate neighbor caches. Users could use the helper after IP addresses are assigned, and the helper will iterate devices in the scope chosen by users to fill up neighbor caches properly by auto-generated entries. We choose this method because it's can achieve the same effect with much neater modification. It doesn't need the new data structure for shared neighbor cache and new child class. We completed a static neighbor cache generating helper and corresponding example and test during phase 1, which is included in this MR: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 link].&lt;br /&gt;
&lt;br /&gt;
== Phase 2 ==&lt;br /&gt;
&lt;br /&gt;
During Phase 2, we worked on a dynamic neighbor cache, which makes the auto-generated neighbor cache update by IP addresses added/removed, and an example is along with this feature.  I also worked on documentation and all the comments and suggestions provided by my mentors and the reviewers. &lt;br /&gt;
&lt;br /&gt;
MR submitted during this phase: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 link]&lt;br /&gt;
&lt;br /&gt;
=Build Project=&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 1==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-example.cc&lt;br /&gt;
* To run the test: ./test.py -s neighbor-cache&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 2==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-dynamic.cc&lt;br /&gt;
&lt;br /&gt;
= Other Works =&lt;br /&gt;
&lt;br /&gt;
Apart from the deliverable code above, I also did the following jobs on the side during the program:&lt;br /&gt;
* Fixed a couple of issues I found when I dug into ns-3 source code.&lt;br /&gt;
* Test the influence of link state changes and series of &amp;lt;em&amp;gt; ip neigh flush &amp;lt;/em&amp;gt; cmd on permanent entries in Linux.&lt;br /&gt;
* Test the DAD behavior when on/off in Linux by Wireshark.&lt;br /&gt;
&lt;br /&gt;
= Proposal vs. Actual Work =&lt;br /&gt;
&lt;br /&gt;
We completed the proposed work with a method different from the proposal. That method was raised during the community bonding period and was discussed and decided during phase 1. The method we chose functionally achieves our goals with neater modification.&lt;br /&gt;
&lt;br /&gt;
=Future Work=&lt;br /&gt;
&lt;br /&gt;
During phase 2, when modifying neighbor cache NUD_STATE, I found the related code in &amp;lt;em&amp;gt; ReceiveLLA &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; HandleNA &amp;lt;/em&amp;gt; has an improper structure and have multiple logical mistakes, I planned to refactor the code. For this task, I already opened up an [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1035 MR].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Acknowledgement =&lt;br /&gt;
&lt;br /&gt;
I would like to thank my mentors, and the whole ns-3 community for every suggestion, discussion, and comment which helps me to deal with all the difficulties and problems I meet through the GSoC period. It was a great experience working with ns-3, I learned not only about technology and knowledge but also cooperation and communication, which will definitely help me in the future. I would also like to thank Google for providing this opportunity.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12680</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12680"/>
		<updated>2022-09-10T06:50:47Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects. With the help of the example provided, ns-3 users can enable auto-generated neighbor cache in different scopes.  Documentation was added to help users to understand and unit test cases were added to verify the fundamental behavior. The project was divided into 2 phases, and the phase-wise work is available below.&lt;br /&gt;
&lt;br /&gt;
= Merge Requests and  Commits =&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache] || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Project Details =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my GSoC branch: [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc link].&lt;br /&gt;
&lt;br /&gt;
The second method, which is also the final chosen one, is adding a helper to automatically generate neighbor caches. Users could use the helper after IP addresses are assigned, and the helper will iterate devices in the scope chosen by users to fill up neighbor caches properly by auto-generated entries. We choose this method because it's can achieve the same effect with much neater modification. It doesn't need the new data structure for shared neighbor cache and new child class. We completed a static neighbor cache generating helper and corresponding example and test during phase 1, which is included in this MR: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 link].&lt;br /&gt;
&lt;br /&gt;
== Phase 2 ==&lt;br /&gt;
&lt;br /&gt;
During Phase 2, we worked on a dynamic neighbor cache, which makes the auto-generated neighbor cache update by IP addresses added/removed, and an example is along with this feature.  I also worked on documentation and all the comments and suggestions provided by my mentors and the reviewers. &lt;br /&gt;
&lt;br /&gt;
MR submitted during this phase: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 link]&lt;br /&gt;
&lt;br /&gt;
=Build Project=&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 1==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-example.cc&lt;br /&gt;
* To run the test: ./test.py -s neighbor-cache&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 2==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-dynamic.cc&lt;br /&gt;
&lt;br /&gt;
= Proposal vs. Actual Work =&lt;br /&gt;
&lt;br /&gt;
We completed the proposed work with a method different from the proposal. That method was raised during the community bonding period and was discussed and decided during phase 1. The method we chose functionally achieves our goals with neater modification.&lt;br /&gt;
&lt;br /&gt;
=Future Work=&lt;br /&gt;
&lt;br /&gt;
During phase 2, when modifying neighbor cache NUD_STATE, I found the related code in &amp;lt;em&amp;gt; ReceiveLLA &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; HandleNA &amp;lt;/em&amp;gt; has an improper structure and have multiple logical mistakes, I planned to refactor the code. For this task, I already opened up an [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1035 MR].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Acknowledgement =&lt;br /&gt;
&lt;br /&gt;
I would like to thank my mentors, and the whole ns-3 community for every suggestion, discussion, and comment which helps me to deal with all the difficulties and problems I meet through the GSoC period. It was a great experience working with ns-3, I learned not only about technology and knowledge but also cooperation and communication, which will definitely help me in the future. I would also like to thank Google for providing this opportunity.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12679</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12679"/>
		<updated>2022-09-10T06:47:21Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects. With the help of the example provided, ns-3 users can enable auto-generated neighbor cache in different scopes.  Documentation was added to help users to understand and unit test cases were added to verify the fundamental behavior. The project was divided into 2 phases, and the phase-wise work is available below.&lt;br /&gt;
&lt;br /&gt;
= Merge Requests, Commits, and Project Details =&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache] || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Community Bonding Period =&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
= Phase 1 =&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my GSoC branch: [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc link].&lt;br /&gt;
&lt;br /&gt;
The second method, which is also the final chosen one, is adding a helper to automatically generate neighbor caches. Users could use the helper after IP addresses are assigned, and the helper will iterate devices in the scope chosen by users to fill up neighbor caches properly by auto-generated entries. We choose this method because it's can achieve the same effect with much neater modification. It doesn't need the new data structure for shared neighbor cache and new child class. We completed a static neighbor cache generating helper and corresponding example and test during phase 1, which is included in this MR: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 link].&lt;br /&gt;
&lt;br /&gt;
= Phase 2 =&lt;br /&gt;
&lt;br /&gt;
During Phase 2, we worked on a dynamic neighbor cache, which makes the auto-generated neighbor cache update by IP addresses added/removed, and an example is along with this feature.  I also worked on documentation and all the comments and suggestions provided by my mentors and the reviewers. &lt;br /&gt;
&lt;br /&gt;
MR submitted during this phase: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 link]&lt;br /&gt;
&lt;br /&gt;
= Proposal vs. Actual Work =&lt;br /&gt;
&lt;br /&gt;
We completed the proposed work with a method different from the proposal. That method was raised during the community bonding period and was discussed and decided during phase 1. The method we chose functionally achieves our goals with neater modification.&lt;br /&gt;
&lt;br /&gt;
=Future Work=&lt;br /&gt;
&lt;br /&gt;
During phase 2, when modifying neighbor cache NUD_STATE, I found the related code in &amp;lt;em&amp;gt; ReceiveLLA &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; HandleNA &amp;lt;/em&amp;gt; has an improper structure and have multiple logical mistakes, I planned to refactor the code. For this task, I already opened up an [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1035 MR].&lt;br /&gt;
&lt;br /&gt;
=Steps to build the code for Phase 1=&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-example.cc&lt;br /&gt;
* To run the test: ./test.py -s neighbor-cache&lt;br /&gt;
&lt;br /&gt;
=Steps to build the code for Phase 2=&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-dynamic.cc&lt;br /&gt;
&lt;br /&gt;
= Acknowledgement =&lt;br /&gt;
&lt;br /&gt;
I would like to thank my mentors, and the whole ns-3 community for every suggestion, discussion, and comment which helps me to deal with all the difficulties and problems I meet through the GSoC period. It was a great experience working with ns-3, I learned not only about technology and knowledge but also cooperation and communication, which will definitely help me in the future. I would also like to thank Google for providing this opportunity.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12678</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12678"/>
		<updated>2022-09-10T06:46:34Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects. With the help of the example provided, ns-3 users can enable auto-generated neighbor cache in different scopes.  Documentation was added to help users to understand and unit test cases were added to verify the fundamental behavior. The project was divided into 2 phases, and the phase-wise work is available below.&lt;br /&gt;
&lt;br /&gt;
== Merge Requests, Commits, and Project Details ==&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache] || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my GSoC branch: [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc link].&lt;br /&gt;
&lt;br /&gt;
The second method, which is also the final chosen one, is adding a helper to automatically generate neighbor caches. Users could use the helper after IP addresses are assigned, and the helper will iterate devices in the scope chosen by users to fill up neighbor caches properly by auto-generated entries. We choose this method because it's can achieve the same effect with much neater modification. It doesn't need the new data structure for shared neighbor cache and new child class. We completed a static neighbor cache generating helper and corresponding example and test during phase 1, which is included in this MR: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 link].&lt;br /&gt;
&lt;br /&gt;
== Phase 2 ==&lt;br /&gt;
&lt;br /&gt;
During Phase 2, we worked on a dynamic neighbor cache, which makes the auto-generated neighbor cache update by IP addresses added/removed, and an example is along with this feature.  I also worked on documentation and all the comments and suggestions provided by my mentors and the reviewers. &lt;br /&gt;
&lt;br /&gt;
MR submitted during this phase: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 link]&lt;br /&gt;
&lt;br /&gt;
== Proposal vs. Actual Work ==&lt;br /&gt;
&lt;br /&gt;
We completed the proposed work with a method different from the proposal. That method was raised during the community bonding period and was discussed and decided during phase 1. The method we chose functionally achieves our goals with neater modification.&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
During phase 2, when modifying neighbor cache NUD_STATE, I found the related code in &amp;lt;em&amp;gt; ReceiveLLA &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; HandleNA &amp;lt;/em&amp;gt; has an improper structure and have multiple logical mistakes, I planned to refactor the code. For this task, I already opened up an [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1035 MR].&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 1==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-example.cc&lt;br /&gt;
* To run the test: ./test.py -s neighbor-cache&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 2==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-dynamic.cc&lt;br /&gt;
&lt;br /&gt;
== Acknowledgement ==&lt;br /&gt;
&lt;br /&gt;
I would like to thank my mentors, and the whole ns-3 community for every suggestion, discussion, and comment which helps me to deal with all the difficulties and problems I meet through the GSoC period. It was a great experience working with ns-3, I learned not only about technology and knowledge but also cooperation and communication, which will definitely help me in the future. I would also like to thank Google for providing this opportunity.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12677</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12677"/>
		<updated>2022-09-10T06:45:39Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects. With the help of the example provided, ns-3 users can enable auto-generated neighbor cache in different scopes.  Documentation was added to help users to understand and unit test cases were added to verify the fundamental behavior. The project was divided into 2 phases, and the phase-wise work is available below.&lt;br /&gt;
== Merge Requests, Commits, and Project Details ==&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache] || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my GSoC branch: [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc link].&lt;br /&gt;
&lt;br /&gt;
The second method, which is also the final chosen one, is adding a helper to automatically generate neighbor caches. Users could use the helper after IP addresses are assigned, and the helper will iterate devices in the scope chosen by users to fill up neighbor caches properly by auto-generated entries. We choose this method because it's can achieve the same effect with much neater modification. It doesn't need the new data structure for shared neighbor cache and new child class. We completed a static neighbor cache generating helper and corresponding example and test during phase 1, which is included in this MR: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 link].&lt;br /&gt;
&lt;br /&gt;
== Phase 2 ==&lt;br /&gt;
&lt;br /&gt;
During Phase 2, we worked on a dynamic neighbor cache, which makes the auto-generated neighbor cache update by IP addresses added/removed, and an example is along with this feature.  I also worked on documentation and all the comments and suggestions provided by my mentors and the reviewers. &lt;br /&gt;
&lt;br /&gt;
MR submitted during this phase: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 link]&lt;br /&gt;
&lt;br /&gt;
== Proposal vs. Actual Work ==&lt;br /&gt;
&lt;br /&gt;
We completed the proposed work with a method different from the proposal. That method was raised during the community bonding period and was discussed and decided during phase 1. The method we chose functionally achieves our goals with neater modification.&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
During phase 2, when modifying neighbor cache NUD_STATE, I found the related code in &amp;lt;em&amp;gt; ReceiveLLA &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; HandleNA &amp;lt;/em&amp;gt; has an improper structure and have multiple logical mistakes, I planned to refactor the code. For this task, I already opened up an [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1035 MR].&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 1==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-example.cc&lt;br /&gt;
* To run the test: ./test.py -s neighbor-cache&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 2==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-dynamic.cc&lt;br /&gt;
&lt;br /&gt;
== Acknowledgement ==&lt;br /&gt;
&lt;br /&gt;
I would like to thank my mentors, and the whole ns-3 community for every suggestion, discussion, and comment which helps me to deal with all the difficulties and problems I meet through the GSoC period. It was a great experience working with ns-3, I learned not only about technology and knowledge but also cooperation and communication, which will definitely help me in the future. I would also like to thank Google for providing this opportunity.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12676</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12676"/>
		<updated>2022-09-10T06:05:21Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects. With the help of the example provided, ns-3 users can enable auto-generated neighbor cache in different scopes.  Documentation was added to help users to understand and unit test cases were added to verify the fundamental behavior. The project was divided into 2 phases, and the phase-wise work is available below.&lt;br /&gt;
== Merge Requests, Commits, and Project Details ==&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache] || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my GSoC branch: [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc link].&lt;br /&gt;
&lt;br /&gt;
The second method, which is also the final chosen one, is adding a helper to automatically generate neighbor caches. Users could use the helper after IP addresses are assigned, and the helper will iterate devices in the scope chosen by users to fill up neighbor caches properly by auto-generated entries. We choose this method because it's can achieve the same effect with much neater modification. It doesn't need the new data structure for shared neighbor cache and new child class. We completed a static neighbor cache generating helper and corresponding example and test during phase 1, which is included in this MR: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 link].&lt;br /&gt;
&lt;br /&gt;
== Phase 2 ==&lt;br /&gt;
&lt;br /&gt;
During Phase 2, we worked on a dynamic neighbor cache, which makes the auto-generated neighbor cache update by IP addresses added/removed, and an example is along with this feature.  I also worked on documentation and all the comments and suggestions provided by my mentors and the reviewers. &lt;br /&gt;
&lt;br /&gt;
MR submitted during this phase: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 link]&lt;br /&gt;
&lt;br /&gt;
== Proposal vs. Actual Work ==&lt;br /&gt;
&lt;br /&gt;
We completed the proposed work with a method different from the proposal. That method was raised during the community bonding period and was discussed and decided during phase 1. The method we chose functionally achieves our goals with neater modification.&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
During phase 2, when modifying neighbor cache NUD_STATE, I found the related code in &amp;lt;em&amp;gt; ReceiveLLA &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; HandleNA &amp;lt;/em&amp;gt; has an improper structure and have multiple logical mistakes, I planned to refactor the code. For this task, I already opened up an [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1035 MR].&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 1==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-example.cc&lt;br /&gt;
* To run the test: ./test.py -s neighbor-cache&lt;br /&gt;
&lt;br /&gt;
==Steps to build the code for Phase 2==&lt;br /&gt;
&lt;br /&gt;
* Clone ns-3-dev from above provided link&lt;br /&gt;
* Configure ns-3-dev: ./ns3 configure --enable-tests --enable-examples -d optimized&lt;br /&gt;
* Build ns-3-dev: ./ns3 build&lt;br /&gt;
* To run the example: ./ns3 run src/internet/examples/neighbor-cache-dynamic.cc&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12675</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12675"/>
		<updated>2022-09-10T05:38:33Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Project Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects. With the help of the example provided, ns-3 users can enable auto-generated neighbor cache in different scopes.  Documentation was added to help users to understand and unit test cases were added to verify the fundamental behavior. The project was divided into 2 phases, and the phase-wise work is available below.&lt;br /&gt;
== Merge Requests, Commits, and Project Details ==&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache] || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my GSoC branch: [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc link].&lt;br /&gt;
&lt;br /&gt;
The second method, which is also the final chosen one, is adding a helper to automatically generate neighbor caches. Users could use the helper after IP addresses are assigned, and the helper will iterate devices in the scope chosen by users to fill up neighbor caches properly by auto-generated entries. We choose this method because it's can achieve the same effect with much neater modification. It doesn't need the new data structure for shared neighbor cache and new child class. We completed a static neighbor cache generating helper and corresponding example and test during phase 1, which is included in this MR: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 link].&lt;br /&gt;
&lt;br /&gt;
== Phase 2 ==&lt;br /&gt;
&lt;br /&gt;
During Phase 2, we worked on a dynamic neighbor cache, which makes the auto-generated neighbor cache update by IP addresses added/removed, and an example is along with this feature.  I also worked on documentation and all the comments and suggestions provided by my mentors and the reviewers. &lt;br /&gt;
&lt;br /&gt;
MR submitted during this phase: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 link]&lt;br /&gt;
&lt;br /&gt;
== Proposal vs. Actual Work ==&lt;br /&gt;
&lt;br /&gt;
We completed the proposed work with a method different from the proposal. That method was raised during the community bonding period and was discussed and decided during phase 1. The method we chose functionally achieves our goals with neater modification.&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
During phase 2, when modifying neighbor cache NUD_STATE, I found the related code in &amp;lt;em&amp;gt; ReceiveLLA &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; HandleNA &amp;lt;/em&amp;gt; has an improper structure and have multiple logical mistakes, I planned to refactor the code. For this task, I already opened up an [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1035 MR].&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12674</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12674"/>
		<updated>2022-09-10T05:07:39Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects.&lt;br /&gt;
&lt;br /&gt;
== Merge Requests, Commits, and Project Details ==&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache] || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my GSoC branch: [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc link].&lt;br /&gt;
&lt;br /&gt;
The second method, which is also the final chosen one, is adding a helper to automatically generate neighbor caches. Users could use the helper after IP addresses are assigned, and the helper will iterate devices in the scope chosen by users to fill up neighbor caches properly by auto-generated entries. We choose this method because it's can achieve the same effect with much neater modification. It doesn't need the new data structure for shared neighbor cache and new child class. We completed a static neighbor cache generating helper and corresponding example and test during phase 1, which is included in this MR: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 link].&lt;br /&gt;
&lt;br /&gt;
== Phase 2 ==&lt;br /&gt;
&lt;br /&gt;
During Phase 2, we worked on a dynamic neighbor cache, which makes the auto-generated neighbor cache update by IP addresses added/removed, and an example is along with this feature.  I also worked on documentation and all the comments and suggestions provided by my mentors and the reviewers. &lt;br /&gt;
&lt;br /&gt;
MR submitted during this phase: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 link]&lt;br /&gt;
&lt;br /&gt;
== Proposal vs. Actual Work ==&lt;br /&gt;
&lt;br /&gt;
We completed the proposed work with a method different from the proposal. That method was raised during the community bonding period and was discussed and decided during phase 1. The method we chose functionally achieves our goals with neater modification.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12673</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12673"/>
		<updated>2022-09-10T04:52:57Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects.&lt;br /&gt;
&lt;br /&gt;
== Merge Requests, Commits, and Project Details ==&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache] || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my GSoC branch: [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc link].&lt;br /&gt;
&lt;br /&gt;
The second method, which is also the final chosen one, is adding a helper to automatically generate neighbor caches. Users could use the helper after IP addresses are assigned, and the helper will iterate devices in the scope chosen by users to fill up neighbor caches properly by auto-generated entries. We choose this method because it's can achieve the same effect with much neater modification. It doesn't need the new data structure for shared neighbor cache and new child class. We completed a static neighbor cache generating helper during phase 1, which is included in this MR: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 link].&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12672</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12672"/>
		<updated>2022-09-10T04:52:12Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Phase 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects.&lt;br /&gt;
&lt;br /&gt;
== Merge Requests, Commits, and Project Details ==&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my GSoC branch: [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc link].&lt;br /&gt;
&lt;br /&gt;
The second method, which is also the final chosen one, is adding a helper to automatically generate neighbor caches. Users could use the helper after IP addresses are assigned, and the helper will iterate devices in the scope chosen by users to fill up neighbor caches properly by auto-generated entries. We choose this method because it's can achieve the same effect with much neater modification. It doesn't need the new data structure for shared neighbor cache and new child class. We completed a static neighbor cache generating helper during phase 1, which is included in this MR: [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 link].&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12671</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12671"/>
		<updated>2022-09-10T04:33:56Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Phase 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects.&lt;br /&gt;
&lt;br /&gt;
== Merge Requests, Commits, and Project Details ==&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my GSoC branch: [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc link].&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12670</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12670"/>
		<updated>2022-09-10T04:33:11Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Phase 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects.&lt;br /&gt;
&lt;br /&gt;
== Merge Requests, Commits, and Project Details ==&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to normal neighbor caches in that network, (the new data structure for perfect cache is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my branch [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc gsoc]&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12669</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12669"/>
		<updated>2022-09-10T04:31:58Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Phase 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects.&lt;br /&gt;
&lt;br /&gt;
== Merge Requests, Commits, and Project Details ==&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map: &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to a normal cache, (this is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my branch [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc gsoc]&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12668</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12668"/>
		<updated>2022-09-10T04:31:29Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Phase 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects.&lt;br /&gt;
&lt;br /&gt;
== Merge Requests, Commits, and Project Details ==&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;/em&amp;gt;, the key is the network address and the value is the pointer to a normal cache, (this is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my branch [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc gsoc]&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12667</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12667"/>
		<updated>2022-09-10T04:30:58Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects.&lt;br /&gt;
&lt;br /&gt;
== Merge Requests, Commits, and Project Details ==&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2022PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
During the community bonding period, we did some preparation work:&lt;br /&gt;
* Create a wiki page that will be maintained as the GSoC project evolves.&lt;br /&gt;
* Set a weekly meeting with my mentors for reports and discussions.&lt;br /&gt;
* Discuss the details about how to implement the ideas mentioned in the proposal and some other new ideas.&lt;br /&gt;
* Layout a project plan.&lt;br /&gt;
&lt;br /&gt;
== Phase 1 ==&lt;br /&gt;
&lt;br /&gt;
During phase 1, I did parallel jobs for the two methods we discussed during the community bonding period.&lt;br /&gt;
The first method is to create a locally shared neighbor cache per network. In this approach, we create a new data structure for the locally shared neighbor cache,  which is a map of map &amp;lt;em&amp;gt;std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache&amp;lt;em&amp;gt;, the key is the network address and the value is the pointer to a normal cache, (this is necessary to deal with the scenario that one interface has multiple IP addresses which are from different network address). We created child classes &amp;lt;em&amp;gt;PerfectArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; PerfectArpCache &amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;ArpL3Protocol &amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt; ArpCache &amp;lt;/em&amp;gt;, override functions &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Flush &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; CreateCache &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Lookup &amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt; Add &amp;lt;/em&amp;gt; to deal with the new data structure of neighbor cache, make it shared among devices in same networks and update dynamically with IP address added/removed. We made this method work but finally didn't choose it, the prototype can be found in my branch [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/gsoc gsoc]&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12664</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12664"/>
		<updated>2022-09-06T08:00:42Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Merge Requests, Commits, and Project Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects.&lt;br /&gt;
&lt;br /&gt;
== Merge Requests, Commits, and Project Details ==&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2021PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12663</id>
		<title>GSOC2022NeighborCacheFinalReport</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022NeighborCacheFinalReport&amp;diff=12663"/>
		<updated>2022-09-06T08:00:15Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: Created page with &amp;quot;{{TOC}}  Back to  GSoC 2022 projects  = Project Overview =  * '''Project Name:''' Perfect ARP and NDP * '''Student:''' [mailto:...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
&lt;br /&gt;
The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high-level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). The new method generates all needed ARP/NDP caches before simulation start to avoid the delay and message overhead of address resolution in simulations that are focused on other performance aspects.&lt;br /&gt;
&lt;br /&gt;
== Merge Requests, Commits, and Project Details ==&lt;br /&gt;
&lt;br /&gt;
We maintained a single branch for all the GSoC work, named [https://gitlab.com/ameyanrd/ns-3-dev/-/tree/gsoc-21 ''gsoc-21''].&lt;br /&gt;
&lt;br /&gt;
Project Wiki Page: [https://www.nsnam.org/wiki/GSOC2022PerfectArp ''GSOC2021PerfectArp'']&lt;br /&gt;
&lt;br /&gt;
Project Plan: [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit#heading=h.s3wcskgocqq ''link'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Merge Requests&lt;br /&gt;
|-&lt;br /&gt;
! No. !! Name !! Status !! Commit&lt;br /&gt;
|-&lt;br /&gt;
| [1] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 Internet: GSoC-22 generate ARP/NDISC cache automatically] || Merged || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commit/87fb2ddcbf1132416e32a0965f61ac2bcc5ac6b2 link]&lt;br /&gt;
|-&lt;br /&gt;
| [2] || [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 internet: GSoC-22 dynamic neighbor cache || Reviewing || [https://gitlab.com/ZhiHengD/ns-3-dev/-/commits/phase2-dynamic link]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12662</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12662"/>
		<updated>2022-09-06T07:00:21Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Weekly Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Write examples and tests for them&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Write examples and tests for them&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 13 - June 19&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior about permanent entries in Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;br /&gt;
&lt;br /&gt;
'''Week2'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 20 - June 26&lt;br /&gt;
&lt;br /&gt;
* Implemented static perfect cache on both IPv4 and IPv6 by new helper class.&lt;br /&gt;
* Start adding tests and examples for perfect ARP/NDP&lt;br /&gt;
* Tested DAD behavior when interface disable ARP/NDP  in Linux.&lt;br /&gt;
&lt;br /&gt;
'''Week3'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 27 - July 3&lt;br /&gt;
&lt;br /&gt;
* Implemented a subclass of Icmpv6L4Protocol for disable DAD&lt;br /&gt;
* Create two example for perfect ARP/NDP, the one is simple csma, another is double wifi. Meet problems when creating global routing in double wifi example, fix by using nix-vector routing instead.&lt;br /&gt;
* Draft Merge Request of static perfect cache with two examples. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
&lt;br /&gt;
'''Week4'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 4 - July 10&lt;br /&gt;
&lt;br /&gt;
* Add test for perfect ARP/NDP.&lt;br /&gt;
* Add user-level API for updating perfect cache after IP address changes.&lt;br /&gt;
* Update MR based on comments. Fix mistakes and improve iteration logic. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
* Continue and refine the work on the dynamical perfect cache. Perfect cache updating will base on IP addresses added/removed instead of link up/down.&lt;br /&gt;
&lt;br /&gt;
'''Week5'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 11 - July 17&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* Implement dynamical perfect ARP on locally shared cache per network.&lt;br /&gt;
* Add new perfect-arp-cache and perfect-arp-l3-protocol.&lt;br /&gt;
* Add addAddressCallback and removeAddressCallback to make it perfect caches updated dynamically by IP addresses change.&lt;br /&gt;
* Use a new data structure for perfect cache, ''std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache;'' The key is network address and the value is the pointer to the unorder_map of normal caches. This new structure is used to differentiate a case that when an interface has multiple IP addresses from different networks, its perfect cache would contain entries from different networks.&lt;br /&gt;
* Overwite ''ArpCache::Lookup'',''ArpCache::Add'',''ArpCache::Remove'' for the new data structure of perfect ARP cache.&lt;br /&gt;
&lt;br /&gt;
'''Week6'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 18 - July 24&lt;br /&gt;
&lt;br /&gt;
* Update the ARP/NDISC cache to make them ordered.&lt;br /&gt;
* modify examples to show populate cache with interfaceContainer.&lt;br /&gt;
* replace the word perfect from the code with more technical words.&lt;br /&gt;
&lt;br /&gt;
'''Week7'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 25 - July 31&lt;br /&gt;
&lt;br /&gt;
* Refactor Icmpv6L4Protocol::ReceiveLLA and Icmpv6L4Protocol::HandleNA, change the nesting of if statement to switch case of NUD_STATE&lt;br /&gt;
* Add new NUD_STATE: STATIC_AUTOGENERATED. The entries generated by perfect ARP/NDP will use the new state&lt;br /&gt;
* Update printout in test and example, because of the new state and ARP/NDISC cache reorder.&lt;br /&gt;
&lt;br /&gt;
'''Week8 - Week9'''&lt;br /&gt;
&lt;br /&gt;
Duration: August 1 - August 14&lt;br /&gt;
&lt;br /&gt;
I'm not fully involved in GSoC program these days because of some personal issue&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* add function to flush all auto-generated entries&lt;br /&gt;
* add remove callbacks in ipv4interface to enable dynamical perfect cache&lt;br /&gt;
* delete the double wifi example and modify the simple example to a detailed one to show all API and sending a data stream to show how perfect cache reduces the packet drop rate in some situation.&lt;br /&gt;
&lt;br /&gt;
'''Week10 - Week11'''&lt;br /&gt;
&lt;br /&gt;
Duration: August 15 - August 28&lt;br /&gt;
&lt;br /&gt;
* Complete the update on the static neighbor cache, which is ready to be merged.&lt;br /&gt;
* Update the MR of dynamic neighbor cache based on comments.&lt;br /&gt;
&lt;br /&gt;
'''Week10 - Week11'''&lt;br /&gt;
Duration: August 29 - September 4&lt;br /&gt;
&lt;br /&gt;
*  [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 MR]on static neighbor cache has been merged. &lt;br /&gt;
* Update the [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 MR] of dynamic neighbor cache based on comments.&lt;br /&gt;
* Refactor on NUD_STATE process on icmpv6.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12657</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12657"/>
		<updated>2022-09-05T05:01:50Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Weekly Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Write examples and tests for them&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Write examples and tests for them&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 13 - June 19&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior about permanent entries in Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;br /&gt;
&lt;br /&gt;
'''Week2'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 20 - June 26&lt;br /&gt;
&lt;br /&gt;
* Implemented static perfect cache on both IPv4 and IPv6 by new helper class.&lt;br /&gt;
* Start adding tests and examples for perfect ARP/NDP&lt;br /&gt;
* Tested DAD behavior when interface disable ARP/NDP  in Linux.&lt;br /&gt;
&lt;br /&gt;
'''Week3'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 27 - July 3&lt;br /&gt;
&lt;br /&gt;
* Implemented a subclass of Icmpv6L4Protocol for disable DAD&lt;br /&gt;
* Create two example for perfect ARP/NDP, the one is simple csma, another is double wifi. Meet problems when creating global routing in double wifi example, fix by using nix-vector routing instead.&lt;br /&gt;
* Draft Merge Request of static perfect cache with two examples. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
&lt;br /&gt;
'''Week4'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 4 - July 10&lt;br /&gt;
&lt;br /&gt;
* Add test for perfect ARP/NDP.&lt;br /&gt;
* Add user-level API for updating perfect cache after IP address changes.&lt;br /&gt;
* Update MR based on comments. Fix mistakes and improve iteration logic. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
* Continue and refine the work on the dynamical perfect cache. Perfect cache updating will base on IP addresses added/removed instead of link up/down.&lt;br /&gt;
&lt;br /&gt;
'''Week5'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 11 - July 17&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* Implement dynamical perfect ARP on locally shared cache per network.&lt;br /&gt;
* Add new perfect-arp-cache and perfect-arp-l3-protocol.&lt;br /&gt;
* Add addAddressCallback and removeAddressCallback to make it perfect caches updated dynamically by IP addresses change.&lt;br /&gt;
* Use a new data structure for perfect cache, ''std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache;'' The key is network address and the value is the pointer to the unorder_map of normal caches. This new structure is used to differentiate a case that when an interface has multiple IP addresses from different networks, its perfect cache would contain entries from different networks.&lt;br /&gt;
* Overwite ''ArpCache::Lookup'',''ArpCache::Add'',''ArpCache::Remove'' for the new data structure of perfect ARP cache.&lt;br /&gt;
&lt;br /&gt;
'''Week6'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 18 - July 24&lt;br /&gt;
&lt;br /&gt;
* Update the ARP/NDISC cache to make them ordered.&lt;br /&gt;
* modify examples to show populate cache with interfaceContainer.&lt;br /&gt;
* replace the word perfect from the code with more technical words.&lt;br /&gt;
&lt;br /&gt;
'''Week7'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 25 - July 31&lt;br /&gt;
&lt;br /&gt;
* Refactor Icmpv6L4Protocol::ReceiveLLA and Icmpv6L4Protocol::HandleNA, change the nesting of if statement to switch case of NUD_STATE&lt;br /&gt;
* Add new NUD_STATE: STATIC_AUTOGENERATED. The entries generated by perfect ARP/NDP will use the new state&lt;br /&gt;
* Update printout in test and example, because of the new state and ARP/NDISC cache reorder.&lt;br /&gt;
[http://www.example.com link title]&lt;br /&gt;
'''Week8 - Week9'''&lt;br /&gt;
&lt;br /&gt;
Duration: August 1 - August 14&lt;br /&gt;
&lt;br /&gt;
I'm not fully involved in GSoC program these days because of some personal issue&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* add function to flush all auto-generated entries&lt;br /&gt;
* add remove callbacks in ipv4interface to enable dynamical perfect cache&lt;br /&gt;
* delete the double wifi example and modify the simple example to a detailed one to show all API and sending a data stream to show how perfect cache reduces the packet drop rate in some situation.&lt;br /&gt;
&lt;br /&gt;
'''Week10 - Week11'''&lt;br /&gt;
Duration: August 15 - August 28&lt;br /&gt;
&lt;br /&gt;
* Complete the update on the static neighbor cache, which is ready to be merged.&lt;br /&gt;
* Update the MR of dynamic neighbor cache based on comments.&lt;br /&gt;
&lt;br /&gt;
'''Week10 - Week11'''&lt;br /&gt;
Duration: August 29 - September 4&lt;br /&gt;
&lt;br /&gt;
*  [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 MR]on static neighbor cache has been merged. &lt;br /&gt;
* Update the [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 MR] of dynamic neighbor cache based on comments.&lt;br /&gt;
* Refactor on NUD_STATE process on icmpv6.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12656</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12656"/>
		<updated>2022-09-05T04:55:44Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Weekly Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Write examples and tests for them&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Write examples and tests for them&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 13 - June 19&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior about permanent entries in Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;br /&gt;
&lt;br /&gt;
'''Week2'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 20 - June 26&lt;br /&gt;
&lt;br /&gt;
* Implemented static perfect cache on both IPv4 and IPv6 by new helper class.&lt;br /&gt;
* Start adding tests and examples for perfect ARP/NDP&lt;br /&gt;
* Tested DAD behavior when interface disable ARP/NDP  in Linux.&lt;br /&gt;
&lt;br /&gt;
'''Week3'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 27 - July 3&lt;br /&gt;
&lt;br /&gt;
* Implemented a subclass of Icmpv6L4Protocol for disable DAD&lt;br /&gt;
* Create two example for perfect ARP/NDP, the one is simple csma, another is double wifi. Meet problems when creating global routing in double wifi example, fix by using nix-vector routing instead.&lt;br /&gt;
* Draft Merge Request of static perfect cache with two examples. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
&lt;br /&gt;
'''Week4'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 4 - July 10&lt;br /&gt;
&lt;br /&gt;
* Add test for perfect ARP/NDP.&lt;br /&gt;
* Add user-level API for updating perfect cache after IP address changes.&lt;br /&gt;
* Update MR based on comments. Fix mistakes and improve iteration logic. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
* Continue and refine the work on the dynamical perfect cache. Perfect cache updating will base on IP addresses added/removed instead of link up/down.&lt;br /&gt;
&lt;br /&gt;
'''Week5'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 11 - July 17&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* Implement dynamical perfect ARP on locally shared cache per network.&lt;br /&gt;
* Add new perfect-arp-cache and perfect-arp-l3-protocol.&lt;br /&gt;
* Add addAddressCallback and removeAddressCallback to make it perfect caches updated dynamically by IP addresses change.&lt;br /&gt;
* Use a new data structure for perfect cache, ''std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache;'' The key is network address and the value is the pointer to the unorder_map of normal caches. This new structure is used to differentiate a case that when an interface has multiple IP addresses from different networks, its perfect cache would contain entries from different networks.&lt;br /&gt;
* Overwite ''ArpCache::Lookup'',''ArpCache::Add'',''ArpCache::Remove'' for the new data structure of perfect ARP cache.&lt;br /&gt;
&lt;br /&gt;
'''Week6'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 18 - July 24&lt;br /&gt;
&lt;br /&gt;
* Update the ARP/NDISC cache to make them ordered.&lt;br /&gt;
* modify examples to show populate cache with interfaceContainer.&lt;br /&gt;
* replace the word perfect from the code with more technical words.&lt;br /&gt;
&lt;br /&gt;
'''Week7'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 25 - July 31&lt;br /&gt;
&lt;br /&gt;
* Refactor Icmpv6L4Protocol::ReceiveLLA and Icmpv6L4Protocol::HandleNA, change the nesting of if statement to switch case of NUD_STATE&lt;br /&gt;
* Add new NUD_STATE: STATIC_AUTOGENERATED. The entries generated by perfect ARP/NDP will use the new state&lt;br /&gt;
* Update printout in test and example, because of the new state and ARP/NDISC cache reorder.&lt;br /&gt;
&lt;br /&gt;
'''Week8 - Week9'''&lt;br /&gt;
&lt;br /&gt;
Duration: August 1 - August 14&lt;br /&gt;
&lt;br /&gt;
I'm not fully involved in GSoC program these days because of some personal issue&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* add function to flush all auto-generated entries&lt;br /&gt;
* add remove callbacks in ipv4interface to enable dynamical perfect cache&lt;br /&gt;
* delete the double wifi example and modify the simple example to a detailed one to show all API and sending a data stream to show how perfect cache reduces the packet drop rate in some situation.&lt;br /&gt;
&lt;br /&gt;
'''Week10 - Week11'''&lt;br /&gt;
Duration: August 15 - August 28&lt;br /&gt;
&lt;br /&gt;
* Complete the update on the static neighbor cache, which is ready to be merged.&lt;br /&gt;
* Update the MR of dynamic neighbor cache based on comments.&lt;br /&gt;
&lt;br /&gt;
'''Week10 - Week11'''&lt;br /&gt;
Duration: August 29 - September 4&lt;br /&gt;
&lt;br /&gt;
* (https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012 MR]) on static neighbor cache has been merged. &lt;br /&gt;
* Update the [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1068 MR] of dynamic neighbor cache based on comments.&lt;br /&gt;
* Refactor on NUD_STATE process on icmpv6.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12648</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12648"/>
		<updated>2022-08-20T07:50:20Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Weekly Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Write examples and tests for them&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Write examples and tests for them&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 13 - June 19&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior about permanent entries in Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;br /&gt;
&lt;br /&gt;
'''Week2'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 20 - June 26&lt;br /&gt;
&lt;br /&gt;
* Implemented static perfect cache on both IPv4 and IPv6 by new helper class.&lt;br /&gt;
* Start adding tests and examples for perfect ARP/NDP&lt;br /&gt;
* Tested DAD behavior when interface disable ARP/NDP  in Linux.&lt;br /&gt;
&lt;br /&gt;
'''Week3'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 27 - July 3&lt;br /&gt;
&lt;br /&gt;
* Implemented a subclass of Icmpv6L4Protocol for disable DAD&lt;br /&gt;
* Create two example for perfect ARP/NDP, the one is simple csma, another is double wifi. Meet problems when creating global routing in double wifi example, fix by using nix-vector routing instead.&lt;br /&gt;
* Draft Merge Request of static perfect cache with two examples. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
&lt;br /&gt;
'''Week4'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 4 - July 10&lt;br /&gt;
&lt;br /&gt;
* Add test for perfect ARP/NDP.&lt;br /&gt;
* Add user-level API for updating perfect cache after IP address changes.&lt;br /&gt;
* Update MR based on comments. Fix mistakes and improve iteration logic. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
* Continue and refine the work on the dynamical perfect cache. Perfect cache updating will base on IP addresses added/removed instead of link up/down.&lt;br /&gt;
&lt;br /&gt;
'''Week5'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 11 - July 17&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* Implement dynamical perfect ARP on locally shared cache per network.&lt;br /&gt;
* Add new perfect-arp-cache and perfect-arp-l3-protocol.&lt;br /&gt;
* Add addAddressCallback and removeAddressCallback to make it perfect caches updated dynamically by IP addresses change.&lt;br /&gt;
* Use a new data structure for perfect cache, ''std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache;'' The key is network address and the value is the pointer to the unorder_map of normal caches. This new structure is used to differentiate a case that when an interface has multiple IP addresses from different networks, its perfect cache would contain entries from different networks.&lt;br /&gt;
* Overwite ''ArpCache::Lookup'',''ArpCache::Add'',''ArpCache::Remove'' for the new data structure of perfect ARP cache.&lt;br /&gt;
&lt;br /&gt;
'''Week6'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 18 - July 24&lt;br /&gt;
&lt;br /&gt;
* Update the ARP/NDISC cache to make them ordered.&lt;br /&gt;
* modify examples to show populate cache with interfaceContainer.&lt;br /&gt;
* replace the word perfect from the code with more technical words.&lt;br /&gt;
&lt;br /&gt;
'''Week7'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 25 - July 31&lt;br /&gt;
&lt;br /&gt;
* Refactor Icmpv6L4Protocol::ReceiveLLA and Icmpv6L4Protocol::HandleNA, change the nesting of if statement to switch case of NUD_STATE&lt;br /&gt;
* Add new NUD_STATE: STATIC_AUTOGENERATED. The entries generated by perfect ARP/NDP will use the new state&lt;br /&gt;
* Update printout in test and example, because of the new state and ARP/NDISC cache reorder.&lt;br /&gt;
&lt;br /&gt;
'''Week8 - Week9'''&lt;br /&gt;
&lt;br /&gt;
Duration: August 1 - August 14&lt;br /&gt;
&lt;br /&gt;
I'm not fully involved in GSoC program these days because of some personal issue&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* add function to flush all auto-generated entries&lt;br /&gt;
* add remove callbacks in ipv4interface to enable dynamical perfect cache&lt;br /&gt;
* delete the double wifi example and modify the simple example to a detailed one to show all API and sending a data stream to show how perfect cache reduces the packet drop rate in some situation.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12647</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12647"/>
		<updated>2022-08-20T07:49:58Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Weekly Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Write examples and tests for them&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Write examples and tests for them&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 13 - June 19&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior about permanent entries in Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;br /&gt;
&lt;br /&gt;
'''Week2'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 20 - June 26&lt;br /&gt;
&lt;br /&gt;
* Implemented static perfect cache on both IPv4 and IPv6 by new helper class.&lt;br /&gt;
* Start adding tests and examples for perfect ARP/NDP&lt;br /&gt;
* Tested DAD behavior when interface disable ARP/NDP  in Linux.&lt;br /&gt;
&lt;br /&gt;
'''Week3'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 27 - July 3&lt;br /&gt;
&lt;br /&gt;
* Implemented a subclass of Icmpv6L4Protocol for disable DAD&lt;br /&gt;
* Create two example for perfect ARP/NDP, the one is simple csma, another is double wifi. Meet problems when creating global routing in double wifi example, fix by using nix-vector routing instead.&lt;br /&gt;
* Draft Merge Request of static perfect cache with two examples. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
&lt;br /&gt;
'''Week4'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 4 - July 10&lt;br /&gt;
&lt;br /&gt;
* Add test for perfect ARP/NDP.&lt;br /&gt;
* Add user-level API for updating perfect cache after IP address changes.&lt;br /&gt;
* Update MR based on comments. Fix mistakes and improve iteration logic. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
* Continue and refine the work on the dynamical perfect cache. Perfect cache updating will base on IP addresses added/removed instead of link up/down.&lt;br /&gt;
&lt;br /&gt;
'''Week5'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 11 - July 17&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* Implement dynamical perfect ARP on locally shared cache per network.&lt;br /&gt;
* Add new perfect-arp-cache and perfect-arp-l3-protocol.&lt;br /&gt;
* Add addAddressCallback and removeAddressCallback to make it perfect caches updated dynamically by IP addresses change.&lt;br /&gt;
* Use a new data structure for perfect cache, ''std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache;'' The key is network address and the value is the pointer to the unorder_map of normal caches. This new structure is used to differentiate a case that when an interface has multiple IP addresses from different networks, its perfect cache would contain entries from different networks.&lt;br /&gt;
* Overwite ''ArpCache::Lookup'',''ArpCache::Add'',''ArpCache::Remove'' for the new data structure of perfect ARP cache.&lt;br /&gt;
&lt;br /&gt;
'''Week6'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 18 - July 24&lt;br /&gt;
&lt;br /&gt;
* Update the ARP/NDISC cache to make them ordered.&lt;br /&gt;
* modify examples to show populate cache with interfaceContainer.&lt;br /&gt;
* replace the word perfect from the code with more technical words.&lt;br /&gt;
&lt;br /&gt;
'''Week7'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 25 - July 31&lt;br /&gt;
&lt;br /&gt;
* Refactor Icmpv6L4Protocol::ReceiveLLA and Icmpv6L4Protocol::HandleNA, change the nesting of if statement to switch case of NUD_STATE&lt;br /&gt;
* Add new NUD_STATE: STATIC_AUTOGENERATED. The entries generated by perfect ARP/NDP will use the new state&lt;br /&gt;
* Update printout in test and example, because of the new state and ARP/NDISC cache reorder.&lt;br /&gt;
&lt;br /&gt;
'''Week8 - Week9'''&lt;br /&gt;
&lt;br /&gt;
Duration: August 1 - August 14&lt;br /&gt;
&lt;br /&gt;
I'm not fully involved in GSoC program these days./because of some personal issue&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* add function to flush all auto-generated entries&lt;br /&gt;
* add remove callbacks in ipv4interface to enable dynamical perfect cache&lt;br /&gt;
* delete the double wifi example and modify the simple example to a detailed one to show all API and sending a data stream to show how perfect cache reduces the packet drop rate in some situation.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12646</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12646"/>
		<updated>2022-08-20T07:17:39Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Weekly Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Write examples and tests for them&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Write examples and tests for them&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 13 - June 19&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior about permanent entries in Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;br /&gt;
&lt;br /&gt;
'''Week2'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 20 - June 26&lt;br /&gt;
&lt;br /&gt;
* Implemented static perfect cache on both IPv4 and IPv6 by new helper class.&lt;br /&gt;
* Start adding tests and examples for perfect ARP/NDP&lt;br /&gt;
* Tested DAD behavior when interface disable ARP/NDP  in Linux.&lt;br /&gt;
&lt;br /&gt;
'''Week3'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 27 - July 3&lt;br /&gt;
&lt;br /&gt;
* Implemented a subclass of Icmpv6L4Protocol for disable DAD&lt;br /&gt;
* Create two example for perfect ARP/NDP, the one is simple csma, another is double wifi. Meet problems when creating global routing in double wifi example, fix by using nix-vector routing instead.&lt;br /&gt;
* Draft Merge Request of static perfect cache with two examples. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
&lt;br /&gt;
'''Week4'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 4 - July 10&lt;br /&gt;
&lt;br /&gt;
* Add test for perfect ARP/NDP.&lt;br /&gt;
* Add user-level API for updating perfect cache after IP address changes.&lt;br /&gt;
* Update MR based on comments. Fix mistakes and improve iteration logic. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
* Continue and refine the work on the dynamical perfect cache. Perfect cache updating will base on IP addresses added/removed instead of link up/down.&lt;br /&gt;
&lt;br /&gt;
'''Week5'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 11 - July 17&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* Implement dynamical perfect ARP on locally shared cache per network.&lt;br /&gt;
* Add new perfect-arp-cache and perfect-arp-l3-protocol.&lt;br /&gt;
* Add addAddressCallback and removeAddressCallback to make it perfect caches updated dynamically by IP addresses change.&lt;br /&gt;
* Use a new data structure for perfect cache, ''std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache;'' The key is network address and the value is the pointer to the unorder_map of normal caches. This new structure is used to differentiate a case that when an interface has multiple IP addresses from different networks, its perfect cache would contain entries from different networks.&lt;br /&gt;
* Overwite ''ArpCache::Lookup'',''ArpCache::Add'',''ArpCache::Remove'' for the new data structure of perfect ARP cache.&lt;br /&gt;
&lt;br /&gt;
'''Week6'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 18 - July 24&lt;br /&gt;
&lt;br /&gt;
* Update the ARP/NDISC cache to make them ordered.&lt;br /&gt;
* modify examples to show populate cache with interfaceContainer.&lt;br /&gt;
* replace the word perfect from the code with more technical words.&lt;br /&gt;
&lt;br /&gt;
'''Week7'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 25 - July 31&lt;br /&gt;
&lt;br /&gt;
* Refactor Icmpv6L4Protocol::ReceiveLLA and Icmpv6L4Protocol::HandleNA, change the nesting of if statement to switch case of NUD_STATE&lt;br /&gt;
* Add new NUD_STATE: STATIC_AUTOGENERATED. The entries generated by perfect ARP/NDP will use the new state&lt;br /&gt;
* Update printout in test and example, because of the new state and ARP/NDISC cache reorder.&lt;br /&gt;
&lt;br /&gt;
'''Week8 - Week9'''&lt;br /&gt;
&lt;br /&gt;
Duration: August 1 - August 14&lt;br /&gt;
I'm not fully involved in GSoC program because of some personal issue&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* add function to flush all auto-generated entries&lt;br /&gt;
* add remove callbacks in ipv4interface to enable dynamical perfect cache&lt;br /&gt;
* delete the double wifi example and modify the simple example to a detailed one to show all API and sending a data stream to show how perfect cache reduces the packet drop rate in some situation.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12645</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12645"/>
		<updated>2022-08-20T07:03:08Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Milestones and Deliverables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Write examples and tests for them&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Write examples and tests for them&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 13 - June 19&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior about permanent entries in Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;br /&gt;
&lt;br /&gt;
'''Week2'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 20 - June 26&lt;br /&gt;
&lt;br /&gt;
* Implemented static perfect cache on both IPv4 and IPv6 by new helper class.&lt;br /&gt;
* Start adding tests and examples for perfect ARP/NDP&lt;br /&gt;
* Tested DAD behavior when interface disable ARP/NDP  in Linux.&lt;br /&gt;
&lt;br /&gt;
'''Week3'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 27 - July 3&lt;br /&gt;
&lt;br /&gt;
* Implemented a subclass of Icmpv6L4Protocol for disable DAD&lt;br /&gt;
* Create two example for perfect ARP/NDP, the one is simple csma, another is double wifi. Meet problems when creating global routing in double wifi example, fix by using nix-vector routing instead.&lt;br /&gt;
* Draft Merge Request of static perfect cache with two examples. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
&lt;br /&gt;
'''Week4'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 4 - July 10&lt;br /&gt;
&lt;br /&gt;
* Add test for perfect ARP/NDP.&lt;br /&gt;
* Add user-level API for updating perfect cache after IP address changes.&lt;br /&gt;
* Update MR based on comments. Fix mistakes and improve iteration logic. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
* Continue and refine the work on the dynamical perfect cache. Perfect cache updating will base on IP addresses added/removed instead of link up/down.&lt;br /&gt;
&lt;br /&gt;
'''Week5'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 11 - July 17&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* Implement dynamical perfect ARP on locally shared cache per network.&lt;br /&gt;
* Add new perfect-arp-cache and perfect-arp-l3-protocol.&lt;br /&gt;
* Add addAddressCallback and removeAddressCallback to make it perfect caches updated dynamically by IP addresses change.&lt;br /&gt;
* Use a new data structure for perfect cache, ''std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache;'' The key is network address and the value is the pointer to the unorder_map of normal caches. This new structure is used to differentiate a case that when an interface has multiple IP addresses from different networks, its perfect cache would contain entries from different networks.&lt;br /&gt;
* Overwite ''ArpCache::Lookup'',''ArpCache::Add'',''ArpCache::Remove'' for the new data structure of perfect ARP cache.&lt;br /&gt;
&lt;br /&gt;
'''Week6'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 18 - July 24&lt;br /&gt;
&lt;br /&gt;
* Update the ARP/NDISC cache to make them ordered.&lt;br /&gt;
* modify examples to show populate cache with interfaceContainer.&lt;br /&gt;
* replace the word perfect from the code with more technical words.&lt;br /&gt;
&lt;br /&gt;
'''Week7'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 25 - July 31&lt;br /&gt;
&lt;br /&gt;
* Refactor Icmpv6L4Protocol::ReceiveLLA and Icmpv6L4Protocol::HandleNA, change the nesting of if statement to switch case of NUD_STATE&lt;br /&gt;
* Add new NUD_STATE: STATIC_AUTOGENERATED. The entries generated by perfect ARP/NDP will use the new state&lt;br /&gt;
* Update printout in test and example, because of the new state and ARP/NDISC cache reorder.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12637</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12637"/>
		<updated>2022-08-02T05:57:52Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Weekly Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 3&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 4 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 3'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Handle DAD&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 13 - June 19&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior about permanent entries in Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;br /&gt;
&lt;br /&gt;
'''Week2'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 20 - June 26&lt;br /&gt;
&lt;br /&gt;
* Implemented static perfect cache on both IPv4 and IPv6 by new helper class.&lt;br /&gt;
* Start adding tests and examples for perfect ARP/NDP&lt;br /&gt;
* Tested DAD behavior when interface disable ARP/NDP  in Linux.&lt;br /&gt;
&lt;br /&gt;
'''Week3'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 27 - July 3&lt;br /&gt;
&lt;br /&gt;
* Implemented a subclass of Icmpv6L4Protocol for disable DAD&lt;br /&gt;
* Create two example for perfect ARP/NDP, the one is simple csma, another is double wifi. Meet problems when creating global routing in double wifi example, fix by using nix-vector routing instead.&lt;br /&gt;
* Draft Merge Request of static perfect cache with two examples. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
&lt;br /&gt;
'''Week4'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 4 - July 10&lt;br /&gt;
&lt;br /&gt;
* Add test for perfect ARP/NDP.&lt;br /&gt;
* Add user-level API for updating perfect cache after IP address changes.&lt;br /&gt;
* Update MR based on comments. Fix mistakes and improve iteration logic. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
* Continue and refine the work on the dynamical perfect cache. Perfect cache updating will base on IP addresses added/removed instead of link up/down.&lt;br /&gt;
&lt;br /&gt;
'''Week5'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 11 - July 17&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* Implement dynamical perfect ARP on locally shared cache per network.&lt;br /&gt;
* Add new perfect-arp-cache and perfect-arp-l3-protocol.&lt;br /&gt;
* Add addAddressCallback and removeAddressCallback to make it perfect caches updated dynamically by IP addresses change.&lt;br /&gt;
* Use a new data structure for perfect cache, ''std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache;'' The key is network address and the value is the pointer to the unorder_map of normal caches. This new structure is used to differentiate a case that when an interface has multiple IP addresses from different networks, its perfect cache would contain entries from different networks.&lt;br /&gt;
* Overwite ''ArpCache::Lookup'',''ArpCache::Add'',''ArpCache::Remove'' for the new data structure of perfect ARP cache.&lt;br /&gt;
&lt;br /&gt;
'''Week6'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 18 - July 24&lt;br /&gt;
&lt;br /&gt;
* Update the ARP/NDISC cache to make them ordered.&lt;br /&gt;
* modify examples to show populate cache with interfaceContainer.&lt;br /&gt;
* replace the word perfect from the code with more technical words.&lt;br /&gt;
&lt;br /&gt;
'''Week7'''&lt;br /&gt;
&lt;br /&gt;
Duration: July 25 - July 31&lt;br /&gt;
&lt;br /&gt;
* Refactor Icmpv6L4Protocol::ReceiveLLA and Icmpv6L4Protocol::HandleNA, change the nesting of if statement to switch case of NUD_STATE&lt;br /&gt;
* Add new NUD_STATE: STATIC_AUTOGENERATED. The entries generated by perfect ARP/NDP will use the new state&lt;br /&gt;
* Update printout in test and example, because of the new state and ARP/NDISC cache reorder.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12628</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12628"/>
		<updated>2022-07-18T20:56:39Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Weekly Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 3&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 4 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 3'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Handle DAD&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 13 - June 19&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior about permanent entries in Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;br /&gt;
&lt;br /&gt;
'''Week2'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 20 - June 26&lt;br /&gt;
&lt;br /&gt;
* Implemented static perfect cache on both IPv4 and IPv6 by new helper class.&lt;br /&gt;
* Start adding tests and examples for perfect ARP/NDP&lt;br /&gt;
* Tested DAD behavior when interface disable ARP/NDP  in Linux.&lt;br /&gt;
&lt;br /&gt;
'''Week3'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 27 - July3&lt;br /&gt;
&lt;br /&gt;
* Implemented a subclass of Icmpv6L4Protocol for disable DAD&lt;br /&gt;
* Create two example for perfect ARP/NDP, the one is simple csma, another is double wifi. Meet problems when creating global routing in double wifi example, fix by using nix-vector routing instead.&lt;br /&gt;
* Draft Merge Request of static perfect cache with two examples. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
&lt;br /&gt;
'''Week4'''&lt;br /&gt;
&lt;br /&gt;
Duration: July4 - July10&lt;br /&gt;
&lt;br /&gt;
* Add test for perfect ARP/NDP.&lt;br /&gt;
* Add user-level API for updating perfect cache after IP address changes.&lt;br /&gt;
* Update MR based on comments. Fix mistakes and improve iteration logic. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
* Continue and refine the work on the dynamical perfect cache. Perfect cache updating will base on IP addresses added/removed instead of link up/down.&lt;br /&gt;
&lt;br /&gt;
'''Week4'''&lt;br /&gt;
&lt;br /&gt;
Duration: July11 - July17&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* Implement dynamical perfect ARP on locally shared cache per network.&lt;br /&gt;
* Add new perfect-arp-cache and perfect-arp-l3-protocol.&lt;br /&gt;
* Add addAddressCallback and removeAddressCallback to make it perfect caches updated dynamically by IP addresses change.&lt;br /&gt;
* Use a new data structure for perfect cache, ''std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache;'' The key is network address and the value is the pointer to the unorder_map of normal caches. This new structure is used to differentiate a case that when an interface has multiple IP addresses from different networks, its perfect cache would contain entries from different networks.&lt;br /&gt;
* Overwite ''ArpCache::Lookup'',''ArpCache::Add'',''ArpCache::Remove'' for the new data structure of perfect ARP cache.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12627</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12627"/>
		<updated>2022-07-18T20:54:16Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Weekly Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 3&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 4 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 3'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Handle DAD&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 13 - June 19&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior about permanent entries in Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;br /&gt;
&lt;br /&gt;
'''Week2'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 20 - June 26&lt;br /&gt;
&lt;br /&gt;
* Implemented static perfect cache on both IPv4 and IPv6 by new helper class.&lt;br /&gt;
* Start adding tests and examples for perfect ARP/NDP&lt;br /&gt;
* Tested DAD behavior when interface disable ARP/NDP  in Linux.&lt;br /&gt;
&lt;br /&gt;
'''Week3'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 27 - July3&lt;br /&gt;
&lt;br /&gt;
* Implemented a subclass of Icmpv6L4Protocol for disable DAD&lt;br /&gt;
* Create two example for perfect ARP/NDP, the one is simple csma, another is double wifi. Meet problems when creating global routing in double wifi example, fix by using nix-vector routing instead.&lt;br /&gt;
* Draft Merge Request of static perfect cache with two examples. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
&lt;br /&gt;
'''Week4'''&lt;br /&gt;
&lt;br /&gt;
Duration: July4 - July10&lt;br /&gt;
&lt;br /&gt;
* Add test for perfect ARP/NDP.&lt;br /&gt;
* Add user-level API for updating perfect cache after IP address changes.&lt;br /&gt;
* Update MR based on comments. Fix mistakes and improve iteration logic. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
* Continue and refine the work on the dynamical perfect cache. Perfect cache updating will base on IP addresses added/removed instead of link up/down.&lt;br /&gt;
&lt;br /&gt;
'''Week4'''&lt;br /&gt;
&lt;br /&gt;
Duration: July11 - July17&lt;br /&gt;
&lt;br /&gt;
* Update MR based on comments.&lt;br /&gt;
* Implement dynamical perfect ARP on locally shared cache per network.&lt;br /&gt;
* Add new perfect-arp-cache and perfect-arp-l3-protocol.&lt;br /&gt;
* Add addAddressCallback and removeAddressCallback to make it perfect caches updated dynamically by IP addresses change.&lt;br /&gt;
* Use a new data structure for perfect cache, `std::unordered_map&amp;lt;Ipv4Address, Cache *, Ipv4AddressHash&amp;gt; PerfectCache;` The key is network address and the value is the pointer to the unorder_map of normal caches. This new structure is used to differentiate a case that when an interface has multiple IP addresses from different networks, its perfect cache would contain entries from different network.&lt;br /&gt;
* Overwite `ArpCache::Lookup`,`ArpCache::Add`,`ArpCache::Remove`&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12622</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12622"/>
		<updated>2022-07-11T00:36:26Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Weekly Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 3&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 4 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 3'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Handle DAD&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 13 - June 19&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior about permanent entries in Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;br /&gt;
&lt;br /&gt;
'''Week2'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 20 - June 26&lt;br /&gt;
&lt;br /&gt;
* Implemented static perfect cache on both IPv4 and IPv6 by new helper class.&lt;br /&gt;
* Start adding tests and examples for perfect ARP/NDP&lt;br /&gt;
* Tested DAD behavior when interface disable ARP/NDP  in Linux.&lt;br /&gt;
&lt;br /&gt;
'''Week3'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 27 - July3&lt;br /&gt;
&lt;br /&gt;
* Implemented a subclass of Icmpv6L4Protocol for disable DAD&lt;br /&gt;
* Create two example for perfect ARP/NDP, the one is simple csma, another is double wifi. Meet problems when creating global routing in double wifi example, fix by using nix-vector routing instead.&lt;br /&gt;
* Draft Merge Request of static perfect cache with two examples. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
&lt;br /&gt;
'''Week4'''&lt;br /&gt;
&lt;br /&gt;
Duration: July4 - July10&lt;br /&gt;
&lt;br /&gt;
* Add test for perfect ARP/NDP.&lt;br /&gt;
* Add user-level API for updating perfect cache after IP address changes.&lt;br /&gt;
* Update MR based on comments. Fix mistakes and improve iteration logic. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
* Continue and refine the work on the dynamical perfect cache. Perfect cache updating will base on IP addresses added/removed instead of link up/down.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12621</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12621"/>
		<updated>2022-07-10T20:04:04Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Weekly Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 3&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 4 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 3'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Handle DAD&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 13 - June 19&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior about permanent entries in Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;br /&gt;
&lt;br /&gt;
'''Week2'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 20 - June 26&lt;br /&gt;
&lt;br /&gt;
* Implemented static perfect cache on both IPv4 and IPv6 by new helper class.&lt;br /&gt;
* Start adding tests and examples for perfect ARP/NDP&lt;br /&gt;
* Tested DAD behavior when interface disable ARP/NDP  in Linux.&lt;br /&gt;
&lt;br /&gt;
'''Week3'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 27 - July3&lt;br /&gt;
&lt;br /&gt;
* Implemented a subclass of Icmpv6L4Protocol for disable DAD&lt;br /&gt;
* Create two example for perfect ARP/NDP, the one is simple csma, another is double wifi. Meet problems when creating global routing in double wifi example, fix by using nix-vector routing instead.&lt;br /&gt;
* Draft Merge Request of static perfect cache with two examples. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
&lt;br /&gt;
'''Week4'''&lt;br /&gt;
&lt;br /&gt;
Duration: July4 - July10&lt;br /&gt;
&lt;br /&gt;
* Add test for perfect ARP/NDP.&lt;br /&gt;
* Update MR based on comments. Fix mistakes and improve iteration logic. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
* Continue and refine the work on the dynamical perfect cache. Perfect cache updating will base on IP addresses added/removed instead of link up/down.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12620</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12620"/>
		<updated>2022-07-10T20:02:26Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Weekly Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 3&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 4 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 3'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Handle DAD&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 13 - June 19&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior about permanent entries in Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;br /&gt;
&lt;br /&gt;
'''Week2'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 20 - June 26&lt;br /&gt;
&lt;br /&gt;
* Implemented static perfect cache on both IPv4 and IPv6 by new helper class.&lt;br /&gt;
* Start adding tests and examples for perfect ARP/NDP&lt;br /&gt;
* Tested DAD behavior when interface disable ARP/NDP  in Linux.&lt;br /&gt;
&lt;br /&gt;
'''Week3'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 27 - July3&lt;br /&gt;
&lt;br /&gt;
* Implemented a subclass of Icmpv6L4Protocol for disable DAD&lt;br /&gt;
* Create two example for perfect ARP/NDP, the one is simple csma, another is double wifi. Meet problems when creating global routing in double wifi example, fix by using nix-vector routing instead.&lt;br /&gt;
* Draft Merge Request of static perfect cache with two examples. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
&lt;br /&gt;
'''Week3'''&lt;br /&gt;
&lt;br /&gt;
Duration: July4 - July10&lt;br /&gt;
&lt;br /&gt;
* Add test for perfect ARP/NDP.&lt;br /&gt;
* Update MR based on comments. Fix mistakes and improve iteration logic. [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1012# link]&lt;br /&gt;
* Continue and refine the work on the dynamical perfect cache. Perfect cache updating will base on IP addresses added/removed instead of link up/down.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12605</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12605"/>
		<updated>2022-06-28T05:51:22Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Weekly Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 3&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 4 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 3'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Handle DAD&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 13 - June 19&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior about permanent entries in Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;br /&gt;
&lt;br /&gt;
'''Week2'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 20 - June 26&lt;br /&gt;
&lt;br /&gt;
* Implemented static perfect cache on both IPv4 and IPv6 by new helper class.&lt;br /&gt;
* Start adding tests and examples for perfect ARP/NDP&lt;br /&gt;
* Tested DAD behavior when interface disable ARP/NDP  in Linux.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12598</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12598"/>
		<updated>2022-06-20T06:30:41Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Weekly Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 3&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 4 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 3'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Handle DAD&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 7 - June 13&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior about permanent entries in Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12597</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12597"/>
		<updated>2022-06-20T06:23:54Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Weekly Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 3&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 4 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 3'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Handle DAD&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 7 - June 13&lt;br /&gt;
&lt;br /&gt;
* Start working on IPv4 perfect Arp.&lt;br /&gt;
* Implemented an approach of creating subclass of ArpL3Protocol and ArpCache to dynamically create shared perfect cache.&lt;br /&gt;
* Handled interface up/down event in that approach.&lt;br /&gt;
* Tested IP neighbor cache flushing behavior on Linux.&lt;br /&gt;
* Determined to implement perfect cache in a more concise way, which is create static perfect cache first after discussing with mentors.&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12590</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12590"/>
		<updated>2022-06-19T06:12:30Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Weekly Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 3&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 4 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 3'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Handle DAD&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
&lt;br /&gt;
Duration: June 7 - June 13&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12589</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12589"/>
		<updated>2022-06-19T06:12:17Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Milestones and Deliverables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 3&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 4 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 3'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Handle DAD&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Weekly Reports =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
Duration: June 7 - June 13&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12588</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12588"/>
		<updated>2022-06-19T06:11:55Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 3&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 4 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 3'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Handle DAD&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Update documentation&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
&lt;br /&gt;
'''Week1'''&lt;br /&gt;
Duration: June 7 - June 13&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12587</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12587"/>
		<updated>2022-06-19T06:10:50Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Milestones and Deliverables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
'''Phase 1'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 3&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 2'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 4 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
'''Phase 3'''&lt;br /&gt;
&lt;br /&gt;
Duration: Week 8 to Week 10&lt;br /&gt;
&lt;br /&gt;
* Handle DAD&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Update documentation&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12586</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12586"/>
		<updated>2022-06-19T06:08:54Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Milestones and Deliverables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
Phase 1&lt;br /&gt;
&lt;br /&gt;
Duration: Week 1 to Week 3&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 static perfect Arp&lt;br /&gt;
* Enable ipv6 static perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;br /&gt;
&lt;br /&gt;
Phase 2&lt;br /&gt;
&lt;br /&gt;
Duration: Week 4 to Week 7&lt;br /&gt;
&lt;br /&gt;
* Enable ipv4 dynamical perfect Arp&lt;br /&gt;
* Enable ipv6 dynamical perfect Ndp&lt;br /&gt;
* Prepare examples and tests for them&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12585</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12585"/>
		<updated>2022-06-19T06:05:08Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Milestones and Deliverables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
Phase 1&lt;br /&gt;
Duration: Week 1 to Week 3&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12584</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12584"/>
		<updated>2022-06-19T06:00:20Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Project Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12583</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12583"/>
		<updated>2022-06-19T06:00:09Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Milestones and Deliverables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12568</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12568"/>
		<updated>2022-06-10T08:19:19Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Milestones and Deliverables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
* '''Project Plan:''' [https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing link]&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12567</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12567"/>
		<updated>2022-06-10T08:18:40Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Milestones and Deliverables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
* '''Project Plan:''' link[https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing]&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12566</id>
		<title>GSOC2022PerfectArp</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2022PerfectArp&amp;diff=12566"/>
		<updated>2022-06-10T08:16:46Z</updated>

		<summary type="html">&lt;p&gt;Zhiheng: /* Milestones and Deliverables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2022 | GSoC 2022 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' Perfect ARP and NDP&lt;br /&gt;
* '''Student:''' [mailto:dzh2077@gmail.com Zhiheng Dong]&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella, Ameya Deshpande, Manoj Kumar Rana &lt;br /&gt;
* '''Google page:''' https://summerofcode.withgoogle.com/programs/2022/projects/DdUT09pZ&lt;br /&gt;
* '''Project Goals:''' The project aims to implement a “Perfect” version of ARP and NDP which produce caches that contain all needed IP address–MAC address mapping. ARP and NDP are sometimes intrusive in high level testing, it will introduce unexpected noise to the simulation (unwanted delays, packet drops, etc.). Perfect ARP/NDP can ensure every ARP/NDP look-up hits the cache so that no ARP messages or Neighbor discovery messages will be generated.&lt;br /&gt;
* '''Repository:''' https://gitlab.com/ZhiHengD/ns-3-dev&lt;br /&gt;
* '''About Me:''' I’m a first-year computer science graduate student from University of Southern California, US. I got my bachelor’s degree in computer science from University of Wisconsin- Madison, US. I began my graduate study in August 2021. I’m interested in computer networks and have good code experience in C and C++, I also did projects with Python, Java and JavaScript.&lt;br /&gt;
&lt;br /&gt;
= Milestones and Deliverables =&lt;br /&gt;
* '''Project Plan:''' https://docs.google.com/document/d/1IT4FAJAOd91bzogkWMh3ybJxaswk8jOOtv_w_lIXZjo/edit?usp=sharing&lt;/div&gt;</summary>
		<author><name>Zhiheng</name></author>
	</entry>
</feed>