POST 01.02

Still working on the mail server software. I have to be careful with how it is configured. And even more careful with how I get it installed on the server system I found. But I've been able to make good progress. The electricity at the cabin here is a bit more available today, and I've used some of my backup supply to spend some extra time on configuring the mail system on that server. So hang in there, because it's getting real close.

Today's post continues what we discussed in the last post. It's all related, so you techie types will want to pay attention along with the rest of us. (And I know that I've simplified things, so all you techies will have to play along so the newbies can understand this.)

A router has "brains": a program, or instructions, that help it recognize, decode, and send off the data packets. A router's intelligence comes from the program that controls it. This program is contained in something called microcode, which is a fairly smart set of instructions that are the brains of the router. Each manufacturer has their own microcode for their routers, but it all does basically the same thing.

With special hardware and software tools, you can look at the microcode in a router. It's just another type of program instructions that I've had a lot of experience with. It's not hard to determine what the microcode does. And the microcode is not hard to modify for my own needs.

Routers are not always a special box with microcode, though. A computer can act as a router; in fact, most computers/servers do routing.

Even though the microcode is really a series of one's and zero's, the code can be de-compiled, or put into programming code that is readable. This code, or machine language, is the basis of all computer programs. Some programs are written in languages, such as Basic or C or Pascal, but it is all compiled or converted into the machine language that is needed by the equipment that it is built for. Every piece of computer contains this machine language, and every program ultimately is put into this language.

Just as programs are compiled into machine language, a de-compiler can take machine language and put it back into its original source language. You can then look at the program to determine what it does.

I had several software tools that could extract the code from a router. And I had several different de-compilers; you need a different one for each type of language used.

One day, I was using the decompiler to look at the microcode from a router. It was pretty standard stuff: look at a data packet, decode the packet header, look at the routers' internal routing table, and then send it to the appropriate hardware port or connection. Then do it again, and again, and again. Computers are good at doing the same thing over and over again. And looking at data packets can be interesting sometimes. (Yeah, it's the 'hacker' in me that is interested in data packets.)

Anyhow, I was looking at the router microcode, trying to get an idea of how it worked. I do that a lot (or used to): try to take something apart to see how it works. There's the basic input/output code, and some code in there to verify the completeness of the data packet. You'd want to make sure that the packet was received and sent properly. This was done with checksums, or computations that look at the data and perform a mathematical calculation based on the packet's contents. The result of this computation is the checksum, which is sent along as part of the data packet. Each router along the way performs the checksum check, which helps ensure the accuracy of the transmission of the data. If a part of the data packet gets garbled for any reason, the checksum won't match, so the router will ask for the same data packet again. If the checksum is OK, the packet is sent on its way.

All of this is pretty standard stuff. And that's what I found in the router's microcode. But then I noticed some extra code. There didn't seem to be any reason for it to be there, it really didn't seem to be used. That got me a bit curious.

I've spent too long on this post, and I'm a bit tired. I've got to cut some more wood for the fireplace, and some for the stove, so I can cook a bit of dinner. I also need to water the garden, and some other chores. These are things that I've been doing since the Problem in order to survive. It's not like I can run down to McDonalds and get a double-cheeseburger meal like before the Problem. I get to grow and fix my own food. And do the dishes, by hand.

I'll continue with what I found in the router microcode in the next post.