Skip to content

di-unipi-socc/dips

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dips-logo

Declarative Provisioning of Virtual Network Function Chains in Intent-based Networks.

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.

How To  files

  1. Download or clone this repository. Make sure you have SWI-Prolog installed.

  2. 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
  3. Execute the main query:

    :- dips(IntentId, Output).

    where IntentId is the unique ID of the intent to be processed, and Output is the output of the reasoner. Be sure to set the correct NumberOfUsers that the intent will serve in the intent/4fact, located in the data/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, and
    • UP 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, and
    • Actual is the actual value obtained by the respective placement.

Output Example  files

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))])].

Contributors  files

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages