以太網(wǎng)產(chǎn)品召喚及遠(yuǎn)程配置協(xié)議 串口服務(wù)器
以太網(wǎng)產(chǎn)品召喚及遠(yuǎn)程配置協(xié)議
一、 適用范圍
我公司所有嵌入式以太網(wǎng)產(chǎn)品均支持本協(xié)議。所有產(chǎn)品均可以使用此協(xié)議對設(shè)備進(jìn)行遠(yuǎn)程召喚、配置。
二、 工作方式
上位機(jī)軟件發(fā)送一個(gè)定長格式的UDP廣播報(bào)文到局域網(wǎng),設(shè)備收到這個(gè)報(bào)文后,填充相關(guān)數(shù)據(jù),并用UDP報(bào)文返回給上位機(jī)。
通訊采用UDP廣播方式工作,上位機(jī)的UDP發(fā)送地址為廣播地址:255.255.255.255,使用端口:6799。所以此協(xié)議不能跨網(wǎng)段搜索設(shè)備。
協(xié)議也支持遠(yuǎn)程配置,可以在遠(yuǎn)程設(shè)置一個(gè)設(shè)備的IP、子網(wǎng)掩碼和標(biāo)識。
三、 定長數(shù)據(jù)結(jié)構(gòu)
此數(shù)據(jù)結(jié)構(gòu)為單字節(jié)對齊。
typedef struct __attribute__ ((packed)) _MUSTER_TELE {
//消息ID,默認(rèn)為4個(gè)0。
u_long xid;
//消息類型,0-上位機(jī)發(fā)出,用于召喚設(shè)備,1-設(shè)備響**喚(設(shè)備返回),3-上位機(jī)向設(shè)備發(fā)送配置數(shù)據(jù)
u_char msg_type;
//muster版本,一直為1。
u_charmuster_ver;
//主機(jī)名,msg_type=0時(shí)置0,msg_type=1時(shí)為設(shè)備返回的主機(jī)名,msg_type=3時(shí)指定設(shè)備的新主機(jī)名。
u_charnet_hostname[12];
//網(wǎng)絡(luò)物理地址,msg_type=0時(shí)置0,msg_type=1時(shí)為設(shè)備返回的MAC地址,
//msg_type=3時(shí),指定為要修改設(shè)備的Mac地址。
u_charnet_mac[6];
//IP地址,msg_type=0時(shí)置0,msg_type=1時(shí)為設(shè)備返回的IP地址,msg_type=3時(shí)設(shè)備修改IP為該地址。
u_longnet_ip_addr;
//子網(wǎng)絡(luò)掩碼,msg_type=0時(shí)置0,msg_type=1時(shí)為設(shè)備返回的掩碼,msg_type=3時(shí)設(shè)備修改掩碼為該掩碼。
u_longnet_ip_mask;
//網(wǎng)關(guān),保留參數(shù),尚未使用。
u_longnet_gateway;
//產(chǎn)品型號,尚未使用。
u_long devmodel;
//工作模式,0-無效,1-Server模式,2-Client模式,10-UDP模式
//msg_type=0時(shí)置0,msg_type=1時(shí)為設(shè)備返回的工作模式,msg_type=3時(shí)設(shè)備忽略該參數(shù)。
u_long workmodel;
//設(shè)備的端口數(shù),msg_type=0時(shí)置0,msg_type=1時(shí)為設(shè)備返回的端口數(shù)量,msg_type=3時(shí)設(shè)備忽略該參數(shù)。
u_long portnum;
//**個(gè)網(wǎng)絡(luò)監(jiān)聽,保留參數(shù),尚未使用
u_long firstport;
//文本形式的固件版本說明,
//msg_type=0時(shí)置0,msg_type=1時(shí)為設(shè)備返回的固件版本說明,msg_type=3時(shí)設(shè)備忽略該參數(shù)。
charfirmware[24];
//文本形式的口令。
//msg_type=0時(shí)置0,msg_type=1設(shè)備忽略該參數(shù),msg_type=3時(shí)設(shè)備將檢查該口令,如果合法修改自身參數(shù)。
u_charcfgpwd[12];
//msg_type=0時(shí)置0,msg_type=1設(shè)備返回當(dāng)前的監(jiān)聽IP,msg_type=3時(shí)設(shè)備忽略該參數(shù)。
//映射IP,與mapport聯(lián)合使用,mapip和mapport數(shù)組的第1個(gè)元素為一個(gè)可使用的TCP/IP連接。
//如:mapip[0]與mapport[0]指出設(shè)備**個(gè)監(jiān)聽的IP和Port??梢灾苯邮褂眠@個(gè)參數(shù)與設(shè)備建立TCP/IP連接。
u_long mapip[32];
//映射端口
//msg_type=0時(shí)置0,msg_type=1設(shè)備返回當(dāng)前的監(jiān)聽Port,msg_type=3時(shí)設(shè)備忽略該參數(shù)。
u_longmapport[32];
} MUSTER_TELE;
四、 數(shù)據(jù)結(jié)構(gòu)說明
1. IP地址存儲
上述數(shù)據(jù)結(jié)構(gòu)中的IP地址均為32bit長整型數(shù)據(jù),使用inet_addr轉(zhuǎn)換后發(fā)送。
例如net_ip_addr=inet_addr('192.168.192.100')
2. 數(shù)據(jù)結(jié)構(gòu)在使用前必須清零。
3. 發(fā)送msg_type=3的遠(yuǎn)程配置報(bào)文時(shí),需要注意,必須要在數(shù)據(jù)結(jié)構(gòu)中,正確指定要配置設(shè)備的MAC地址和口令。因?yàn)樵O(shè)備是根據(jù)MAC地址來判斷是否為屬于自己的配置報(bào)文。如果MAC正確,口令錯(cuò)誤,設(shè)備也將會(huì)拒絕更新配置。
五、 示例報(bào)文
1. 發(fā)送召喚報(bào)文
memset(sendbuf, 0, sizeof(sendbuf));
sendbuf.msg_type=0
發(fā)送此報(bào)文到255.255.255.255:6799
2. 設(shè)備返回的報(bào)文樣例
recbuf.msg_type=1
recbuf.muster_ver = 1
recbuf.hostname ='ServerID'
recbuf.net_mac ='010203040526'
recbuf.net_ip_addr = 1690347712 //設(shè)備IP
recbuf.net_ip_mask =16777215 //設(shè)備子網(wǎng)掩碼
recbuf.net_gateway = 0
recbuf.workmodel=0 //工作模式,1-Server模式,2-Client模式
recbuf.portnum=3 //設(shè)備硬件端口數(shù)
recbuf.mapip[0]=1690347712 //設(shè)備第1個(gè)監(jiān)聽IP
recbuf.mapport[0]=6020 //設(shè)備第1個(gè)監(jiān)聽端口,對應(yīng)第1個(gè)硬件端口。
recbuf.mapip[1]=1690347712
recbuf.mapport[1]=6021
recbuf.mapip[2]=1690347712
recbuf.mapport[2]=6030
3. 向設(shè)備發(fā)送遠(yuǎn)程配置報(bào)文
memset(sencfgdbuf, 0, sizeof(sendbuf));
sencfgdbuf.msg_type=3
sencfgdbuf.net_hostname='123456789ABC'
sencfgdbuf.net_ip_addr=inet_addr('192.168.192.100')
sencfgdbuf.net_ip_mask=inet_addr('255.255.255.0')
sencfgdbuf.net_gateway=0
sencfgdbuf.net_mac=要配置的設(shè)備MAC地址//必須是正確的網(wǎng)絡(luò)物理地址。
sencfgdbuf.cfgpwd='admin'//必須為正確的配置口令,與管理菜單登錄口令相同。
以太網(wǎng)產(chǎn)品召喚及遠(yuǎn)程配置協(xié)議 串口服務(wù)器