ADSL網(wǎng)管系統(tǒng)的實(shí)現(xiàn)

相關(guān)專題: 華為

黑龍江省數(shù)據(jù)通信局 車雪松


  ADSL是一項(xiàng)變得越來越為家庭和中小企業(yè)用戶所熟知的寬帶技術(shù),它被稱為“非對(duì)稱”是由于其雙向或雙工帶寬中的大部分被分配給了下行方向,即向用戶發(fā)送數(shù)據(jù)的方向。ADSL下行速率可高達(dá)6.1Mbps,而上行速率最多為640Kbps。由于ADSL技術(shù)具有在帶寬和資費(fèi)上的優(yōu)勢(shì),各ISP都在廣泛地推廣ADSL業(yè)務(wù)。


  一個(gè)大型ISP的網(wǎng)絡(luò)往往由許多節(jié)點(diǎn)組成,ADSL設(shè)備被分布在各個(gè)節(jié)點(diǎn)中為用戶提供接入服務(wù),同時(shí)每個(gè)節(jié)點(diǎn)中又可能存在不同廠家的或同一廠家的不同型號(hào)的ADSL設(shè)備。目前的情況是,各廠家提供的ADSL網(wǎng)管系統(tǒng)只是針對(duì)本身設(shè)備或單個(gè)節(jié)點(diǎn)的ADSL設(shè)備進(jìn)行網(wǎng)絡(luò)管理,而無法對(duì)ISP所有各節(jié)點(diǎn)的不同種類的ADSL設(shè)備進(jìn)行統(tǒng)一管理。筆者對(duì)黑龍江省所采用的ADSL設(shè)備進(jìn)行了分析研究,開發(fā)出一套ADSL網(wǎng)絡(luò)管理系統(tǒng),將全省各節(jié)點(diǎn)的各種ADSL設(shè)備統(tǒng)一到了一個(gè)管理平臺(tái)上。


系統(tǒng)的總體設(shè)計(jì)



  為了提高整個(gè)系統(tǒng)的運(yùn)行效率,同時(shí)也為了使系統(tǒng)管理員在訪問網(wǎng)管系統(tǒng)時(shí)有一個(gè)好的視覺效果,我們將ADSL網(wǎng)絡(luò)管理系統(tǒng)分為前臺(tái)和后臺(tái)兩個(gè)部分。前、后臺(tái)程序相對(duì)獨(dú)立運(yùn)行。前臺(tái)程序用HTML語言編寫,調(diào)用后臺(tái)程序的輸出結(jié)果并加入說明。后臺(tái)程序用C語言編寫,負(fù)責(zé)采集數(shù)據(jù)、處理數(shù)據(jù)、生成結(jié)果輸出。另外,為了便于前臺(tái)和后臺(tái)的交互,在系統(tǒng)中采用CGI技術(shù)來顯示ADSL接入設(shè)備的面板。這樣系統(tǒng)管理員在需要調(diào)用此網(wǎng)絡(luò)系統(tǒng)時(shí),在任意計(jì)算機(jī)上調(diào)用瀏覽器就可以看到相應(yīng)ADSL設(shè)備的運(yùn)行情況。


  對(duì)于一個(gè)ADSL網(wǎng)絡(luò)管理系統(tǒng)來說,第一步要做的事情就是采集ADSL接入設(shè)備上有關(guān)接入端口當(dāng)前占用情況的原始數(shù)據(jù)。我們利用SNMP協(xié)議來獲得這些數(shù)據(jù),通過開發(fā)基于UDP的SNMP通信程序取得ADSL接入設(shè)備上MIB中的相應(yīng)項(xiàng)。如果沒有一個(gè)唯一對(duì)應(yīng)的MIB項(xiàng)是我們所需要的,還可以通過取得ADSL上每個(gè)接入端口狀態(tài)的方法來最終統(tǒng)計(jì)出所需要的數(shù)據(jù)。


  在采集數(shù)據(jù)時(shí)生成兩種庫(kù)文件:一種為.temp文件,另一種為.che文件。這兩種庫(kù)文件都是文本文件。首先將取得的原始數(shù)據(jù)放入每臺(tái)ADSL接入設(shè)備所對(duì)應(yīng)的數(shù)據(jù)庫(kù)中,因?yàn)閷?duì)每臺(tái)ADSL接入設(shè)備來說,其槽位和端口號(hào)是固定的,所以此數(shù)據(jù)庫(kù)可以簡(jiǎn)化為一個(gè)文本文件,其內(nèi)容是順序存放的端口狀態(tài),而文件名則為相應(yīng)ADSL接入設(shè)備的網(wǎng)管IP地址+.temp。這樣,當(dāng)后臺(tái)程序的采集部分執(zhí)行完畢后,對(duì)每臺(tái)ADSL接入設(shè)備就有了一個(gè)唯一對(duì)應(yīng)的庫(kù)文件,文件內(nèi)容為當(dāng)前該設(shè)備各端口的狀態(tài)標(biāo)識(shí),每次后臺(tái)程序執(zhí)行時(shí)這些庫(kù)文件被清空重寫。.che庫(kù)文件存放的內(nèi)容為每天各節(jié)點(diǎn)的占用端口數(shù)及總的占用端口數(shù),每條記錄對(duì)應(yīng)兩個(gè)數(shù)據(jù)項(xiàng),分別為端口數(shù)及所對(duì)應(yīng)的時(shí)間。


  在后臺(tái)程序的數(shù)據(jù)處理部分,其輸入為數(shù)據(jù)采集部分的輸出,可統(tǒng)計(jì)出現(xiàn)有設(shè)備的端口占用情況和設(shè)備的運(yùn)行情況。


