Computer Networks Practicum: 2011
// Globals that come in handy.
$DateFormat = "l \\t\h\e jS \o\f F Y";
$myname=ereg_replace('^.*/export','',$_SERVER['PATH_TRANSLATED']);
echo "Last-Modified: ".date($DateFormat, filemtime($myname)).".";
?>
News
-
April 7, 2011 - This year there will be no "bonus" functionalities. Our earlier handout mentioned some additional features (like client side port allocation) that if implemented would earn you bonus points. This was a vestige of the previous year's handout. This year there will be no such bonus points.
-
Mar 30. 2011 - For those of you who want to use Minix in VMware (although not officially supported), here are some hints that should get you started:
- Modify /etc/inet.conf to add new vlan entries.
- Modify /etc/hosts to create fake names for the fake vlans so that nonamed can perform a "host" name resolution using your entries.
- Setup each virtual NIC using the instructions specified in the handout.
- Make sure that rarpd and nonamed are running. You can try the entire setup by modifying the server IP address in client.c in ip source, recompiling ip source and testing
the client-server communication.
-
Mar 30. 2011 - Before submitting your code, please make sure that the public interface verification using anm is done for LIBTCP.A and not TCP.O alone if you have other files . The handout contains an example that illustrates using anm only on tcp.o but you are to use anm with libtcp.a.
-
Mar 30. 2011 - There is a change in the method of contacting the assistants. You are required to address ALL YOUR EMAILS to cn@cs.vu.nl. Individual mails sent directly to teaching assistants WILL NOT BE ANSWERED.
-
Mar 30. 2011 - Register yourself and your team member by sending an e-mail to Matty Huntjens.
-
Mar 30. 2011 - This years handout is ready.
What
- Handout (ps)
(pdf) describing the
practical assignment for Computer Networks
- Handout is in English.
- Assistants speak in English.
- Your documentation shall be in English.
- Remarks in your source code should be in English.
- In short, everything is in English.
Where
- For this assignment, you are supposed do your programming
in P4.29. Login as root (without a password). Note
that you have to save your work somewhere else, as the
Minix machines in P4.29 are 'restored' regularly. It is
possible to use ftp, so you probably want to ftp your
source code to your home directory. The oficial version
used for this practicum is Minix 3.1.
- It is possible to install a version of Minix on your own PC
using virtualization software such as Bochs, QEMU, Virtual
PC or VMware. You must start a rarpd in order to get the
networking layer to work properly on VMWare. Try `rarpd ip0
&` See minix3.org for more
information or download the image from the Operating
Systems practicum at the bottom of the page. This is not
officially supported, however. Use at your own
risk. Please do not ask the assistants for help
installing Minix, you are on your own.
- It is also possible to develop on linux using a library, libip_udp
written by Marten Klencke <mklencke at cs.vu.nl> and Erik
Bosman <ejbosman at cs.vu.nl>. Please note that this
library is also unsupported. Use at your own
risk. Please do not ask the assitants for help
with this library and please note that your code will
still be tested on Minix.
How
- Read the handout, lookover the IP layer code, gloss over
the RFCs, re-read the TCP section from Tanenbaum's book.
- Goto room P4.29, sit down at a Minix machine, create the
directory structure as described in the handout and install
the libcn library as described in the handout. In your test
directory, create a simple "hello world" program, get it to
work.
- Readup on your C. You can use the material for the (discontinued) course Introductie
Programmeren in C to brush up your skills. One word of
warning though: The Introductie Programmeren in C
course uses gcc, the assignments should be compiled
with cc. You are not to use gcc for
the assignment, even though some form of gcc has been
installed on the Minix machines. Note that the -Wall
flag will not work with cc. (Though you can use
gcc to compile your code with the -Wall flag, you will
not be able to build (or use) the library.)
- Follow the "must reads" links below and read hard.
Start programming on your TCP lib, using the proposed
method from the handout, and keep going.
Assistance
- Raja Appuswamy and
Suhail Yousaf
are the assistants for this course.
You can contact them by email. If you need to
discuss something please make an
appointment by email beforehand in order to ensure that they will
be available.
- The assistants will grade your work and they will also give
a limited amount of help if you ask. It is to your advantage to
take advantage of the available resources to help you. Please
do not wait until the last minute to ask for help as the
assistants may not be available immediately. Begin your work
early so you can ask questions before it is too late!
- Before you ask for help from the assistants, be sure to
have read all the relevant documents (like the ones listed on
this page).
- Requests for extra testing will not be entertained. Figure
out how to test on your own.
Grading
- You will get up to 3 points for your source code,
- Up to 3 points for your documentation
- Up to 3 points for passing our extensive-test
set.
- Up to 1 point for your test suite.
- Your grade is the sum of these,
- for a maximum of 10 points.
Testing Methodology
- For your convenience, you can submit your work for
base-testing up to three times every month. You can submit
any time of the month . Your code will be tested and results
will be sent back as soon as possible. Since the assistants might be
busy with their work at times, it might take up to a week for the
assignment to be tested.
- As with any non-trivial program, you are expected to test
your code as part of the development process. Writing test
programs from the beginning, will save you a lot of effort.
In general it is not wise to first complete the TCP library and
than start testing. Use a tight add-test development
loop: Start with a "minimal" implementation, add a
feature, write a test program that test the new feature, loop.
- Your final submitted implementation will be tested against
a extended-test program. You can get up to 3 point for passing
these tests.
- The tests in our basic test suite are critical. Critical
means that if you fail this one sub-test you can not possible
pass the course. For your convenience, these test have been
collected into a base-test. Concequently your implementation
has to pass the base-test in order to classify for grading. If
your implementation does not pass the base-test, you will not
be graded, and you will fail the assignment.*
- Your work will be
tested for base functionality only, so passing this test does
not imply a good grade. You can easily fail the
assignment even if you pass the base-test. Again, if you fail
the base-test after your final submittal, there is no use in
grading you, and you fail the assignment by default.
- To submit your assignment, you have to pack all your source
files in a tar file. Make sure you have the proper files in the tar
file. That is tcp/tcp.c,
tcp/tcp.h, and tcp/Makefile.
doc/ A directory with your documentation
test/ A directory with your tests
- Use the command cn_submit <tarfile>
to submit your assignment for base-testing. The
cn_submit program will time-stamp your
tar-file.
- If you do not submit in time do not ask for leniency
anywhere; too late is too late. The time
cn_submit reports to us, is the "official"
submit-time, no exceptions. Submitting just seconds before the
end of a month might be unwise, since your clock or the clock
on the submitting machine might be off by a few seconds. You
have been warned! Submitting via email is NOT allowed. If
cn_submit is not available on the server you are on try another
server.
- Please make sure that the command make
(without any arguments) will create the library
libtcp.a on the tcp directory. No other files should
be created by the make command!
- It goes without saying, but apparently still comes as a
surprise to some; Your implementation should not produce any
(debug) output, unless DEBUG is defined in the environment
when make is run. Implementation which produce output when
built without DEBUG in the environment will not be graded.
- Do not expect a very verbose or detailed report on your
code, usually a simple message like: "Your implementation does
not restore alarm() and/or signal()." or "Your implementation
cannot communicate with the reference implementation." is all
you will get.
* The base-test consist of some very basic tests. For example
your implementation should be able to handle a write of 100KB.
If your implementation fails to handle this medium large block
of data, you can not possible get a grade higher than 4 out of
10, no matter the rest of you work. Therefore writing 100KB is
part of the base-test. Testing if your program ignores a
SYN+ACK in LISTEN state (it should only accept a SYN without an
ACK) is not in the base-test, but is a typical test in
the extended-test. For your convenience a more elaborate how to test page has been assembled.
Fail/Redo
- If you fail the base-test, or if you do pass the base-test
but your score is to low, you will have to redo the
assignment. Also you might be unsatisfied with the result and
decide to redo the assignment. In any case, there is no
guarantee that the assignment will be the same from year to
year.
- Even stronger, there is no guarantee that the assignment
will even resemble any previous assignment. You will
not be allowed to submit assignments based on descriptions of
any previous year. Even if it means you can not use any
code of previous years. Even if it means you have to start all
over. Even if it means you have spend zillion hours for nothing
on an old assignment.
Exercises
In an earlier semester, two exercises were given to the students to
help them get started with various aspects of implementation. These
exercises are no longer deliverables, but you are welcome to look through
them to gain an idea on how to approach the problem. The exercise questions
and answers can be found here.
Computer Networking Library
IP Layer Files
Manual Pages
Requests For Comments (RFCs)
Must Reads
Don't Procrastinate!
DO NOT WAIT UNTILL THE LAST MINUTE TO START
CODING! Many students do not pass every year because they
procrastinate! This assignment is HARD in particular because
of the limited testing schedule. Do not procrastinate as you
will miss your chance to have your code tested! Untested code
almost always fails one or more tests. Forewarned is
forearmed.
Miscellaneous
Erik van der Kouwe and Richard Bronkhorst
created a VMware
image for the Operating Systems practical (some notes). This should be easy to
update to work with this practical. Don't forget to
praise/blame them (we are only offering a link to the
image hosted for the OS practical.)
|