国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Vmware的路由器主控單元功能虛擬化

2016-10-10 11:41黎文偉
光通信研究 2016年2期
關(guān)鍵詞:網(wǎng)卡路由器虛擬化

黎文偉,吉 萌,戴 非

(1.武漢郵電科學(xué)研究院,武漢 430074; 2.武漢烽火網(wǎng)絡(luò)有限責(zé)任公司,武漢 430074;3.江西師范大學(xué),南昌 330022)

基于Vmware的路由器主控單元功能虛擬化

黎文偉1,2,吉 萌1,2,戴 非3

(1.武漢郵電科學(xué)研究院,武漢 430074; 2.武漢烽火網(wǎng)絡(luò)有限責(zé)任公司,武漢 430074;3.江西師范大學(xué),南昌 330022)

虛擬化是在通用服務(wù)器平臺(tái)上實(shí)現(xiàn)路由器主控單元功能的主要方法之一,虛擬化的實(shí)現(xiàn)首先要解決路由器代碼的移植?;趚86服務(wù)器和通用操作系統(tǒng)的純軟件虛擬化開(kāi)發(fā),可以利用英特爾在處理器和虛擬化領(lǐng)域的技術(shù)積累,獲得在網(wǎng)絡(luò)功能虛擬化領(lǐng)域的競(jìng)爭(zhēng)優(yōu)勢(shì)。高端路由器主控單元的基礎(chǔ)是收發(fā)數(shù)據(jù)包及相應(yīng)的處理功能,移植的重點(diǎn)在于網(wǎng)卡驅(qū)動(dòng)。文章分析了如何實(shí)現(xiàn)高端路由器主控單元代碼運(yùn)行在虛擬化平臺(tái)上,并就調(diào)試程序過(guò)程中可能出現(xiàn)的技術(shù)問(wèn)題做了深入的探討。

路由器;虛擬化;網(wǎng)絡(luò)功能虛擬化;軟件定義網(wǎng)絡(luò)

0 引 言

通信技術(shù)的發(fā)展和工業(yè)4.0時(shí)代的到來(lái),讓物聯(lián)網(wǎng)、云計(jì)算從概念變?yōu)楝F(xiàn)實(shí)。電信運(yùn)營(yíng)商不斷地進(jìn)行硬件升級(jí)來(lái)滿足數(shù)據(jù)流量的增長(zhǎng),成本高且部署網(wǎng)絡(luò)設(shè)備周期長(zhǎng)。而NFV(網(wǎng)絡(luò)功能虛擬化)不僅降低了運(yùn)營(yíng)商的硬件采購(gòu)成本,使組網(wǎng)更靈活,而且與SDN(軟件定義網(wǎng)絡(luò))、云計(jì)算等前沿技術(shù)密切相關(guān)。其中基于x86架構(gòu)的虛擬化技術(shù)是實(shí)現(xiàn)NFV的重要途徑[1]。虛擬化技術(shù)的實(shí)現(xiàn)面臨的挑戰(zhàn)是路由器代碼在虛擬環(huán)境下的移植。使用虛擬化技術(shù)后,要兼顧處理器高性能和通用性的矛盾,而解決該問(wèn)題,可以在集成和軟件層面做優(yōu)化。

1 技術(shù)簡(jiǎn)介

1.1技術(shù)背景

純軟件虛擬化技術(shù)出現(xiàn)較早,之后還進(jìn)一步出現(xiàn)了處理器級(jí)虛擬化和I/O(輸入/輸出)級(jí)虛擬化。純軟件虛擬化的主要問(wèn)題是效率和隔離性。為了解決這個(gè)問(wèn)題,市場(chǎng)上出現(xiàn)了OS(操作系統(tǒng))虛擬化和完全虛擬化方法,但不管何種方法,都因?yàn)镠ypervisor(虛擬機(jī)監(jiān)視器)的參與而降低了處理器性能。目前Intel開(kāi)發(fā)的VT-d(直接I/O訪問(wèn)的虛擬化技術(shù)),不僅成功解決了上述問(wèn)題,還在I/O設(shè)備中增加了虛擬化性能[2-3]。Intel在處理器和I/O級(jí)的虛擬化工作,緩解了純軟件虛擬化所固有的效率和隔離性問(wèn)題,為純軟件虛擬化應(yīng)用提供了支撐。

