Skip to content
This repository was archived by the owner on Sep 18, 2021. It is now read-only.

Commit ec22f14

Browse files
author
Hirki Shirokura
committed
SRv6 eval (2018.12.30-12:52)
* Add transit * Add vrf_redirect * Add binding_sid (WIP: End.B6.Insert isn't working fine)
1 parent 82fa6c9 commit ec22f14

File tree

34 files changed

+1983
-182
lines changed

34 files changed

+1983
-182
lines changed

bin/tn

+15-2
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,14 @@ node_configs:
6262
echo slnakdev
6363
6464
test:
65-
- cmds:
65+
- name: p2p
66+
cmds:
6667
- cmd: docker exec C0 ping -c2 10.0.0.2
6768
- cmd: echo slankdev slankdev
69+
- name: lo
70+
cmds:
71+
- cmd: docker exec C0 ping -c2 10.255.0.1
72+
- cmd: echo slankdev slankdev
6873
'''
6974

7075
text__mount_docker_netns='''
@@ -473,6 +478,10 @@ def command_conf(args):
473478
print('echo {}::[config]::fin'.format(node['name']))
474479
postconf(appinfo.data)
475480

481+
def command_upconf(args):
482+
command_up(args)
483+
command_conf(args)
484+
476485
def command_reconf(args):
477486
command_reup(args)
478487
command_conf(args)
@@ -588,6 +597,10 @@ def main():
588597
help='Execute config-cmd in a running container')
589598
parser_conf.set_defaults(func=command_conf)
590599

600+
parser_reconf = subparsers.add_parser('upconf',
601+
help='Create, start and config')
602+
parser_reconf.set_defaults(func=command_upconf)
603+
591604
parser_reconf = subparsers.add_parser('reconf',
592605
help='Stop, remove, create, start and config')
593606
parser_reconf.set_defaults(func=command_reconf)
@@ -630,7 +643,7 @@ def main():
630643
appinfo.command=args.command
631644

632645
need_data = {'ps', 'up', 'down', 'pull', 'exec',
633-
'build', 'conf', 'reconf', 'reup', 'test', 'img'}
646+
'build', 'conf', 'upconf', 'reconf', 'reup', 'test', 'img'}
634647
if args.command in need_data:
635648
try:
636649
filename = appinfo.specfile

examples/basic_srv6/README.md

