*muxLibInit()初始化連接協(xié)議與END driver的mux層。
*usrEndLibInit()(在comps/src/net/usrEndLib.c中)支持使用mux/END接口的網(wǎng)絡(luò)設(shè)備。
*usrNetworkBoot()使用啟動參數(shù)來初始化一個網(wǎng)絡(luò)設(shè)備。
*usrNetAppInit()初始化網(wǎng)絡(luò)應(yīng)用協(xié)議和一些server,比如RPC、rlogin、telnet server以及ftp server等等。
②在usrEndibInit()中,遍歷configNet.h內(nèi)的endDevTb1[]數(shù)組,調(diào)用muxDevLoad(…)裝載END驅(qū)動程序,并調(diào)用muxDevStart(…)將它啟動。
③在usrNetworkBoot()中調(diào)用:
*usrNetBoot()從命令參數(shù)行(bootline)提取網(wǎng)絡(luò)接口的IP地址、目標(biāo)名字(target name)以及單元號(unit number).
*usrNetmaskGet()獲取接口的網(wǎng)絡(luò)掩碼。
*usrNetworkDevStart()加入并配置一個網(wǎng)絡(luò)設(shè)備(cpm或者motfec)。
④在usrNetworkDevStart()中,調(diào)用usrNetEndDevStart(…)、usrNetBsdDevStart(…)以及usrNetLoopbackStart()。以上3個函數(shù)中,使用命令參數(shù)行啟動了1個物理網(wǎng)絡(luò)接口以及1個本地回路接口。
從以上流程來看,當(dāng)定義了FADS_860T時,默認(rèn)根據(jù)命令參數(shù)行(在config.h中,有一個初始的默認(rèn)值DEFAULT_BOOT_LINE)啟動并配置了一個motfec網(wǎng)絡(luò)接口。
支持雙網(wǎng)口時的修改:
①在config.h中加入#define INCLUDE_CPM這一行。
②在configNet.h中,于#ifndef IP_MAX_UNITS行之前加入1行:#undef IP_MAX_UNITS。在默認(rèn)情況下,由于僅僅支持motfec接口,IP_MAX_UNITS的值為1。因此,需要重新定義IP_MAX_UNITS,使其等于我們加入的mux有關(guān)的網(wǎng)絡(luò)接口的個數(shù)。
③在usrNetEndDevStart(…)中的#endif /*
CPU = =SIMNT*/行之后加入以下幾行代碼;
#ifdef FADS_860T
#ifdef INCLUDE_CPM
usrCPMEndDevStart(“cpm”,1,InInfo[0].target_name,InPnfo[0].ip_address,InInfo[0].netmask);
routeAdd(IpInfo[0].network,IpInfo[0].gateway);
#endif
#endif/*FADS_860T*/
以下是有關(guān)定義以及usrCPMEndDevStart(…)的源代碼:
struct cpmInInfo{
char *target_name; /*目標(biāo)的名稱*/
char *ip_address; /*目標(biāo)的IP地址*/
char *network; /*網(wǎng)絡(luò)*/
int netmask; /*網(wǎng)絡(luò)的掩碼*/
char *gateway; /*網(wǎng)關(guān)*/
};
struct cpmInInfo IpInfo[]= {
{NULL,NULL,NULL,0,NULL},
{NULL,NULL,NULL,0,NULL},
{NULL,NULL,NULL,0,NULL}
};
void usrCPMEndDevStart ();
void usrCPMEndDevStart (
char* pDevName, /*設(shè)備的名稱*/
int unitNum, /*單元號*/
char* pTgtName, /*目標(biāo)機(jī)名稱*/
char* pAddrString, /*網(wǎng)絡(luò)地址*/
int netmask /*網(wǎng)絡(luò)掩碼*/
)
{
END_OBJ* pEnd;
M2_INTERFACETBL endM2Tb1;
if(pDevName= =NULL)
return;
#ifdef INCLUDE_END
pEnd=endFindByName(pDevName,unitNum);
if(pEnd= =NULL){
printf("Could not find %s%d",pDevName,unitNum);
returm;
}
if(muxIoctl(pEnd,EIOCGMIB2,(caddr_t)&endM2Tbl)= =ERROR)}
printf("Cannot perform EIOCMIB2 ioctl.");
return;
}
if(ipAttach(unitNum,pDevName)!=OK){
printf("Failed to attach to device %s",pDevName);
return;
}

if(usrNetIfConfig(pDevName,unitNum,pAddrString,pTgtName,netmask)!=OK){
printf("Failed to configure %s%d for IP.",pDevName,unitNum);
return;
}
printf("Attached TCP/IP interface to %s unit %d",
pDevName,unitNum);
#endif /*INCLUDE_END*/
return;
}
以上我們加入的設(shè)備名字由設(shè)備名和unit number組成。在加入第2個網(wǎng)絡(luò)接口之前,第1個網(wǎng)絡(luò)接口motfec0已經(jīng)可以正常工作了。由于所有的ENDDRIVER都是通過遍歷在configNet.h中的endDevTbl[]數(shù)組而啟動的,因此第2個網(wǎng)絡(luò)接口的unit number是1。依次數(shù)推,第3個網(wǎng)絡(luò)接口的unit number是2…。我們加入的第2個網(wǎng)絡(luò)接口的名字為cpml。
在支持雙網(wǎng)口時,不同的網(wǎng)口應(yīng)處在不同的網(wǎng)段上,每一個網(wǎng)口可支持多個網(wǎng)絡(luò)地址。





