前言
第一部分 基礎(chǔ)環(huán)境篇
第1章 閱讀源代碼前的準(zhǔn)備 2
1.1 ODL項(xiàng)目介紹 2
1.1.1 ODL框架之爭(zhēng) 3
1.1.2 SAL的演進(jìn) 3
1.1.3 ODL的子項(xiàng)目及分類 4
1.1.4 ODL項(xiàng)目的管理 6
1.2 搭建ODL編譯構(gòu)建環(huán)境 6
1.2.1 安裝JDK 6
1.2.2 安裝及配置Maven 8
1.3 閱讀和調(diào)試ODL源代碼 9
1.3.1 ODL項(xiàng)目源碼下載 9
1.3.2 IntelliJ IDEA安裝 10
1.3.3 IntelliJ IDEA調(diào)試ODL的項(xiàng)目源碼 11
1.4 ODL設(shè)計(jì)目標(biāo) 12
1.5 ODL總體架構(gòu) 13
1.6 本章小結(jié) 15
第2章 ODL項(xiàng)目管理設(shè)計(jì)詳解 16
2.1 問題的提出 16
2.2 解決思路 17
2.3 實(shí)現(xiàn)詳解 20
2.3.1 基礎(chǔ)parent設(shè)計(jì) 20
2.3.2 模塊構(gòu)建 23
2.3.3 feature組織 24
2.3.4 版本打包 25
2.4 項(xiàng)目模板 26
2.4.1 項(xiàng)目目錄布局設(shè)計(jì) 26
2.4.2 ODL模板項(xiàng)目 27
2.5 本章小結(jié) 28
第二部分 核心原理篇
第3章 ODL基本對(duì)象的設(shè)計(jì)與實(shí)現(xiàn) 30
3.1 QName 30
3.1.1 QName定義 30
3.1.2 QName對(duì)象比較 36
3.1.3 QName對(duì)象創(chuàng)建 37
3.2 YangInstanceIdentifier 38
3.2.1 Path接口定義 38
3.2.2 YangInstanceIdentifier的類定義 39
3.2.3 YangInstanceIdentifier的比較42
3.2.4 InstanceIdentifier類 44
3.3 NomalizedNode 44
3.3.1 NormalizedNode類的定義 45
3.3.2 NormalizedNode實(shí)例的創(chuàng)建48
3.4 本章小結(jié) 49
第4章 數(shù)據(jù)樹的設(shè)計(jì)與實(shí)現(xiàn) 50
4.1 基本概念 50
4.1.1 配置樹與狀態(tài)樹 51
4.1.2 標(biāo)識(shí)與定位 51
4.1.3 快照與MVCC 52
4.2 數(shù)據(jù)樹的設(shè)計(jì)與實(shí)現(xiàn) 52
4.2.1 Tree結(jié)構(gòu)的設(shè)計(jì) 52
4.2.2 DataTree相關(guān)接口定義 55
4.2.3 DataTree的創(chuàng)建 57
4.3 數(shù)據(jù)樹的讀寫過程 59
4.3.1 快照實(shí)現(xiàn)原理 61
4.3.2 數(shù)據(jù)校驗(yàn)的實(shí)現(xiàn) 61
4.4 MVCC機(jī)制與實(shí)現(xiàn) 63
4.4.1 版本號(hào)變更規(guī)則 63
4.4.2 并發(fā)控制 65
4.5 本章小結(jié) 67
第5章 MD-SAL DataStore接口設(shè)計(jì) 68
5.1 基本概念 69
5.1.1 事務(wù)和事務(wù)鏈 70
5.1.2 數(shù)據(jù)分片 70
5.1.3 三階段提交 71
5.2 DataStore SPI設(shè)計(jì) 72
5.2.1 DOMStore 73
5.2.2 DOMStoreThreePhase-CommitCohort 75
5.2.3 DOMStoreTreePublisher 76
5.3 DataStore DOM API設(shè)計(jì) 77
5.3.1 DOMDataBroker 77
5.3.2 DOMDataTreeSharding-Service 78
5.3.3 DOMDataTreeChange-Service 80
5.4 DataStore Binding API設(shè)計(jì) 82
5.4.1 Binding基本對(duì)象接口 82
5.4.2 DataBroker 84
5.4.3 DataTreeChangeService 87
5.5 本章小結(jié) 87
第6章 MD-SAL DataStore的實(shí)現(xiàn)原理 88
6.1 概述 89
6.1.1 背景知識(shí) 89
6.1.2 實(shí)現(xiàn)原理 91
6.2 Raft算法及其實(shí)現(xiàn) 92
6.2.1 Raft算法介紹 93
6.2.2 RaftActor設(shè)計(jì)與實(shí)現(xiàn) 98
6.3 DataStore后端實(shí)現(xiàn)詳解 106
6.3.1 Shard的實(shí)現(xiàn) 106
6.3.2 ShardManager 110
6.3.3 ShardStrategy及實(shí)現(xiàn) 112
6.4 DataStore前端實(shí)現(xiàn)詳解 113
6.4.1 DOMStore的實(shí)現(xiàn) 113
6.4.2 DOMDataBroker的實(shí)現(xiàn) 121
6.4.3 事務(wù)鏈實(shí)現(xiàn) 124
6.5 Binding DataBroker的實(shí)現(xiàn) 125
6.5.1 Adapter設(shè)計(jì) 125
6.5.2 BindingDOMDataBroker-Adapter的初始化 126
6.6 本章小結(jié) 130
第7章 MD-SAL RPC的設(shè)計(jì)與實(shí)現(xiàn) 131
7.1 一個(gè)實(shí)例 131
7.1.1 RPC的YANG模型定義 131
7.1.2 RPC的生成接口 133
7.1.3 RPC的實(shí)現(xiàn)與調(diào)用 135
7.2 RPC機(jī)制的總體設(shè)計(jì) 136
7.2.1 Binding接口設(shè)計(jì) 136
7.2.2 DOM接口設(shè)計(jì) 137
7.2.3 總體實(shí)現(xiàn)流程 139
7.3 RPC機(jī)制實(shí)現(xiàn)詳解 141
7.3.1 DOMBroker實(shí)現(xiàn)詳解 141
7.3.2 BindingBroker實(shí)現(xiàn)詳解 144
7.4 Remote RPC實(shí)現(xiàn)詳解 149
7.4.1 Gossip協(xié)議的實(shí)現(xiàn) 150
7.4.2 遠(yuǎn)程RPC注冊(cè)及調(diào)用 152
7.4.3 Actor設(shè)計(jì)實(shí)現(xiàn)總結(jié) 154
7.5 本章小結(jié) 155
第8章 MD-SAL Notification的設(shè)計(jì)與實(shí)現(xiàn) 156
8.1 一個(gè)實(shí)例 156
8.1.1 YANG模型定義 156
8.1.2 生成的接口 157
8.1.3 消息發(fā)布 157
8.1.4 消息訂閱 158
8.2 MD-SAL Notification接口設(shè)計(jì) 158
8.2.1 DOM接口 159
8.2.2 Binding接口 160
8.3 MD-SAL Notification實(shí)現(xiàn)剖析 161
8.3.1 DOM層實(shí)現(xiàn)詳解 161
8.3.2 Binding適配實(shí)現(xiàn) 169
8.4 本章小結(jié) 171
第9章 MD-SAL Mount機(jī)制與NETCONF 172
9.1 Mount服務(wù)接口設(shè)計(jì) 172
9.1.1 DOM接口 173
9.1.2 Binding接口 174
9.2 Mount機(jī)制的實(shí)現(xiàn) 175
9.2.1 DOM接口實(shí)現(xiàn) 176
9.2.2 NETCONF南向插件的實(shí)現(xiàn) 178
9.3 本章小結(jié) 186
第10章 MD-SAL Cluster Service 187
10.1 EntityOwnershipService 187
10.1.1 基本概念 187
10.1.2 接口設(shè)計(jì) 188
10.1.3 實(shí)現(xiàn)說明 192
10.2 ClusterSingletonService 195
10.2.1 接口設(shè)計(jì) 195
10.2.2 實(shí)現(xiàn)說明 196
10.3 本章小結(jié) 198
第三部分 公共組件篇
第11章 AAA 200
11.1 Shiro框架介紹 201
11.1.1 Shiro是什么 201
11.1.2 Shiro的架構(gòu) 202
11.1.3 Shiro核心處理流程 204
11.2 AAA實(shí)現(xiàn)原理 210
11.2.1 Shiro配置優(yōu)化 210
11.2.2 Realm的8個(gè)實(shí)現(xiàn) 212
11.2.3 Filter的實(shí)現(xiàn) 214
11.2.4 加解密服務(wù) 216
11.2.5 數(shù)字證書管理 218
11.3 本章小結(jié) 219
第12章 RESTCONF 220
12.1 RFC 8040解讀 220
12.1.1 操作 221
12.1.2 消息 222
12.1.3 資源 223
12.2 RESTCONF的實(shí)現(xiàn) 226
12.2.1 Jersey框架簡(jiǎn)介 226
12.2.2 RESTCONF資源接口定義 228
12.2.3 Wrapper設(shè)計(jì)模式 231
12.2.4 初始化過程 233
12.2.5 客戶端訪問 235
12.3 本章小結(jié) 236
第13章 Blueprint及其擴(kuò)展 237
13.1 Blueprint 238
13.1.1 基礎(chǔ)知識(shí) 238
13.1.2 運(yùn)行原理 240
13.1.3 命名空間擴(kuò)展 241
13.2 Blueprint的使用 244
13.3 本章小結(jié) 247