+124
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
2+
# Segment Routing IPv6 Examples
3+
4+
- **vpn-v4-per-ce**: IPv4 L3VPN [T.Encaps, End, End.DX4]
5+
- **vpn-v6-per-ce**: IPv6 L3VPN [T.Encaps, End, End.DX6]
6+
- **vpn-v4-per-vrf**: IPv4 L3VPN [T.Encaps, End, End.DT4] (WIP)
7+
- **vpn-v6-per-vrf**: IPv6 L3VPN [T.Encaps, End, End.DT6]
8+
- **l2vpn**: L2VPN [T.Encaps.L2, End, End.DX4] (XXX)
9+
- **transit**: Transit Function Test with FRR, [T.Encaps, T.Insert, End, End.X]
10+
- **vrf-redirect**: End.T Evaluation linux only without FRR, [End.T] (XXX)
11+
- **binding-sid**: End.B6,End.B6.Encaps Evaluation. [End.B6, End.B6.Encaps] (WIP End.B6.Insert)
12+
<!-- - **sfc**: Service Chaining with End.AM -->
13+
14+
## Functions I want to test on linux
15+
- [x] T.Insert: I don't understand how-to-use
16+
- [x] T.Encaps
17+
- [x] T.Encaps.L2: I don't understand how-to-use
18+
- [x] End
19+
- [x] End.X
20+
- [ ] End.T: linux kernel can't perform End.T fine. (XXX)
21+
- [x] End.DX6
22+
- [x] End.DX4
23+
- [x] End.DX2
24+
- [x] End.DT6
25+
- [ ] End.DT4: linux kernel isn't support yet
26+
- [x] End.B6: linux kernel isn't working fine..? or I don't understand how-to-use.
27+
- [x] End.B6.Encaps
28+
- [ ] End.AM: linux kernel isn't support yet. **srext only** masquerading proxy
29+
- [ ] End.AD: linux kernel isn't support yes. **srext only** dynamic proxy
30+
- [ ] End.AS2: linux kernel isn't support yes. static proxy
31+
- [ ] End.AS4: linux kernel isn't support yes. static proxy
32+
- [ ] End.AS6: linux kernel isn't support yes. static proxy
33+
34+
## Funcに関しての説明
35+
- **T.Encaps:**<br>
36+
この操作はトランジットノード
37+
(すなわち、パケットを通してSRv6をサポートするルーターですが、
38+
ノード自体はSegmentリストにありません)で実行され、
39+
IPv6ヘッダーとSRHヘッダーをパケットの外側の層に追加し、
40+
新しいものを定義できます。セグメントのリスト。
41+
パケットは、新しいIPv6ヘッダーのSRHに従って最初に転送されます。
42+
- **End:**<br>
43+
この操作では、Segment Leftを0(最後のホップではない)
44+
にする必要があります。これにより、Segment Leftが1減少し、
45+
IPv6パケットの宛先アドレスが最も一般的なSRv6操作である次の
46+
Segmentに更新されます。SR MPLSのプレフィックスSIDと同等です。
47+
- **End.X:**<br>
48+
この操作は基本的にEnd操作と同じですが、
49+
処理したパケットを指定したネクストホップアドレスに
50+
送信できる点が異なります。
51+
SR MPLSのAdj-SIDと同じです。
52+
- **End.DX4:**<br>
53+
この操作ではSegment Leftが0であり、
54+
パケットがIPv4パケットをカプセル化しているため、
55+
外側のIPv6ヘッダーは削除され、内部のIPv4パケットは
56+
指定されたネクストホップアドレスに転送されます。
57+
VPNv4のCEごとのラベルに相当します。
58+
- **End.DX6:**<br>
59+
この操作では、Segment Leftを0にしてIPv6パケットを
60+
パケットにカプセル化し、外側のIPv6ヘッダーを削除して、
61+
内部IPv6パケットを指定されたネクストホップアドレスに転送します。
62+
VPNv6 Per-CEラベルと同等です。
63+
- **End.B6:**<br>
64+
既存のSRHに基づいて新しいSRHを挿入し、
65+
新しいSegment listを定義すると、挿入された新しいSRHに
66+
従ってデータパケットが最初に転送されます。Binding-SIDと同等です。
67+
- **End.B6.Encaps:**<br>
68+
この操作は基本的にEnd.B6と同じですが、違いは、
69+
この操作では単にSRHルーティングヘッダーを追加するのではなく、
70+
新しいIPv6ヘッダーとSRHをパケットの外側のレイヤーに追加することです。
71+
72+
## 参照
73+
74+
**Funcの概要に関してはこれらの画像がわかりやすい.(thx kamataさん)**<br>
75+
76+
| Function | Location | Description | Works-for |
77+
| :------- | :------- | :---------- | :-------- |
78+
| End | Core | DestとSRHを書き換えて, Next-hopをRIBから探して送る | Prefix-SID |
79+
| End.X | Core | DestとSRHを書き換えて, 決められたNextHopへ送る | Adjacency-SID |
80+
| End.T | Core | DestとSRHを書き換えて, NextHopを指定したRIBから探して送る | Multi-table Operation |
81+
| End.DX2 | Edge | SRHを外して, 決められた送信IFへ送る (NH=59) | L2VPN |
82+
| End.DX6 | Edge | SRHを外して, 決められたIPv6 NextHopへ送る (NH=41) | VPNv6 Per-CE Label |
83+
| End.DX4 | Edge | SRHを外して, 決められたIPv4 NextHopへ送る (NH=4) | VPNv4 Per-CE Label |
84+
| End.DT6 | Edge | SRHを外して, IPv6 NextHopを指定したRIBから探して送る (NH=41) | VPNv6 Per-VRF Label |
85+
| End.DT4 | Edge | SRHを外して, IPv4 NextHopを指定したRIBから探して送る (NH=4) | VPNv4 Per-VRF Label |
86+
| End.B6 | Edge | SRHは触らず, 新しいSID List(SRH)を挿入して, その先頭に送る | Binding SID |
87+
| End.B6.Encaps | Edge | SRHを書き換えて, 新しいSID List(OuterHdr)でEncapして, その先頭に送る | Binding SID (Encap) |
88+
| End.BM | Edge | DestとSRHを書き換えて, Labelを付与して, その先頭に送る | SRv6/SR-MPLS Binding |
89+
| End.S | Core | 一番最後(or複数)のSIDでTable検索し, NextHopを探して送る | ICN |
90+
| End.AS | Core | OuterHdrを外して, 決められた送信IFへ送る. <br>決められた受信IFに入ってきたPktにOuterHdrを付与し, その先頭へ送る| Service-Chaining (Proxy) |
91+
| End.AM | Core | DestとSRHを書き換えて, 決められた送信IFへ送る. <br>決められた受信IFに入ってきたPktにSRHを付与し, その先頭に送る. | Service-Chaining (Masq) |
92+
| T | Core | 通常のIPv6 Routing | - |
93+
| T.Insert | Core | 新しいSRHを挿入して, その先頭に送る | - |
94+
| T.Encaps | Core | 新しいIPv6 Hdr(SRHつき)を挿入して, その先頭に送る(L3)􏲟| - |
95+
| T.Encaps.L2 | Core | 新しいIPv6 Hdr(SRHつき)を挿入して, その先頭に送る(L2)􏲟| - |
96+
97+
**iproute2 CLIに関してはこれらがわかりやすい.(thx ebikenさん)**<br>
98+
```
99+
# ip -6 route add <segment> encap seg6local action <action> <params> (dev <device> | via <nexthop>) [table localsid]
100+
# ip -6 route add fc00::1/128 encap seg6local \
101+
action End via 2001:db8::1
102+
action End.X nh6 fc00::1:1 via 2001:db8::1
103+
action End.T table 100 via 2001:db8::1
104+
action End.DX2 oif lxcbr0 via 2001:db8::1
105+
action End.DX4 nh4 10.0.3.254 via 2001:db8::1
106+
action End.DX6 nh6 fc00::1:1 via 2001:db8::1
107+
action End.DT6 table 100 via 2001:db8::1
108+
action End.B6 srh segs beaf::1,beaf::2 via 2001:db8::1
109+
action End.B6.Encaps srh segs beaf::1,beaf::2 via 2001:db8::1
110+
111+
# ip -6 route add <prefix> encap seg6 mode <encapmode> segs <segments> [hmac <keyid>] (dev <device> | via <nexthop>)
112+
# ip -6 route add fc00:b::10/128 encap seg6 mode inline segs fc00:3::11,fc00:3::12,fc00:3::13 via fc00:a::a
113+
# ip -6 route add fc00:b::10/128 encap seg6 mode encap segs fc00:3::11,fc00:3::12,fc00:3::13 via fc00:a::a
114+
115+
# ip sr tunsrc set <addr>
116+
# ip sr hmac set <keyid> <algorithm>
117+
```
118+
119+
- https://www.sdnlab.com/22842.html
120+
- https://www.janog.gr.jp/meeting/janog40/application/files/2415/0051/7614/janog40-sr-kamata-takeda-00.pdf
121+
- https://www.slideshare.net/kentaroebisawa/zebra-srv6-cli-on-linux-dataplane-enog49
122+
- http://www.segment-routing.net/open-software/linux/
123+
- http://www.segment-routing.net/open-software/vpp/
124+
+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2+
# VRF Redirect
3+
- Hiroki Shirokura <[email protected]>
4+
- 2018.12.31
5+
6+
![](topo.jpeg)
7+
8+
```
9+
$ cd <path/to/here>
10+
$ tn up | sudo sh
11+
$ tn conf | sudo sh
12+
$ tn test p2p | sudo sh
13+
$ tn test blue | sudo sh
14+
$ tn test green | sudo sh
15+
```
16+

0 commit comments

Comments
 (0)