Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/frenetic-lang/frenetic
The Frenetic Programming Language and Runtime System
https://github.com/frenetic-lang/frenetic
Last synced: about 1 month ago
JSON representation
The Frenetic Programming Language and Runtime System
- Host: GitHub
- URL: https://github.com/frenetic-lang/frenetic
- Owner: frenetic-lang
- License: other
- Created: 2012-12-20T12:59:47.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2023-11-14T20:04:35.000Z (7 months ago)
- Last Synced: 2024-05-07T16:05:34.438Z (about 2 months ago)
- Language: OCaml
- Homepage: http://www.frenetic-lang.org/
- Size: 98.4 MB
- Stars: 218
- Watchers: 41
- Forks: 52
- Open Issues: 21
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Lists
- awesome-sdn - Frenetic - The Frenetic Programming Language and Runtime System (Uncategorized / Uncategorized)
- awesome-sdn - Frenetic - The Frenetic Programming Language and Runtime System (Software Projects / Network Programming Language)
- awesome-sdn - Frenetic - The Frenetic Programming Language and Runtime System (Uncategorized / Uncategorized)
README
# Welcome to Frenetic
[![Build Status](https://travis-ci.org/frenetic-lang/frenetic.svg?branch=master)](https://travis-ci.org/frenetic-lang/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
1. Install [OPAM](https://opam.ocaml.org/), version 2.0 or higher.
2. Switch to OCaml version 4.11.0 or greater:
```
opam switch 4.11.0
```3. Install [dune](https://dune.build/):
```
opam install dune
```4. 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
```
5. Build Frenetic
```
make && make install
```
6. (Optional) install [Mininet](http://mininet.org/)
### Hello World in SDNThe following instructions assume a Linux host with Mininet installed.
1. Start up a terminal window.2. Start up a Mininet sample network with a switch and 2 hosts:
```
$ sudo mn --topo=single,2 --controller=remote
```3. 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.
4. Start up another terminal window and start up Frenetic:```
$ frenetic http-controller --verbosity debug
```
5. In a third terminal window, start up the example program for the Python repeater:```
$ python -m frenetic.examples.repeater
```
6. 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](https://github.com/frenetic-lang/manual/blob/master/programmers_guide/frenetic_programmers_guide.pdf)
* Scan the Quick Start guides in the [Wiki](https://github.com/frenetic-lang/frenetic/wiki)
* Try some Python examples, see [Example Applications in Python](https://github.com/frenetic-lang/frenetic/wiki/Python-Examples)
* Learn Frenetic programming in OCaml from the [Frenetic Tutorial](http://frenetic-lang.github.io/tutorials/Introduction/)
* Learn the theory behind Frenetic by reading the papers at [http://frenetic-lang.org](http://frenetic-lang.org)
* See examples of production Frenetic-based SDN's at [https://github.com/coscin/coscin-app](https://github.com/coscin/coscin-app) and [https://github.com/coscin/gates](https://github.com/coscin/gates).
* Consult the Frenetic [API documentation](http://frenetic-lang.github.io/frenetic/).## Contributing
Frenetic is an open source project, and we encourage you to contribute!
* File Issues and Feature Requests in [Github Issues](https://github.com/frenetic-lang/frenetic/issues)
* Join the [Frenetic Mailing List](http://lists.frenetic-lang.org/mailman/listinfo/frenetic-ocaml) for more in-depth guidance## Credits
See [Frenetic Members](http://frenetic-lang.org/#members) and [Support](http://frenetic-lang.org/#support)
## License
Frenetic is released under the GNU Lesser Public License, version 3. [Details](https://github.com/frenetic-lang/frenetic/blob/master/LICENSE)