package frenetic
Install
Dune Dependency
Authors
Maintainers
Sources
md5=baf754df13a759c32f2c86a1b6f328da
sha512=80140900e7009ccab14b25e244fe7edab87d858676f8a4b3799b4fea16825013cf68363fe5faec71dd54ba825bb4ea2f812c2c666390948ab217ffa75d9cbd29
Description
Published: 09 Nov 2021
README
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:
- OCaml
- Python
- REST and JSON (i.e., any programming language!)
Getting Started
Installation
- Install OPAM, version 2.0 or higher.
Switch to OCaml version 4.11.0 or greater:
opam switch 4.11.0
Install dune:
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
Build Frenetic
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.
Contributing
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
Credits
See Frenetic Members and Support
License
Frenetic is released under the GNU Lesser Public License, version 3. Details
Dependencies (22)
-
yojson
>= "1.7.0"
-
tcpip
>= "6.3.0" & < "7.0.0"
-
sexplib
>= "v0.14.0" & < "v0.15"
-
sedlex
>= "2.4"
-
ppx_deriving
>= "5.1"
-
ppx_cstruct
>= "5.2.0"
-
ppx_jane
>= "v0.14.0" & < "v0.15"
-
open
>= "0.2.1"
-
ocamlgraph
>= "2.0.0"
-
mparser-re
>= "1.3"
-
mparser
>= "1.3"
-
menhir
>= "20210419"
-
ipaddr
>= "5.2.0"
-
cstruct-sexp
>= "6.0.1"
-
cstruct
>= "6.0.1"
-
core
>= "v0.14.0" & < "v0.15"
-
cohttp-async
>= "4.0.0"
-
cohttp
>= "4.0.0"
-
base64
>= "3.5.0"
-
async
>= "v0.14.0" & < "v0.15"
-
dune
>= "2.0"
-
ocaml
>= "4.11.0"
Dev Dependencies (1)
-
odoc
with-doc
Used by
None
Conflicts
None