系統(tǒng)的程序?qū)崿F(xiàn)


1.總體流程
























前臺(tái)程序


 


后臺(tái)程序

圖1 程序流程圖




2.SNMP通信程序






  后臺(tái)程序進(jìn)行數(shù)據(jù)采集時(shí)利用基于UDP的SNMP協(xié)議獲取ADSL接入設(shè)備上的端口狀態(tài)信息。利用SNMP協(xié)議進(jìn)行通信的過程如圖2所示。




圖3 通信過程圖



  本文以華為公司的ADSL設(shè)備為例介紹程序的實(shí)現(xiàn)過程。華為的MA5100提供對(duì)用戶的接入服務(wù),MA5100采用標(biāo)準(zhǔn)插框結(jié)構(gòu)設(shè)計(jì),每框16個(gè)槽位,可插16塊板,其中7塊為ADSL用戶接入板,每塊板上提供16個(gè)端口。

  有關(guān)端口狀態(tài)的MIB項(xiàng)如下:

  1.3.6.1.4.1.2011.2.6.3.6.3.2.1.1.0.0.0

  其中,倒數(shù)第三個(gè)0代表機(jī)框號(hào)為0,當(dāng)MA5100為單機(jī)框時(shí),此項(xiàng)為0。倒數(shù)第二個(gè)0代表槽位號(hào)為0,為了獲取一個(gè)設(shè)備上的所有用戶狀態(tài)信息,在此項(xiàng)上分別填入0~6。倒數(shù)第一個(gè)0代表端口號(hào)為0,在程序中應(yīng)依次填入0~15。

  以上的MIB項(xiàng)有7個(gè)取值,分別代表的含義為:0:激活;1:去激活;2:物理損壞;3:正在激活;4:正在去激活;5:阻塞;6:解阻塞。其中我們?nèi)?和3狀態(tài)為用戶在線狀態(tài)。

  我們利用adslwalk程序來遍歷MIB樹,該程序每執(zhí)行一次,獲取一塊板上的信息,需執(zhí)行7次獲取一臺(tái)設(shè)備上的所有信息。以下為adslwalk程序的主要部分,程序中的函數(shù)調(diào)用了如圖3所示的一些基本通信函數(shù):

