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