Intel至強(qiáng)系列芯片廣泛應(yīng)用于服務(wù)器等領(lǐng)域。至強(qiáng)系列處理器的多核架構(gòu)提高了虛擬化多任務(wù)環(huán)境的程序執(zhí)行效率。路由器硬件組成包括主控卡、線卡和多核卡等,其中主控卡主要實(shí)現(xiàn)協(xié)議包的處理,轉(zhuǎn)發(fā)主要由線卡完成。主控要實(shí)現(xiàn)一些基本的協(xié)議功能,例如BGP(邊界網(wǎng)關(guān)協(xié)議)、OSPF(開(kāi)放式最短路徑優(yōu)先)和RIP(路由信息協(xié)議)等。路由器主控功能虛擬化,可以為SDN和云計(jì)算等前沿網(wǎng)絡(luò)技術(shù)的實(shí)現(xiàn)做支撐。

1.2技術(shù)框架

本文采用純軟件虛擬化方案,其虛擬化技術(shù)的實(shí)現(xiàn)不依賴于硬件,可以先在普通計(jì)算機(jī)上實(shí)現(xiàn)虛擬化,再拷入服務(wù)器板卡[4],整體技術(shù)框架如圖1所示。

圖1 路由器主控卡虛擬化實(shí)現(xiàn)方案

服務(wù)器板卡背板接口接收到其他線卡或者網(wǎng)絡(luò)設(shè)備的報(bào)文后,VxWorks虛擬機(jī)判斷該報(bào)文是協(xié)議包還是普通數(shù)據(jù)包,如果是協(xié)議包,則上傳到CPU(中央處理器)進(jìn)行協(xié)議棧處理,比如路由信息計(jì)算等,再交由相應(yīng)端口進(jìn)行轉(zhuǎn)發(fā);如果是普通數(shù)據(jù)包,則直接轉(zhuǎn)發(fā)給外接交換機(jī)。虛擬主控卡要保證透明傳輸和高效率。外接交換機(jī)可以為普通交換機(jī),利用其線速轉(zhuǎn)發(fā)效率來(lái)彌補(bǔ)主控轉(zhuǎn)發(fā)性能的不足;也可以為Openflow交換機(jī),利用Windows系統(tǒng)內(nèi)的java控制器來(lái)控制Openflow交換機(jī)流表的產(chǎn)生與轉(zhuǎn)發(fā),進(jìn)而應(yīng)用到SDN和云計(jì)算等嵌入式領(lǐng)域中。因而,路由器主控功能的虛擬化主要在于收發(fā)包功能的實(shí)現(xiàn),至于上層協(xié)議棧和Openflow交互信息的控制方面,可以根據(jù)邏輯需要來(lái)配置和修改。而收發(fā)包功能主要涉及到虛擬網(wǎng)卡驅(qū)動(dòng)的編譯以及與協(xié)議棧和集成代碼的聯(lián)調(diào)問(wèn)題。

本文采用tornado for Pentium的x86環(huán)境替代高端路由器編譯環(huán)境tornado for ppc。該軟件自帶ln97xEnd.c,在tornado中編譯boot,然后在Vmware中啟動(dòng),即建立了基本的開(kāi)發(fā)環(huán)境。

2 高端路由器主控虛擬化設(shè)計(jì)

2.1BSP(板級(jí)支持包)配置與空鏡像加載

VxWorks鏡像在BSP中的啟動(dòng)順序?yàn)椋簉omInit()-romStart()-sysInit()-usrInit()-usrRoot()。高端路由器主控卡的驅(qū)動(dòng)代碼主要在網(wǎng)卡加載時(shí),即usrconfig.c文件中的usrRoot()函數(shù)執(zhí)行過(guò)程中會(huì)出現(xiàn)問(wèn)題,因此在編譯lnPci網(wǎng)卡驅(qū)動(dòng)前,要對(duì)BSP文件做修改,例如 argetconfigpcPentium下的config.h和sysLn97xEnd.c文件,用來(lái)設(shè)置FTP(文件傳輸協(xié)議)下載的IP(網(wǎng)際協(xié)議)地址和指定網(wǎng)卡驅(qū)動(dòng)程序,包含PC_CONSOLE。在tornado里編譯一個(gè)空鏡像VxWorks image,運(yùn)行在Vmware中,ping通VxWorks系統(tǒng)后,再進(jìn)行網(wǎng)卡功能移植。

