Coder Social home page Coder Social logo

pviotti / ccnsfq Goto Github PK

View Code? Open in Web Editor NEW
1.0 2.0 0.0 136 KB

A SFQ CCNx-aware packet scheduler for the Linux kernel.

License: GNU General Public License v3.0

JavaScript 0.69% C 96.35% Shell 2.96%
ccnx content-centric-networking packet-scheduler

ccnsfq's Introduction

The ccnsfq scheduler is a qdisc-like Linux packet scheduler that adapts the characteristics of the SFQ (Stochastic Fair Queueing) scheduler in order to provide CCNx flow isolation.
In this context, a CCNx flow is identified by the CCNx name (including the file version) written on the CCNx header, and the type of CCNx packet (i.e. Interest or Data).

This packet scheduler was developed in 2010, as a collateral effort for my M.Sc. thesis in computers and communication networks at PoliTo and Telecom ParisTech, during a six months intership at Orange Labs.

For the performance results obtained using this scheduler, please refer to my M.Sc. thesis.

Features and requirements

  • tested on Linux 2.6.32 (Ubuntu 10.4, 32bit)
  • works with CCNx over UDP and supports also one level of IP tunneling
  • the binary parsing to extrapolate the CCNx name is performed using the functions provided by the CCNx prototype version 0.2+git04/2010 (they have been included in a self-containing C file named parser.c beside the ccnsfq scheduler module itself)
  • all the non-CCNx packets are queued in a single separate queue

The ccnsfq_hash function computes hash digests that are used to distinguish different CCNx flows.
All the functions needed to parse the packets have been taken from the CCNx prototype version 0.2+git04/2010 and included in a self-containing C file named parser.c which is referenced by the ccnsfq module.

A simple add-on in the placed in the tc_ccnsfq folder allows the tc tool to recognize the new scheduler and print some useful information about it.

To build and install the kernel module you can use conf.sh.

What does this scheduler provide?

  • work conserving scheduling service
  • per-CCNx flow queuing (flow isolation)
  • max-min fairness (i.e. maximizes the minimum bandwidth allocation)
  • protection against variable frame size unfairness (using a quantum, as in DRR)

It does not provide any flow based prioritization.

Known bugs

It does not correctly handle IP fragmentation of CCNx packets, so the IP fragments are treated as belonging to separate non-CCNx flows. Thus to make it work correctly you should publish files (e.g. using ccnputfile) having small chunck size.

Licence

Copyright 2010 Paolo Viotti [email protected].

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

For the licensing details see the COPYING file in this repository.

ccnsfq's People

Contributors

pviotti avatar

Stargazers

 avatar

Watchers

 avatar  avatar

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.