DIPS methodology is described and assessed in:
Jacopo Massa, Stefano Forti, Federica Paganelli, Patrizio Dazzi, Antonio Brogi
Declarative Provisioning of Virtual Network Function Chains in Intent-based Networks.,
IEEE 9th International Conference on Network Softwarization (NetSoft), 2023.
DIPS is a Prolog tool that exploits a declarative methodology for modelling and processing VNF-based service provisioning intents. DIPS enables users (i.e. application providers) to specify their desired VNF chain requirements in a high-level language that captures their intent, such as the type of service to be provided, possible location constraints (e.g. at the edge), Quality of Service (QoS) (e.g. latency and bandwidth), but also non-functional requirements (e.g. privacy and logging). DIPS leverages Prolog inference to translate intents into provisioning specifications.
-
Download or clone this repository. Make sure you have SWI-Prolog installed.
-
In the project folder, run the following command on the command line, to access the SWI-Prolog console and load the main file:
swipl dips.pl
-
Execute the main query:
:- dips(IntentId, Output).
where
IntentId
is the unique ID of the intent to be processed, andOutput
is the output of the reasoner. Be sure to set the correct NumberOfUsers that the intent will serve in theintent/4
fact, located in thedata/services/<service_name>.pl
file.Output
is a list of tuples, where each tuple is of the form(L, Placement, UP)
:L
is the number of unsatisfied properties (i.e. the number of properties that do not meet expectations)Placement
is the placement of the VNF chain, andUP
is the list of unsatisfied properties.
UP
is also a list of tuples, where each tuple is of the form(Property, Desired, Actual)
:Property
that is not satisfied,Desired
is the desired value for that property, andActual
is the actual value obtained by the respective placement.
Output = [(0, [on(encVF, s, gateway), on(edgeGamingVF, l, edge1), on(encVF, s, edge1), on(logVF, s, cloud1), on(cloudGamingVF, m, cloud1)], []),
(0, [on(encVF, s, gateway), on(edgeGamingVF, l, edge1), on(encVF, s, edge1), on(logVF, s, cloud1), on(cloudGamingVF, m, cloud2)], []),
…
(1, [on(encVF, s, gateway), on(edgeGamingVF, l, edge2), on(encVF, s, gateway), on(logVF, s, cloud2), on(cloudGamingVF, m, cloud1)],
[(bandwidth, desired(100), actual(30))]),
(1, [on(encVF, s, gateway), on(edgeGamingVF, l, edge2), on(encVF, s, gateway), on(logVF, s, cloud2), on(cloudGamingVF, m, cloud2)],
[(bandwidth, desired(100), actual(30))])].
- Jacopo Massa (corresponding author)
- Stefano Forti
- Federica Paganelli
- Patrizio Dazzi
- Antonio Brogi