2.2對(duì)應(yīng)網(wǎng)絡(luò)模塊的修改

路由器的代碼一般基于嵌入式系統(tǒng)生成,通常使用專用CPU(如power pc),目標(biāo)文件生成一般在該環(huán)境下進(jìn)行;與驅(qū)動(dòng)和網(wǎng)絡(luò)相關(guān)的libnet.a、libdrv.a需要在Pentium環(huán)境下重新編譯。與調(diào)試相關(guān)的libwdb.a也需要修改。分析ppc和Pentium 的tornado目錄自帶文件,可以看到targeth和targetsrcdrv下有很多文件不同,這會(huì)影響驅(qū)動(dòng)設(shè)備end device的加載。移植過(guò)程中必須盡量使用路由器內(nèi)的文件,例如muxlib.c、ipproto.c、end.h和netbuflib.c等。

2.3虛擬網(wǎng)卡編譯過(guò)程

VxWorks網(wǎng)絡(luò)框架如圖2所示。END(增強(qiáng)型網(wǎng)絡(luò)驅(qū)動(dòng))包括BSP和驅(qū)動(dòng)部分。

圖2 VxWorks網(wǎng)絡(luò)框架

系統(tǒng)啟動(dòng)后,任務(wù)tUsrRoot()初始化網(wǎng)絡(luò),函數(shù)調(diào)用關(guān)系為usrRoot()調(diào)用usrNetInit(),在usr-NetInit()中調(diào)用sockLibAdd(),sockLibAdd()調(diào)用bsdSockLibInit(),usrNetInit()也調(diào)用muxDev-Load()和ipAttach()。函數(shù)muxDevLoad()中,通過(guò)參數(shù)initstring兩次調(diào)用ln97xEndLoad()函數(shù),第一次返回設(shè)備名稱,避免重復(fù)加載,第二次裝載網(wǎng)卡參數(shù),初始化ln97xDevice和end_object結(jié)構(gòu)體。

應(yīng)用程序通過(guò)MUX接口實(shí)現(xiàn)與驅(qū)動(dòng)層接口函數(shù)的信息交互,在VxWorks虛擬機(jī)里可觀察MUX接口是否被正確創(chuàng)建。在shell中輸入muxShow命令,可以查看創(chuàng)建的MUX接口信息,包括設(shè)備名lnPci、設(shè)備unit號(hào)、END_OBJ參數(shù)值和網(wǎng)卡描述信息等,驗(yàn)證底層網(wǎng)卡驅(qū)動(dòng)是否被正確加載。虛擬網(wǎng)卡通過(guò)muxBind()函數(shù)綁定TCP/IP(傳輸控制協(xié)議/網(wǎng)際協(xié)議)棧[5],確認(rèn)虛擬網(wǎng)卡Attached上TCP/IP后,程序進(jìn)入?yún)f(xié)議驅(qū)動(dòng)程序?qū)?。該層?shí)現(xiàn)socket接口的協(xié)議初始化。

在協(xié)議驅(qū)動(dòng)程序?qū)?,主要?shí)現(xiàn)相關(guān)協(xié)議棧的函數(shù)調(diào)用和初始化工作。當(dāng)協(xié)議層通過(guò)接口隊(duì)列調(diào)用驅(qū)動(dòng)層的函數(shù)來(lái)啟動(dòng)輸出時(shí),驅(qū)動(dòng)接口層產(chǎn)生硬件中斷,并且產(chǎn)生協(xié)議隊(duì)列送協(xié)議層處理,這時(shí)協(xié)議層產(chǎn)生軟件中斷,與協(xié)議層有關(guān)的協(xié)議如TCP、UDP(用戶數(shù)據(jù)報(bào)協(xié)議)、IP、ICMP(Internet控制報(bào)文協(xié)議)和IGMP(Internet組管理協(xié)議)等做進(jìn)一步封裝,并通過(guò)socket隊(duì)列傳送給socket層,進(jìn)而實(shí)現(xiàn)系統(tǒng)調(diào)用。協(xié)議棧初始化功能由函數(shù)usrNetProtoInit()實(shí)現(xiàn),該函數(shù)由tornado組件自帶,但有些tornado for Pentium版本中并不會(huì)帶有函數(shù)usr-NetProtoInit()里所有函數(shù)的初始化代碼,這時(shí)可將tornado for PPC下的協(xié)議棧代碼移植進(jìn)該版本,實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議棧的正常初始化。

