Difference between revisions of "HICN"
(→For developers) |
|||
Line 33: | Line 33: | ||
*3. A portable lightweight forwarder (client); | *3. A portable lightweight forwarder (client); | ||
*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 == | ||
+ | |||
+ | The hICN is available for the following platforms: | ||
+ | |||
+ | *1. [[Linux]] | ||
+ | |||
+ | <pre> | ||
+ | Install libparc | ||
+ | https://github.com/FDio/cicn/blob/cframework/master/libparc/README.md | ||
+ | </pre> | ||
+ | |||
== For developers == | == For developers == |
Revision as of 08:22, 26 September 2019
hICN Facts |
Project Lead: Luca Muscariello
Repository: git clone https://gerrit.fd.io/r/hicn |
Contents
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.
Getting Started
The hICN is available for the following platforms:
- 1. Linux
Install libparc https://github.com/FDio/cicn/blob/cframework/master/libparc/README.md
For developers
The hicn-stack repository is available from gerrit:
git clone https://gerrit.fd.io/r/hicn
There is a mirror on github:
git clone https://github.com/FDio/hicn.git
It is possible to submit a patch with the following steps:
- 1 open an issue on fd.io Jira and take the issue number
- 2 create a new branch with the command
git checkout -b <jira issue number>
- 3 add to the modified files to the patch with
git add -u
if there are not new files, orgit add <list new files>
if there are new files - 4 commit the patch with
git commit -s
and put a comment with the issue number taken from fd.io Jira - 5 push the patch on gerrit for the review with
git review
- 6 add a reviewer on 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
git add -u
- 2 modify the commit of the new patch with
git commit -s --amend
- 3 push the patch on gerrit for the review with
git review
An account on Linux Foundation is necessary.
If you do not want your patch to be merged, append DO_NOT_MERGE to the Jira issue ID.
Other resources related to the hICN project can be found at github icn-team
It is possible to submit a patch with the following steps:
- 1 open an issue on fd.io Jira and take the issue number
- 2 go to the icn-team github repository and fork it
- 3 clone on your pc the forked project with
git clone https://github.com/<account name>/<project name>.git
- 4 enter in the folder of the cloned project and create a branch with
cd <project name> git checkout -b <new-branch-name>
- 5 modify the code and push the modification with
git commit -am "<message>" git push origin <new-branch-name>
- 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 fd.io Jira issue and click on Create pull request
hICN Kanban boards (Must have a Linux Foundation account).
News
Internet Drafts
Sources https://gitlab.com/icn-team/internet-drafts
Presentation of hICN at IETF IntArea WG Slides and Video
Meetings
A Slack space is available to discuss about hICN development.
Meetings can also be launched by using Zoom integrated to the Slack space.
Getting Started
Install libparc https://github.com/FDio/cicn/blob/cframework/master/libparc/README.md
Linux
Build Dependencies (Libmemif)
$ git clone https://git.fd.io/vpp $ cd vpp/ $ git checkout v19.08 $ cd build-root/ $ mkdir build_libmemif; cd build_libmemif $ cmake ../../extras/libmemif/ -DCMAKE_INSTALL_PREFIX=/usr/${CMAKE_INSTALL_LIBDIR} $ make && sudo make install
Build
$ git clone https://git.fd.io/hicn $ cd hicn $ mkdir build; cd build $ cmake -DBUILD_HICNPLUGIN=ON -DBUILD_APPS=ON .. $ make
Repository for Ubuntu (16.04/18.04)
$ curl -s https://packagecloud.io/install/repositories/fdio/release/script.deb.sh | sudo bash $ sudo apt-get update $ sudo apt-get install hicn-light hicn-utils hicn-apps hicn-plugin
MacOS
Build
$ git clone https://git.fd.io/hicn $ cd hicn $ mkdir build; cd build $ cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl\@1.1 -DBUILD_APPS=ON .. $ make
HomeBrew Tap for macOS 10.14
$ brew tap icn-team/hicn-tap $ brew install hicn
Windows
Build
- Install Visual Studio 2017
- Install Windows 10 SDK
- Install Git
- Install CMake
$ git clone https://github.com/Microsoft/vcpkg.git $ cd vcpkg $ set vcpkg_path=%cd% $ .\bootstrap-vcpkg.bat $ .\vcpkg integrate install $ .\vcpkg install libevent:x64-windows $ .\vcpkg install openssl:x64-windows $ .\vcpkg install pthreads:x64-windows $ .\vcpkg install curl:x64-windows $ .\vcpkg install asio:x64-windows $ set PATH=%PATH%;%vcpkg_path%\installed\x64-windows\bin $ cd .. $ mkdir hicn-fdio $ cd hicn-fdio $ set hicn-fdio_path=%cd% $ git clone -b cframework/master https://gerrit.fd.io/r/cicn cframework $ cd cframework\libparc $ mkdir build $ cd build $ cmake .. -G"NMake Makefiles" -DCMAKE_TOOLCHAIN_FILE="%vcpkg_path%/scripts/buildsystems/vcpkg.cmake" ^ -DCMAKE_INSTALL_PREFIX="%hicn-fdio_path%/install" -DCMAKE_BUILD_TYPE="Release" $ nmake install $ cd ..\..\.. $ git clone https://gerrit.fd.io/r/hicn $ cd hicn $ mkdir build $ cd build $ cmake .. -G"NMake Makefiles" -DCMAKE_TOOLCHAIN_FILE="%vcpkg_path%/scripts/buildsystems/vcpkg.cmake" ^ -DCMAKE_INSTALL_PREFIX="%hicn-fdio_path%/install" -DLIBPARC_HOME="%hicn-fdio_path%/install" -DCMAKE_BUILD_TYPE="Release" $ nmake install
Android
The following guide is tested on Ubuntu and macOS
$ git clone https://github.com/icn-team/android-sdk.git $ cd android-sdk $ export ANDROID_ARCH="arm64" $ make all $ export ANDROID_ARCH="x86" $ make all # The hICN Distillery software will be installed in android-sdk/usr_aarch64 and android-sdk/usr_i686
The git repo is also synced to github at
Also available on Google Play Store
https://play.google.com/store/apps/developer?id=ICN+Team&hl=en
Folder | Description | Documentation |
---|---|---|
lib (C11) | Core support library | core lib |
hicn-plugin (POSIX C) | VPP plugin. You need to know about VPP | 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. | hicn light |
libtransport (C++11) | Library that contains transport protocol implementations as well as a socket API. | Transport |
utils | Tools for testing | |
apps | Application examples using hicn stack |
Supported Platform
- 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
hICN vRouter and vSwitch
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
docker pull icnteam/hicn_vswitch
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
docker pull icnteam/vhost
hICN Applications
TDA
Tutorials
Current Release
Current release is 19.08 and is available on Package Cloud
Releases 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.
The client stack is unaffected by VPP 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 Package Cloud for:
- Ubuntu 16.04 LTS (amd64, aarch64) - Ubuntu 18.04 LTS (amd64, aarch64) - CentOS 7 (x86_64, aarch64)
Bibliography
- [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.