if ((fp=fopen(filebuf,“a”))==NULL)

printf(“cann’t open file\n”);

while (1)

{

pdu = snmp_pdu_create(SNMP_PDU_GETNEXT);

snmp_add_null_var(pdu, name, name_length);

status = snmp_synch_response(ss, pdu,&response);

for (vars = response->variables; vars; vars = vars->next_variable)

{

memcpy((char *)name, (char *)vars->name,

vars->name_length * sizeof(oid));

name_length = vars->name_length;

sprint_value(buf,vars->name,vars->

name_length,vars);

j=strlen(buf);

buf[j]=‘\n’;

buf[j+1]=‘\0’;

fwrite(buf,strlen(buf),1,fp);

} /* End of var processing loop */

}

fclose(fp);

adslwalk程序執(zhí)行時(shí)的格式為:

adslwalk 10.10.20.30 public

1.3.6.1.4.1.2011.2.6.3.6.3.2.1.1.0.0

  其中10.10.20.30為指定MA5100設(shè)備的網(wǎng)管地址。程序執(zhí)行完畢后,生成名為10.10.20.30.temp的文件,文件內(nèi)容為該MA5100的用戶端口狀態(tài)信息。


3.CGI程序

   在本系統(tǒng)中,為了便于前臺(tái)和后臺(tái)之間的交互,筆者采用了CGI技術(shù),用它在WWW中生成MA5100設(shè)備的面板圖。

   標(biāo)準(zhǔn)的CGI程序是用戶和后臺(tái)的直接交互,而我們所編寫的CGI程序則將.temp庫(kù)文件作為程序輸入部分。

  以下為本系統(tǒng)中CGI程序的主要部分:

strcpy(filename,homedir);

strcat(filename,“10.10.20.30.temp”);

draw(filename);

/*下面是繪圖函數(shù)*/

draw(ptr)

char *ptr;

{

FILE *fp;

struct stat statbuf;

char buf[200];

int i=0,j,k;

char inputs[200];

if ((fp=fopen(ptr,“r”))==NULL)

printf(“<H4 ALIGN=center>can’t open file

</A></H4>\n”);

fstat(fileno(fp),&statbuf);

if (statbuf.st_size!=0)

{

i=0;

while (!feof(fp))

{

fgets(buf,sizeof(buf)-1,fp);

if (strstr(buf,“0”))

inputs[i]=‘0’;

else

if (strstr(buf,“3”))

inputs[i]=‘3’;

else

inputs[i]=‘5’;

i++;

}

printf(“<TABLE ALIGN=center BORDER=2>”); printf(“<TR><TH>TH><TH>0</TH>

<TH>1</TH><TH>2</TH><TH>3</TH><TH>4</TH><TH>5</TH><TH>6</TH></TR>”);

for (k=0;k<16;k++)

{

printf(“<TR>”);

for (j=0;j<7;j++)

{

if (j==0)

printf(“<TD>%d</TD>”,k);

if (inputs[j*16+k]==‘0’)

printf(“<TD bgcolor=00FF00>%c

</TD>”,inputs[j*16+k]);

else{

if (inputs[j*16+k]==‘3’)

printf(“<TD bgcolor=FFFF00>%c

</TD>”,inputs[j*16+k]);

else

printf(“<TD bgcolor=FF0000>%c

</TD>”,inputs[j*16+k]);

}

}

printf(“</TR>”);

}

printf(“</TABLE>”);

}

fclose(fp);

return(0);

}

上述程序放置在/cgi-bin目錄下,當(dāng)管理員按下查看面板圖的按鈕時(shí),系統(tǒng)調(diào)用該程序輸出結(jié)果。在前臺(tái)的HTML文件中我們用以下的語句來調(diào)用CGI程序:

<H3 ALIGN=left><A HREF=“/cgi-bin/adsltable”>Table</A></H3>