協(xié)議棧初始化函數(shù)移植完畢后,輸入ifAddrSet命令設(shè)置網(wǎng)卡IP地址,可用ifShow命令觀察網(wǎng)卡地址信息以及收發(fā)包情況。在VxWorks虛擬機(jī)中設(shè)置網(wǎng)卡帶外IP地址,如果能ping通VxWorks系統(tǒng),證明網(wǎng)卡驅(qū)動(dòng)程序已正常加載,然后調(diào)試socket接口,設(shè)置一個(gè)簡(jiǎn)單的服務(wù)器和客戶端通信socket函數(shù),實(shí)現(xiàn)虛擬網(wǎng)卡收發(fā)包功能。虛擬化調(diào)試平臺(tái)即搭建完成。

2.4可能出現(xiàn)的問(wèn)題和解決辦法

路由器主控代碼移植到虛擬環(huán)境下運(yùn)行時(shí),因tornado環(huán)境的不同,可能缺少在虛擬化環(huán)境下運(yùn)行時(shí)所需的相關(guān)參數(shù)初始化工作,進(jìn)而會(huì)經(jīng)常出現(xiàn)“PageFault”錯(cuò)誤。具體原因是指針?lè)祷劐e(cuò)誤,例如結(jié)構(gòu)體指針?lè)祷乜罩?,?dǎo)致該指針訪問(wèn)成員時(shí)出錯(cuò)。解決辦法是理順函數(shù)調(diào)用順序,避免錯(cuò)調(diào)或者漏調(diào)的情況。例如ln97xEnd.c中的ln97xEndLoad函數(shù),該函數(shù)實(shí)現(xiàn)驅(qū)動(dòng)和設(shè)備參數(shù)的初始化,會(huì)調(diào)用END_OBJ_INIT和END_M(jìn)IB_INIT函數(shù),這兩個(gè)函數(shù)實(shí)現(xiàn)end.h中end_bject結(jié)構(gòu)體初始化和mib-II結(jié)構(gòu)體初始化,如果錯(cuò)調(diào),那么在muxlib.c的muxdevload函數(shù)調(diào)用pNew→pFuncTable→ioctl時(shí)會(huì)出現(xiàn)PageFault錯(cuò)誤。

在ipproto.c中調(diào)用ipAttach函數(shù)時(shí),也可能出現(xiàn)PageFault,原因是一些函數(shù)沒(méi)有被調(diào)用,例如mbinit等。在ipAttach函數(shù)中,會(huì)調(diào)用muxbind綁定TCP/IP到lnPci設(shè)備上。網(wǎng)卡設(shè)備Attached之后,說(shuō)明muxbind綁定生效,此時(shí)可以設(shè)置網(wǎng)卡IP地址,調(diào)用socket接口。這時(shí)有可能出現(xiàn)無(wú)法成功設(shè)置IP地址的情況,原因是一些協(xié)議棧函數(shù)沒(méi)有被初始化,可移植網(wǎng)絡(luò)協(xié)議棧usrNetProtoInit()中的相關(guān)函數(shù),在相關(guān)BSP文件中做修改。

Tornado版本不同且缺少某些組件時(shí),網(wǎng)絡(luò)初始化順序也會(huì)不同。為了支持上層協(xié)議棧,移植時(shí)不能缺少原組件的功能。END增加了if模塊,實(shí)現(xiàn)MUX功能,也可以根據(jù)驅(qū)動(dòng)開(kāi)發(fā)需要,繞過(guò)MUX,實(shí)現(xiàn)上層應(yīng)用程序與驅(qū)動(dòng)接口直接通信。同時(shí)需注意處理器的大小端模式,PPC(一種精簡(jiǎn)指令集架構(gòu))的處理器是大端模式,x86架構(gòu)的Pentium處理器是小端模式。

3 高端路由器主控虛擬化的實(shí)現(xiàn)與評(píng)測(cè)

