GSOC2025IcmpSocket: Difference between revisions
(create page skeleton) |
|||
Line 9: | Line 9: | ||
* '''Mentors:''' Tommaso Pecorella and Alberto Gallegos Ramonet | * '''Mentors:''' Tommaso Pecorella and Alberto Gallegos Ramonet | ||
* '''Google page:''' | * '''Google page:''' | ||
* '''Project Goals:''' | * '''Project Goals: Develop an ICMP socket according to LINUX implementation of ICMP SOCK_DGRAM and SOCK_RAW''' | ||
* '''Repository:''' | * '''Repository:''' | ||
* '''About Me:''' | * '''About Me: Hi, I am Aditya Ruhela and I am a graduate from Indian Institute of Technology, Mandi. I have been working with ns-3 for about a year now. I have worked on implementation and analysis of 802.11bd as my 4th year project.''' | ||
* '''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 16:09, 8 July 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 and SOCK_RAW
- Repository:
- About Me: Hi, I am Aditya Ruhela and I am a graduate from Indian Institute of Technology, Mandi. I have been working with ns-3 for about a year now. I have worked on implementation and analysis of 802.11bd as my 4th year project.
- 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.