4.各種圖片的生成程序

以Solaris操作系統(tǒng)為例,加載ZBLIB、GDLIB軟件包,就可以在Solaris下用C語言編寫程序,將采集來的數(shù)據(jù)生成JPG、PNG等壓縮格式的圖片。


5.后臺(tái)程序的調(diào)度

以Solaris操作系統(tǒng)為例,在Solaris中利用Crontab來定期重復(fù)執(zhí)行相關(guān)命令。Crontab命令的定期執(zhí)行是由Cron daemon完成的。Cron daemon實(shí)時(shí)檢查系統(tǒng)的/var/spool/cron/crontabs目錄,根據(jù)指定的時(shí)間運(yùn)行相應(yīng)的程序。

Cron daemon根據(jù)每個(gè)Crontab文件中的命令定期運(yùn)行系統(tǒng)任務(wù),Crontab文件的每行代表一條命令,每行開頭是該條命令執(zhí)行的日期和時(shí)間。

時(shí)間域的順序?yàn)椋悍、小時(shí)、日期、月、星期。例如:

0 20 * * 0 ,4 /etc/cron.d/logchecker

表示每周日、周四晚8點(diǎn)運(yùn)行l(wèi)ogchecker。

Crontab存放在/var/spool/cron/crontabs目錄中系統(tǒng)默認(rèn)的Crontab文件中。

建立Crontab的過程如下:

設(shè)置全局變量EDITOR:

$setenv EDITOR /usr/bin/vi

建立Crontab文件:

$crontab -e

按語法要求,加入要求系統(tǒng)定時(shí)完成的任務(wù)。

存盤退出。

查看Crontab內(nèi)容用以下命令:

$crontab -l

  下面是一個(gè)應(yīng)用實(shí)例:

[root@search che]# crontab -l

# This is a crontab file , please don't edit it unless necessary .

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/httpd/html/gddemo.sh

19,49 * * * * /home/httpd/html/private/adslgddemo

#The end.

  其中第4行為對(duì)ADSL網(wǎng)絡(luò)管理系統(tǒng)后臺(tái)程序的調(diào)度,在每小時(shí)的19分和49分各執(zhí)行一次,也就是每半小時(shí)執(zhí)行一次。


摘自《計(jì)算機(jī)世界》
   

我推薦大家讀

輕松參與

VS

表達(dá)立場(chǎng)

這是垃圾文章


微信掃描分享本文到朋友圈
掃碼關(guān)注5G通信官方公眾號(hào),免費(fèi)領(lǐng)取以下5G精品資料
  • 1、回復(fù)“YD5GAI”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):5G網(wǎng)絡(luò)AI應(yīng)用典型場(chǎng)景技術(shù)解決方案白皮書
  • 2、回復(fù)“5G6G”免費(fèi)領(lǐng)取《5G_6G毫米波測(cè)試技術(shù)白皮書-2022_03-21
  • 3、回復(fù)“YD6G”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):6G至簡(jiǎn)無線接入網(wǎng)白皮書
  • 4、回復(fù)“LTBPS”免費(fèi)領(lǐng)取《《中國(guó)聯(lián)通5G終端白皮書》
  • 5、回復(fù)“ZGDX”免費(fèi)領(lǐng)取《中國(guó)電信5GNTN技術(shù)白皮書
  • 6、回復(fù)“TXSB”免費(fèi)領(lǐng)取《通信設(shè)備安裝工程施工工藝圖解
  • 7、回復(fù)“YDSL”免費(fèi)領(lǐng)取《中國(guó)移動(dòng)算力并網(wǎng)白皮書
  • 8、回復(fù)“5GX3”免費(fèi)領(lǐng)取《R1623501-g605G的系統(tǒng)架構(gòu)1
  • 本周熱點(diǎn)本月熱點(diǎn)

     

      最熱通信招聘

      最新招聘信息

    最新論壇貼子