GSOC2025IcmpSocket: Difference between revisions

From Nsnam
Jump to navigation Jump to search
(2 intermediate revisions by the same user not shown)
Line 9: Line 9:
* '''Mentors:''' Tommaso Pecorella and Alberto Gallegos Ramonet
* '''Mentors:''' Tommaso Pecorella and Alberto Gallegos Ramonet
* '''Google page:'''  
* '''Google page:'''  
* '''Project Goals: Develop an ICMP socket according to LINUX implementation of ICMP SOCK_DGRAM and SOCK_RAW'''
* '''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.'''  
* '''Repository:'''
* '''Repo:''' https://gitlab.com/ADI-ROXX/ns-3-dev
* '''About Me:'''
 
* '''Design Document:'''
Some highlights about the SOCK_DGRAM socket:
 
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.
 
2. The user can only send ECHO_REQUEST. The other types of packets cannot be sent.
 
3. The user may be notified only about ECHO_REPLY and ERRORS. For that, the user has to setRecvCallback and setErrorCallback (new).
 
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.
 
Let's see the ICMP v4 socket:
 
'''Now, let's go over the functions:'''
 
1. '''bind():''' Sets the local address of the socket. Just like other sockets.
 
2. '''connect()''': Sets the destination address for the packet. Again, just like other sockets.
 
3. '''close()''': Free up the socket. Just like other sockets.
 
 
 
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.
 
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.
 
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.
 
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.
 
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.
 
9. '''handle_dest_unreach()''': Just like handle_ttl_exceeded but for dest_unreach packet.
 
10. '''setRecvCallback, setErrorCallback''' will be used to set the m_receivedCallback and m_ErrorCallback respectively.


= Milestones =
= Milestones =

Revision as of 14:32, 30 August 2025

Main Page - Roadmap - Summer Projects - Project Ideas - Developer FAQ - Tools - Related Projects

HOWTOs - Installation - Troubleshooting - User FAQ - Samples - Models - Education - Contributed Code - Papers

Back to GSoC 2025 projects

Project Overview

  • Project Name: ICMP socket and generate/handle ICMP messages (host/net unreachable)
  • Student: Aditya Ruhela
  • Mentors: Tommaso Pecorella and Alberto Gallegos Ramonet
  • Google page:
  • 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.
  • Repo: https://gitlab.com/ADI-ROXX/ns-3-dev

Milestones