Previously, I wondered why the need of XHTML specification by W3C. Now after I was cluttering my hands with ECMA Script (i.e., JavaScript) for a while, I found the definite reason.
Back when I was in the last half part of my third semester of my undergraduate study, there was a fever among my classmates to solve Sudoku puzzles. I just tried to scratch some of those puzzles but find them not exciting because I only need to employ a trial-and-error method. Later, in the beginning of my fourth semester, I tried to find an algorithm to solve those puzzles and ended up with a method that I will describe here.
A friend of mine would like to try to implement a new system call based on the example in Chapter 8 of Linux Kernel Module Programming Guide 2.6 Series (http://www.dirac.org/linux/writing/lkmpg/2.6/lkmpg-2.6.0.html) in Linux kernel 2.6.21.5. The example requires that the kernel exports `sys_call_table' symbol. Although Linux kernel 2.4.x, on which the guide is based, still exposes that symbol, Linux kernel 2.6.x does not do that anymore for it is harmful (e.g., it is unimaginable if a module replace the system call of `link' with `unlink' via the table). The guide comes with a patch to expose the table in Linux kernel 2.6.x. However, the patch does not work in particular for Linux kernel 2.6.21.5. So, I helped him to do so.
In a book titled C How to Program by Deitel and Deitel, computer languages are classified into three types as follows:
1. machine language
2. assembly language
3. high-level language
Well, everything started with single-user batch processing system. In this system, a batch of jobs are queued to be processed by the system one at a time. The system itself is usually operated by one operator. An owner of a job has to wait for the result to be produced by the system.
I believe every new student studying Computer Science or Information Technology will be introduced to the sub-systems of computers, which are Input Unit, Output Unit, Arithmetic and Logic Unit, Central Processing Unit, Storage Unit (Primary Storage Unit/Main Memory and Secondary Storage Unit). I always thought that the most amazing part of a computer was its processor (i.e., ALU and CPU).
I have my e-mail forwarding set up in FSF's mail server to my account in Yahoo!'s mail server.
I tune into several mailing lists, and I noticed that frequently the e-mails came out-of-order if not delivered at all.
How does the IP receiving mechanism assemble fragmented datagrams?
First of all, this writing is based on Linux kernel 2.6.21.5.
When I looked into ip_frag_reasm() that was commented with /* Build a new IP datagram from all its fragments. */ in net/ipv4/ip_fragment.c, I could not find the code that I had looked for, specifically, the code to construct a new big SKB and copy all data fragments in the received SKBs into the new big SKB. Of course, if I had found what I had looked for, it would have meant that ip_frag_reasm() was so inefficient (i.e., dumb). Instead, ip_frag_reasm() only prepared the chain of the SKBs to be processed by skb_copy_datagram_iovec() as I have described here.
Information on skb_copy_datagram_iovec()
This writing is based on Linux kernel 2.6.21.5.
This function is defined in net/core/datagram.c. The main task of this function is to copy the data of an skb in the kernel-space to a memory location in the user-space. Usually, this function will be the one who finally satisfies recvmsg() system call and its variants, which are recv() and recvfrom(). Nevertheless, this main task also carries one unique responsibility: taking care of fragmentation.
As mentioned in Rusty's Unreliable Guide to Kernel Locking, the Linux kernel has three contexts of thread executions: hard-IRQ context, soft-IRQ context, and user/process-context. As on July 10, 2008, the guide does not mention anything about the boundaries between those contexts. So, I studied the source code of Linux kernel 2.6.21.5. From my study, it is clear that the boundaries are queues. It represents the classical IPC problem: the Producer-Consumer Problem.
During my work on the ATN TP4/CLNP Networking Suite, I helped a friend of mine to be able to capture Ethernet frames destined to unusual Ethernet multicast addresses. What I mean by unusual is that it is not the common IANA's range for multicast addresses, which is from 01-00-5e-00-00-00 to 01-00-5e-ff-ff-ff.
When browsing a bunch of pictures with Kuickshow, I always saw that all pictures were correctly oriented for display. The pictures that were taken by rotating the camera 90 degrees from its natural position were displayed by Kuickshow in the right orientation so that I did not have to re-orient the pictures manually.
Someone posted such a question here.
Personally, I started to hack the Linux kernel when developing a new networking suite called the ATN TP4/CLNP Networking Suite for use with GNU/Linux systems in the aeronautical industry. So, I have some suggestions here.
SOCK_ZAPPED, which is defined in include/net/sock.h, is a status flag of a socket (struct sock) to indicate that the socket has a name assigned to it already (i.e., the socket is bound with bind()).
Archive: Linux Kernel's Networking Part (Networking Socket)
It turned out that any wireless Ethernet card's device driver in a non-promiscuous mode does not drop any Ethernet frame with the following destination MAC address:
YY:xx:xx:xx:xx:xx, where YY is an odd number (e.g., 0xE1, 0x11, 0x01, etc.)