Difference between revisions of "HICN"

From fd.io
Jump to: navigation, search
(hICN Applications)
 
(91 intermediate revisions by 2 users not shown)
Line 15: Line 15:
 
* Alberto Compagno
 
* Alberto Compagno
 
* Jacques Samain
 
* Jacques Samain
 +
* Angelo Mantellini
 +
* Olivier Roques
 
}}
 
}}
  
Line 34: Line 36:
 
*4. A transport library compatible with both  client and server forwarders implementing transport protocols.
 
*4. A transport library compatible with both  client and server forwarders implementing transport protocols.
  
== Getting Started ==
+
A presentation of hICN at IETF IntArea WG is available on [https://youtu.be/PlC0xdk38tc Video] with the relative [https://datatracker.ietf.org/meeting/102/materials/slides-102-intarea-hybrid-icn-ipv6-00.pdf Slides]
  
The hICN stack is available for the following platforms:
 
  
*1. [[HICN/Linux]]
+
== Presentations ==
*2. [[HICN/MacOS]]
+
*3. [[HICN/Windows]]
+
*4. [[HICN/Android]]
+
  
== For developers ==
+
[[File:Kubecon.png|480px| link=https://www.youtube.com/watch?v=LZEZX6z98Ic]]
  
The hicn-stack repository is available from gerrit:
+
[https://www.slideshare.net/LucaMuscariello/introduction-to-hybrid-informationcentric-networking Slide Deck on the Introduction]
<pre>
+
git clone https://gerrit.fd.io/r/hicn
+
</pre>
+
  
There is a mirror on github:
+
[https://www.slideshare.net/LucaMuscariello/a-transport-layer-and-socket-api-for-hicn-design-implementation-and-performance-analysis Slide Deck on Transport]
<pre>
+
git clone https://github.com/FDio/hicn.git
+
</pre>
+
  
It is possible to submit a patch with the following steps:
+
[https://fd.io/latest/singles/hicn/ FD.io Blog Post]
  
*1 open an issue on [https://jira.fd.io/projects/HICN  fd.io Jira] and take the issue number
+
==Supported Platform ==
*2 create a new branch with the command <pre>git checkout -b <jira issue number></pre>
+
*3 add to the modified files to the patch with <pre>git add -u</pre> if there are not new files, or <pre>git add <list new files></pre> if there are new files
+
*4 commit the patch with <pre>git commit -s</pre> and put a comment with the issue number taken from [https://jira.fd.io/projects/HICN  fd.io Jira]
+
*5 push the patch on [https://gerrit.fd.io gerrit] for the review with <pre>git review</pre>
+
*6 add a reviewer on [https://gerrit.fd.io gerrit] code review page.
+
  
If a modification of non merged patch is needed, it is possible to resubmit the patch with:
 
*1 add to the modified files to the patch with <pre>git add -u</pre>
 
*2 modify the commit of the new patch with <pre>git commit -s --amend</pre>
 
*3 push the patch on gerrit for the review with <pre>git review</pre>
 
  
An account on [https://identity.linuxfoundation.org/ Linux Foundation] is necessary.
+
{| style="border-spacing: 2px; border: 1px solid darkgray;"
 +
! style="width: 140px;" | Linux
 +
! style="width: 150px;" | Android
 +
! style="width: 130px;" | macOS
 +
! style="width: 130px;" | Windows
 +
|-
 +
|- style="text-align: center;"
 +
| style="border: 1px solid #777777;"|
 +
[[File:Linux.png|120px| link=https://github.com/cisco-open/hicn-sdk]]
 +
| style="border: 1px solid #777777;"|
 +
[[File:Android.svg|120px|link=https://github.com/cisco-open/hicn-sdk]]
 +
| style="border: 1px solid #777777;"|
 +
[[File:MacOS_logo_(2017).svg|120px|link=https://github.com/cisco-open/hicn-sdk]]
 +
| style="border: 1px solid #777777;"|
 +
[[File:Windows.png|120px|link=https://github.com/cisco-open/hicn-sdk]]
 +
|- style="text-align: center;"
 +
|}
  
If you do not want your patch to be merged, append DO_NOT_MERGE to the Jira issue ID.
 
  
 +
==More Resources ==
  
Other resources related to the hICN project can be found at [https://github.com/icn-team github icn-team]
+
{| style="border-spacing: 2px; border: 1px solid darkgray;"
 +
! style="width: 140px;" | Docker Hub
 +
! style="width: 140px;" | Slack Channel
 +
! style="width: 140px;" | GitHub FDio Sync
 +
! style="width: 140px;" | GitHub SDKs
 +
|-
 +
|- style="text-align: center;"
 +
| style="border: 1px solid #777777;"|
 +
[[File:Docker.png|120px|link=https://github.com/orgs/cisco-open/packages]]
 +
| style="border: 1px solid #777777;"|
 +
[[File:Screen Shot 2019-09-26 at 17.38.39.png|120px|link=http://fdio-project.slack.com]]
 +
| style="border: 1px solid #777777;"|
 +
[[File:GitHub Logo.png|120px|link=https://github.com/FDio/hicn]]
 +
| style="border: 1px solid #777777;"|
 +
[[File:GitHub Logo.png|120px|link=https://github.com/cisco-open/hicn-sdk]]
 +
|}
  
It is possible to submit a patch with the following steps:
+
==Architecture Documentation ==
  
*1 open an issue on [https://jira.fd.io/projects/HICN  fd.io Jira] and take the issue number
+
{| style="border-spacing: 2px; border: 1px solid darkgray;"
*2 go to the icn-team github repository and fork it
+
! style="width: 140px;" | IETF work
*3 clone on your pc the forked project with <pre>git clone https://github.com/<account name>/<project name>.git</pre>
+
! style="width: 140px;" | Publications
*4 enter in the folder of the cloned project and create a branch with
+
! style="width: 140px;" | Read the docs
<pre>
+
|-
cd <project name>
+
|- style="text-align: center;"
git checkout -b <new-branch-name>
+
| style="border: 1px solid #777777;"|
</pre>
+
[[File:Ietf-logo.original.png|120px| link=https://icn-team.github.io/internet-drafts/]]
*5 modify the code and push the modification with
+
| style="border: 1px solid #777777;"|
<pre>
+
[[File:Pub.jpeg|120px|link=HICN/pub]]
git commit -am "<message>"
+
| style="border: 1px solid #777777;"|
git push origin <new-branch-name>
+
[[File:Readthedocs.png|120px|link=https://hicn.readthedocs.io]]
</pre>
+
|}
*6 go to the icn-team github project page and click on '''pull request''' and after on '''New pull request''' and after on '''compare across forks''' and select as head repository the branch on your personal github account.
+
*7 click on '''Create new pull request''', leave an exhaustive comment, the link to the [https://jira.fd.io/projects/HICN  fd.io Jira issue] and click on '''Create pull request'''
+
  
 +
==For Developers==
  
[https://jira.fd.io/secure/Dashboard.jspa?selectPageId=10900  hICN Kanban boards] (Must have a Linux Foundation account).
+
{| style="border-spacing: 2px; border: 1px solid darkgray;"
 
+
! style="width: 140px;" | Submit Patches
== News ==
+
! style="width: 140px;" | Bug tracker
 
+
! style="width: 140px;" | Kanban Board
[https://fd.io/2019/02/introducing-hybrid-information-centric-networking-hicn-a-new-fd-io-project/ FD.io Blog Post]
+
! style="width: 140px;" | Sonarcloud Static Scan
 
+
[https://trac.ietf.org/trac/ietf/meeting/wiki/104hackathon IETF 104 Hackathon]
+
 
+
[https://fdiominisummiteu19.sched.com/ FD.io mini summit]
+
 
+
 
+
== Internet Drafts ==
+
[https://icn-team.gitlab.io/internet-drafts  IETF I-D]
+
 
+
Sources
+
https://gitlab.com/icn-team/internet-drafts
+
 
+
 
+
 
+
Presentation of hICN at IETF IntArea WG
+
[https://datatracker.ietf.org/meeting/102/materials/slides-102-intarea-hybrid-icn-ipv6-00.pdf Slides]
+
and [https://youtu.be/PlC0xdk38tc Video]
+
 
+
== Meetings ==
+
A Slack space is available to discuss about hICN development.
+
 
+
[https://fdio-hicn.slack.com  Fd.io hICN Slack Space ]
+
 
+
Meetings can also be launched by using Zoom integrated to the Slack space.
+
 
+
 
+
 
+
The git repo is also synced to github at
+
 
+
https://github.com/FDio/hicn
+
 
+
Also available on Google Play Store
+
 
+
https://play.google.com/store/apps/developer?id=ICN+Team&hl=en
+
 
+
 
+
 
+
{| class="wikitable"
+
! Folder
+
! Description
+
! Documentation
+
|-
+
| lib (C11)
+
| Core support library
+
| [https://docs.fd.io/hicn/19.04/ core lib]
+
|-
+
| hicn-plugin (POSIX C)
+
| VPP plugin. You need to know about [[VPP]]
+
| [https://github.com/FDio/hicn/tree/master/hicn-plugin VPP plugin]
+
|-
+
| hicn-light (C11)
+
| Lightweight packet forwarder. It is a portable forwarder for most used client devices such as macOS, Windows, Android, iOS, Linux.
+
| [https://github.com/FDio/hicn/tree/master/hicn-light hicn light]
+
|-
+
| libtransport (C++11)
+
| Library that contains transport protocol implementations as well as a socket API.
+
| [https://github.com/FDio/hicn/tree/master/libtransport Transport]
+
|-
+
| utils
+
| Tools for testing
+
|
+
 
|-
 
|-
| apps
+
|- style="text-align: center;"
| Application examples using hicn stack
+
| style="border: 1px solid #777777;"|
|
+
[[File:Code.png|120px| link=HICN/Contribute]]
 +
| style="border: 1px solid #777777;"|
 +
[[File:Jira.png|120px|link=https://jira.fd.io/projects/HICN]]
 +
| style="border: 1px solid #777777;"|
 +
[[File:Kanban.png|120px|link=https://jira.fd.io/secure/Dashboard.jspa?selectPageId=10900]]
 +
| style="border: 1px solid #777777;"|
 +
[[File:Sonarcloud.png|120px|link=https://sonarcloud.io/project/overview?id=fdio-hicn]]
 
|}
 
|}
  
== Supported Platform ==
+
== HowTo ==
<pre>
+
- Ubuntu 16.04 LTS
+
- Ubuntu 18.04 LTS
+
- Debian Stable/Testing
+
- Red Hat Enterprise Linux 7
+
- CentOS 7
+
- Android 8
+
- iOS 12
+
- macOS 10.12
+
- Windows 10
+
</pre>
+
  
 +
All infra issues require to file a ticket to the Linux Foundation via the following page.
  
== hICN vRouter and vSwitch ==
+
[https://jira.linuxfoundation.org/servicedesk/customer/portals  Linux Foundation Issue manager ]
 
+
Work in progress:
+
* hicn vRouter: FRR, Sysrepo, Netopeer server, hICN vSwitch in the same Docker.
+
* hicn vSwitch in a docker container.
+
 
+
https://hub.docker.com/r/icnteam/vrouter
+
https://hub.docker.com/r/icnteam/hicn_vswitch
+
 
+
<pre>
+
docker pull icnteam/hicn_vswitch
+
</pre>
+
 
+
Provides a docker image with hicn VPP plugin and NETCONF/YANG hicn API.
+
 
+
The YANG model can be retrieved from
+
 
+
https://github.com/FDio/hicn/blob/master/utils/sysrepo-plugins/yang/hicn/hicn.yang
+
 
+
 
+
<pre>
+
docker pull icnteam/vhost
+
</pre>
+
 
+
== Tutorials ==
+
  
 
[[HICN/hICN_Howtos| hICN Howtos]]
 
[[HICN/hICN_Howtos| hICN Howtos]]
  
 
+
==Release management ==
 
+
==Current Release ==
+
Current release is 19.08 and is available on [https://packagecloud.io/fdio/release  Package Cloud]
+
 
+
==Releases management ==
+
  
 
hICN releases are distributed every quarter (End of Jan, Apr, Jul, Oct) based on calendar versioning , i.e. YY.MM.
 
hICN releases are distributed every quarter (End of Jan, Apr, Jul, Oct) based on calendar versioning , i.e. YY.MM.
Line 221: Line 140:
 
keep it in sync with the newly released VPP distribution.
 
keep it in sync with the newly released VPP distribution.
 
The server stack of hICN project, based on VPP,  is guaranteed to work with the latest stable VPP release only.
 
The server stack of hICN project, based on VPP,  is guaranteed to work with the latest stable VPP release only.
 +
 +
[https://jira.fd.io/projects/HICN?selectedItem=com.atlassian.jira.jira-projects-plugin%3Arelease-page&status=released-unreleased, Releases on Jira]
  
 
The client stack is unaffected by VPP release management.
 
The client stack is unaffected by VPP release management.
Line 226: Line 147:
 
[[File:Hicn release management.png|center|hicn release management]]
 
[[File:Hicn release management.png|center|hicn release management]]
  
 
Packages are published for both the amd64 (Intel) and aarch64 (ARM) architectures. The packages are stored in the same repository so no special action is required to select your architecture.
 
 
Binary distributions are available on [https://packagecloud.io/fdio/release  Package Cloud]
 
for:
 
 
<pre>
 
- Ubuntu 16.04 LTS (amd64, aarch64)
 
- Ubuntu 18.04 LTS (amd64, aarch64)
 
- CentOS 7 (x86_64, aarch64)
 
</pre>
 
  
 
== Bibliography ==
 
== Bibliography ==
 +
* [0] Enabling ICN in the Internet Protocol: Analysis and Evaluation of the Hybrid-ICN Architecture Giovanna Carofiglio (Cisco Systems), Luca Muscariello (Cisco Systems), Jordan Augé (Cisco Systems), Michele Papalini (Cisco Systems), Mauro Sardara (Cisco Systems), Alberto Compagno (Cisco Systems) In Proc. of ACM SIGCOMM ICN 2019  [https://conferences.sigcomm.org/acm-icn/2019/proceedings/icn19-14.pdf]
 
*[1] Muscariello, L., Carofiglio, G., Auge, J., and M. Papalini, "Hybrid Information-Centric Networking", [https://tools.ietf.org/html/draft-muscariello-intarea-hicn-01 draft-muscariello-intarea-hicn-01] (work in progress), December 2018.
 
*[1] Muscariello, L., Carofiglio, G., Auge, J., and M. Papalini, "Hybrid Information-Centric Networking", [https://tools.ietf.org/html/draft-muscariello-intarea-hicn-01 draft-muscariello-intarea-hicn-01] (work in progress), December 2018.
 
*[2] Auge, J., Carofiglio, G., Muscariello, L., and M. Papalini, "Anchorless mobility through hICN" draft-auge-dmm-hicn-mobility-01 (work in progress), December 2018.
 
*[2] Auge, J., Carofiglio, G., Muscariello, L., and M. Papalini, "Anchorless mobility through hICN" draft-auge-dmm-hicn-mobility-01 (work in progress), December 2018.

Latest revision as of 08:47, 27 January 2023

HICN banner.png


hICN Facts

Project Lead: Luca Muscariello
Committers:

  • Luca Muscariello
  • Michele Papalini
  • Jordan Augé
  • Mauro Sardara
  • Alberto Compagno
  • Jacques Samain
  • Angelo Mantellini
  • Olivier Roques

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

Introduction

Hybrid ICN is an architecture that brings ICN into IPv6 as described in [1]. By doing that, hicn allows to generalize IPv6 networking by using location-independent name-based networking. This is made either at the network layer and at the transport layer by also providing name-based sockets to applications.

hicn allows to reuse existing IPv6 protocol and architectures, to extend them and deploy hybrid solutions based on the use case and application needs. Moreover, hicn can exploit hardware and software implementations heavily based on IP, making much simpler insertion of the technology in current networks, current applications and design future applications reusing what the industry already provides in terms of on the shelf components.

hicn is composed of network and transport stack for a variety of platforms. It supports end-host operating systems by using a portable and lightweight forwarder in C11 and a server oriented network forwarder based on VPP. The transport stack is implemented as a shared library written in C++11 where different transport protocols can be implemented based on the application needs. The early release will support a reliable transport protocol that is throughput optimal (à la TCP) and a transport protocol that can carry audio/video for real-time communications. The transport library provides an API for application that is based on INET socket API with in addition a post-socket API based on [5],[6],[7]. Both network forwarders will be equipped of binary APIs to provide a CLI as well data-model driven management features.

The project will have strong interactions with other fdio projects such as VPP, CICN in the first place and with DMM in the future.

Several applications will be supported from early releases such as HTTP, RTP where many-to-many communications, mobility and multi-homing is important. Some relevant applications include, but are not limited to, MPEG-DASH, WebRTC, heterogenous access (LTE/WiFi), mobile edge offloading (V2X, IoT), mobility management ([2],[3],[4])and cloud-native applications (service-mesh, micro-services communications).

In more detail, early releases would include:

  • 1. A core library that reflects the Internet draft specifications in [1];
  • 2. A forwarder implemented as a VPP plugin (server);
  • 3. A portable lightweight forwarder (client);
  • 4. A transport library compatible with both client and server forwarders implementing transport protocols.

A presentation of hICN at IETF IntArea WG is available on Video with the relative Slides


Presentations

Kubecon.png

Slide Deck on the Introduction

Slide Deck on Transport

FD.io Blog Post

Supported Platform

Linux Android macOS Windows

Linux.png

Android.svg

MacOS logo (2017).svg

Windows.png


More Resources

Docker Hub Slack Channel GitHub FDio Sync GitHub SDKs

Docker.png

Screen Shot 2019-09-26 at 17.38.39.png

GitHub Logo.png

GitHub Logo.png

Architecture Documentation

IETF work Publications Read the docs

Ietf-logo.original.png

Pub.jpeg

Readthedocs.png

For Developers

Submit Patches Bug tracker Kanban Board Sonarcloud Static Scan

Code.png

Jira.png

Kanban.png

Sonarcloud.png

HowTo

All infra issues require to file a ticket to the Linux Foundation via the following page.

Linux Foundation Issue manager

hICN Howtos

Release management

hICN releases are distributed every quarter (End of Jan, Apr, Jul, Oct) based on calendar versioning , i.e. YY.MM. The master branch is always tagged with the latest release which is the latest VPP stable release. As soon as a new VPP release is distributed the hICN master branch will merge code from development branches and keep it in sync with the newly released VPP distribution. The server stack of hICN project, based on VPP, is guaranteed to work with the latest stable VPP release only.

Releases on Jira

The client stack is unaffected by VPP release management.

hicn release management


Bibliography

  • [0] Enabling ICN in the Internet Protocol: Analysis and Evaluation of the Hybrid-ICN Architecture Giovanna Carofiglio (Cisco Systems), Luca Muscariello (Cisco Systems), Jordan Augé (Cisco Systems), Michele Papalini (Cisco Systems), Mauro Sardara (Cisco Systems), Alberto Compagno (Cisco Systems) In Proc. of ACM SIGCOMM ICN 2019 [1]
  • [1] Muscariello, L., Carofiglio, G., Auge, J., and M. Papalini, "Hybrid Information-Centric Networking", draft-muscariello-intarea-hicn-01 (work in progress), December 2018.
  • [2] Auge, J., Carofiglio, G., Muscariello, L., and M. Papalini, "Anchorless mobility through hICN" draft-auge-dmm-hicn-mobility-01 (work in progress), December 2018.
  • [3] Auge, J., Carofiglio, G., Muscariello, L., and M. Papalini, "Anchorless mobility management through hICN (hICN-AMM): Deployment options" draft-auge-hicn-mobility-deployment-options-01 (work in progress), December 2018.
  • [4] Bogineni K., Akhavain A., Herbert T., Farinacci T., et al. "Optimized Mobile User Plane Solutions for 5G" draft-bogineni-dmm-optimized-mobile-user-plane-01 (work in progress), December 2018.
  • [5] Pauly, T., Trammell, B., Brunstrom, A., Fairhurst, G., Perkins, C., Tiesel, P., and C. Wood, "An Architecture for Transport Services", draft-ietf-taps-arch-02 (work in progress), October 2018.
  • [6] Brunstrom, A., Pauly, T., Enghardt, T., Grinnemo, K., Jones, T., Tiesel, P., Perkins, C., and M. Welzl, "Implementing Interfaces to Transport Services", draft- ietf-taps-impl-02 (work in progress), October 2018.
  • [7] Trammell, B., Welzl, M., Enghardt, T., Fairhurst, G., Kuehlewind, M., Perkins, C., Tiesel, P., and C. Wood, "An Abstract Application Layer Interface to Transport Services", draft-ietf-taps-interface-02 (work in progress), October 2018.