Welcome to Frenetic
The languages used to program networks today lack modern features. Programming them is a complicated and error-prone task, and outages and infiltrations are frequent. Frenetic is an open-source Software Defined Network (SDN) controller platform designed to make SDN programming easy, modular, and semantically correct, based on programming languages with the following essential features:
- High-level abstractions that give programmers direct control over the network, allowing them to specify what they want the network to do without worrying about how to implement it.
- Modular constructs that facilitate compositional reasoning about programs.
- Portability, allowing programs written for one platform to be reused with different devices.
- Rigorous semantic foundations that precisely document the meaning of the language and provide a solid platform for mechanical program analysis tools.
You can build Frenetic-based network applications with:
- REST and JSON (i.e., any programming language!)
Install OPAM, version 2.0 or higher.
Switch to OCaml version 4.06.0 or greater:
opam switch 4.06.0
opam install dune
Install required OCaml dependencies. Note that dune can compute the list of dependencies,
dune external-lib-deps --missing @all
and you can install each using OPAM---for example:
opam install ocamlgraph
make && make install
(Optional) install Mininet
Hello World in SDN
The following instructions assume a Linux host with Mininet installed.
Start up a terminal window.
Start up a Mininet sample network with a switch and 2 hosts:
$ sudo mn --topo=single,2 --controller=remote
Try pinging the host h2 from the host h1:
mininet> h1 ping h2
Unfortunately, the ping won't work because you don't have an SDN network program in place! Press CTRL-C to stop the pinging.
Start up another terminal window and start up Frenetic:
$ frenetic http-controller --verbosity debug
In a third terminal window, start up the example program for the Python repeater:
$ python -m frenetic.examples.repeater
Now, back in the window running Mininet, the ping should now succeed:
mininet> h1 ping h2
Congratulations! You now have a working Software Defined Network.
Where to Go From Here
- Learn Frenetic programming in Python from the Frenetic Programmers Guide
- Scan the Quick Start guides in the Wiki
- Try some Python examples, see Example Applications in Python
- Learn Frenetic programming in OCaml from the Frenetic Tutorial
- Learn the theory behind Frenetic by reading the papers at http://frenetic-lang.org
- See examples of production Frenetic-based SDN's at https://github.com/coscin/coscin-app and https://github.com/coscin/gates.
- Consult the Frenetic API documentation.
Frenetic is an open source project, and we encourage you to contribute!
- File Issues and Feature Requests in Github Issues
- Join the Frenetic Mailing List for more in-depth guidance
Frenetic is released under the GNU Lesser Public License, version 3. Details