這陣子在做 TR-064,順便將遇到的問題整理一下。
Reference :
- TR-064 : LAN-Side DSL CPE Configuration Specification
- UPnP IGD 1.0 specification
- Linux UPnP Internet Gateway Device
- libupnp : A Portable Open Source UPnP Development Kit
1. What is the TR-064 ?
官方說法:『This Working Text will specify the method for configuring DSL CPE through software on PCs inside the LAN.』
CPE : customer premise equipment
其實就是從 LAN 端對 IGD (Internet Gateway Device) 做設定的一套規格,其中包含要使用什麼 Protocol(XML/SOAP/HTTP、SSDP/HTTPU)、有哪些項目需要被設定(Device or Service)、每個項目中可以執行的動作(Action)、包含哪些設定值(StateVariables)等。
1.1 Protocol
上面這張圖是由 TR-064 Specification 中截取出來的,我們可以看到他的Protocol部份分為兩類:XML/SOAP/HTTP與SSDP/HTTPU。SSDP/HTTPU是針對區域網路中搜尋機器所使用的協定,XML/SOAP/HTTP則是在傳送資訊時使用。
1.2 The Model
TR-064中有制定自己的 Data model,它以 UPnP IGD 1.0 specification為基礎再多作延伸,增加XML schema與parameter的定義。下圖黑色部份為 UPnP IGD 中訂定的model,藍色虛線則為 TR-064 增加的部份。
1.3 Conclusion
TR-064 不是制定 protocol 的文件,而是一套由 DSL Forum 制定的規格,只要符合文件中所規範的事項,就可說是支援 TR-064。
p.s. 由於各家廠商對產品的要求不同,也有可能出現與規格不符的情況。
2. What differents between TR-064 and TR-069 ?
TR-069 : CPE WAN Management Protocol。
TR-069 規範了WAN端對機器做設定的Protocol,藉由 CPE 與 ACS (Auto-configuration Server)的溝通讓管理者可以透過WAN端做設定。在機器上會執行一支 TR-069的 client,ACS就靠這支程式做設定。但由於各家ACS廠商在設計上有些許不同,造成在A廠可以用的,移到B廠就不一定可以正常運作,通常ACS是由電信業者所掌握。
TR-064沒有使用特別的Protocol運作,延習了UPnP的架構,增加Authentication機制,在user端安裝CPE management application就可以對機器做設定。
3. How to implement the TR-064 on the CPE ?
Linux-IGD 是一套 open source 的 UPnP IGD Server。雖然目前對 UPnP IGD 1.0 的支援尚不完整,也不支援 TR-064,但是個不錯的切入點,可以加以擴充以支援 TR-064。Linux-IGD 需搭配 libupnp 做為對外溝通的介面,這部份亦缺乏TR-064規範的Authentication機制,需要額外增加。
4. How to verify your TR-064 ?
假如你使用上面第三項所描述的方法,那麼可以使用Intel 提供的 UPnP Tool( IntelToolsForUPnPTechnology_v2.zip ) 中的 Device Spy 來驗證,安裝前需要先安裝 .NET Framework 2.0。但要注意的是Device Spy 是以 UPnP 來做 Device 的設定,而不是完整支援 TR-064 規格。
若是自行開發,目前還沒找到適當的驗證工具,若有人有好的 Test tool 也請留言跟我說一下。
5. What happen when the Device Spy cannot show correctly (TR-064 implemented by libupnp and linux-igd) ?
5.1 out of boundary
在 linux-igd 中配置的 buffer size 不夠存放要傳送出來的資訊。除了自己編寫的XML內容外,傳出的封包還會包含 SOAP資訊。
5.2 XML format does not correct
檢查傳送出來的 XML 文件格式是否正確,基本上是在每個<device>下只會有一個<serviceList>,如果<device>中還有多個device,則要用<deviceList>包起來。
5.3 XML content not correct
曾經有遇到如果XML中的value沒有設值,Device Spy 無法正確顯示的情況。舉例來說,正確的應該要這樣:
<u:GetInfoResponse xmlns:u=\"urn:dslforum-org:service:DeviceInfo:1\">
<NewManufacturerName>Jason</NewManufacturerName>
</u:GetInfoResponse>
但如果寫成:
<u:GetInfoResponse xmlns:u=\"urn:dslforum-org:service:DeviceInfo:1\">
<NewManufacturerName></NewManufacturerName>
</u:GetInfoResponse>
可能無法正確顯示。
// TBC...........
6. What is locking mechanism (ConfigurationStarted and ConfigurationFinished) ?
7. How about security ?
7.1 Access restriction
7.2 SSL/TLS