I wanted to integrate my diffserv patch with the ns MPLS patch. Since diffserv and MPLS are quite complementary technologies designed to address different problems, the diffserv and MPLS patches had very little overlap and the integration was really quite easy. The result of this integration is a new patch that can be applied to an ns-2.1b6 distribution that will result in the distribution having diffserv and MPLS functionality.
Diffserv and MPLS functionality are integrated in this patch. However, these functionalities are very decoupled: the queueing and scheduling decisions are made based on the diffserv codepoint and the routing decisions are made based on the LSP.
Diffserv operates at the network layer and MPLS operates
at the link layer (although it is often said operate somewhere
between the link layer and the network layer due to its
path-based nature). Hence, the diffserv codepoint, which is
stored in the IP header, is not visible when switching MPLS
packets. Consequently, some solution must be developed
to enable the MPLS switching functions to know the
(higher layer) codepoint that is associated with each MPLS
packet. The IETF is working on this
problem (see draft-ietf-mpls-diff-ext-07.txt for more details) and the solution imposes constraints on how diffserv packets can be carried in an MPLS LSP. Specifically, there is a limit to the amount of codepoints that can be carried in a single LSP. In this patch, no such constraints are present; an LSP can carry any amount of diffserv codepoints.
This patch does not support CR-LSP (the current MPLS patch does not support CR-LSP) and only supports a limited set of diffserv codepoints.
I made a variant of this patch in which node addresses can be arbitrary numbers - i.e. the node addresses are decoupled from the node ids. This is useful for my diffserv/MPLS simulations, but requires some changes to the ns 'infrastructure'. These changes cause other things to break: specifically, some of the mobile IP stuff breaks. I took some notes when initially working with the flexible addressing stuff. I wanted to get it to work with the mobile IP stuff in ns, but this looked like quite a big headache involving considerable rewrites, so I scrapped that idea. You can contact me if you want more information on it. The patch can be downloaded from the link below.
I've made considerable changes to this patch and now associated release numbers with different versions. I've concentrated on getting the explicit routing code to work and this seems to work now. However, other things may not work. I did have to make some changes to the way things work. One obvious one that springs to mind is that since explicit routes are specified using a string of node addresses separated by '_' and node addresses can be arbitrary, the old approach of assuming 'high' node numbers were LSP IDs rather than node ids does not work. My solution to this problem is to prefix an LSP ID in an explicit route with an L. I didn't test this properly because I'm not using nested LSPs, but now the code does not incorrectly interpret high valued node addresses as LSP IDs.
The current version of this code is 0.1.
There is no documentation on this patch per se. I wrote some notes on how to use my diffserv patch and there is a manual for the MPLS patch.
As with my diffserv patch, this patch is applied by simply
untarring the patch over a clean distribution ns
distribution and running configure (with appropriate
parameters) and make.
I wrote some very rudimentary tests to see if the patch works correctly. The test scripts are quite clear, and I think it should be straightforward to extend these to more complex scenarios.
I found that this patch causes more tests to fail. I think that this is caused by the MPLS patch, but I'm not sure. I'm checking this out.
This is version 0.1 of this patch. This contains version C038a of my diffserv patch and the first release of the MPLS patch. This must be patched on to ns-2.1b6.