3.1主控虛擬化實(shí)現(xiàn)

在驅(qū)動(dòng)和socket接口調(diào)試通過(guò)后,需要調(diào)試軟件和集成代碼。軟件代碼主要指OSPF、RIP、BGP等協(xié)議棧,集成代碼是為實(shí)現(xiàn)一些新的平臺(tái)功能而增加的部分代碼,此外還有網(wǎng)管代碼,主要實(shí)現(xiàn)命令行控制功能。

為了提高純軟件虛擬化的運(yùn)行效率,可以通過(guò)修改軟件和集成代碼來(lái)優(yōu)化虛擬主控的性能。在實(shí)際應(yīng)用中,路由器主控虛擬化常與Openflow交換機(jī)結(jié)合來(lái)實(shí)現(xiàn)SDN,并實(shí)現(xiàn)與Openflow客戶端流表等信息進(jìn)行交互。

高端路由器虛擬主控卡在VxWorks虛擬機(jī)中的啟動(dòng)過(guò)程如圖3所示。

圖3 高端路由器虛擬主控卡啟動(dòng)過(guò)程

在圖3中,虛擬主控可以在監(jiān)控態(tài)進(jìn)行版本升級(jí),否則將在文件系統(tǒng)中尋找和加載主控代碼鏡像,最后在大程序中運(yùn)行,此時(shí)是特權(quán)態(tài),可以設(shè)置帶外IP地址。

調(diào)試路由器協(xié)議棧代碼,用服務(wù)器的背板接口連接普通交換機(jī)或者Openflow交換機(jī)、思博倫儀表及普通電腦,在儀表中設(shè)置二層和三層報(bào)文進(jìn)行流量發(fā)包測(cè)試。在VxWorks虛擬機(jī)中設(shè)置帶外口,連接Secure CRT軟件,輸入相關(guān)命令行,觀察MAC表和路由表的建立信息、協(xié)議包的接收和轉(zhuǎn)發(fā)情況。此時(shí),高端路由器主控虛擬化的基本工作已實(shí)現(xiàn),后續(xù)如需添加新的協(xié)議與功能,可以進(jìn)一步修改軟件和集成代碼以適應(yīng)新的虛擬化需求。

3.2主控虛擬化評(píng)測(cè)

高端路由器主控虛擬化的評(píng)測(cè)主要針對(duì)主控轉(zhuǎn)發(fā)數(shù)據(jù)包性能和路由協(xié)議功能的實(shí)現(xiàn)。虛擬主控可以與外接普通交換機(jī)或者Openflow交換機(jī)進(jìn)行通信,通過(guò)思博倫儀表進(jìn)行二層和三層包打流測(cè)試來(lái)測(cè)評(píng)其數(shù)據(jù)包的轉(zhuǎn)發(fā)性能。

虛擬主控主要功能是完成協(xié)議包的處理,包括OSPF、RIP、BGP等協(xié)議包。圖4所示為服務(wù)器虛擬主控多區(qū)域OSPF測(cè)試拓?fù)洹?/p>

圖4 服務(wù)器虛擬主控多區(qū)域OSPF測(cè)試拓?fù)?/p>

圖中服務(wù)器虛擬主控、路由器1和路由器2的OSPF主要配置命令分別如下:

其中,router ospf命令用于啟動(dòng)和配置IPv4的OSPF協(xié)議,數(shù)字1為默認(rèn)進(jìn)程號(hào),network命令用于宣告參與OSPF協(xié)議的路由接口,area 0代表OSPF路由接口的主干區(qū)域,設(shè)置其他區(qū)域并將其連接到主干區(qū)域,例如area 1。在服務(wù)器的虛擬主控環(huán)境下,配置完上述命令后,可以在該虛擬主控環(huán)境下輸入命令show ip ospf neighbor,查看此時(shí)虛擬主控建立的ospf鄰居信息。

其他協(xié)議包的測(cè)試也可以借鑒常規(guī)路由器主控卡功能的測(cè)試步驟。測(cè)試完成后,將數(shù)據(jù)與常規(guī)路由器主控測(cè)試結(jié)果進(jìn)行對(duì)比,以對(duì)虛擬主控功能進(jìn)行改進(jìn)。

4 結(jié)束語(yǔ)

