B-JointSP is an optimization problem focusing on the joint scaling and placement (called embedding) of NFV network services, consisting of interconnected virtual network functions (VNFs). The exceptional about B-JointSP is its consideration of realistic, bidirectional network services, in which flows return to their sources. It even supports stateful VNFs, that need to be traversed by the same flows in both upstream and downstream direction. Furthermore, B-JointSP allows the reuse of VNFs across different network services and supports physical network functions.
If you use B-JointSP in your research, please cite our work:
Sevil Dräxler, Stefan Schneider, Holger Karl: "Scaling and Placing Bidirectional Services with Stateful Virtual and Physical Network Functions". IEEE Conference on Network Softwarization (NetSoft), Montreal, CA (2018)
Note: For the source code originally implemented and submitted to IEEE NetSoft 2018, refer to the corresponding release or branch. The master branch contains only the heuristic, not the MIP, and is greatly extended compared to the original code.
- March 2020: Allowed passing template, sources, fixed VNFs as objects directly (not just file paths)
- Feb 2019: Added end-to-end delay as result metric (not just total delay)
- Feb 2019: Added VNF delays to templates and to calculation of total delay
python setup.py install
Requires Python 3.5+
Type bjointsp -h
for usage help. This should print:
usage: bjointsp [-h] -n NETWORK -t TEMPLATE -s SOURCES [-f FIXED]
B-JointSP heuristic calculates an optimized placement
optional arguments:
-h, --help show this help message and exit
-n NETWORK, --network NETWORK
Network input file (.graphml)
-t TEMPLATE, --template TEMPLATE
Template input file (.yaml)
-s SOURCES, --sources SOURCES
Sources input file (.yaml)
-f FIXED, --fixed FIXED
Fixed instances input file (.yaml)
-p PREV_EMBEDDING, --prev PREV_EMBEDDING
Previous embedding input file (.yaml)
As an example, you can run the following command from the project root folder (where README.md is located):
bjointsp -n parameters/networks/Abilene.graphml -t parameters/templates/fw1chain.yaml -s parameters/sources/source0.yaml
This should start the heuristic and create a result in the results/bjointsp
directory in form of a yaml file.
The repository contains one result for the above command as an example.
Lead developer: Stefan Schneider
For questions or support, please use GitHub's issue system.