Difference between revisions of "Project Proposals/JVPP"

From fd.io
Jump to: navigation, search
(Created page with "Category:Project Proposal <!-- Please note: fd.io code is to be licensed under the Apache 2.0 license unless an exception is approved by the board --> == Name == JVPP - J...")
 
(Administrata)
 
(6 intermediate revisions by the same user not shown)
Line 12: Line 12:
  
 
== Description ==
 
== Description ==
 +
 +
=== Architecture ===
 +
 
JVPP is a VPP module providing Java APIs for VPP. Java APIs provide a way for a JVM application to access and manage VPP. Main use of JVPP is in Honeycomb project. Honeycomb relies heavily on JVPP to access and manage VPP.
 
JVPP is a VPP module providing Java APIs for VPP. Java APIs provide a way for a JVM application to access and manage VPP. Main use of JVPP is in Honeycomb project. Honeycomb relies heavily on JVPP to access and manage VPP.
[[File:overview.jpg|center|603px|JVPP overview]]
+
 
 +
JVPP contains of manually crafted code together with generated classes. Classes are being generated by python based on VPP API json files. Generated code represents various Java classes (Callbacks, callfacades, DTOs, types ...) and jni header files.
 +
 
 +
[[File:Overview_of_JVPP_usage.jpg|center|603px|JVPP overview]]
 +
<div align="center">Overview of JVPP usage</div>
 +
 
 +
=== Plugin Support ===
 +
VppRegistry opens connection to VPP (VppConnection) and manages JVPP plugins. Each plugin needs to be registered in the VppRegistry. Registration involves plugin initialization (providing JNI implementation with JVppCallback reference, VPP client identifier and VPP shared memory queue address).
 +
 
 +
[[File:Architecture-JVPP.jpg|center|563px|Architecture of JVPP]]
 +
<div align="center">JVPP - Architecture</div>
 +
 
 +
API user sends message by calling a method of appropriate plugin interface. The call is delegated to JNI implementation provided by the particular plugin. When JNI code receives reply, it invokes callback method of JVppCallback
 +
that corresponds to the received message reply.
 +
 
 +
[[File:JVPP Architecture example.jpg|center|673px|JVppCore as an example of JVPP plugin architecture]]
 +
<div align="center">JVppCore as an example of JVPP plugin architecture</div>
 +
Components marked with an asterisk (*) contain manually crafted code, which in addition to generated classes form jvpp. Exception applies to Callbacks and DTOs, since there are manually crafted marker interfaces in callback and dto package (dto/JVppRequest, dto/JVppReply, dto/JVppDump, dto/JVppReplyDump, callback/JVppCallback)
  
 
== Scope ==
 
== Scope ==
 +
Project main goal is to provide Java API for VPP, to enable access and management of VPP.
 +
 +
'''JVPP project scope:'''
 +
* jvpp-gen
 +
** Java API generator, allows Java applications to interact with VPP.
 +
* jvpp-registry
 +
** Provides common features: registration of plugins, managing VPP conection, callback handling, common functions...
 +
* jvpp-plugins
 +
** Provides Java APIs for VPP core APIs and several VPP plugin APIs. Currently supported plugins: Acl, Nat, Nsh, GTPU, PPPoE
 +
 +
'''Out of scope:'''
 +
* Vpp-vapi
 +
** VPP binary APIs, part of the base VPP project.
 +
 
<!-- Project scope.  The project scope should be well defined.  It should be possible from the scope to crisply answer whether something belongs or not within the scope of this particular project.  Scopes should not be overly broad.  A Project scope must also lie within the overall scope set by the board for projects in fd.io:
 
<!-- Project scope.  The project scope should be well defined.  It should be possible from the scope to crisply answer whether something belongs or not within the scope of this particular project.  Scopes should not be overly broad.  A Project scope must also lie within the overall scope set by the board for projects in fd.io:
 
     - IO  
 
     - IO  
Line 33: Line 67:
  
 
== Initial Committers ==
 
