summaryrefslogtreecommitdiffstats
path: root/docs/source/lib.md
blob: 58f23b5109a6c8318cfa0d269edb98b893ad2237 (plain)
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
The Hybrid ICN Core Library
==============================

## Introduction

libhicn provides a support library coded in C designed to help developers embed
Hybrid ICN (hICN) functionalities in their applications (eg. forwarder, socket
API, etc.). Its purpose is to follow the hICN specification for which it
provides a reference implementation, abstracting the user from all internal
mechanisms, and offering an API independent of the packet format (eg. IPv4 or
IPv6). The library is designed to be portable across both desktop and
mobile platforms, and we currently aim at supporting Linux, Android, OSX and
iOS, by writing the necessary adapters to realize hICN functionality in
userspace according to the available APIs and permissions that each system
offers.

The library consists in several layers:
- the core library (hicn.h) provides a standard hICN packet format, as well as
an API allowing manipulation of packet headers;
- an hICN helper, allowing an hICN stack to be built in userspace in a portable
way, based on TUN devices and accessible though file descriptors;
- a network layer allow the sending an receiving of hICN packets on those file
descriptors, implementing both source and destination address translation as
required by the hICN mechanisms;
- finally, a "transport" API allows the forging of dummy interest and data
packets.

A commandline interface (hicnc) is also provided that uses the library and can
for instance be used as a test traffic generator. This interface can be run as
either a consumer, a producer, or a simple forwarder.

## Folder content

CMakeLists.txt          CMkake global build file
doc                     Package documentation
README.md               This file
src
    base.h		Base definitions for hICN implementation
    CMakeLists.txt      CMake library build file
    common.{h,c}	Harmonization layer across supported platforms
    compat.{h,c}	Compatibility layer for former API
    error.{h,c}		Error management files
    header.h		hICN header definitions
    hicn.h		Master include file
    mapme.{h,c}		MAP-Me : anchorless producer mobility mechanisms 
    name.{h,c}		hICN naming conventions and name processing + IP helpers
    ops.{h,c}		Protocol-independent hICN operations
    protocol/*		Protocol headers + protocol-dependent implementations
    protocol.h		Common file for protocols

## Using libhicn

### Platforms ###

libhicn has been tested in:

- Ubuntu 16.04 LTS (x86_64)
- Ubuntu 18.04 LTS (x86_64)
- Debian Stable/Testing
- Red Hat Enterprise Linux 7
- CentOS 7
- Android 8
- iOS 12
- macOS 10.12
- Windows 10

Other platforms and architectures may work.

### Dependencies

Build dependencies:

- c11 ( clang / gcc )
- CMake 3.4

Basic dependencies: None

## Installation

You can either use released packages, or compile libhicn from sources.

### Release mode

mkdir build
cd build
cmake ..
make
sudo make install

### Debug mode

mkdir debug
cd debug
cmake .. -DCMAKE_BUILD_TYPE=Debug
make
sudo make install

## License

This software is distributed under the following license:

```
Copyright (c) 2017-2019 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.
```