AdvancedNetworkingSystems / Prince

Licence: other
Implementing PopRouting

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to Prince

Coderchef Kitchen
The official repository for our programming kitchen which consists of 50+ delicious programming recipes having all the interesting ingredients ranging from dynamic programming, graph theory, linked lists and much more. All the articles contain beautiful images and some gif/video at times to help clear important concepts.
Stars: ✭ 306 (+2681.82%)
Mutual labels:  algorithm, graph
Competitive coding
This repository contains some useful codes, techniques, algorithms and problem solutions helpful in Competitive Coding.
Stars: ✭ 393 (+3472.73%)
Mutual labels:  algorithm, graph
Algorithms
Minimal examples of data structures and algorithms in Python
Stars: ✭ 20,123 (+182836.36%)
Mutual labels:  algorithm, graph
Javascript Datastructures Algorithms
📚 collection of JavaScript and TypeScript data structures and algorithms for education purposes. Source code bundle of JavaScript algorithms and data structures book
Stars: ✭ 3,221 (+29181.82%)
Mutual labels:  algorithm, graph
Chat
基于自然语言理解与机器学习的聊天机器人,支持多用户并发及自定义多轮对话
Stars: ✭ 516 (+4590.91%)
Mutual labels:  algorithm, graph
Data Structures Algorithms
My implementation of 85+ popular data structures and algorithms and interview questions in Python 3 and C++
Stars: ✭ 273 (+2381.82%)
Mutual labels:  algorithm, graph
Samples
Sample projects using Material, Graph, and Algorithm.
Stars: ✭ 386 (+3409.09%)
Mutual labels:  algorithm, graph
Graphview
Flutter GraphView is used to display data in graph structures. It can display Tree layout, Directed and Layered graph. Useful for Family Tree, Hierarchy View.
Stars: ✭ 152 (+1281.82%)
Mutual labels:  algorithm, graph
Algorithms
CLRS study. Codes are written with golang.
Stars: ✭ 482 (+4281.82%)
Mutual labels:  algorithm, graph
Causaldiscoverytoolbox
Package for causal inference in graphs and in the pairwise settings. Tools for graph structure recovery and dependencies are included.
Stars: ✭ 447 (+3963.64%)
Mutual labels:  algorithm, graph
Ngraph.path
Path finding in a graph
Stars: ✭ 2,545 (+23036.36%)
Mutual labels:  algorithm, graph
Goraph
Package goraph implements graph data structure and algorithms.
Stars: ✭ 635 (+5672.73%)
Mutual labels:  algorithm, graph
Interview Questions
List of all the Interview questions practiced from online resources and books
Stars: ✭ 187 (+1600%)
Mutual labels:  algorithm, graph
Struc2vec
This repository provides a reference implementation of struc2vec.
Stars: ✭ 291 (+2545.45%)
Mutual labels:  algorithm, graph
Leetcode
High-quality LeetCode solutions
Stars: ✭ 178 (+1518.18%)
Mutual labels:  algorithm, graph
Java Algorithms Implementation
Algorithms and Data Structures implemented in Java
Stars: ✭ 3,927 (+35600%)
Mutual labels:  algorithm, graph
Java Ds Algorithms
Data Structures and Algorithms in Java
Stars: ✭ 125 (+1036.36%)
Mutual labels:  algorithm, graph
Data Structures
Common data structures and algorithms implemented in JavaScript
Stars: ✭ 139 (+1163.64%)
Mutual labels:  algorithm, graph
Algodeck
An Open-Source Collection of 200+ Algorithmic Flash Cards to Help you Preparing your Algorithm & Data Structure Interview 💯
Stars: ✭ 4,441 (+40272.73%)
Mutual labels:  algorithm, graph
Learningmasteringalgorithms C
Mastering Algorithms with C 《算法精解:C语言描述》源码及Xcode工程、Linux工程
Stars: ✭ 615 (+5490.91%)
Mutual labels:  algorithm, graph

What is Prince:

Build Status

Prince is an open source implementation of the PopRouting Algorithm. It has been developed as a Google Summer of Code Project in collaboration with the University of Trento. PopRouting is an algorithm to calculate the optimal values for the messages timers of a link state routing protocol (OLSR, OSPF, etc). It fetches the topology data from the routing protocol, calculate the betweenness centrality for every node of the network and then push back the new timer's value. Currently supports OONF and OLSRd.

Using Prince on Openwrt / LEDE

Since v0.2 prince can be found in the LEDE/OpenWRT routing feeds.

opkg update
opkg install prince

Using Prince with OONF

Prince requires these plugins to work: remotecontrol, telnet, netjsoninfo.

This is a configuration example for OONF that works with prince:

[global]
      plugin remotecontrol

[log]
        stderr false
        file /var/log/olsrd2.log

[telnet]
	bindto	127.0.0.1
	allowed session 10

[remotecontrol]
	acl	default_accept

[interface=wlan0]
[interface=lo]

Using Prince with OLSRd

Prince requires these plugins to work: jsoninfo, poprouting.

This is a configuration example for OLSRd that works with prince:

DebugLevel  1
IpVersion 4
FIBMetric "flat"
LinkQualityFishEye  0


LoadPlugin "../olsrd/lib/jsoninfo/olsrd_jsoninfo.so.1.1"{
    PlParam "accept" "0.0.0.0"
    PlParam "port" "2009"
}

LoadPlugin "../olsrd/lib/poprouting/olsrd_poprouting.so.1.0"{
    PlParam "accept" "0.0.0.0"
    PlParam "port" "2008"
}

InterfaceDefaults {
    TcInterval 5.0
    HelloInterval   2.0
}

Interface "wlan0" {}

NB: LinkQualityFishEye must be set to 0 in order to PopRouting to works

Prince Configuration

Prince can be configured with a configuration file, this is an example:

{
  "proto":{
    "protocol": "oonf",
    "host": "127.0.0.1",
    "port": 2009,
    "timer_port": 2009,
    "refresh": 1,
    "log_file" : "",
    "json_type": "netjson"

  },
  "graph-parser":{
    "heuristic": 1,
    "weights": 0,
    "recursive": 1,
    "stop_unchanged": 0,
    "multithreaded": 1
  }
}

Proto

protocol specifies whether prince should interact with the routing daemon olsr or oonf.

host specify the address to reach the routing daemon, usually is localhost (127.0.0.1)

port is used to specify the port from where prince will pull the topology data

timer_port is used to specify the port to where prince will push the updated timers.

refresh specify the refresh rate at which prince will calculate the updated timers.

log_file is used to benchmark PRINCE and to check if the timers and the centrality are correct, do not use it in production.

json_type is used to specify which format of json topology we are parsing. It is used only by OLSRv1 plugin, supported values are: netjson or jsoninfo.

Graph Parser

heuristic specify whether graph_parser should use the heuristic described in this paper to optimize the centrality computation

weights specify whether graph_parser should use weights in the centrality computation

recursive

stop_unchanged

multithreaded specify whether graph parser should use multiple thread to compute the centrality

Development

Install the dependencies:

apt-get install libjson-c-dev

Make a build directory in the repo

mkdir build && cd build
cmake ..
make
sudo make install

Debug

Set the build type to debug, this will add gdb's debug symbols to the binary

cmake .. -DCMAKE_BUILD_TYPE=Debug

Release

Set the build type to release to ask the compiler for more error checking

cmake .. -DCMAKE_BUILD_TYPE=Release

You can include gdb's debug symbols in a release using

cmake .. -DCMAKE_BUILD_TYPE=ReleaseWithDebug
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].