An Open Source Platform for Designing Programmable Routers Atanu Ghosh International Computer Science Institute Center for Internet Research atanu@icir.org In the past computers were sold with proprietary operating systems provided by the manufacturer. A computer was not selected solely on the performance characteristics of the hardware but also on the supplied operating system. Maintaining software to run on the various operating systems was time consuming and expensive each operating system would provide a different way of performing the same task. When the time came to buy new computers the pragmatic choice was to buy whatever had been bought before. If a new manufacturer built a computer that outperformed all the existing competition it would be difficult to break into the market as the existing customer software would have to be modified to run on the new computer. The new manufacturer would also have to develop a new operating system to run on the new computer which could take a prohibitive time to develop. Generally, in the past a small number of computer companies existed with their proprietary operating systems and innovation was held at bay by these few companies. A change occurred when the UNIX operating systems came onto the scene, this was an operating system that was not tied to any specific hardware. Today buying a computer is much easier than it was in the past, choose a computer that meets the required price and performance criteria and then install your favourite operating system. Every computer in a rack can be from a different manufacturer but running the same operating system and application software. Not being tied to a single vendor has made life easier for the consumer and has provided an incentive for computer manufactures to innovate as well as allowing new manufacturers into the market. Even in the field of consumer electronics such as Sony's Playstation 3, Sony have provided a mechanism for the consumer to install and run her own operating system. Unfortunately router vendors are still living in this proprietary past, routers are totally closed systems with all the problems that afflicted computers of the past. Router vendors sell proprietary hardware and software solutions. Most routing protocols are open and therefore routers from different vendors should interoperate, although there is a tendency for customers to choose routers from a single vendor as the configuration mechanism for each vendor is different. Routers tend to have CPUs that are generations behind what is readily available in the market as well as being equipped with ridiculously small amounts of memory. It is not possible to modify the code that is running on a router, the only way to get change is to convince the router vendor to make the change, this current model stifles research and innovation. XORP the eXtensible Open Router Platform aims to change the proprietary nature of routers. XORP allows a PC to be used as a router. All the XORP code is open source so it is possible to modify and add to the existing code base, allowing research and innovation. XORP supports most unicast and multicast routing protocols. XORP has a rich set of libraries and an IPC mechanism to aid in the writing of routing protocols. One very useful feature of XORP is that a new protocol can be introduced to the system by providing a configuration file called a template file and the application binary, this is all that is required for the new protocol to be configured by the command line interface. Introducing a new protocol requires zero changes to any of the existing parts of the system. The simplicity of adding a new protocol will make is easier for third parties to provide protocols. We also expect to enable a new type of application the router application. The router application will be able to use all the facilities available to a routing protocol. A programmable router can mean many things but it would seem a fundamental requirement should be the ability to run programs on the router. Rather than to try and define a narrow API to program a router it would seem that the more flexible way forward is to use the rich set of libraries that XORP provides today to build the extensible services of tomorrow.