== Initial Committers ==
* [mailto:mcmarada@cisco.com Michal Cmarada],
+
* [mailto:mcmarada@cisco.com Michal Cmarada], LF-ID: mcmarada,
* [mailto:margradz@gmail.com Marek Grądzki],
+
* [mailto:margradz@gmail.com Marek Grądzki], LF-ID: mgradzki,
* [mailto:Tibor.Kral@pantheon.tech Tibor Kral],
+
* [mailto:Tibor.Kral@pantheon.tech Tibor Kral], LF-ID: tibor.kral
* [mailto:raszabo@cisco.com Rastislav Szabo],
+
* [mailto:raszabo@cisco.com Rastislav Szabo], LF-ID: raszabo
* [mailto:jtollet@cisco.com Jerome Tollet],
+
* [mailto:jtollet@cisco.com Jerome Tollet], LF-ID: jtollet
  
 
== Vendor Neutral ==
 
== Vendor Neutral ==
<!--
+
No current or expected issues with vendor neutrality.
The goal here is to capture the degree of vendor neutrality of the code.
+
The concerns are two fold: avoiding trademark issues, and maintaining openness.
+
  
For this reason, use of vendor names should be purely functional, and only if necessary to
 
reasonably communicate functional information to the user.
 
 
Acceptable Examples:
 
Indicating the presence of particular hardware
 
Indicating drivers for particular hardware
 
Indicating integration with particular technologies.
 
 
Unacceptable Examples:
 
Use of vendor trademarks or product names purely for marketing purposes.
 
 
Please describe any such issues here.
 
-->
 
 
== Meets Board Policy (including IPR, being within Board defined Scope etc) ==
 
== Meets Board Policy (including IPR, being within Board defined Scope etc) ==
  
Line 63: Line 82:
 
== Administrata ==
 
== Administrata ==
 
* Request for Project proposal consideration
 
* Request for Project proposal consideration
** Email: (place link to email to TSC proposing project, this can be obtained from [https://lists.fd.io/pipermail/tsc/ TSC Archives]
+
** Email: [https://lists.fd.io/g/tsc/topic/jvpp_proposal/28733531?p=,,,20,0,0,0::recentpostdate%2Fsticky,,,20,2,0,28733531 JVPP proposal]
** Date: (date proposed, makes it simpler to calculate the pre-requisite 2 week time period of gestation before being permitted to be voted on)
+
** Date: 12th of December 2018.

Latest revision as of 15:33, 12 December 2018


Name

JVPP - Java API for VPP

Project Contact Name and Email

Repository Name

jvpp

Description

Architecture

JVPP is a VPP module providing Java APIs for VPP. Java APIs provide a way for a JVM application to access and manage VPP. Main use of JVPP is in Honeycomb project. Honeycomb relies heavily on JVPP to access and manage VPP.

JVPP contains of manually crafted code together with generated classes. Classes are being generated by python based on VPP API json files. Generated code represents various Java classes (Callbacks, callfacades, DTOs, types ...) and jni header files.

JVPP overview
Overview of JVPP usage

Plugin Support

VppRegistry opens connection to VPP (VppConnection) and manages JVPP plugins. Each plugin needs to be registered in the VppRegistry. Registration involves plugin initialization (providing JNI implementation with JVppCallback reference, VPP client identifier and VPP shared memory queue address).

Architecture of JVPP
JVPP - Architecture

API user sends message by calling a method of appropriate plugin interface. The call is delegated to JNI implementation provided by the particular plugin. When JNI code receives reply, it invokes callback method of JVppCallback that corresponds to the received message reply.

JVppCore as an example of JVPP plugin architecture
JVppCore as an example of JVPP plugin architecture

Components marked with an asterisk (*) contain manually crafted code, which in addition to generated classes form jvpp. Exception applies to Callbacks and DTOs, since there are manually crafted marker interfaces in callback and dto package (dto/JVppRequest, dto/JVppReply, dto/JVppDump, dto/JVppReplyDump, callback/JVppCallback)

Scope

Project main goal is to provide Java API for VPP, to enable access and management of VPP.

JVPP project scope:

  • jvpp-gen
    • Java API generator, allows Java applications to interact with VPP.
  • jvpp-registry
    • Provides common features: registration of plugins, managing VPP conection, callback handling, common functions...
  • jvpp-plugins
    • Provides Java APIs for VPP core APIs and several VPP plugin APIs. Currently supported plugins: Acl, Nat, Nsh, GTPU, PPPoE

Out of scope:

  • Vpp-vapi
    • VPP binary APIs, part of the base VPP project.


Initial Committers

Vendor Neutral

No current or expected issues with vendor neutrality.

Meets Board Policy (including IPR, being within Board defined Scope etc)

Meets board policy as expressed in Technical Community Charter and IP Policy

Administrata

  • Request for Project proposal consideration