Clone this wiki locally
This wiki is about the native implementation of XIA in the Linux kernel, Linux XIA. For general information about the XIA project, visit the project's web site. If you're looking for the implementation of XIA in the Click modular router, check out their wiki.
April 2nd, 2020. The first release candidate of the first stable version of Gatekeeper is out! Gatekeeper is our DDoS protection system.
More news is available on page Other news.
eXpressive Internet Architecture (XIA) is a (meta) network architecture that supports the evolution of all components of its network stack and promotes interoperability among these components. The XIA 101 page presents a short introduction to XIA, whereas the PhD thesis Linux XIA: An Interoperable Meta Network Architecture should satisfy those interested in diving deep into Linux XIA. Our ANCS'15 paper Linux XIA: An Interoperable Meta Network Architecture to Crowdsource the Future Internet offers a midpoint between these two entry pointers and highlights the motivation of our work.
An overview of our work is available in a video. It was recorded during our visit to Cisco Research Lab in Cambridge, MA on August 26th, 2014. Unfortunately, the video misses the wrap-up section of the presentation because we ran out of memory in the camera. The slides of the presentation are available here: Linux XIA: Enabling a crowdsourced future Internet.
Disclaimer: the video records an informal talk, no one in the audience, or the companies that they represent, endorse Linux XIA.
The Internet has had such a broad impact on our society that there is a constant pressure on it to improve. In order to continually refine the Internet, we must have an Internet architecture that is amenable to improvements. For this reason, the study of network architectures is a critical component to the continued success of the Internet, and consequently, to the advancement of society.
With this in mind, we have designed and implemented Linux XIA to be an interoperable and evolvable architecture so that it may change with the increasingly complex needs of diverse stakeholders in the Internet.
To improve is to change; to be perfect is to change often. Winston Churchill
Given that Linux XIA is in an early stage, we find that instead of describing the "promised land" of the future Internet per se, one benefits most from understanding how demand for a new architecture can suddenly emerge since it provides a richer picture of our vision.
Is there any demand for an evolvable network architecture? The honest answer is that the demand is small today. The reason for this low demand is that virtually no application developer is asking herself which network architecture can benefit her application most. Rather, developers have been asking how they should bend their applications to work with TCP/IP.
It is impossible to predict which event will trigger broad interest in new network architectures. But, it could well go like this: some bold entrepreneurs write an application for a network architecture incompatible with TCP/IP that only needs to run in datacenters, and this application is massively more efficient that its counterpart on TCP/IP. Boom! People finally wake up to the fact that although TCP/IP is an amazing design, it's not optimal under all conditions. While having an alternative to TCP/IP for a specific scenario may be all one needs when this compelling application is out, soon the exploration of other alternative architectures for other applications will begin.
Linux XIA aims to become a nurturing meta architecture that reduces the effort of developing a new network architecture, and to combine all these new architectures into a single, evolvable network. This single network is going to improve the return over investment of datacenter operators due to making them network architecture agnostic. Moreover, thanks to XIA being an interoperable meta architecture, the greater the number of implemented architectures, the greater the chance of serendipitously finding a combination of these architectures whose value is greater than the value of the parts.
Nothing in XIA limits it to datacenters as our example above may suggest. We only expect that controlled environments such as datacenters, home networks, and car networks offer less resistance for the first deployments of XIA. Once XIA becomes compelling enough to push individuals to ask their Internet providers for XIA connectivity, everyone will be able to see the promised land on their own.
The answer to this question depends on your role. The following paragraphs give you some examples.
Network researchers. If you have designed a network architecture, you may be now facing questions related to how to implement and test this new architecture, how to incrementally deploy it, and how to interoperate with TCP/IP. Linux XIA offers you the chance of implementing only the components that make your architecture unique and saving time by reusing components already implemented by others such as inter- and intra-networking forwarding, reliable transport, and interoperability with TCP/IP.
Linux kernel developers. Have you ever wondered what would be the equivalent to Linux's virtual file system (VFS) interface in networks? We have built this interface. If you map file systems to principals, the VFS interface would be XIP, the protocol that binds all principals together in XIA. Imagine what one can do with this new flexibility, and help us to move faster toward a world in which having a new network functionality that doesn't need and can't live with IP doesn't require starting a new network stack from scratch. Check our Roadmap out.
General hackers. If you're looking for interesting projects to work on, browse our code, check our Ideas list, or ask for things to do on our mailing list. Linux XIA is a young project full of small things that can get you started, and has plenty of opportunities to explore what computer networks can really be.
Network administrators. Linux XIA is still a research project, so, if you're looking for a polished implementation, we are not ready for you at this time.
Below is a list of features available in Linux XIA. This list does not intend to be exhaustive nor suggest that Linux XIA is production ready, but to give a sense of maturity of the codebase to newcomers. A network stack is a large piece of software, and Linux XIA is still a young project. A Roadmap is available as well.
- Fully independent network stack. If it were practical to compile a Linux kernel without TCP/IP, XIA would still work;
- Loading/unloading of principals on-the-fly. This simplifies deployment, testing, and debugging of principals;
- Routing redirects. Routing redirects enable principals to delegate functions to other principals during runtime, that is, the code is reused without imposing static dependencies between principals. Put another way, no principal is required, so the set of loaded principals is entirely left to the discretion of the owner of the machines;
- Implemented principals: AD, HID, XDP, Serval, U4ID, and zFilter. AD and HID provide the basic functionality of IP: delivery of packets between two machines. XDP and Serval are the first analogues to UDP and TCP, respectively. U4ID enables Linux XIA to interoperate with TCP/IP networks. zFilter brings a multicast fabric to Linux XIA;
- Support for Linux Containers (LXC). Supporting LXC means that Linux XIA is ready for the cloud, and can simulate large deployments. See the XIA Linux Containers (XLXC) page to learn how we have been using LXC to build our experiments;
- Support for the POSIX socket API (including the synch and asynch file calls!). Application developers don't need to learn a new interface to start coding, and one can port legacy applications without heavily rewriting them;
- Support for RT NetLink sockets to manage the stack in userland. Applications can control the stack using Linux's interface of choice for that;
- Wireshark extended to support Linux XIA's protocols. See the Debugging the Linux kernel page.
Established in 2010, the XIA project is a collaboration between Carnegie Mellon University, Boston University, University of Wisconsin--Madison, and Duke University. Linux XIA is developed at Boston University under the supervision of professor John W. Byers, one of the principal investigators of the XIA project.
Michel Machado developed Linux XIA as part of his PhD thesis, and continues the development as a visiting researcher at Boston University (BU). The team at BU also includes the PhD students Cody Doucette and Qiaobin Fu.
The first two challenges you will find to get started on Linux XIA are (1) wrapping your mind around XIA, and (2) getting acquainted with our codebase and tools.
The first challenge emerges from the fact that XIA is not an incremental step from TCP/IP, but a leap. You can try to understand XIA using the schemas (word borrowed from psychology, think of it as mental models) you use to understand TCP/IP. However, until you understand TCP/IP from XIA's perspective, you will be hindered in XIA. You can overcome the first challenge by reading as much of the content provided on this wiki as you can. Start reading the things you find most interesting, then look for content that answers the questions that will emerge. Repeat this strategy until you feel comfortable with diving into any direction.
The second challenge may seem scarier to those without experience with kernel development, but this challenge is actually about having fun! Moreover, our network stack is already quite functional, so you do not need to write kernel code to get moving. To help you get focused on a reasonable initial goal, reproduce one of the two experiments documented in these pages: 4ID principals and zFilter principal.
Those experiments allow you to easily put your full name in the payload of XIP packets. Save the dump file that holds the your-full-name packet, and add the number of this packet (first column shown by Wireshark) in the name of the dump file. You can use this file to show us, or someone else, that you have reproduced those experiments.
Alternating between these two challenges helps. Got stuck in a step of an experiment? Put it aside and read more stuff on the wiki. Are things getting too abstract? Go back to the experiment, or try another experiment. Gauge yourself as you go; if you are not having fun, something is wrong!
Did you get so stuck that you are not making progress toward addressing any of the two challenges? Or, do you want to follow our discussions? Join us at Google Groups Linux XIA to stay in sync with the project, ask questions, and discuss your ideas.
If you live in Boston, consider attending our weekly meetings at the Hariri Institute on Mondays at 10am to get involved. We meet most weeks, but not all, so you can check when the next meeting is and the agenda for that day by reading our mailing list cited above, or checking out our calendar. Please announce yourself on the mailing list before you come so we can grant you access to the institute. In case you do not live in Boston, you can join our meetings through Google Hangout. You must request access to these Hangouts on the mailing list since they are not public.
While you are getting started in Linux XIA, write down your questions, ideas, and suggestions. When you find or figure out the answer to one of your questions, or obtain it from someone else, add it to your log book. We would be happy to include your questions and answers in our FAQ page. Your ideas and suggestions to improve this wiki or any other component of this project are also welcome.
All pages of this wiki are listed in the box "Pages" on the right corner of this page. The following pages describe How to install and How to set up Linux XIA. If you prefer to download a virtual machine ready for development, check out page Setting up an XIA development environment. After installing Linux XIA, the page Testing XIA with an echo server shows you how to run an echo server. If you are ready to code, you'll want to read How to write a principal, Debugging the Linux kernel, and XIA Linux Containers (XLXC). Unless there is a clear reason for writing C code in a coding style other than the one used in the Linux kernel, please follow Linux's coding style. You find the description of this style here.
Finally, welcome aboard!