forked from BillTheBest/MPLS-Linux
-
Notifications
You must be signed in to change notification settings - Fork 2
/
README
101 lines (64 loc) · 2.94 KB
/
README
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
---
MPLS BASICS:
Multi Protocol Label Switching (MPLS) represents a simple technology, which is
today indispensable in network cores. MPLS protocol adds a 32-bit header
(Figure 1) between the second and the third network layer headers.
Within these 32 bits, 20 bits are reserved for the label, 3 bits for
the Traffic Class (TC) field, 1 bit for the Bottom of Stack (S) field
and the remaining 8 bits are reserved for the Time to Live (TTL) field.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Label
| Label | Exp |S| TTL | Stack
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Entry
Label: Label Value, 20 bits
Exp: Experimental Use, 3 bits
S: Bottom of Stack, 1 bit
TTL: Time to Live, 8 bits
Figure 1
A traffic class carried by means of a MPLS packet is defined based on the TC field.
Definition of an S field enables assigning of several labels to the packets. In the
label grouping, only the lowest label, closest to the IP packet, has S bit set to 1.
All other labels in the label stack have S set to 0. TTL field is used just like a
TTL field of the IP packet.
---
BUILDING:
MPLS can be built as a kernel module, or it can be built in a kernel.
To build MPLS first you need to run:
$ make menuconfig
and enable MPLS compiling from:
Network setup -> Networking options -> MPLS (Experimental)
If you're running Debian based system, nice HOW-TO on compiling and installing custom kernel
can be found here:
https://help.ubuntu.com/community/Kernel/Compile
---
RUNNING:
To be able to run MPLS, you will need modified iproute2 programme which can be downloaded from:
https://github.com/i-maravic/iproute2
Creation of MPLS tunnel ingress points is done with:
# ip link add tunnel_name type mpls push 300 192.168.2.2
or with
# ip route add 1.2.3.4 mpls push 300 192.168.2.2
To get more comprehensive explanation use:
$ ip link add tunnel_name type mpls help
or
$ ip route help
In order to be able to receive MPLS packets, interface must be MPLS enabled. This is done with:
# ip link set eth0 mpls on
To be able to receve MPLS packets recursively mpls0 interface must be brought up!
To build MPLS tunnel cross connect and egress points use:
# ip -M route add 200 mpls swap 300 dev eth0 192.168.3.3
MPLS SNMP stats are located in:
/proc/net/mpls_stats
MPLS sysctl parameters are located in:
/proc/sys/net/mpls
MPLS fully supports net namespaces.
IP-MPLS multipath routes are suported
Reserved labels, except the RouterAlert label, are handled properly.
---
TODO:
1. Firewall support
2. ICMPv6 message sending, when TTL is exceeded or packet can't be forwarded because of MTU,
from the inside of MPLS tunnel
3. MPLS multipath
3. Bridging support