Difference between revisions of "Cicn"

From fd.io
Jump to: navigation, search
 
(60 intermediate revisions by 5 users not shown)
Line 6: Line 6:
 
|committers=
 
|committers=
 
* Luca Muscariello
 
* Luca Muscariello
* Jim Gibson
 
 
* Jordan Augé
 
* Jordan Augé
 
* Michele Papalini
 
* Michele Papalini
 
* Mauro Sardara
 
* Mauro Sardara
 
* Alberto Compagno
 
* Alberto Compagno
 +
* Angelo Mantellini
 
}}
 
}}
 +
 +
== News ==
 +
 +
[[Tutorial at ACM SIGCOMM ICN in Berlin, 26th of September 2017]]
 +
 +
 +
[[File:Google_Play_Store.png|thumb|link=https://play.google.com/store/apps/developer?id=ICN+Team]]
 +
 +
[[File:Apple_Store.png|thumb| link=https://itunes.apple.com/us/developer/cisco-systems/id1355635538?mt=8]]
  
 
== Get Involved ==
 
== Get Involved ==
 +
 +
* [[CICN/Meetings]]
  
 
== Introduction ==
 
== Introduction ==
Information-centric networking (ICN) is an approach to evolve the Internet infrastructure to directly support data-centric and location independent communications by introducing uniquely named data as a core Internet principle. Data access becomes independent from location, application and storage, enabling in-network caching and and anchor-less mobility. The expected benefits are improved efficiency, better scalability with respect to information/bandwidth demand and better robustness in challenging communication scenarios. These concepts are known under different terms, including but not limited to: Content-Centric Networking (CCN), Named Data Networking (NDN), the network of information (Netinf) and Publish/Subscribe Networking (PSIRP).
+
Information-centric networking (ICN) is an approach to evolve the Internet infrastructure to directly support data-centric and location independent communications by introducing uniquely named data as a core communications principle. Data access becomes independent from location, application and storage, enabling in-network caching and and anchor-less mobility. The expected benefits are improved efficiency, better scalability with respect to information/bandwidth demand and better robustness in challenging communication scenarios. These concepts are known under different terms, including but not limited to: Content-Centric Networking (CCN), Named Data Networking (NDN), the network of information (Netinf) and Publish/Subscribe Networking (PSIRP).
  
In this project the focus is on the Content-Centric Networking implementation (CCNx 1.0) that is under specification in a number of documents of the IRTF ICN research group [1], [2]. The seminal papers describing the CCN architecture [3] and NDN [4] report in great detail the characteristics of the two systems. Differences among the two architectures, especially between CCNx 1.0 and NDN are minor and currently object of a converge effort at the IRTF [5]. The current project scope is on CCNx 1.0 in view of the evolutions driven by the harmonization effort. The architecture evolution is community driven and the implementation would focus on the harmonization work made by the community as a whole. The project will also provide a number of applications that can be used by the community to demonstrate the concept as well as run experiments at scale to evaluate the advantages and benefits of the ICN concept in concrete use cases like video delivery across 5G networks.
+
In this project the focus is on the Content-Centric Networking implementation (CCNx 1.0) that is under specification in a number of documents of the IRTF ICN research group [1], [2]. The seminal papers describing the CCN architecture [3] and NDN [4] report in great detail the characteristics of the two systems. Differences among the two architectures, especially between CCNx 1.0 and NDN are minor and currently object of a converge effort at the IRTF [5]. The current project scope is on CCNx 1.0 in view of the evolutions driven by the harmonization effort. The architecture evolution is community driven and the implementation would focus on the harmonization work made by the community as a whole. The project will also provide a number of applications that can be used by the community to demonstrate the concept as well as run experiments at scale to evaluate the advantages and benefits of the ICN concept in concrete use cases like video delivery and real time communications over 5G networks.
  
 
The project scope includes CCN network architecture implementation: packet processing as well as networking socket API. Packet processing will be made available through two main forwarders one based on the VPP framework and one based on sockets to deploy CCN in non VPP environments. The project will focus on the CCNx 1.0 specification [1] as a reference implementation, but would evolve by keeping track of the work done in the convergence group at the IRTF [5]. While the main focus is on the VPP plugin, the socket based forwarder will be used to enable end-to-end chains testing, supporting end devices that do not support VPP. Moreover, for the VPP forwarder, CCNx 1.0 packets will be transported using IPv4 encapsulation in the first place. This encapsulation will constitute the main focus for the VPP plugin while the socket-based forwarder could also support Ethernet encapsulation as an additional transport example.
 
The project scope includes CCN network architecture implementation: packet processing as well as networking socket API. Packet processing will be made available through two main forwarders one based on the VPP framework and one based on sockets to deploy CCN in non VPP environments. The project will focus on the CCNx 1.0 specification [1] as a reference implementation, but would evolve by keeping track of the work done in the convergence group at the IRTF [5]. While the main focus is on the VPP plugin, the socket based forwarder will be used to enable end-to-end chains testing, supporting end devices that do not support VPP. Moreover, for the VPP forwarder, CCNx 1.0 packets will be transported using IPv4 encapsulation in the first place. This encapsulation will constitute the main focus for the VPP plugin while the socket-based forwarder could also support Ethernet encapsulation as an additional transport example.
Line 24: Line 35:
  
 
In more detail, early releases would include:
 
In more detail, early releases would include:
*1. [[A VPP forwarder plugin]],
+
*1. A VPP forwarder plugin,
 
*2. A socket-based forwarder,  
 
*2. A socket-based forwarder,  
 
*3. The consumer/producer API,
 
*3. The consumer/producer API,
Line 30: Line 41:
 
*5. Examples of CCN applications, including but not limited to an end-to-end example for HTTP ABR video delivery (player and server),
 
*5. Examples of CCN applications, including but not limited to an end-to-end example for HTTP ABR video delivery (player and server),
 
*6. Tools suitable to assist with development and testing.
 
*6. Tools suitable to assist with development and testing.
 +
 +
== Code organisation ==
 +
 +
The repository is organized in several orphaned branches (technically they have a common empty root), each one containing a sub-project.
 +
The naming convention naming branches is described in this document.
 +
 +
 +
== Branch naming conventions ==
 +
 +
Project cicn contains several sub-projects. Sub-project ''subp'' has a master branch with name origin/subp/master. All commits associated to sub-project subp will belong to the orphaned branch origin/subp. All branches associated to subp must be named as subp/branch-name.
 +
 +
== Sub projects contained in the cicn git repository ==
 +
 +
# [https://github.com/FDio/cicn/blob/cicn-plugin/master/README.md cicn-plugin]
 +
# [https://github.com/FDio/cicn/blob/sb-forwarder/master/README.md sb-forwarder]
 +
# [https://github.com/FDio/cicn/blob/libicnet/master/README.md libicnet]
 +
# [https://github.com/FDio/cicn/blob/cframework/master/libparc/README.md libparc]
 +
# [https://github.com/FDio/cicn/blob/cframework/master/longbow/README.md longbow]
 +
# [https://github.com/FDio/cicn/blob/ccnxlibs/master/libccnx-common/README.md ccnx-common]
 +
# [https://github.com/FDio/cicn/blob/ccnxlibs/master/libccnx-portal/README.md ccnx-portal]
 +
# [https://github.com/FDio/cicn/blob/ccnxlibs/master/libccnx-transport-rta/README.md ccnx-tranport-rta]
 +
# [[http-server]]
 +
# [[viper]]
 +
# [[vicn]]
 +
 +
== Sub projects description ==
 +
 +
{| class="wikitable"
 +
! Name
 +
! Description
 +
! Language and style
 +
! Binary distribution
 +
|-
 +
| 1. cicn-plugin
 +
| VPP forwarder
 +
| C GNU style
 +
| Ubuntu 16.04, CentOS 7
 +
|-
 +
| 2. sb-forwarder
 +
| socket-based forwarder
 +
| C99 Google style
 +
| Ubuntu 16.04,  CentOS 7, Android 8, iOS 11, macOS 10.13
 +
|-
 +
| 3. libicnet
 +
| socket API
 +
| C++11 Google style
 +
| Ubuntu 16.04,  CentOS 7, Android 8, iOS 11, macOS 10.13
 +
|-
 +
| 4. cframework
 +
| C framework
 +
| C99 Google  style
 +
| Ubuntu 16.04,  CentOS 7, Android 8, iOS 11, macOS 10.13
 +
|-
 +
| 5. ccnxlibs
 +
| CCNx libraries
 +
| C99 Google  style
 +
| Ubuntu 16.04, CentOS 7, Android 8, iOS 11, macOS 10.13
 +
|-
 +
| 6. http-server
 +
| HTTP  server and proxy
 +
| C++11 Google style
 +
| Ubuntu 16.04, CentOS 7,  Android 8, iOS 11, macOS 10.13
 +
|-
 +
| 7. viper
 +
| Qt/QML video player
 +
| C++/QML Qt style
 +
| Ubuntu 16.04, CentOS 7, Android 8, iOS 11, macOS 10.13
 +
|-
 +
| 8. vicn
 +
| vICN framework
 +
| python-3 and bash
 +
| Ubuntu 16.04
 +
|}
 +
 +
== Examples: ==
 +
 +
* [[simple-vms|Setup a simple topology using VMs]]
 +
* [[dumbbell-vicn|Setup a Dumbbell topology using vICN]]
 +
* [[tutorial-icn17|VirtualBox configuration for FD.io Cicn tutorial at ACM ICN 17]]
 +
 +
== How to manage different master branches ==
 +
 +
It is suggested to clone each subproject branch in a different workspace to avoid error prone operations. The cicn git repo stores several projects which are independent one to another. While access control and isolation is guaranteed at a certain level by gerrit, using one single workspace is discouraged.
 +
 +
<pre>git clone -b cicn-plugin/master  https://gerrit.fd.io/r/cicn cicn-plugin;
 +
git clone -b sb-forwarder/master https://gerrit.fd.io/r/cicn sb-forwarder;
 +
git clone -b libicnet/master    https://gerrit.fd.io/r/cicn libicnet;
 +
git clone -b cframework/master  https://gerrit.fd.io/r/cicn cframework;
 +
git clone -b ccnxlibs/master    https://gerrit.fd.io/r/cicn ccnxlibs;
 +
git clone -b http-server/master  https://gerrit.fd.io/r/cicn http-server;
 +
git clone -b viper/master        https://gerrit.fd.io/r/cicn viper;
 +
git clone -b vicn/master        https://gerrit.fd.io/r/cicn vicn;
 +
git clone -b android-sdk/master  https://gerrit.fd.io/r/cicn android-sdk;</pre>
 +
=== For coders ===
 +
 +
By having multiple sub-projects in the same repo, it is highly recommended to use the following approach while using branches and pushing patch sets.
 +
 +
<pre>$ subp=cicn-plugin
 +
$ coder=<user>
 +
 +
$ git clone -b $subp/master ssh://$coder@gerrit.fd.io:29418/cicn $subp;
 +
$ scp -p -P 29418 $coder@gerrit.fd.io:hooks/commit-msg $subp/.git/hooks/;</pre>
 +
If you use an email alias like user+fdio@email.com that is registered in the gerrit frontend it is recommended to set the following kind of configuration.
 +
 +
<pre>$ email=<user>+fdio@<email.com>
 +
$ git config --local user.email &quot;$email&quot;
 +
$ git config --local alias.push-for-review &quot;push origin HEAD:refs/for/$subp/master&quot;</pre>
 +
The alias allows pushing for review without needing to specify the sub-project branch on the command line
 +
 +
<pre>$ git push-for-review</pre>
 +
 +
CICN committers will take care about code reviews before merging a patch set in the appropriate branch.
 +
 +
==Installing software from binary packages==
 +
 +
Cicn provides binary packages (deb/rpm/apk) for the following platforms:
 +
<pre>
 +
- Ubuntu 16.04 (Linux Foundation)
 +
- CentOS 7 (Linux Foundation)
 +
- Android 8 (Google Play Store)
 +
- iOS 11 (Apple Store)
 +
</pre>
 +
 +
The packages can be downloaded at the following links:
 +
 +
  code source repositories https://git.fd.io/cicn
 +
  apt repository: Ubuntu 16.04LTS https://nexus.fd.io/content/repositories/fd.io.master.ubuntu.xenial.main/
 +
  yum repository: CentOS 7 https://nexus.fd.io/content/repositories/fd.io.master.centos7/
 +
 +
Each subproject page in the wiki contains detailed instructions regarding the packages' installation, please refer to them if you want to get Cicn through apt/yum repositories.
  
 
== References ==
 
== References ==
*[1]  Marc Mosko et al. « CCNx Messages in TLV Format » https://tools.ietf.org/html/draft-irtf-icnrg-ccnxmessages-03.
+
*[1]  Marc Mosko et al. « CCNx Messages in TLV Format » https://datatracker.ietf.org/doc/draft-irtf-icnrg-ccnxsemantics/.
*[2] Marc Mosko et al. « CCNx Semantics », https://tools.ietf.org/html/draft-irtf-icnrg-ccnxsemantics-03.
+
*[2] Marc Mosko et al. « CCNx Semantics », https://datatracker.ietf.org/doc/draft-irtf-icnrg-ccnxsemantics/.
 
*[3] Van Jacobson et al. [http://conferences.sigcomm.org/co-next/2009/papers/Jacobson.pdf Networking Named Content], ACM SIGCOMM CoNexT 2009.
 
*[3] Van Jacobson et al. [http://conferences.sigcomm.org/co-next/2009/papers/Jacobson.pdf Networking Named Content], ACM SIGCOMM CoNexT 2009.
 
*[4] Van Jacobson et al. [https://dx.doi.org/10.1145%2F2656877.2656887 Named Data Networking], ACM SIGCOMM Computer Communications Review 2014.
 
*[4] Van Jacobson et al. [https://dx.doi.org/10.1145%2F2656877.2656887 Named Data Networking], ACM SIGCOMM Computer Communications Review 2014.
 
*[5] CCN/NDN Convergence Effort at IRTF ICN Research Group https://trac.ietf.org/trac/irtf/wiki/icnrg/convergence
 
*[5] CCN/NDN Convergence Effort at IRTF ICN Research Group https://trac.ietf.org/trac/irtf/wiki/icnrg/convergence
 
*[6] Information-Centric Networking Research Group (ICNRG) - https://trac.ietf.org/trac/irtf/wiki/icnrg
 
*[6] Information-Centric Networking Research Group (ICNRG) - https://trac.ietf.org/trac/irtf/wiki/icnrg
 +
*[7] Named-Data Networking Project (NDN) - https://named-data.net
 +
*[8] C. Westphal et al. RFC 7933 « Adaptive Video Streaming over Information-Centric Networking (ICN)»  https://datatracker.ietf.org/doc/rfc7933/
 +
*[9] Peter Gusev and Jeff Burke.  NDN-RTC: Real-Time Videoconferencing over Named Data Networking ACM-ICN '15 http://dx.doi.org/10.1145/2810156.2810176

Latest revision as of 16:50, 30 January 2020

CICN Facts

Project Lead: Luca Muscariello
Committers:

  • Luca Muscariello
  • Jordan Augé
  • Michele Papalini
  • Mauro Sardara
  • Alberto Compagno
  • Angelo Mantellini

Repository: git clone https://gerrit.fd.io/r/cicn
Mailing List: cicn-dev@lists.fd.io
Jenkins: jenkins silo
Gerrit Patches: code patches/reviews
Bugs: CICN bugs

News

Tutorial at ACM SIGCOMM ICN in Berlin, 26th of September 2017


Google Play Store.png
Apple Store.png

Get Involved

Introduction

Information-centric networking (ICN) is an approach to evolve the Internet infrastructure to directly support data-centric and location independent communications by introducing uniquely named data as a core communications principle. Data access becomes independent from location, application and storage, enabling in-network caching and and anchor-less mobility. The expected benefits are improved efficiency, better scalability with respect to information/bandwidth demand and better robustness in challenging communication scenarios. These concepts are known under different terms, including but not limited to: Content-Centric Networking (CCN), Named Data Networking (NDN), the network of information (Netinf) and Publish/Subscribe Networking (PSIRP).

In this project the focus is on the Content-Centric Networking implementation (CCNx 1.0) that is under specification in a number of documents of the IRTF ICN research group [1], [2]. The seminal papers describing the CCN architecture [3] and NDN [4] report in great detail the characteristics of the two systems. Differences among the two architectures, especially between CCNx 1.0 and NDN are minor and currently object of a converge effort at the IRTF [5]. The current project scope is on CCNx 1.0 in view of the evolutions driven by the harmonization effort. The architecture evolution is community driven and the implementation would focus on the harmonization work made by the community as a whole. The project will also provide a number of applications that can be used by the community to demonstrate the concept as well as run experiments at scale to evaluate the advantages and benefits of the ICN concept in concrete use cases like video delivery and real time communications over 5G networks.

The project scope includes CCN network architecture implementation: packet processing as well as networking socket API. Packet processing will be made available through two main forwarders one based on the VPP framework and one based on sockets to deploy CCN in non VPP environments. The project will focus on the CCNx 1.0 specification [1] as a reference implementation, but would evolve by keeping track of the work done in the convergence group at the IRTF [5]. While the main focus is on the VPP plugin, the socket based forwarder will be used to enable end-to-end chains testing, supporting end devices that do not support VPP. Moreover, for the VPP forwarder, CCNx 1.0 packets will be transported using IPv4 encapsulation in the first place. This encapsulation will constitute the main focus for the VPP plugin while the socket-based forwarder could also support Ethernet encapsulation as an additional transport example.


In more detail, early releases would include:

  • 1. A VPP forwarder plugin,
  • 2. A socket-based forwarder,
  • 3. The consumer/producer API,
  • 4. A number of support libraries,
  • 5. Examples of CCN applications, including but not limited to an end-to-end example for HTTP ABR video delivery (player and server),
  • 6. Tools suitable to assist with development and testing.

Code organisation

The repository is organized in several orphaned branches (technically they have a common empty root), each one containing a sub-project. The naming convention naming branches is described in this document.


Branch naming conventions

Project cicn contains several sub-projects. Sub-project subp has a master branch with name origin/subp/master. All commits associated to sub-project subp will belong to the orphaned branch origin/subp. All branches associated to subp must be named as subp/branch-name.

Sub projects contained in the cicn git repository

  1. cicn-plugin
  2. sb-forwarder
  3. libicnet
  4. libparc
  5. longbow
  6. ccnx-common
  7. ccnx-portal
  8. ccnx-tranport-rta
  9. http-server
  10. viper
  11. vicn

Sub projects description

Name Description Language and style Binary distribution
1. cicn-plugin VPP forwarder C GNU style Ubuntu 16.04, CentOS 7
2. sb-forwarder socket-based forwarder C99 Google style Ubuntu 16.04, CentOS 7, Android 8, iOS 11, macOS 10.13
3. libicnet socket API C++11 Google style Ubuntu 16.04, CentOS 7, Android 8, iOS 11, macOS 10.13
4. cframework C framework C99 Google style Ubuntu 16.04, CentOS 7, Android 8, iOS 11, macOS 10.13
5. ccnxlibs CCNx libraries C99 Google style Ubuntu 16.04, CentOS 7, Android 8, iOS 11, macOS 10.13
6. http-server HTTP server and proxy C++11 Google style Ubuntu 16.04, CentOS 7, Android 8, iOS 11, macOS 10.13
7. viper Qt/QML video player C++/QML Qt style Ubuntu 16.04, CentOS 7, Android 8, iOS 11, macOS 10.13
8. vicn vICN framework python-3 and bash Ubuntu 16.04

Examples:

How to manage different master branches

It is suggested to clone each subproject branch in a different workspace to avoid error prone operations. The cicn git repo stores several projects which are independent one to another. While access control and isolation is guaranteed at a certain level by gerrit, using one single workspace is discouraged.

git clone -b cicn-plugin/master  https://gerrit.fd.io/r/cicn cicn-plugin;
git clone -b sb-forwarder/master https://gerrit.fd.io/r/cicn sb-forwarder;
git clone -b libicnet/master     https://gerrit.fd.io/r/cicn libicnet;
git clone -b cframework/master   https://gerrit.fd.io/r/cicn cframework;
git clone -b ccnxlibs/master     https://gerrit.fd.io/r/cicn ccnxlibs;
git clone -b http-server/master  https://gerrit.fd.io/r/cicn http-server;
git clone -b viper/master        https://gerrit.fd.io/r/cicn viper;
git clone -b vicn/master         https://gerrit.fd.io/r/cicn vicn;
git clone -b android-sdk/master  https://gerrit.fd.io/r/cicn android-sdk;

For coders

By having multiple sub-projects in the same repo, it is highly recommended to use the following approach while using branches and pushing patch sets.

$ subp=cicn-plugin
$ coder=<user>

$ git clone -b $subp/master ssh://$coder@gerrit.fd.io:29418/cicn $subp;
$ scp -p -P 29418 $coder@gerrit.fd.io:hooks/commit-msg $subp/.git/hooks/;

If you use an email alias like user+fdio@email.com that is registered in the gerrit frontend it is recommended to set the following kind of configuration.

$ email=<user>+fdio@<email.com>
$ git config --local user.email "$email"
$ git config --local alias.push-for-review "push origin HEAD:refs/for/$subp/master"

The alias allows pushing for review without needing to specify the sub-project branch on the command line

$ git push-for-review

CICN committers will take care about code reviews before merging a patch set in the appropriate branch.

Installing software from binary packages

Cicn provides binary packages (deb/rpm/apk) for the following platforms:

- Ubuntu 16.04 (Linux Foundation)
- CentOS 7 (Linux Foundation)
- Android 8 (Google Play Store)
- iOS 11 (Apple Store)

The packages can be downloaded at the following links:

 code source repositories https://git.fd.io/cicn 
 apt repository: Ubuntu 16.04LTS https://nexus.fd.io/content/repositories/fd.io.master.ubuntu.xenial.main/
 yum repository: CentOS 7 https://nexus.fd.io/content/repositories/fd.io.master.centos7/

Each subproject page in the wiki contains detailed instructions regarding the packages' installation, please refer to them if you want to get Cicn through apt/yum repositories.

References