1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
|
# Code structure
## Introduction
hicn is an open source implementation of Cisco's hICN. It includes a network
stack, that implements ICN forwarding path in IPv6, and a transport stack that
implements two main transport protocols and a socket API. The transport
protocols provide one reliable transport service implementation and a real-time
transport service for audio/video media.
## Directory layout
| Directory name | Description |
| -------------- | --------------------------------------------------------- |
| lib | Core support library |
| hicn-plugin | VPP plugin |
| hicn-light | Lightweight packet forwarder |
| libtransport | Support library with transport layer and API |
| utils | Tools for testing |
| apps | Application examples using hicn stack |
| ctrl | Tools and libraries for network management and control |
hicn plugin is a VPP plugin that implement hicn packet processing as specified
in [1] The transport library is used to implement the hicn host stack and makes
use of libmemif as high performance connector between transport and the network
stack. The transport library makes use of VPP binary API to configure the local
namespace (local face management).
## Release note
The current master branch provides the latest release which is compatible with
the latest VPP stable. No other VPP releases are supported nor maintained. At
every new VPP release distribution hicn master branch is updated to work with
the latest stable release. All previous stable releases are discontinued and not
maintained. The user who is interested in a specific release can always checkout
the right code tree by searching the latest commit under a given git tag
carrying the release version.
The Hybrid ICN software distribution can be installed for several platforms. The
network stack comes in two different implementations: one scalable based on VPP
and one portable based on IPC and sockets.
The transport stack is a unique library that is used for both the scalable and
portable network stacks.
## Supported platforms
- Ubuntu 20.04 LTS (amd64, arm64)
- Android 10 (amd64, arm64)
- iOS 15
- macOS 12.3
- Windows 10
Other platforms and architectures may work.
You can either use released packages, or compile hicn from sources.
### Ubuntu
```bash
curl -s https://packagecloud.io/install/repositories/fdio/release/script.deb.sh | sudo bash
```
The following debian packages for Ubuntu are available dor amd64 and arm64
```bash
facemgr-dev
facemgr
hicn-apps-dev
hicn-apps
hicn-light
hicn-plugin-dev
hicn-plugin
libhicn-dev
libhicn
libhicnctrl-dev
libhicnctrl-modules
libhicnctrl
libhicntransport-dev
libhicntransport-io-modules
libhicntransport
```
### macOS
```bash
brew tap icn-team/hicn-tap
brew install hicn
```
or
```bash
git clone https://github.com/FDio/hicn.git
$ cd hicn
$ OPENSSL_ROOT_DIR=/usr/local/opt/openssl\@1.1 make build-release
```
### Android
hICN is built as a native library for the Android NDK which are packaged
as Android archives AAR and made available in a Maven repository in
Github Packages in
<https://github.com/orgs/icn-team/packages>
To build from sources, refer to the Android SDK in
<https://github.com/icn-team/android-sdk>
Install the applications via the Google Play Store
<https://play.google.com/store/apps/developer?id=ICN+Team>
### iOS
Clone this distro
```bash
git clone https://github.com/icn-team/ios-sdk.git
cd ios-sdk
```
Compile everything (dependencies and hICN modules)
```bash
make update
make all
```
Compile everything with Qt (dependencies, hICN modules and Viper dependencies)
```bash
make update
make all_qt
```
### Windows
Install vcpkg
```bash
git clone https://github.com/icn-team/windows-sdk
.\windows-sdk\scripts\init.bat
```
```bash
cd windows-sdk
make all
```
### Docker
Several docker images are nightly built with the latest software for Ubuntu 18
LTS (amd64/arm64), and available on docker hub at
<https://hub.docker.com/u/icnteam>.
The following images are nightly built and maintained.
```bash
docker pull icnteam/vswitch:amd64
docker pull icnteam/vswitch:arm64
docker pull icnteam/vserver:amd64
docker pull icnteam/vserver:arm64
docker pull icnteam/vhttpproxy:amd64
docker pull icnteam/vhttpproxy:arm64
```
Other Dockerfiles are included in the main git repo for development.
### Vagrant
Vagrant boxes for a virtual switch are available at
<https://app.vagrantup.com/icnteam>
```bash
vagrant box add icnteam/vswitch
```
Supported providers are libvirt, vmware and virtualbox.
## References
Giovanna Carofiglio, Luca Muscariello, Jordan Augé, Michele Papalini, Mauro
Sardara, and Alberto Compagno. 2019. Enabling ICN in the Internet Protocol:
Analysis and Evaluation of the Hybrid-ICN Architecture. In Proceedings of the
6th ACM Conference on Information-Centric Networking (ICN '19). Association for
Computing Machinery, New York, NY, USA, 55–66.
DOI: https://doi.org/10.1145/3357150.3357394
## License
This software is distributed under the following license:
```bash
Copyright (c) 2019-2022 Cisco and/or its affiliates.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at:
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```
|