<?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=Aditya</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=Aditya"/>
	<link rel="alternate" type="text/html" href="https://www.nsnam.org/wiki/Special:Contributions/Aditya"/>
	<updated>2026-05-02T11:37:43Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13687</id>
		<title>GSOC2025IcmpSocket</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13687"/>
		<updated>2025-08-31T05:28:04Z</updated>

		<summary type="html">&lt;p&gt;Aditya: /* Milestones */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2025 | GSoC 2025 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' ICMP socket and generate/handle ICMP messages (host/net unreachable)&lt;br /&gt;
* '''Student:''' Aditya Ruhela&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella and Alberto Gallegos Ramonet&lt;br /&gt;
* '''Google page:''' &lt;br /&gt;
* '''Project Goals: Develop an ICMP socket according to LINUX implementation of ICMP SOCK_DGRAM. Currently, for sending ICMP packets, the application has to use a Raw socket. This results in having the user write all the code for adding the headers, the filtering, etc. The proposed ICMP socket aims to offload all this functionality from the user and provide the user with API's required for sending and receiving packets, filtering etc.''' &lt;br /&gt;
* '''Repo:''' https://gitlab.com/ADI-ROXX/ns-3-dev&lt;br /&gt;
&lt;br /&gt;
= Milestones =&lt;br /&gt;
'''Phase 1: Fix the fragmentation issue in Raw sockets'''  &lt;br /&gt;
[https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/2486 Merge Request]  &lt;br /&gt;
* '''Changes made:'''  &lt;br /&gt;
** '''Forward assembled packets:''' In case of '''raw sockets''', forward the packet up to the '''application''' after the '''re-assembly''', not before that (existing implementation)  &lt;br /&gt;
** '''Test cases:''' Wrote the test case for '''IPv4''' and '''IPv6 Raw sockets''' that ensure that only a single assembled packet is received. Also, included the test cases for '''Ping application''' with fragmentation.  &lt;br /&gt;
&lt;br /&gt;
'''Phase 2: Implementation of the ICMP socket'''  &lt;br /&gt;
[https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/2527 Merge Request]  &lt;br /&gt;
* '''Changes'''  &lt;br /&gt;
** '''ICMP error messages:''' Integrated support for sending '''ICMP Destination Unreachable''' messages from the '''IP layer''' upon packet drop.  &lt;br /&gt;
** '''ICMP socket:''' Implemented a dedicated '''ICMP socket''', the '''LLD''' of which is similar to that of the '''UDP socket'''.  &lt;br /&gt;
** '''Features:'''  &lt;br /&gt;
*** '''ICMP handling:''' The responsibility for processing '''ICMP headers''' is completely offloaded from the application. The new socket no longer sends the '''ICMP header''' to the application (unlike raw sockets). Rather, it uses '''IcmpPacketInfoTag''' for the same.  &lt;br /&gt;
*** '''New Packet Tag implemented:''' Introduced a new '''IcmpPacketInfoTag''' that stores '''metadata''' about the '''ICMP packet''' received to be sent up to the application.  &lt;br /&gt;
&lt;br /&gt;
** '''Tests:''' Added '''unit tests''' for validating ICMP functionality covering almost all of the '''ICMP types''' for received packet ('''echo reply, destination unreachable, time exceeded, etc.''')  &lt;br /&gt;
** '''Ping application:''' Integrated the novel '''ICMP socket''' in the '''Ping application'''. Allowed for the user to choose whether to send packets via '''ICMP socket''' or via '''Raw Sockets'''.  &lt;br /&gt;
&lt;br /&gt;
* '''Limitations and proposed solutions'''  &lt;br /&gt;
** '''SO_REUSEADDR:''' The novel '''ICMP socket''' does not allow for two sockets on the same node to be bound to the same '''identifier''' even if they are bound to different '''IP addresses'''. This can be solved by using a '''map(identifier -&amp;gt; List of ICMP sockets)''' instead of the current implementation '''map(identifier -&amp;gt; ICMP socket)'''.  &lt;br /&gt;
** '''Identifier map in Protocol layer:''' The current '''LLD''' of the socket states to store the '''map of used identifiers''' in the '''protocol layer'''. This kind-of pollutes the '''ICMP protocol'''. To solve this, an '''unordered set''' can be stored in the '''IcmpSocketFactory''' object to store all the '''identifiers''' already used for a particular '''node'''.&lt;/div&gt;</summary>
		<author><name>Aditya</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13686</id>
		<title>GSOC2025IcmpSocket</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13686"/>
		<updated>2025-08-30T14:32:27Z</updated>

		<summary type="html">&lt;p&gt;Aditya: /* 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_2025 | GSoC 2025 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' ICMP socket and generate/handle ICMP messages (host/net unreachable)&lt;br /&gt;
* '''Student:''' Aditya Ruhela&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella and Alberto Gallegos Ramonet&lt;br /&gt;
* '''Google page:''' &lt;br /&gt;
* '''Project Goals: Develop an ICMP socket according to LINUX implementation of ICMP SOCK_DGRAM. Currently, for sending ICMP packets, the application has to use a Raw socket. This results in having the user write all the code for adding the headers, the filtering, etc. The proposed ICMP socket aims to offload all this functionality from the user and provide the user with API's required for sending and receiving packets, filtering etc.''' &lt;br /&gt;
* '''Repo:''' https://gitlab.com/ADI-ROXX/ns-3-dev&lt;br /&gt;
&lt;br /&gt;
= Milestones =&lt;/div&gt;</summary>
		<author><name>Aditya</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13685</id>
		<title>GSOC2025IcmpSocket</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13685"/>
		<updated>2025-08-30T14:28:40Z</updated>

		<summary type="html">&lt;p&gt;Aditya: /* 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_2025 | GSoC 2025 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' ICMP socket and generate/handle ICMP messages (host/net unreachable)&lt;br /&gt;
* '''Student:''' Aditya Ruhela&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella and Alberto Gallegos Ramonet&lt;br /&gt;
* '''Google page:''' &lt;br /&gt;
* '''Project Goals: Develop an ICMP socket according to LINUX implementation of ICMP SOCK_DGRAM''' &lt;br /&gt;
* '''Repository:''' &lt;br /&gt;
* '''About Me:'''&lt;br /&gt;
&lt;br /&gt;
= Milestones =&lt;/div&gt;</summary>
		<author><name>Aditya</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13681</id>
		<title>GSOC2025IcmpSocket</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13681"/>
		<updated>2025-08-30T13:27:25Z</updated>

		<summary type="html">&lt;p&gt;Aditya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC}}&lt;br /&gt;
&lt;br /&gt;
Back to [[Summer_Projects#Google_Summer_of_Code_2025 | GSoC 2025 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' ICMP socket and generate/handle ICMP messages (host/net unreachable)&lt;br /&gt;
* '''Student:''' Aditya Ruhela&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella and Alberto Gallegos Ramonet&lt;br /&gt;
* '''Google page:''' &lt;br /&gt;
* '''Project Goals: Develop an ICMP socket according to LINUX implementation of ICMP SOCK_DGRAM''' &lt;br /&gt;
* '''Repository:''' &lt;br /&gt;
* '''About Me:''' &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Milestones =&lt;/div&gt;</summary>
		<author><name>Aditya</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13606</id>
		<title>GSOC2025IcmpSocket</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13606"/>
		<updated>2025-07-15T18:17:26Z</updated>

		<summary type="html">&lt;p&gt;Aditya: /* 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_2025 | GSoC 2025 projects]]&lt;br /&gt;
&lt;br /&gt;
= Project Overview =&lt;br /&gt;
&lt;br /&gt;
* '''Project Name:''' ICMP socket and generate/handle ICMP messages (host/net unreachable)&lt;br /&gt;
* '''Student:''' Aditya Ruhela&lt;br /&gt;
* '''Mentors:''' Tommaso Pecorella and Alberto Gallegos Ramonet&lt;br /&gt;
* '''Google page:''' &lt;br /&gt;
* '''Project Goals: Develop an ICMP socket according to LINUX implementation of ICMP SOCK_DGRAM and SOCK_RAW''' &lt;br /&gt;
* '''Repository:''' &lt;br /&gt;
* '''About Me:''' &lt;br /&gt;
&lt;br /&gt;
* '''Design Document:'''&lt;br /&gt;
Some highlights about the SOCK_DGRAM socket:&lt;br /&gt;
&lt;br /&gt;
1. This is an L3 socket because ICMP is an L3 aspect, unlike UDP, TCP because it neither does it have any role in Transport functionality, nor does it do port-to-port mapping like previously mentioned L4 protocols.&lt;br /&gt;
&lt;br /&gt;
2. The user can only send ECHO_REQUEST. The other types of packets cannot be sent. &lt;br /&gt;
&lt;br /&gt;
3. The user may be notified only about ECHO_REPLY and ERRORS. For that, the user has to setRecvCallback and setErrorCallback (new). &lt;br /&gt;
&lt;br /&gt;
setErrorCallback is a new function that is introduced for this specific socket. This will correctly mimic the error queue icmp socket. If wanted, setErrorCallback can be removed and we can have a single setRecvCallback and the user will have to check the packet received whether is it an error or not.&lt;br /&gt;
&lt;br /&gt;
Let's see the ICMP v4 socket:&lt;br /&gt;
&lt;br /&gt;
'''Now, let's go over the functions:'''&lt;br /&gt;
&lt;br /&gt;
1. '''bind():''' Sets the local address of the socket. Just like other sockets.&lt;br /&gt;
&lt;br /&gt;
2. '''connect()''': Sets the destination address for the packet. Again, just like other sockets.&lt;br /&gt;
&lt;br /&gt;
3. '''close()''': Free up the socket. Just like other sockets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. '''send()''': The application will call this function to send packet. This is the function responsible for adding the icmp and then passing it to the ip protocol.&lt;br /&gt;
&lt;br /&gt;
5. '''receive()''': It receives a packet. It then gets the type of packet: req, reply, ttl exceeded or dest unreach. It then calls the specific handler.&lt;br /&gt;
&lt;br /&gt;
6. '''handle_echo_request()''': It creates an icmp echo reply with the same payload and sends it back to the sender. THIS PACKET IS NOT SENT UP TO THE APPLICATION.&lt;br /&gt;
&lt;br /&gt;
7. '''handle_echo_reply()''': It sends the echo_reply up to the application. It calls the m_receivedCallback function, if set by the application using setRecvCallback.&lt;br /&gt;
&lt;br /&gt;
8. '''handle_ttl_exceeded()''': It sends the ttl error up to the application. It calls the m_ErrorCallback function, if set by the user using setErrorCallback.&lt;br /&gt;
&lt;br /&gt;
9. '''handle_dest_unreach()''': Just like handle_ttl_exceeded but for dest_unreach packet.&lt;br /&gt;
&lt;br /&gt;
10. '''setRecvCallback, setErrorCallback''' will be used to set the m_receivedCallback and m_ErrorCallback respectively.&lt;br /&gt;
&lt;br /&gt;
= Milestones =&lt;/div&gt;</summary>
		<author><name>Aditya</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13602</id>
		<title>GSOC2025IcmpSocket</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13602"/>
		<updated>2025-07-08T16:14:15Z</updated>

		<summary type="html">&lt;p&gt;Aditya: /* Project Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aditya</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13601</id>
		<title>GSOC2025IcmpSocket</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13601"/>
		<updated>2025-07-08T16:13:36Z</updated>

		<summary type="html">&lt;p&gt;Aditya: /* Project Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aditya</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13600</id>
		<title>GSOC2025IcmpSocket</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13600"/>
		<updated>2025-07-08T16:11:31Z</updated>

		<summary type="html">&lt;p&gt;Aditya: /* Project Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aditya</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13599</id>
		<title>GSOC2025IcmpSocket</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13599"/>
		<updated>2025-07-08T16:10:58Z</updated>

		<summary type="html">&lt;p&gt;Aditya: /* Project Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aditya</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13598</id>
		<title>GSOC2025IcmpSocket</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13598"/>
		<updated>2025-07-08T16:10:22Z</updated>

		<summary type="html">&lt;p&gt;Aditya: /* Project Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aditya</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13597</id>
		<title>GSOC2025IcmpSocket</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2025IcmpSocket&amp;diff=13597"/>
		<updated>2025-07-08T16:09:52Z</updated>

		<summary type="html">&lt;p&gt;Aditya: /* Project Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aditya</name></author>
	</entry>
</feed>