基于Vmware平臺(tái)下的x86虛擬化開(kāi)發(fā),可以有效利用服務(wù)器硬件資源,包括高性能至強(qiáng)系列Intel處理器等,減少網(wǎng)絡(luò)設(shè)備開(kāi)發(fā)周期和運(yùn)營(yíng)商網(wǎng)絡(luò)設(shè)施運(yùn)維成本。而高端路由器虛擬主控是虛擬路由器的核心組成部分,對(duì)主控單元實(shí)現(xiàn)虛擬化,可以更靈活地實(shí)現(xiàn)主流路由協(xié)議包的處理和轉(zhuǎn)發(fā),為SDN和云計(jì)算技術(shù)的開(kāi)發(fā)與應(yīng)用提供新的技術(shù)支撐。

[1]Wright G R,Stevens W R.TCP/IP IIIustrated Volume2:The Implementation[M].北京:機(jī)械工業(yè)出版社,2010.

[2]董耀祖,周正偉.基于X86架構(gòu)的系統(tǒng)虛擬機(jī)技術(shù)與應(yīng)用[J].計(jì)算機(jī)工程,2006,32(13):71-73.

[3]徐惠民.基于VxWorks的嵌入式系統(tǒng)及實(shí)驗(yàn)[M].北京:北京郵電大學(xué)出版社,2006.

[4]Kurose James F,Ross Keith W.Computer Networking:A Top-Down Appproach[M].Fourth Edition.北京:機(jī)械工業(yè)出版社,2008.

[5]楊洪波.高性能網(wǎng)絡(luò)虛擬化技術(shù)研究[D].上海:上海交通大學(xué),2012.

The Router’s Main Control unit Function Virtualization Based on Vmware

LI Wen-wei1,2,JI Meng1,2,DAI Fei3
(1.Wuhan Research Institute of Post and Telecommunications,Wuhan 430074,China;2.Wuhan FiberHome Networks Co.,Ltd.,Wuhan 430074,China; 3.Jiangxi Normal University,Nanchang 330022,China)

The virtualization of the Router’s Main Control unit function based on the x86platform can provide support for several technologies including virtualization,Software Defined Network(SDN)and cloud computing for further applications.Traditional router code is developed on private network processor.In order to achieve traditional function of a router in a virtualized environment,we recompile the virtual network interface card’s board support package,drive and protocol stacks based on traditional router code.This method realizes the router’s code mirror running normally in Vmware virtual machines based on normal Windows platform.The feasibility is also verified by the sending and receiving packet test.Compared with the traditional method of programmable router virtualization,this method utilizes a pure software virtualization technology and it is based on VxWorks router protocol stack,which shows much better versatility and flexibility.

router;virtualization;NFV;SDN

TN393

A

1005-8788(2016)02-0011-04

10.13756/j.gtxyj.2016.02.004

2015-08-29

黎文偉(1985-),男,湖北大悟人。碩士研究生,主要研究方向?yàn)橥ㄐ排c信息系統(tǒng)。

猜你喜歡
網(wǎng)卡路由器虛擬化
買千兆路由器看接口參數(shù)
維持生命
路由器每天都要關(guān)
路由器每天都要關(guān)
部署Linux虛擬機(jī)出現(xiàn)的網(wǎng)絡(luò)故障
基于OpenStack虛擬化網(wǎng)絡(luò)管理平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
Server 2016網(wǎng)卡組合模式
對(duì)基于Docker的虛擬化技術(shù)的幾點(diǎn)探討
淺析虛擬化技術(shù)的安全保障
H3C CAS 云計(jì)算管理平臺(tái)上虛擬化安全防護(hù)的實(shí)現(xiàn)
屏边| 电白县| 霍林郭勒市| 沙坪坝区| 茌平县| 临城县| 昭觉县| 利辛县| 剑川县| 五原县| 德庆县| 岳普湖县| 信阳市| 梓潼县| 拉孜县| 宜良县| 兰坪| 清原| 新平| 万山特区| 会宁县| 环江| 中山市| 盖州市| 巴青县| 吉安市| 敦煌市| 新蔡县| 宁夏| 德保县| 淮安市| 黄陵县| 浦江县| 镇雄县| 土默特右旗| 布拖县| 贵南县| 石楼县| 翼城县| 满洲里市| 丹东市|