home *** CD-ROM | disk | FTP | other *** search
- FSC-0003
-
- FidoNet Route Files Explained
- Part 1 -- The Many Faces of FidoNet
-
- by Ben Baker, Fido 100/76
-
- There is no aspect of FidoNet more universally mis-
- understood than routing. It is the intent of this foru-
- part series to clear some of the fog.
-
- The justification for nets and routing has been
- discussed many times and will NOT be discussed again here.
- Given that routing is good, how is it done? What's the
- meaning of the various statements that go into route files?
- Indeed, what's the meaning of route files?
-
- Let's first take a look at "the network." But how do we
- do that? In reality, there is no "the network." FidoNet is
- a different thing when viewed by each different Fido! The
- only formal definition of FidoNet is the node list, and it
- serves as an adaquate view of "the network" for most
- independent Fidos but only the members of some nets.
-
- Consider the hypothetical node, Fido 21/7. He's an
- independent member of a "Region." To him, "the network" is a
- couple of hundred other independent nodes to whom he sends
- messages directly and another couple of hundred to which he
- has access through 36 defined "Hosts." If he receives a
- message not addressed to his node, his Fido "orphans" it.
- He has no intention of forwarding someone else's mail. They
- can pay their own phone bills! When he sends a message to
- 18/3, Fido knows (from the node list) that is another
- independent and sends the message direct. When he sends a
- message to 100/76, Fido knows (from the node list) that is a
- member of net 100 and sends it to 100/0. Fido 21/7 executes
- only schedule A during the national mail window. He has no
- use for ANY route files.
-
- Another hypothetical node, Fido 201/4 is a member of an
- "inbound only" net. Since the sysop has used the '4'
- command properly, Fido knows he is a member of net 201 and
- will treat other members of that net as though they were
- independent nodes. When he sends a message to 201/5, Fido
- will send it direct and not to 201/0. Messages headed out-
- side net 201 will be handled for 201/4 just as they were for
- 21/7. Fido 201/4 executes two schedules, A during the
- national window followed immediatly by B when he just sits
- quietly and waits for 201/0 to send him any mail he
- received. He has no use for ANY route files.
-
- Everyone else has a view of "the network" more
- complicated than Fido can discover from just the node list.
- If you're a Southern California Hub, or a local node in the
- New York Megalopolis, or maybe the host of a modest network
- in Memphis "the network" looks different to you than to
- other sysops. It is the function of route files to modify
- Fido's view of "the network" to conform to yours.
-
- If your Fido is executing any mail event and any other
- Fido calls it up and offers it a mail packet, your Fido will
- graciously receive that packet and at the end of the mail
- event, he will unpack it into messages. These actions have
- nothing whatever to do with route files!
-
- Reread that last paragraph two or three times until it
- sinks in. It is a very important, very misunderstood point.
- Route files do not and cannot control the way you receive
- mail. ROUTE FILES CONTROL ONLY THE WAY YOU SEND MAIL!!!
- After all, that's when you're paying the phone bill.
-
- Furthermore, what you say in ROUTE.B has absolutely
- nothing to do with how Fido behaves in schedule C. I will
- come back to this point later.
-
- Ever since we first began routing FidoNet messages to
- places other than their final destination, route files have
- used three basic commands to mold Fido's view of FidoNet to
- correspond with your view. In part 2 we will look at
- SCHEDULE, ROUTE-TO and ACCEPT-FROM and see just how they
- influence Fido.
-
- Part 3 will examine a bevy of new routing commands
- available with Fido V11 and see how they have made automatic
- distribution at last possible.
-
- LISTGEN V2 is capable of generating route files auto-
- matically. Part 4 will discuss how ROUTE.CTL statements map
- to route file commands.
-
- Stay with me for the next few weeks and maybe we can
- burn off the fog and find a bright sky, a calm sea and clear
- sailing. (And don't throw away your newsletters, you'll
- want to refer back from time to time.)
-
- ------------------------------------------------------------
-
-
-
- FidoNet Route Files Explained
- Part 2 -- In the Beginning
-
- by Ben Baker, Fido 100/76
-
- From the time he first began "routing" messages, Fido
- has used "route files" to tell him what messages to send
- where when. Three basic route file commands do this;
- SCHEDULE aka SEND-TO, ROUTE-TO and ACCEPT-FROM. This week,
- we'll look at these commands in depth.
-
- Before going farther, I need to define a couple of
- terms. A "target" is a node to which your Fido will connect
- and directly send a message. An "addressee" is the ultimate
- destination node for a message. This is an important
- distinction. Because of routing, the addressee and the
- target for a particular message are often different nodes.
-
- A "packet" is a collection of messages all to be sent
- to a single target (though perhaps several addressees). At
- the beginning of each schedule Fido builds all the packets
- he will be permitted to send during that schedule.
-
- Now, let's take a look at the three basic commands that
- may appear in a route file, and see how each of them can
- modify Fido's behavior.
-
- SCHEDULE <tag> <target list> or
- SEND-TO <target list>
-
- These commands are equivalent. They tell Fido "During
- this schedule, you may build packets for any target in
- <target list>. Include all messages to different addressees
- which may be routed to these targets. Do not consider any
- outgoing messages which cannot be sent to one of these
- targets." Unless there is an ACCEPT-FROM statement (see
- below) only messages originating on your Fido qualify to go
- into packets. If <target list> is empty (and this is NOT
- schedule A), Fido will not build any packets. If he doesn't
- build any packets he will not send any mail, even if he is
- POLLed (see next week).
-
- ROUTE-TO <target> <addressee list>
-
- This command will override any node list implied
- routing affecting these nodes. It tells Fido "If <target>
- is in <target list> and there are outgoing messages for any
- nodes in <addressee list>, put them in <target>'s packet."
- If <target> is not in <target list> you blew it. It's
- almost, but not quite a "no operation." No packets will be
- built for nodes in <addressee list>, even if they are in
- <target list>! Don't route messages to a <target> that's
- not in the <target list> for this schedule.
-
- By the way, a bug in an earlier version of Fido pre-
- vented messages to <target> from being sent unless he was
- also in <addressee list>. I don't know if that has been
- corrected, but it's still good general practice to put
- <target> in <addressee list>.
-
- ACCEPT-FROM <originating list>
-
- Normally, Fido only sends mail originating on your
- board. If you receive a message originating on A and
- addressed to B, without this statement, your Fido will not
- attempt to send it along to B. Instead, he will mark it
- "orphan" to give you an indication that he had a problem
- with it and otherwise ignore it. This statement in a route
- file tells Fido "When you build packets, if you find any
- messages from any nodes in <originating list>, treat them as
- if they originated here. In other words FORWARD any
- messages from the nodes in <originating list> that you can
- get into packets FOR THIS SCHEDULE's <target list>."
-
- I actually suggested this verb for this action and have
- regretted it ever since! It's a misnomer. A better verb
- might be "FORWARD-FOR" but hindsight is always 20-20. It
- really means "Accept, for forwarding, only messages from
- these guys." It's designed to prevent you from paying
- someone else's phone costs without prior arrangement.
-
- So where do you put this statement? Remember two
- important points I've mentioned before. 1) Route files
- affect how you SEND mail, not how you receive it. 2) A
- particular route file affects only the schedule with the
- matching <tag>. Consider Fido 202/0, a hypothetical bi-
- directional host. He executes three schedules each night.
- During schedule B, before the national window, he collects
- outgoing mail from his locals. During schedule C he sends
- mail from himself and his locals to "the network" and
- receives mail for himself and his locals from it. Then in
- schedule D, after the national window, he distributes the
- mail he received for his locals.
-
- ROUTE.B needs neither a <target list> nor an ACCEPT-
- FROM statement. Indeed, he doesn't really need any ROUTE.B
- file at all because HE ISN'T SENDING ANY MAIL DURING
- SCHEDULE B.
-
- ROUTE.C has the national net excluding 202/0's locals
- in its <target list>. It also has "ACCEPT-FROM 1, 2, 3,
- (all locals)." Now let's say that 202/3 received a message
- from 125/1 last night, but it wasn't delivered because 202/3
- was down. The message is still here. Won't it be
- "orphaned" because 125/1 isn't in the ACCEPT-FROM list? NO!
- Because 202/3 isn't in the <target list>, the message won't
- even be considered DURING THIS SCHEDULE.
-
- ROUTE.D has all the nodes in net 202 in the <target
- list>, and an "ACCEPT-FROM ALL" statement. Now the fore-
- going message will be processed correctly and forwarded to
- 202/3.
-
- Now let's say that 100/76 tries to forward a message to
- Jakarta through 202/0. 202/0 cannot refuse delivery of the
- offending message, so there it sits in his mail area.
- During schedule B, he ignores all outgoing mail because he
- doesn't have a <target list>. During schedule C Jakarta is
- in his <target list>, but 100/76 is not in his <originating
- list>, so the message is orphaned. During schedule D 100/76
- IS in the <originating list>, but Jakarta is not in the
- <target list> so the message is again ignored.
-
- Make no mistake, if Jakarta had been in the <target
- list> in schedule D, the message would have been sent, even
- though it had been marked an orphan during schedule C
- (provided, of course that a connection could be made and
- Jakarta happened to be in a mail schedule at that time).
- This means that if messages are orphaned because of errors
- in your routing files, the routing files can be corrected
- and the messages can still be sent. The orphan flag is NOT
- a dead end!
-
- A similar kind of bug existed (and may still; I don't
- know) with ACCEPT-FROM as with ROUTE-TO (above). If a route
- file contains an ACCEPT-FROM statement, make sure your own
- node is in the <originating list>. (The first time I used
- this statement, I forwarded a lot of messages, but
- "orphaned" my own messages!)
-
- Well, that's how routing is achieved. Remember, all
- these statements control out-going mail. You can receive
- mail even if you don't have any route files!
-
- A final point on routing. If a message says it has a
- file attached (even if the file doesn't exist) all bets are
- off. Routing is suspended and the message will be sent
- direct from the originator to the addressee. Fido has
- several built-in safeguards to prevent you from forwarding
- someone else's files, or forwarding your files through
- someone else for that matter.
-
- Next week we'll take a close look at the goodies TJ has
- provided in version 11 and see how they are making automatic
- node list distribution at long last a reality.
-
- ------------------------------------------------------------
-
-
-
- FidoNet Route Files Explained
- Part 3 -- Keep the Old, Ring In the New
-
- by Ben Baker, Fido 100/76
-
- Last week we looked at the basic routing statements
- that have been with us since version 7 or so. Now let's
- look at what's been added in version 11.
-
- Please refer back to last weeks definitions. I con-
- tinue to use them as defined.
-
- RECV-ONLY
-
- This tells Fido "Go ahead and build packets for any
- targets in the SCHEDULE command's <target list>, but DON'T
- ATTEMPT TO CALL ANYBODY. If any targets happen to call in
- for any reason, try to give them their packets before they
- get away."
-
- There MUST be a <target list> for this statement to
- mean anything. It is not intended for normally "receive
- only" schedules like 202/0's collection schedule (see last
- week). Instead, it prevents you from originating calls
- during schedules when you are trying to SEND mail. (Route
- files control how you send mail, not how you receive it.)
- You are really trying to send mail on the other guy's
- nickel, but as you will see, he has to cooperate in that
- venture.
-
- This statement might be used by the locals during the
- collection schedule in a large, busy net. Collisions are
- avoided because there's only one node, the outbound host,
- placing calls. He POLLs (see below) the locals for their
- outgoing traffic.
-
- HOLD <hold target list>
-
- "OK, Fido, build packets for targets in the <target
- list>, but don't attempt to actually call any targets in
- <hold target list>." This is a limited "RECV-ONLY" command.
- Any packets for targets not in <hold target list> will be
- sent normally (if they haven't been picked up), but packets
- for <hold target list> have to be "picked up."
-
- There's a hidden gimmick here that bears further
- exploration. Ken Kaplan (Fido 100/22 AKA 1/0) is the
- original source in the national nodelist distribution
- system. Regional coordinators call his Fido each week to
- pick up copies of the latest nodelist. The route file for
- his national window contains the statement "HOLD <regional
- coordinator list>." Fido will not attempt to send any
- packets targetted for a regional coordinator. Does this
- mean that he can't send "normal" messages to the
- coordinators? Not at all. Because he is a member of net
- 100, all his "normal" messages, including those addressed to
- the coordinators, wind up in a packet targetted for 100/10,
- the outbound host. Since 100/10 is not in the <hold target
- list>, that packet is sent and the messages go out. HOLD
- APPLIES TO THE TARGETS OF PACKETS, NOT TO THE ADDRESSEES OF
- MESSAGES! It is only when Ken sends messages to the
- coordinators with the nodelist (or other files) attached to
- them that Fido builds packets targetted for them instead of
- 100/10.
-
- Does that mean that Ken can't send the coordinators
- other files without waiting for them to pick them up? Well,
- yes and no. Because of the HOLD statement, he can't say
- send FIDO_IBM.EXE to 14/61 (see PICK-UP below for why 14/61
- and not 14/0). But he can use another gimmick. The
- coordinators have dual identities (set by the '4' command of
- Fido) and he can certainly send a file to 14/0. Fido is
- smart, but so smart he'll notice that 14/0 and 14/61 happen
- to have the same phone number. He'll send the packet for
- 14/0 and hold the one for 14/61. By the same token, if both
- packets are still present when 14/61 calls in, he'll only
- pick up the the nodelist targetted for 14/61 and not the new
- Fido targetted for 14/0. (You can't have your cake and eat
- it too.)
-
- PICKUP <pickup target list>
-
- Whenever any other Fido calls your Fido for any reason,
- your Fido looks to see if there is a packet targetted for
- him. If there is, your Fido will try to deliver it then and
- there and avoid making the phone call which you have to pay
- for. Without this statement (or the next one) in his route
- file, the other Fido will simply hang up on you, leaving you
- with a phone call to make in order to deliver your packet.
- This statement says to Fido "If you happen to call any
- target in <pickup target list>, hang around to see if he has
- mail for me."
-
- This is a two-edged sword. It can speed up mail
- exchange, but the Fido that places the call pays for it. It
- works best within a local net where the calls are all toll
- free anyway. In fact, it won't work at all between larger
- nets supported by distinct inbound and outbound hosts.
- Specifying "PICKUP 100/0" in your national window schedule
- would only get you messages originating on 100/0 (or 100/51
- actually) with files attached. Any other mail for you might
- be in a packet addressed to you, but on 100/10, the outbound
- host, and that's not who you called.
-
- Even worse, let's say Tom Jennings is sending a file to
- 100/10 and wants to pick up any mail from St. Louis for San
- Francisco while he's at it. He's the host of net 125, and
- that's perfectly legitimate, right? Wrong! His primary
- identity (the '4' command again) is 125/1 and 100/10 may
- have a packet for 125/0, but he won't have a packet for
- 125/1. This command deals at the packet/target level just
- as the HOLD command does. Furthermore, it deals with real
- identities, not alternate identities.
-
- As I said, this is most useful within a local net, and
- that's where it probably should be applied.
-
- POLL <poll target list>
-
- This tells Fido "Even if I don't have any mail for the
- targets in <poll target list> generate empty packets
- addressed to them so you have an excuse to call them. Then
- when you do call them, pick anything they have for me."
-
- "POLL <poll target list>" implies "PICKUP <poll target
- list>" which need not be specified. This is the statement
- an outbound host might use to poll his locals or hubs for
- outgoing traffic prior to national mail time. Together with
- the next statement, this method can be very efficient.
-
- The regional coordinators run a special schedule each
- Saturday morning during the national mail window. It's
- route file is identical to their normal national schedule
- route file except that it contains the statement "POLL 1/0."
- That's how they get the nodelist for subsequent redis-
- tribution.
-
- As I see it, POLL has a lot more uses than PICKUP.
-
- SEND-ONLY
-
- This one is mainly for outbound hosts. It says "I'm
- not expecting any mail during this schedule, so don't wait
- the normal one or two minutes for incomming calls after
- making an outgoing call. As soon as you finish one, dial
- another until all packets have been sent."
-
- As I said above, this can be very efficient, but
- there's a problem you need to be aware of. Fido will make a
- maximum of 30 attempts without connect to send a packet to a
- particular target. If you have only one packet addressed to
- a busy target, Fido would normally take about an hour to use
- up 30 attempts, but in SEND-ONLY mode he can attempt 30
- calls in about 20 minutes! If you have a Courier and are
- running it in "X4" response code mode, he'll make 30
- attempts in 10 to 15 minutes. (The Courier doesn't waste a
- lot of time in "fast-dial, busy-detect" mode.)
-
- If you're an outbound host and want to try SEND-ONLY
- during the national window, you risk using up your call
- attempts while your target is busiest, then when he's
- quieted down and you could get through, you've given up! I
- suggest you break your national time into two schedules, and
- only use SEND-ONLY during the last 20 minutes or so of the
- national window.
-
- On the other hand, polling your locals or hubs is a
- different matter. They should be in RECV-ONLY mode and you
- can expect every call to connect the first try. The call
- attempt limit doesn't apply to this situation and the SEND-
- ONLY command should be used to shorten the time needed to
- POLL everyone.
-
- NO-ROUTE <addressee list>
-
- This command tells Fido "Do not send messages addressed
- to these nodes anywhere but to the addressed nodes. Treat
- them as though they have files attached, whether they do or
- not."
-
- This lets you say things like Fido 100/76 (in Illinois)
- might:
-
- SEND-TO 100/10 ; Outbound Host (in Missouri)
- ROUTE-TO 100/10 ALL ; Send everything to accross the river
- NO-ROUTE 100/482 ; Except other Illinois traffic
-
- The only other way to achieve this end is to list in
- the ROUTE-TO command all 500 odd nodes whose messages should
- be routed to 100/10, and that list changes every week!
-
- Now you should have a good handle on how the commands
- used in ROUTE.<tag> control how Fido SENDS files during
- schedule <tag>. But sometimes these commands require very
- long lists of node numbers which change from week to week as
- the node list changes. LISTGEN 2 will generate the route
- files automatically and let you specify the long lists
- symbolically in terms of nets, area codes, etc.. Next week
- in the last part of this series, we'll see how the
- statements in LISTGEN's ROUTE.CTL file correspond to the
- commands in ROUTE.<tag>.
-
- ------------------------------------------------------------
-
-
-
- FidoNet Route Files Explained
- Part 4 -- LISTGEN and ROUTE.CTL
-
- by Ben Baker, Fido 100/76
-
-
- LISTGEN Version 2 will automatically generate route
- files for you if you desire. The advantage is that LISTGEN
- is driven by a control file, ROUTE.CTL, in which you specify
- the statements necessary with symbolic parameters that you
- define in terms of nets, area codes, etc.. A properly
- designed ROUTE.CTL need only change when your routing needs
- change. LISTGEN will continue to create correct route files
- week after week as the nodelist changes.
-
- Before I begin, I'd like to do a quick review of the
- route file commands and their effect.
-
- SCHEDULE <tag> <list> or
- SEND-TO <list> Determines which nodes may have
- packets build to SEND mail to.
- ROUTE-TO <target> <list> Directs that messages to par-
- ticular addressees be SENT in
- packets to another node.
- ACCEPT-FROM <list> Specifies which oritinators'
- messages may be SENT.
- RECV-ONLY States that packets may only be
- SENT by being picked up.
- HOLD <list> States that packets to part-
- icular nodes may only be SENT
- by being picked up.
- PICK-UP <list> States that it is OK to receive
- mail from particular nodes when
- we originate calls to SEND them
- packets.
- POLL <list> Directs that packets (empty if
- necessary) be generated and
- SENT to particular nodes in
- order to pick up mail.
- SEND-ONLY States that calls may be made
- rapid-fire to SEND as many
- packets as possible.
-
- Note that each definition above includes the verb SEND
- or SENT. I did that deliberately to emphasize that these
- commands all control some aspect of sending mail.
-
- LISTGEN has been adaquately documented and I do not
- intend to re-document it here, but I would like to show you
- how ROUTE.CTL commands map to the ROUTE.<tag> commands
- covered above.
-
- SCHEDULE <tag> <target list>
-
- When LISTGEN encounters this command in ROUTE.CTL it
- does two things. First it closes any route file it may be
- working on and creates a new ROUTE.<tag> file for the new
- <tag>. Then it generates a SCHEDULE statement from the
- specifications in this one for the new ROUTE.<tag>,
- expanding any symbolic parameters to lists of nodes from the
- nodelist. In other words, it begins a new route file as you
- would expect it to by defining the <target list>.
-
- FROM <accept list>
-
- This phrase, when encountered, generates an ACCEPT-FROM
- statement.
-
- TO <addressee list> [ VIA <target> ]
-
- If the VIA clause is present, this statement generates
- a "ROUTE-TO <target> <addressee list>." Successive TO
- phrases without VIA clauses accumulate to make a larger
- <addressee list> until a VIA clause IS found. Then the
- entire list is routed to the <target>. (I'm not entirely
- happy with this "feature," but that's the way it works.) If
- no VIA clause is ever found, the TO phrase generates no
- output at all! It does serve as documentation in your
- ROUTE.CTL file, saying "I expect to be sending mail TO these
- nodes in this schedule."
-
- All of the other route file commands discussed above
- map one-for-one in the same format from ROUTE.CTL to
- ROUTE.<tag>.
-
- The big advantage in using LISTGEN is to be able to use
- simple symbols which it will translate into long lists of
- nodes. To illustrate, net 100 spans two area codes, 314 in
- Missouri and 618 in Illinois. To minimize the number of
- toll calls placed accross the Mississippi, I serve as "Metro
- East" hub to concentrate the Illinois traffic. I have the
- following statements (among others) in my ROUTE.CTL file:
-
- define Metro-East as Net-100 except Area-314 ; Area 618
- define Outbound as 100/10
- define World as all except Metro-East
- * * *
- FROM Metro-East TO World VIA Outbound
-
- Nodes may come and go, both in our net and across the
- country, and these statements need not change. LISTGEN
- interprets them week after week and builds the right route
- files every time. And in several months, if our outbound
- host should change making it necessary to change ROUTE.CTL,
- I can look at this and not have to say to myself "What on
- earth was I trying to do here?" It's all pretty obvious.
-
- Before I wrap it up, there are two important exceptions
- to the things I have said. First, schedule A is special in
- that the <target list> always is the entire nodelist, no
- matter what ROUTE.A says. For that reason, if you do any
- routing not defined by the node list, I recommend that you
- DO NOT USE SCHEDULE A. For all other schedules, Fido does
- exactly what ROUTE.<tag> tells it to do and nothing more.
- And second, ROUTE.BBS is a special route file that affects
- all schedules for which there are no ROUTE.<tag> files. For
- that reason, I recommend that you FORGET YOU EVER HEARD OF
- ROUTE.BBS. It'll cause more problems than it'll ever solve!
-
- So, routing can get pretty complex (just ask 'em in
- Southern California), but it doesn't need to be complicated
- once you know what the objective of each schedule is from
- your point of view, and what your Fido needs to do to meet
- those objectives.
-
- In fact, it's pretty easy if you just remember the two
- points I have been hammering at you since we began:
-
- 1) Route files control the way you send messages, not
- the way you receive them. Every command we discussed above
- controls some aspect of sending messages. And. . .
-
- 2) A particular route file only affects the schedule
- with the matching <tag>. What you say in ROUTE.B has no
- bearing whatever on schedule C. Each schedule must be
- separately spelled out.
-