Projects
Group Projects (for Project 4-8)
You are to form groups of 2-3 students
and choose 5 projects from the following 8 choices:
| Choice |
Topic |
Description |
Learning Materials |
| 1 |
Shared Memory |
See KP4L: Exercise 6 |
ULK: Chapter 2,6,7
Linux MM web site
|
| 2 |
Virtual Memory |
See KP4L: Exercise 7 |
ULK: Chapter 2,6,7
Linux MM web site
|
| 3 |
Synchronization |
See KP4L: Exercise 8 |
ULK: Chapter 9,11
|
| 4 |
Scheduler |
See KP4L: Exercise 9 |
ULK: Chapter 5,9,10
|
| 5 |
Device Driver |
See KP4L: Exercise 10 |
ULK: Chapter 13
|
| 6 |
File System |
KP4L: Exercise 11, with
changes in Choice 6 below |
ULK: Chapter 12,15,17
|
| 7 |
Networking |
See Choice 7 below |
"Linux IP Networking"
"Linux Networking-concepts"
|
| 8 |
Special Topic - IPsec |
See Choice 8 below |
FreeS/WAN web site
|
KP4L: Textbook "Kernel Project for Linux"
ULK: Textbook "Understanding the Linux Kernel"
This exercise is taken from "KP4L: Exercise 11", but replaces the
Problem Statement and Attacking the Problem sections
with the following descriptions:
You will implement an "undelete" function for minix or msdos file system.
This function is to recover any regular file that has been deleted
(by unlink() system call, or the (*unlink)() inode operation)
in the current directory.
Since recovering a file is not always successful
(for example, the inode may have been reused since the deletion),
your function will do its best,
and reports error if the attempt is not successful.
You will also need to add an interface to call this function.
You can make change to ioctl()
to add a new option for this purpose.
The best way is configure the minix or msdos file system support
as modules and use it on the second file system.
To add a second file system to your UML,
follow these steps:
- dd if=/dev/zero of=new_fs seek=4 count=1 bs=1M
(this creates a new FS file of 4MB (seek=4) in size)
- Run UML and specify the 2nd block device from the new FS file:
./linux ubd0=... ubd1=new_fs ...
- Inside UML, create a new file system on the 2nd block device:
- MSDOS: /projects/cs378.ygz/bin/mkdosfs -S 1024 -v /dev/ubd/1
- MINIX: mkfs.minix /dev/ubd/1
- Create a mount point: mkdir /mnt/fs
- Mount this new file system:
- MSDOS: mount -t msdos /dev/ubd/1 /mnt/fs
- MINIX: mount -t minix /dev/ubd/1 /mnt/fs
This project is to write a small packet dropper
to selectively drop certain incoming packets from a particular source.
Please read Chapter 13 of the article
"Linux IP Networking"
for detail description of the project idea and example code.
You can skip Section 13.3 and 13.4.
However, this project has the following different or additional requirements:
- The packet dropper example described in the above article
is to selectively drop OUTGOING packets,
but this project is to drop INCOMING packets.
- The example in the article assumes the packet is an IP packet,
but in our project, you must deal with
all supported packet types (i.e. IPv4, IPv6, ARP, and IPX).
- The example uses a fixed IP address to match the packet,
but here you must include matching against a
fixed source ethernet address.
- For each TCP or UDP packet dropped, you need to compose and
send an ICMP port unreachable packet back to the sender.
- You must also report such packet drop event with printk().
Note: you must do this in the network stack as described in
the article. You must not use the netfilter facility
(although you may learn that netfilter is much better place
for such functionality).
It is not required that you have taken CS356 ("Computer Networks")
or know a good deal about networking,
but some background on IP networks will differently help this project.
If you are not as knowledgeable, check out
this HOWTO article:
"Linux Networking-concepts".
This project is slightly different than others,
which are to work in the kernel source tree
and add additional functions yourself.
This project is for you to experience integration of
a large piece of software into linux kernel and work it out.
It is part of the kernel programming skill
to be able to quickly understand and work
with software pieces written by others.
FreeS/WAN is an implementation of IPsec (and IKE) for Linux.
This exercise is to install FreeS/WAN version 1.95
(or the latest snapshot) with UML and set up a test-bed
to test a "sunset-west-east-sunrise" configuration.
The project will be a success
if you can achieve the testing as described in
this page.
The project involves no additional programming
but lots of compilation, configuration, and testing.
To do this project, you need some background in networking.
If you have not yet taken CS356 ("Computer Networks")
or you don't already know a good deal about networking,
I won't recommend you this project.
You will also need to be a quick learner to grasp
the basic concepts of IPsec.
You can achieve this by going through the links in
FreeS/WAN website.
© 2002 Yongguang Zhang