Git Product home page Git Product logo

route-rs

A multithreaded, modular software defined router library, written in rust. Safe, fast, and extensible.

Original click modular router: https://github.com/kohler/click Click Paper: https://dl.acm.org/citation.cfm?id=354874

We plan to follow the general concepts of Click, but we want to build Route-rs the way that Click would be built today. Namely:

  • Concurrency by default (Using Tokio-rs as a runtime)
  • Type safe (Written in Rust)
  • Easily Extensible
  • Runs in userspace

Much like the original Click, units of computation are loosely defined around processors, which are objects that implement the process function. Processors are wrapped by ProcessorLinks, which is what the library will use to chain computation together, producing a functioning, modular, software-defined router. Processors come in either synchronous or asynchronous flavors. In general, synchronous processors should be used for short transformations; asynchronous processors are intended to carry out more computationally heavy tasks. They may also carry out tasks that wait for some period of time before returning, such as an processor that calls out to a seperate database to make a classificiation.

The router is laid out in a pull fashion, where the asynchronous processors drive the synchronous processors ahead of them, and the asynchronous processors are polled by the runtime. The last processor in the chain, generally a to_device processor that communicates with the networking stack, drives much of the router by trying to fetch packets from the processors connected to its input ports. This provides a nice feature; back-pressure. The processors stop processing packets when they have nowhere to put them, since most processors are "lazy" and do not attempt to fetch new packets unless asked by the processor connected to their output.

route-rs's Projects

route-rs icon route-rs

A multithreaded, modular software defined router library, written in rust. Safe, fast, and extensible.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.