Off late, we try to use(install) a old software in a new Operating System for want of backward compatibility or to survey. This following post shows you how to install ns-2.29 in Ubuntu 12.04.
Unlike other ns2 installations, this installation has so many errors, warnings and patchings. Once everything is overcome, ns installs successfully
Step 1: Download and untar ns-2.29 from this link (http://sourceforge.net/projects/nsnam/files/allinone/ns-allinone-2.29/ns-allinone-2.29.3.tar.gz/download)
Step 2: install the necessary dependancy packages using the command "sudo apt-get install build-essential libxmu-dev autoconf automake" (without quotes). This will install the necessary developmental packages
Step 3: Since ns-2.29 is older software, some of the pointer conversion have to be changed inside ns-2.29
Step 4: go to terminal, point to the location of ns-allinone-2.29 using the command "cd ~/ns-allinone-2.29/" and type "./install"
Step 5: there may be the following errors during the installation, please correct one by one
1. OTcl-1.11 error make failed.
for this error, open the file under the folder otcl-1.11/configure.in and go to line number
Change the following block to
Linux*)
SHLIB_CFLAGS="-fpic"
SHLIB_LD="ld -shared"
SHLIB_SUFFIX=".so"
DL_LIBS="-ldl"
SHLD_FLAGS=""
;;
Linux*)
SHLIB_CFLAGS="-fpic"
SHLIB_LD="gcc -shared"
SHLIB_SUFFIX=".so"
DL_LIBS="-ldl"
SHLD_FLAGS=""
;;
2. tclcl-1.17 error, in line number 566 of Tcl.cc file (~tclcl-1.17/Tcl.cc) (See the upper case Tcl.cc)
change the following to
char *p = strchr(localName, '(');
this following line
char *p =const_cast<char*>( strchr(localName, '('));
3. there will be so many errors in the queue/ folder (~ns-allinone-2.29/ns-2.29/queue/), there may be some pointer conversion errors
Error 1:
------
queue/red.cc:877:41: error: invalid conversion from ‘const char*’ to ‘char*’
make: *** [queue/red.o] Error 1
In queue/red.cc at 874 line
Change the following to
if (((p = strstr(v->name(), "ave")) == NULL) &&
((p = strstr(v->name(), "prob")) == NULL) &&
((p = strstr(v->name(), "curq")) == NULL) &&
((p = strstr(v->name(), "cur_max_p"))==NULL) ) {
this
if (((p = const_cast<char*>(strstr(v->name(), "ave"))) == NULL) &&
((p = const_cast<char*>(strstr(v->name(), "prob"))) == NULL) &&
((p = const_cast<char*>(strstr(v->name(), "curq"))) == NULL) &&
((p = const_cast<char*>(strstr(v->name(), "cur_max_p")))==NULL) ) {
Error 2:
queue/rio.cc:568:36: error: invalid conversion from ‘const char*’ to ‘char*’
queue/rio.cc:569:39: error: invalid conversion from ‘const char*’ to ‘char*’
queue/rio.cc:570:40: error: invalid conversion from ‘const char*’ to ‘char*’
queue/rio.cc:571:36: error: invalid conversion from ‘const char*’ to ‘char*’
make: *** [queue/rio.o] Error 1
in queue/rio.cc and in line number 565
find the following lines
if (((p = strstr(v->name(), "ave")) == NULL) &&
((p = strstr(v->name(), "in_ave")) == NULL) &&
((p = strstr(v->name(), "out_ave")) == NULL) &&
((p = strstr(v->name(), "prob")) == NULL) &&
((p = strstr(v->name(), "in_prob")) == NULL) &&
((p = strstr(v->name(), "out_prob")) == NULL) &&
((p = strstr(v->name(), "curq")) == NULL)) {
and replace these lines
if (((p = const_cast<char*>(strstr(v->name(), "ave"))) == NULL) &&
((p = const_cast<char*>(strstr(v->name(), "in_ave"))) == NULL) &&
((p = const_cast<char*>(strstr(v->name(), "out_ave"))) == NULL) &&
((p = const_cast<char*>(strstr(v->name(), "prob"))) == NULL) &&
((p = const_cast<char*>(strstr(v->name(), "in_prob"))) == NULL) &&
((p = const_cast<char*>(strstr(v->name(), "out_prob"))) == NULL) &&
((p = const_cast<char*>(strstr(v->name(), "curq"))) == NULL)) {
Error 3:
queue/pi.cc:316:36: error: invalid conversion from ‘const char*’ to ‘char*’
queue/pi.cc:317:36: error: invalid conversion from ‘const char*’ to ‘char*’
make: *** [queue/pi.o] Error 1
in queue/pi.cc at line number 316
Find these lines and
if (((p = strstr(v->name(), "prob")) == NULL) &&
((p = strstr(v->name(), "curq")) == NULL)) {
replace with these lines
if (((p = const_cast<char*>(strstr(v->name(), "prob"))) == NULL) &&
((p = const_cast<char*>(strstr(v->name(), "curq"))) == NULL)) {
Error 4:
queue/vq.cc: In member function ‘virtual void Vq::trace(TracedVar*)’:
queue/vq.cc:333:35: error: invalid conversion from ‘const char*’ to ‘char*’
make: *** [queue/vq.o] Error 1
Find the following line and
if ((p = strstr(v->name(), "curq")) == NULL) {
replace this line
if ((p = const_cast<char*>(strstr(v->name(), "curq"))) == NULL) { Error 5
queue/rem.cc:337:36: error: invalid conversion from ‘const char*’ to ‘char*’
queue/rem.cc:338:36: error: invalid conversion from ‘const char*’ to ‘char*’
make: *** [queue/rem.o] Error 1
In queue/rem.cc: in line number 336
Find the following lines and
if (((p = strstr(v->name(), "ave")) == NULL) &&
((p = strstr(v->name(), "prob")) == NULL) &&
((p = strstr(v->name(), "curq")) == NULL)) {
replace these lines
if (((p =const_cast<char*>(strstr(v->name(), "ave"))) == NULL) &&
((p = const_cast<char*>(strstr(v->name(), "prob"))) == NULL) &&
((p = const_cast<char*>(strstr(v->name(), "curq"))) == NULL)) {
Error 6:
queue/gk.cc:207:35: error: invalid conversion from ‘const char*’ to ‘char*’
make: *** [queue/gk.o] Error 1
In queue/gk.cc in line number 207
find the following line and
if ((p = strstr(v->name(), "curq")) == NULL) {
replace this line
if ((p = const_cast<char*>(strstr(v->name(), "curq"))) == NULL) {
Step 6: Once the errors are corrected, go back to ns-allinone-2.29 and press ./install and see whether the installation is successful
Step 7: Set the PATH information in /home/pradeep/.bashrc and execute "source .bashrc"
Check whether ns and nam are working (for me nam was not working, Since mine is ubuntu I installed NAM separately using "sudo apt-get install nam"
Thats all!!!!.