前言
第一部分 基礎(chǔ)環(huán)境篇
第1章 閱讀源代碼前的準(zhǔn)備 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編譯構(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項目源碼下載 9
1.3.2 IntelliJ IDEA安裝 10
1.3.3 IntelliJ IDEA調(diào)試ODL的項目源碼 11
1.4 ODL設(shè)計目標(biāo) 12
1.5 ODL總體架構(gòu) 13
1.6 本章小結(jié) 15
第2章 ODL項目管理設(shè)計詳解 16
2.1 問題的提出 16
2.2 解決思路 17
2.3 實現(xiàn)詳解 20
2.3.1 基礎(chǔ)parent設(shè)計 20
2.3.2 模塊構(gòu)建 23
2.3.3 feature組織 24
2.3.4 版本打包 25
2.4 項目模板 26
2.4.1 項目目錄布局設(shè)計 26
2.4.2 ODL模板項目 27
2.5 本章小結(jié) 28
第二部分 核心原理篇
第3章 ODL基本對象的設(shè)計與實現(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 本章小結(jié) 49
第4章 數(shù)據(jù)樹的設(shè)計與實現(xiàn) 50
4.1 基本概念 50
4.1.1 配置樹與狀態(tài)樹 51
4.1.2 標(biāo)識與定位 51
4.1.3 快照與MVCC 52
4.2 數(shù)據(jù)樹的設(shè)計與實現(xiàn) 52
4.2.1 Tree結(jié)構(gòu)的設(shè)計 52
4.2.2 DataTree相關(guān)接口定義 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 本章小結(jié) 67
第5章 MD-SAL DataStore接口設(shè)計 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è)計 72
5.2.1 DOMStore 73
5.2.2 DOMStoreThreePhase-CommitCohort 75
5.2.3 DOMStoreTreePublisher 76
5.3 DataStore DOM API設(shè)計 77
5.3.1 DOMDataBroker 77
5.3.2 DOMDataTreeSharding-Service 78
5.3.3 DOMDataTreeChange-Service 80
5.4 DataStore Binding API設(shè)計 82
5.4.1 Binding基本對象接口 82
5.4.2 DataBroker 84
5.4.3 DataTreeChangeService 87
5.5 本章小結(jié) 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設(shè)計與實現(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 事務(wù)鏈實現(xiàn) 124
6.5 Binding DataBroker的實現(xiàn) 125
6.5.1 Adapter設(shè)計 125
6.5.2 BindingDOMDataBroker-Adapter的初始化 126
6.6 本章小結(jié) 130
第7章 MD-SAL RPC的設(shè)計與實現(xiàn) 131
7.1 一個實例 131
7.1.1 RPC的YANG模型定義 131
7.1.2 RPC的生成接口 133
7.1.3 RPC的實現(xiàn)與調(diào)用 135
7.2 RPC機制的總體設(shè)計 136
7.2.1 Binding接口設(shè)計 136
7.2.2 DOM接口設(shè)計 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注冊及調(diào)用 152
7.4.3 Actor設(shè)計實現(xiàn)總結(jié) 154
7.5 本章小結(jié) 155
第8章 MD-SAL Notification的設(shè)計與實現(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接口設(shè)計 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 本章小結(jié) 171
第9章 MD-SAL Mount機制與NETCONF 172
9.1 Mount服務(wù)接口設(shè)計 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 本章小結(jié) 186
第10章 MD-SAL Cluster Service 187
10.1 EntityOwnershipService 187
10.1.1 基本概念 187
10.1.2 接口設(shè)計 188
10.1.3 實現(xiàn)說明 192
10.2 ClusterSingletonService 195
10.2.1 接口設(shè)計 195
10.2.2 實現(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實現(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 加解密服務(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的實現(xiàn) 226
12.2.1 Jersey框架簡介 226
12.2.2 RESTCONF資源接口定義 228
12.2.3 Wrapper設(shè)計模式 231
12.2.4 初始化過程 233
12.2.5 客戶端訪問 235
12.3 本章小結(jié) 236
第13章 Blueprint及其擴展 237
13.1 Blueprint 238
13.1.1 基礎(chǔ)知識 238
13.1.2 運行原理 240
13.1.3 命名空間擴展 241
13.2 Blueprint的使用 244
13.3 本章小結(jié) 247