aboutsummaryrefslogtreecommitdiffstats
path: root/metis/ccnx/forwarder/metis/README.txt
blob: 37c6306ac5bd5d46f872589b61bb0e6c9cdbf539 (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
/*
 * Copyright (c) 2017 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.
 */

=================
Metis (mythology)
Metis was the the Titaness of wisdom and deep thought. The Greek word
"metis" meant a quality that combined wisdom and cunning.
=================

Metis is the CCNx 1.0 forwarder.  It uses a modular design so adding new
encapsulations, forwarding behavior, or event dispatching is
well-defined and has minimum (or no) side effects.

=================
Building

"make" will create "libmetis.a" and "metis".  The library is used by other
parts of Libccnx, such as Transport testing and the mobile builds.  The
executable "metis" is for command-line invocation of a forwarding daemon.

Metis uses a few things from parc/algol and ccnx/common.

Metis uses the LongBow XUnit test framework. "make check" will run the tests.

Metis is built with Libevent 2.0 for the dispatcher.  Libevent is visible in the
code in the following modules.  To use a different event dispatcher, these modules
would need to be updated: metisDispatcher.c, metisStreamBuffer.c, metisMessage.c,
metis_StreamConnection.c

=================
Code Layout

Each directory has its code and headers along with a test/ subdirectory with
LongBow unit tests.

config/
config/test
- Forwarder configuration, from a file or CLI or web
  The default telnet port is 2001.
  The default web port is 2002.

core/
core/test
- The forwarder (metisForwarder) that bundles the whole thing and the event
  dispatcher (metisDispatcher).  Also includes various utility classes, such as
  MetisMessage that wraps all messages inside the forwarder.

io/
io/test/
- I/O related primatives.  These include "listeners" that monitor for specific types
  of incoming packets.  io/ includes tunnels, ip overlays, and direct L2 encapsulation.

messenger/
messenger/test/
- event messages within the router, such as notificaitons when an interface
  comes up or goes down.

platforms/
- platform specific functions, such as dealing with interfaces and
  direct Ethernet encapsulation.  The files in here implement function
  prototypes (usually in core/ or io/), and are tested with unit tests of those
  prototypes.  So, there is no platforms/test/ directory.

processor/
processor/test/
- The message processor.  Forwards Interests and objects.

strategies/
strategies/test/
- Forwarding strategies.  Each FIB entry indicates the strategy that should
  be used to forward an interest among its entries.

libmetis.a
- The output library

test/
- These are system-level tests