24 | | I typically draw a topology, naming the nodes correctly for quick reference; but again we can use the GENI Portal to see a graphical representation of the topology, with named nodes. [[BR]] |
25 | | However, the flack interface (we can launch it via GENI Portal) still does not show the interface numbers of each nodes (we might need those interface numbers when we debug our experiment). [[BR]] |
26 | | For example, we might want to see the traffic sent from center to top, then we need to do "tcpdump" on the interface that center uses to connect to top. [[BR]] |
27 | | Right now we can not do this via the flack interface. But we can see it from the output of "createsliver" step (another reason I prefer to use command line omni :-)) |
| 24 | As mentioned earlier, we can use "readyToLogin.py" to show the topology as well as the log in commands. [[BR]] |
| 25 | Or, if you are a GENI Portal user, use the "details" button to check details of your slice. |
| 372 | |
| 373 | The source code for the congestion control is in the tar ball we previously downloaded. [[BR]] |
| 374 | Note: You Do need to change the source code in order to make it happen. [[BR]] |
| 375 | You can check out [http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/net/ipv4/tcp_cong.c Reno Source Code] for reference [[BR]] |
| 376 | Steps to compile the kernel code: [[BR]] |
| 377 | 1. Comment out the line: [[BR]] |
| 378 | ''exclude=mkinitrd* kernel*''[[BR]] |
| 379 | in the file ''/etc/yum.conf'', to allow yum to install kernel headers. [[BR]] |
| 380 | 2. Install the required packages with this command: [[BR]] |
| 381 | ''sudo yum install kernel-devel kernel-headers'' [[BR]] |
| 382 | 3. Fix up the kernel version in the installed headers to match the running kernel; this can be tricky, but these steps should handle it:[[BR]] |
| 383 | * a). Find your kernel sources. They are in ''/usr/src/kernel'', in a directory that depends on the installed version. As of the time this page was created, [[BR]] |
| 384 | the directory is ''2.6.27.41-170.2.117.fc10.i686''. We call this directory ''$KERNELSRC''.[[BR]] |
| 385 | * b). identify your running kernel version by running ''uname -r''. It will be something like ''2.6.27.5-117.emulab1.fc10.i686''. The first three dotted components [[BR]] |
| 386 | (''2.6.27'', in this case) are the major, minor, and micro versions, respectively, and the remainder of the version string (''.5-117.emulab.fc10.i686'') is the extraversion. [[BR]] |
| 387 | Note the extraversion of your kernel.[[BR]] |
| 388 | * c). In''$KERNELSRC/Makefile'',find the line beginning with ''EXTRAVERSION''. Replace its value with the extraversion of your kernel.[[BR]] |
| 389 | * d). Update the kernel header tree to this new version by running the command: |
| 390 | {{{ |
| 391 | sudo make include/linux/utsrelease.h |
| 392 | }}} |
| 393 | After you compile the source code, you will find a kernel model named ''''tcp_exp.ko'''' being created. [[BR}} |
| 394 | Use "''sudo insmod tcp_exp.ko''" to insert the module into the kernel. [[BR]] |
| 395 | You can use "''sudo rmmod tcp_exp''" to remove the module later on [[BR]] |
| 396 | Once the module is complete and loaded into the kernel, the algorithm implemented by the module can be selected in the same manner that reno and cubic were [[BR]] |
| 397 | selected in previous sections, by placing the keyword ''exp'' in ''/proc/sys/net/ipv4/tcp_congestion_control.'' |