ECN support for qdiscs in ns-3

From Nsnam
Revision as of 18:51, 5 July 2016 by Shravya (Talk | contribs)

Jump to: navigation, search

Enabling ECN support for ns-3 qdiscs - Summer Project 2016

  • Referred RFC: The Addition of Explicit Congestion Notification (ECN) to IP [ https://tools.ietf.org/html/rfc3168]
  • Referred ns-2 code:
  • ns-3 ECN code:
  • Other Reference Material: Implementing explicit congestion notification in ns-3 [ http://dl.acm.org/citation.cfm?id=2630782]
  • About me: : I am pursuing B.Tech in Computer Science from National Institute of Technology Karnataka, Surathkal, India. Currently, I am a Mitacs intern working under Dr. Ehab Elmallah on Wireless Underwater Sensor Networks at University of Alberta, Canada.


Weekly Plan

Week 1

* Going through the RFC
* Going through the Linux and ns-2 stack 
* Preparing the architecture for merging ECN with the existing AQM mechanisms in ns-3

Key Deliverable: Information Architecture

Week 2

* Implementation of ECN bits in the TCP and IP headers
* Implementation of ECN Negotiation by adding ECN Capability to TCP's SYN/ACK packets 
* Writing tests for this scenario and documenting the ECN support in TCP and IP packets

Key Deliverable: RFC compliant packet structure

Week 3

* Implementation of ECN at TCP sender (i.e., setting ECN code points in data packets)
* Writing tests for this scenario and documentation of the implementation and tests. 

Key Deliverable: The sending module at layer 4

Week 4

* Incorporating ECN functionality in PIE 
* Write tests to  verify the functionality of ECN with PIE 
* Documenting the implementation of ECN for PIE.
* We can have Mid-term review this week

Key Deliverable : The complete implementation of ECN in PIE

Week 5

* Implementation of ECN at TCP receiver (i.e., recognising ECN marks from data packets)
* Writing example for implementation of ECN in layer 4
* Completing tests for this scenario and documenting the implementation and tests.

Key Deliverable: The complete implementation of ECN in layer 4

Week 6

* Integration across layers
* Verifying the complete functionality of ECN
* Putting up code for review
* Complete the documentation

Week 7

Week 7:
* Addressing reviewer’s comments
* Solving bugs before declaring the code to be 'ready to merge' state.
* Finalize the documentation.

Key Deliverable : Finalize the code for merging

Weekly Progress

Week 1

After going through the existing tcp and ip model of ns-3 , here are the points I found out:


*tcp-header.h and tcp-header.cc -
Has last 2 bits reserved for ecn
Ece|cwr is already present


SetFlag(int)-> This function is used to set m_flags variable of TCP header. The current documentation mention it to be working as only
a uint6_t variable as only 6 bits are in use, we will make use of the last two reserved bits for ECN. Since the function is already
 implemented we will call this with modified parameter.

For example: The negotiation step of ECN Enable TCP connection will be 

Sender to Receiver -> SetFlag(TcpHeader::SYN | TcpHeader::ECE | TcpHeader::CWR)
Receiver to Sender -> SetFlag(TcpHeader::SYN | TcpHeader::ECE | TcpHeader::ACK)
Sender to Receiver -> SetFlag(TcpHeader::ACK)



*ipv4-header.h and ipv4-header.cc - 
Ipv4 header also has the ECNtype enum with all 4 ecn codepoints  defined and also the setter(SetEcn()) and getter(GetEcn()) functions 
to set ECN values in m_tos and retrieve it. These functions haven’t been used in the implementation of any modules. We will use these 
setter and getter function for the  ECN manipulation in Ipv4.