EFnet's protocol changes

sections: [TS4] [overview] [specs] [implementation] [patches] [debugging] [history]
pages: [index] [hacks] [sirc] [ytalk] [utalk] [ircd] [xtris]

The TS4 patches

"TS4" is a patch-set for EFnet's ircd code, which adds a lot of more or less related features, such as password-based channel persistency, two levels of ops, exception lists for bans, server-side unique session IDs, cookie-based short-term op recovery, nick kill recovery, server link compression, and a bunch of other things.

I developped the TS4 code during 1997-1998, as an experimental proposal for the technical evolution of EFnet. This lead to a huge controversy, where the most political parts of TS4 (channel passwords and half-ops) were voted down. Since then, many of the other TS4 features have been slowly integrated into EFnet's mainstream ircds.

This section documents the original TS4 code, which as far as I know is not currently in use in any IRC network.

Documentation

Download

The current version of the TS4 code is the 1.0 release. You can download:

Testing

The test servers have been shut down; the beta testing was successful, and helped uncover a large number of bugs.

News

Things that have changed recently:

Overview of EFnet's TS protocol

Long before TS4, I developped the original TimeStamping patches for EFnet, which borrowed the main idea from Undernet's TS code, but adapted to EFnet's servers, and with some differences in the design of the protocol.

TimeStamping allows IRC servers to react more intelligently to nickname clashes (collisions), and makes it harder to hack chanops using netsplits. It was first introduced on Undernet.

With TS, when a nickname collision occurs, only the most recently introduced nick is killed. There are two exceptions to this: if if they were introduced exactly at the same time, or the collision occurs between a TS and a non-TS server then both are killed, and if the user@hosts are the same, then only the oldest is killed.

For channels, TS servers keep track of the creation time for channels, and on a net-join they will only keep ops on the older side if the times differ, unless the older side has no ops at all. This is accomplished using timestamped channel descriptions, which makes all the servers take the same decisions rather than bouncing MODEs back as is done on Undernet.

Since TS was introduced on EFnet when the network was already large, existing channels without a TS had to be accomodated; channels with a TS of 0 act like on old non-TS servers. This makes TS on channels quite ineffective on a mixed net. A previous version which was more 'aggressive' was found to be unstable.

The current version of the TS code and protocol, TS3, fixes a race condition that affected channels being created only on part of the net; it also introduces new warnings, and makes compatibility with non-TS servers optional.

Specifications

Read the complete specifications of version 3 of the TS protocol in HTML format, or in plain text.

And here are the specifications for version 4 of the protocol, available only in text format (sorry!).

Implementation

The TS base code is implemented on top of a clean ircd2.8.21 distribution. This is meant as a reference to be ported to +CS, +th, +hybrid and other versions, not as actual code to use on EFnet.

TS code is included in all the EFnet ircd versions currently available, including +CS and +hybrid. Look at the /version string to see if a server includes the TS3 code. If it does, it will show "TS3" (or "TS3o" or "TS3ow"...) instead of just "TS" at the end of the version string.

Patches

Since the original TS implementation, a number of bugs have been found, some in the TS code itself and some in the stock ircd code. These patches have been integrated with the current version of ircd+TSora, but are provided here for completeness.

Old patches:

Debugging

For debugging of the TS servers, compile them with the option -DTSDEBUG, which adds a command ("TS") to dump all the known TS's. Servers compiled with -DTSDEBUG should never be linked to a real net, as they let anyone get a list of all nicks and channels.

The TS3 code introduces one new debugging options: TS_WARNINGS. If enabled, situations like servers doing MODE +o changes (which should never happen on an all-TS net) or users remotely JOINing instead of SJOINing an empty channel (which causes the bug that brought TS3), are flagged to +s users.

History

Timestamping was first introduced on Undernet when it had a few hundred users; their protocol is described in this document.

Around December 95, a large number of EFnet IRC admins showed interest in introducing a TimeStamp protocol for EFnet servers, to reduce the problems caused by collides and channel op-hacking.

After some discussion on operlist, I wrote the specifications and the patches to the server code to add TimeStamping to the EFnet IRC protocol. The third version of this protocol is now in use on EFnet.