欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種PTP報(bào)文的處理方法及SOC與流程

文檔序號(hào):12490583閱讀:702來(lái)源:國(guó)知局
一種PTP報(bào)文的處理方法及SOC與流程

本發(fā)明涉及信息處理技術(shù)領(lǐng)域,尤其涉及一種PTP報(bào)文的處理方法及SOC。



背景技術(shù):

精確時(shí)鐘同步協(xié)議(Precision Time Protocol,PTP)是一種對(duì)標(biāo)準(zhǔn)以太網(wǎng)終端設(shè)備進(jìn)行時(shí)間和頻率同步的協(xié)議,也稱為IEEE 1588,簡(jiǎn)稱為1588。在PTP時(shí)鐘同步系統(tǒng)(即PTP域)中,有且只有一個(gè)同步時(shí)鐘,PTP域中的所有終端設(shè)備都與該時(shí)鐘保持同步。其中,PTP域中發(fā)布同步時(shí)鐘的節(jié)點(diǎn)為主節(jié)點(diǎn),接收同步時(shí)鐘的節(jié)點(diǎn)為從節(jié)點(diǎn)。主節(jié)點(diǎn)與從節(jié)點(diǎn)可利用1588時(shí)鐘同步算法通過(guò)交互PTP報(bào)文實(shí)現(xiàn)時(shí)鐘同步。

現(xiàn)有技術(shù)中,PTP域中的節(jié)點(diǎn)在接收到PTP報(bào)文時(shí),由軟件為該P(yáng)TP報(bào)文添加接收時(shí)間戳。對(duì)于Linux這樣的非實(shí)時(shí)性系統(tǒng),由于軟件處理PTP報(bào)文存在一定的延遲,所以,PTP報(bào)文的實(shí)際接收時(shí)間與軟件為該P(yáng)TP報(bào)文添加的接收時(shí)間戳之間會(huì)存在較大的誤差,從而導(dǎo)致時(shí)鐘同步不準(zhǔn)確。

另外,現(xiàn)有的Linux系統(tǒng)中,物理層接收到報(bào)文(該報(bào)文可以是PTP報(bào)文,也可以是非PTP報(bào)文)后,通過(guò)網(wǎng)卡及上層驅(qū)動(dòng)將該報(bào)文上傳至系統(tǒng)層的協(xié)議棧部分,該協(xié)議棧部分通過(guò)調(diào)用相應(yīng)的處理函數(shù),對(duì)該報(bào)文進(jìn)行相應(yīng)處理后上報(bào)至應(yīng)用層。如果該報(bào)文為PTP報(bào)文,則應(yīng)用層以軟件方式為該P(yáng)P報(bào)文添加接收時(shí)間戳,并采用相關(guān)算法,實(shí)現(xiàn)該P(yáng)TP報(bào)文的接收端與發(fā)送端之間的時(shí)鐘同步。在上述過(guò)程中,系統(tǒng)層在對(duì)PTP報(bào)文進(jìn)行處理時(shí),采用的處理方法與對(duì)非PTP報(bào)文進(jìn)行處理時(shí)采用的處理方法相同,均是在netif_receive_skb函數(shù)中,按照?qǐng)?bào)文頭部攜帶的報(bào)文類型,調(diào)用預(yù)先注冊(cè)的與該報(bào)文類型對(duì)應(yīng)的處理函數(shù)進(jìn)行處理。在虛擬局域網(wǎng)(Virtual Local Area Network,VLAN)使能的環(huán)境下,可能存在攜帶有多個(gè)不同的虛擬局域網(wǎng)標(biāo)簽協(xié)議標(biāo)識(shí)(VLAN Tag Protocol Identifier,VLAN TPID)的PTP報(bào)文,針對(duì)這些攜帶有多個(gè)不同VLAN TPID的PTP報(bào)文,會(huì)為每種VLAN TPID分別注冊(cè)一個(gè)處理函數(shù),并通過(guò)這些處理函數(shù)處理該攜帶有多個(gè)VLAN TPID的PTP報(bào)文,這樣,不僅占用了大量的存儲(chǔ)空間和處理時(shí)間,也降低了PTP報(bào)文的處理效率。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明實(shí)施例提供了一種PTP報(bào)文的處理方法及SOC,用以解決現(xiàn)有技術(shù)中的PTP報(bào)文處理方法存在處理效率較低、存儲(chǔ)空間占用量較大、為PTP報(bào)文添加的接收時(shí)間戳的準(zhǔn)確度較低的問(wèn)題。

本發(fā)明實(shí)施例提供的具體技術(shù)方案如下:

一種PTP報(bào)文的處理方法,應(yīng)用于SOC,用于對(duì)PTP報(bào)文進(jìn)行處理,并完成上述PTP報(bào)文的發(fā)送端與接收端之間的時(shí)鐘同步,上述處理方法包括:

物理層在接收到報(bào)文的情況下,基于當(dāng)前時(shí)間,為上述報(bào)文添加接收時(shí)間戳,并在確定上述報(bào)文是PTP報(bào)文的情況下,獲取上述PTP報(bào)文攜帶的發(fā)送時(shí)間戳以及將上述PTP報(bào)文發(fā)送至驅(qū)動(dòng)層;

驅(qū)動(dòng)層在存儲(chǔ)上述PTP報(bào)文后,為上述PTP報(bào)文申請(qǐng)存儲(chǔ)標(biāo)識(shí),并將上述存儲(chǔ)標(biāo)識(shí)加入至PTP報(bào)文存儲(chǔ)隊(duì)列,以及在確定滿足預(yù)設(shè)的時(shí)鐘同步觸發(fā)條件的情況下,觸發(fā)應(yīng)用層基于上述PTP報(bào)文存儲(chǔ)隊(duì)列記錄的存儲(chǔ)標(biāo)識(shí),獲取上述PTP報(bào)文;

應(yīng)用層在確定上述PTP報(bào)文的發(fā)送端后,基于上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,完成與上述發(fā)送端的時(shí)鐘同步。

較佳的,在物理層獲取上述PTP報(bào)文的發(fā)送時(shí)間戳以及將上述PTP報(bào)文發(fā)送至驅(qū)動(dòng)層之后,在驅(qū)動(dòng)層存儲(chǔ)上述PTP報(bào)文之前,進(jìn)一步包括:

物理層將上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳存儲(chǔ)至第一指定區(qū)域。

較佳的,驅(qū)動(dòng)層存儲(chǔ)上述PTP報(bào)文后,為上述PTP報(bào)文申請(qǐng)存儲(chǔ)標(biāo)識(shí),并將上述存儲(chǔ)標(biāo)識(shí)加入至PTP報(bào)文存儲(chǔ)隊(duì)列,包括:

驅(qū)動(dòng)層將上述PTP報(bào)文存儲(chǔ)至第二指定區(qū)域后,為上述PTP報(bào)文申請(qǐng)一個(gè)表征上述PTP報(bào)文起始存儲(chǔ)地址的存儲(chǔ)標(biāo)識(shí);

驅(qū)動(dòng)層判斷上述PTP報(bào)文是否為接收到的第一個(gè)PTP報(bào)文;

若是,則驅(qū)動(dòng)層在預(yù)設(shè)的上述PTP報(bào)文存儲(chǔ)隊(duì)列的頭部標(biāo)識(shí)后面,插入上述PTP報(bào)文的存儲(chǔ)標(biāo)識(shí);否則,驅(qū)動(dòng)層在上述PTP報(bào)文存儲(chǔ)隊(duì)列當(dāng)前記錄的最后一個(gè)存儲(chǔ)標(biāo)識(shí)后面,插入上述PTP報(bào)文的存儲(chǔ)標(biāo)識(shí)。

較佳的,若驅(qū)動(dòng)層接收到應(yīng)用層發(fā)起的PTP報(bào)文訪問(wèn)請(qǐng)求,則在確定上述PTP報(bào)文存儲(chǔ)隊(duì)列為空的情況下,將訪問(wèn)PTP報(bào)文的進(jìn)程加入進(jìn)程等待隊(duì)列。

較佳的,驅(qū)動(dòng)層在確定滿足預(yù)設(shè)的時(shí)鐘同步觸發(fā)條件的情況下,觸發(fā)應(yīng)用層基于上述PTP報(bào)文存儲(chǔ)隊(duì)列記錄的存儲(chǔ)標(biāo)識(shí),獲取上述PTP報(bào)文,包括:

驅(qū)動(dòng)層在確定上述進(jìn)程等待隊(duì)列中存在訪問(wèn)PTP報(bào)文的進(jìn)程且上述PTP報(bào)文存儲(chǔ)隊(duì)列為非空的情況下,認(rèn)定滿足上述時(shí)鐘同步觸發(fā)條件,并喚醒上述進(jìn)程,觸發(fā)上述進(jìn)程基于上述PTP報(bào)文存儲(chǔ)隊(duì)列記錄的存儲(chǔ)標(biāo)識(shí)獲取上述PTP報(bào)文。

較佳的,應(yīng)用層在確定上述PTP報(bào)文的發(fā)送端后,基于上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,完成與上述發(fā)送端的時(shí)鐘同步,包括:

應(yīng)用層基于上述PTP報(bào)文攜帶的虛擬局域網(wǎng)VLAN標(biāo)識(shí),確定上述PTP報(bào)文的發(fā)送端,并從上述第一指定區(qū)域中,獲取上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,以及基于獲取到的上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,采用預(yù)設(shè)的時(shí)鐘同步算法,完成與上述發(fā)送端的時(shí)間同步和頻率同步。

一種SOC,用于處理PTP報(bào)文,并完成上述PTP報(bào)文的發(fā)送端與接收端之間的時(shí)鐘同步,上述SOC包括:邏輯處理模塊、網(wǎng)卡驅(qū)動(dòng)模塊和應(yīng)用處理模塊,其中,

上述邏輯處理模塊,用于在接收到報(bào)文的情況下,基于當(dāng)前時(shí)間,為上述報(bào)文添加接收時(shí)間戳,并在確定上述報(bào)文是PTP報(bào)文的情況下,獲取上述PTP報(bào)文攜帶的發(fā)送時(shí)間戳以及將上述PTP報(bào)文發(fā)送至上述網(wǎng)卡驅(qū)動(dòng)模塊;

上述網(wǎng)卡驅(qū)動(dòng)模塊,用于在存儲(chǔ)上述PTP報(bào)文后,為上述PTP報(bào)文申請(qǐng)存儲(chǔ)標(biāo)識(shí),并將上述存儲(chǔ)標(biāo)識(shí)加入至PTP報(bào)文存儲(chǔ)隊(duì)列,以及在確定滿足預(yù)設(shè)的時(shí)鐘同步觸發(fā)條件的情況下,觸發(fā)上述應(yīng)用處理模塊基于上述PTP報(bào)文存儲(chǔ)隊(duì)列記錄的存儲(chǔ)標(biāo)識(shí),獲取上述PTP報(bào)文;

上述應(yīng)用處理模塊,用于在確定上述PTP報(bào)文的發(fā)送端后,基于上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,完成與上述發(fā)送端的時(shí)鐘同步。

較佳的,在上述邏輯處理模塊獲取上述PTP報(bào)文的發(fā)送時(shí)間戳并將上述PTP報(bào)文發(fā)送至上述網(wǎng)卡驅(qū)動(dòng)模塊之后,在上述網(wǎng)卡驅(qū)動(dòng)模塊存儲(chǔ)上述PTP報(bào)文之前,上述邏輯處理模塊還用于:將上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳存儲(chǔ)至第一指定區(qū)域。

較佳的,在存儲(chǔ)上述PTP報(bào)文后,為上述PTP報(bào)文申請(qǐng)存儲(chǔ)標(biāo)識(shí),并將上述存儲(chǔ)標(biāo)識(shí)加入至PTP報(bào)文存儲(chǔ)隊(duì)列時(shí),上述網(wǎng)卡驅(qū)動(dòng)模塊具體用于:

將上述PTP報(bào)文存儲(chǔ)至第二指定區(qū)域后,為上述PTP報(bào)文申請(qǐng)一個(gè)表征上述PTP報(bào)文起始存儲(chǔ)地址的存儲(chǔ)標(biāo)識(shí);

判斷上述PTP報(bào)文是否為接收到的第一個(gè)PTP報(bào)文;

若是,則在預(yù)設(shè)的上述PTP報(bào)文存儲(chǔ)隊(duì)列的頭部標(biāo)識(shí)后面,插入上述PTP報(bào)文的存儲(chǔ)標(biāo)識(shí);否則,在上述PTP報(bào)文存儲(chǔ)隊(duì)列當(dāng)前記錄的最后一個(gè)存儲(chǔ)標(biāo)識(shí)后面,插入上述PTP報(bào)文的存儲(chǔ)標(biāo)識(shí)。

較佳的,上述SOC還包括:接口驅(qū)動(dòng)模塊,其中,

上述接口驅(qū)動(dòng)模塊,用于若接收到上述應(yīng)用處理模塊發(fā)起的PTP報(bào)文訪問(wèn)請(qǐng)求,則在確定上述PTP報(bào)文存儲(chǔ)隊(duì)列為空的情況下,將訪問(wèn)PTP報(bào)文的進(jìn)程加入進(jìn)程等待隊(duì)列。

較佳的,確定滿足預(yù)設(shè)的時(shí)鐘同步觸發(fā)條件的情況下,觸發(fā)上述應(yīng)用處理模塊基于上述PTP報(bào)文存儲(chǔ)隊(duì)列記錄的存儲(chǔ)標(biāo)識(shí)獲取上述PTP報(bào)文時(shí),上述網(wǎng)卡驅(qū)動(dòng)模塊具體用于:

確定上述進(jìn)程等待隊(duì)列中存在訪問(wèn)PTP報(bào)文的進(jìn)程且上述PTP報(bào)文存儲(chǔ)隊(duì)列為非空的情況下,認(rèn)定滿足上述時(shí)鐘同步觸發(fā)條件,并喚醒上述進(jìn)程,觸發(fā)上述進(jìn)程基于上述PTP報(bào)文存儲(chǔ)隊(duì)列記錄的存儲(chǔ)標(biāo)識(shí)獲取上述PTP報(bào)文。

較佳的,在確定上述PTP報(bào)文的發(fā)送端后,基于從上述邏輯處理模塊獲取到的上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,完成與上述發(fā)送端的時(shí)鐘同步時(shí),上述應(yīng)用處理模塊具體用于:

基于上述PTP報(bào)文攜帶的VLAN標(biāo)識(shí),確定上述PTP報(bào)文的發(fā)送端,并從上述第一指定區(qū)域中,獲取上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,以及基于獲取到的上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,采用預(yù)設(shè)的時(shí)鐘同步算法,完成與上述發(fā)送端的時(shí)間同步和頻率同步。

本發(fā)明實(shí)施例的有益效果如下:

本發(fā)明實(shí)施例中,通過(guò)將PTP報(bào)文加入PTP報(bào)文存儲(chǔ)隊(duì)列,就可以將PTP報(bào)文與非PTP報(bào)文進(jìn)行區(qū)分,無(wú)需采用調(diào)用處理函數(shù)的方法處理PTP報(bào)文,可以直接針對(duì)PTP報(bào)文存儲(chǔ)隊(duì)列中的各個(gè)PTP報(bào)文進(jìn)行時(shí)鐘同步處理,不僅減少了PTP報(bào)文的處理環(huán)節(jié),提高了PTP報(bào)文的處理效率,而且,也節(jié)省了調(diào)用處理函數(shù)所占用的存儲(chǔ)空間和處理資源。除此之外,通過(guò)物理層對(duì)接收到的PTP報(bào)文添加接收時(shí)間戳,避免了由于軟件處理PTP報(bào)文存在一定的延遲,導(dǎo)致通過(guò)軟件為PTP報(bào)文添加的接收時(shí)間戳存在較大誤差,從而導(dǎo)致時(shí)鐘同步不準(zhǔn)確的問(wèn)題。

附圖說(shuō)明

圖1A為本發(fā)明實(shí)施例中SOC的結(jié)構(gòu)示意圖;

圖1B為本發(fā)明實(shí)施例中SOC的具體結(jié)構(gòu)示意圖;

圖2為本發(fā)明實(shí)施例中PTP報(bào)文處理方法的概況示意圖之一;

圖3為本發(fā)明實(shí)施例中PTP報(bào)文存儲(chǔ)隊(duì)列(即雙向鏈表)的結(jié)構(gòu)示意圖;

圖4A為本發(fā)明實(shí)施例中PTP報(bào)文處理方法的概況示意圖之二;

圖4B為本發(fā)明實(shí)施例中邏輯處理模塊100的具體處理流程示意圖;

圖4C為本發(fā)明實(shí)施例中網(wǎng)卡驅(qū)動(dòng)模塊110的具體處理流程示意圖;

圖4D為本發(fā)明實(shí)施例中應(yīng)用處理模塊120的具體處理流程示意圖。

具體實(shí)施方式

下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,并不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。

為了解決現(xiàn)有技術(shù)中的PTP報(bào)文處理方法存在處理效率較低、處理資源占用量較大、為PTP報(bào)文添加的接收時(shí)間戳的準(zhǔn)確度較低的問(wèn)題,本發(fā)明實(shí)施例中,將接收到的所有報(bào)文進(jìn)行分類:針對(duì)非PTP報(bào)文,采用現(xiàn)有技術(shù)中的調(diào)用處理函數(shù)的方法進(jìn)行處理;針對(duì)PTP報(bào)文,采用PTP報(bào)文專用處理流程進(jìn)行處理,即為PTP報(bào)文申請(qǐng)一個(gè)存儲(chǔ)標(biāo)識(shí),并將該存儲(chǔ)標(biāo)識(shí)加入PTP報(bào)文存儲(chǔ)隊(duì)列,確定滿足預(yù)設(shè)的時(shí)鐘同步觸發(fā)條件時(shí),基于PTP報(bào)文存儲(chǔ)隊(duì)列中記錄的存儲(chǔ)標(biāo)識(shí),獲取PTP報(bào)文,進(jìn)而,基于該P(yáng)TP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,完成該P(yáng)TP報(bào)文的發(fā)送端和接收端之間的時(shí)鐘同步。

下面結(jié)合附圖,通過(guò)具體實(shí)施例對(duì)本發(fā)明方案進(jìn)行詳細(xì)描述,當(dāng)然,本發(fā)明并不限于以下實(shí)施例。

本發(fā)明實(shí)施例提供了一種如圖1A所示的片上系統(tǒng)(System-on-a-chip,SOC),該SOC可應(yīng)用于PTP域中的主節(jié)點(diǎn)也可應(yīng)用于從節(jié)點(diǎn),該SOC至少包括:邏輯處理模塊100(位于物理層)、網(wǎng)卡驅(qū)動(dòng)模塊110(位于驅(qū)動(dòng)層)和應(yīng)用處理模塊120(位于應(yīng)用層),其中,

上述邏輯處理模塊100,用于在接收到報(bào)文的情況下,基于當(dāng)前時(shí)間,為上述報(bào)文添加接收時(shí)間戳,并在確定上述報(bào)文是PTP報(bào)文的情況下,獲取上述PTP報(bào)文攜帶的發(fā)送時(shí)間戳以及將上述PTP報(bào)文發(fā)送至上述網(wǎng)卡驅(qū)動(dòng)模塊110;

上述網(wǎng)卡驅(qū)動(dòng)模塊110,用于在存儲(chǔ)上述PTP報(bào)文后,為上述PTP報(bào)文申請(qǐng)存儲(chǔ)標(biāo)識(shí),并將上述存儲(chǔ)標(biāo)識(shí)加入至PTP報(bào)文存儲(chǔ)隊(duì)列,以及在確定滿足預(yù)設(shè)的時(shí)鐘同步觸發(fā)條件的情況下,觸發(fā)上述應(yīng)用處理模塊120基于上述PTP報(bào)文存儲(chǔ)隊(duì)列記錄的存儲(chǔ)標(biāo)識(shí)獲取上述PTP報(bào)文;

上述應(yīng)用處理模塊120,用于在確定上述PTP報(bào)文的發(fā)送端后,基于上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,完成與上述發(fā)送端的時(shí)鐘同步。

較佳的,在上述邏輯處理模塊100獲取上述PTP報(bào)文的發(fā)送時(shí)間戳以及將所述PTP報(bào)文發(fā)送至所述網(wǎng)卡驅(qū)動(dòng)模塊110之后,在上述網(wǎng)卡驅(qū)動(dòng)模塊110存儲(chǔ)上述PTP報(bào)文之前,上述邏輯處理模塊100還用于:將上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳存儲(chǔ)至第一指定區(qū)域。

較佳的,在存儲(chǔ)上述PTP報(bào)文后,為上述PTP報(bào)文申請(qǐng)存儲(chǔ)標(biāo)識(shí),并將上述存儲(chǔ)標(biāo)識(shí)加入至PTP報(bào)文存儲(chǔ)隊(duì)列時(shí),上述網(wǎng)卡驅(qū)動(dòng)模塊110具體用于:

將上述PTP報(bào)文存儲(chǔ)至第二指定區(qū)域后,為上述PTP報(bào)文申請(qǐng)一個(gè)表征上述PTP報(bào)文起始存儲(chǔ)地址的存儲(chǔ)標(biāo)識(shí);

判斷上述PTP報(bào)文是否為接收到的第一個(gè)PTP報(bào)文;

若是,則在預(yù)設(shè)的上述PTP報(bào)文存儲(chǔ)隊(duì)列的頭部標(biāo)識(shí)后面,插入上述PTP報(bào)文的存儲(chǔ)標(biāo)識(shí);否則,在上述PTP報(bào)文存儲(chǔ)隊(duì)列當(dāng)前記錄的最后一個(gè)存儲(chǔ)標(biāo)識(shí)后面,插入上述PTP報(bào)文的存儲(chǔ)標(biāo)識(shí)。

較佳的,本發(fā)明實(shí)施例提供的上述SOC還包括:接口驅(qū)動(dòng)模塊130(位于驅(qū)動(dòng)層),其中,

上述接口驅(qū)動(dòng)模塊130,用于若接收到上述應(yīng)用處理模塊120發(fā)起的PTP報(bào)文訪問(wèn)請(qǐng)求,則在確定上述PTP報(bào)文存儲(chǔ)隊(duì)列為空的情況下,將訪問(wèn)PTP報(bào)文的進(jìn)程加入進(jìn)程等待隊(duì)列。

較佳的,在確定滿足預(yù)設(shè)的時(shí)鐘同步觸發(fā)條件的情況下,觸發(fā)上述應(yīng)用處理模塊基于上述PTP報(bào)文存儲(chǔ)隊(duì)列記錄的存儲(chǔ)標(biāo)識(shí)獲取上述PTP報(bào)文時(shí),上述網(wǎng)卡驅(qū)動(dòng)模塊110具體用于:確定進(jìn)程等待隊(duì)列中存在訪問(wèn)PTP報(bào)文的進(jìn)程且上述PTP報(bào)文存儲(chǔ)隊(duì)列為非空的情況下,認(rèn)定滿足預(yù)設(shè)的時(shí)鐘同步觸發(fā)條件,并喚醒上述進(jìn)程,觸發(fā)上述進(jìn)程基于上述PTP報(bào)文存儲(chǔ)隊(duì)列記錄的存儲(chǔ)標(biāo)識(shí),獲取上述PTP報(bào)文。

較佳的,在確定上述PTP報(bào)文的發(fā)送端后,基于上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,完成與上述發(fā)送端的時(shí)鐘同步時(shí),上述應(yīng)用處理模塊120具體用于:

基于上述PTP報(bào)文攜帶的VLAN標(biāo)識(shí),確定上述PTP報(bào)文的發(fā)送端,并從上述第一指定區(qū)域中,獲取上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,以及基于獲取到的上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,采用預(yù)設(shè)的時(shí)鐘同步算法,完成與上述發(fā)送端的時(shí)間同步和頻率同步。

值得說(shuō)的是,在實(shí)際應(yīng)用中,本發(fā)明實(shí)施例提供的上述SOC還包括:非PTP報(bào)文處理模塊140(位于協(xié)議層),其中,上述非PTP報(bào)文處理模塊140,用于采用現(xiàn)有技術(shù)中的調(diào)用處理函數(shù)的方法處理非PTP報(bào)文(具體地,非PTP報(bào)文的處理方法與現(xiàn)有技術(shù)中的處理方法相同,在此不再贅述)。

基于此,本發(fā)明實(shí)施例提供了一種PTP報(bào)文的處理方法,應(yīng)用于上述SOC,用于對(duì)PTP報(bào)文進(jìn)行處理,并完成該P(yáng)TP報(bào)文的發(fā)送端與接收端之間的時(shí)鐘同步,下面結(jié)合如圖1B所示的SOC,對(duì)本發(fā)明實(shí)施例提供的PTP報(bào)文處理方法進(jìn)行詳細(xì)說(shuō)明,參閱圖2所示,該P(yáng)TP報(bào)文處理方法的流程如下:

步驟200:物理層在接收到報(bào)文的情況下,基于當(dāng)前時(shí)間,為上述報(bào)文添加接收時(shí)間戳,并在確定上述報(bào)文是PTP報(bào)文的情況下,獲取上述PTP報(bào)文攜帶的發(fā)送時(shí)間戳以及將上述PTP報(bào)文發(fā)送至驅(qū)動(dòng)層。其中,上述PTP報(bào)文可以是但不限于:SYNC報(bào)文、Delay req報(bào)文、Delay resp報(bào)文,等等;上述PTP報(bào)文攜帶的發(fā)送時(shí)間戳是,上述PTP報(bào)文的發(fā)送端在發(fā)送上述PTP報(bào)文時(shí)為上述PTP報(bào)文添加的。

在實(shí)際應(yīng)用中,步驟200是在上述SOC的邏輯處理模塊100中進(jìn)行的(其中,邏輯處理模塊100至少包括:第一轉(zhuǎn)換單元101、本地時(shí)鐘單元102、第一緩存單元103、報(bào)文解析單元104、信息獲取單元105、時(shí)間戳存儲(chǔ)單元106、第二緩存單元107、響應(yīng)報(bào)文生成單元108、第二轉(zhuǎn)換單元109),具體地,邏輯處理模塊100在執(zhí)行步驟200時(shí),邏輯處理模塊100中的各個(gè)單元主要用于完成以下操作:

A1:第一轉(zhuǎn)換單元101通過(guò)報(bào)文輸入端口MAC_rx接收?qǐng)?bào)文,并通過(guò)本地時(shí)鐘單元102維護(hù)的當(dāng)前時(shí)間,為該報(bào)文添加接收時(shí)間戳,以及將添加有接收時(shí)間戳的報(bào)文分成兩路,一路緩存至第一緩存單元103,一路輸出至報(bào)文解析單元104。其中,上述報(bào)文輸入端口MAC_rx可以是但不限于:吉比特媒體獨(dú)立端口(Gigabit Media Independent Interface,GMII)。

值得說(shuō)的是,邏輯處理模塊100根據(jù)本地維護(hù)的當(dāng)前時(shí)間,為接收到的報(bào)文添加接收時(shí)間戳,這樣,只要接收到報(bào)文,就可以為該報(bào)文添加接收時(shí)間戳,避免了由于軟件處理報(bào)文存在延遲,導(dǎo)致為該報(bào)文添加的接收時(shí)間戳存在誤差的問(wèn)題,提高了接收時(shí)間戳的精度,進(jìn)而保證了時(shí)鐘同步的準(zhǔn)確性。

A2:第一緩存單元103確定該報(bào)文緩存完成的情況下,將該報(bào)文的緩存地址輸出至信息獲取單元105。與此同時(shí),報(bào)文解析單元104對(duì)該報(bào)文進(jìn)行解析,確定該報(bào)文的報(bào)文類型,并將確定結(jié)果輸出至信息獲取單元105。其中,上述報(bào)文類型至少包括以下兩種類型:PTP報(bào)文和非PTP報(bào)文。

A3:信息獲取單元105基于接收到的緩存地址,從第一緩存單元103中獲取該報(bào)文,并基于接收到的確定結(jié)果,確定該報(bào)文是PTP報(bào)文的情況下,獲取該P(yáng)TP報(bào)文攜帶的發(fā)送時(shí)間戳,并將該P(yáng)TP報(bào)文對(duì)應(yīng)的發(fā)送時(shí)間戳和接收時(shí)間戳等數(shù)據(jù)信息存儲(chǔ)至?xí)r間戳存儲(chǔ)單元106(即第一指定區(qū)域),以及將該P(yáng)TP報(bào)文輸出至第二緩存單元107,由第二緩存單元107實(shí)現(xiàn)對(duì)該P(yáng)TP報(bào)文的調(diào)度;確定該報(bào)文是非PTP報(bào)文的情況下,刪除為該非PTP報(bào)文添加的接收時(shí)間戳,并將該非PTP報(bào)文輸出至第二緩存單元107,由第二緩存單元107實(shí)現(xiàn)對(duì)該非PTP報(bào)文的調(diào)度,等等。

值得說(shuō)的是,在實(shí)際應(yīng)用中的某些特定場(chǎng)景下,可能無(wú)法為每一個(gè)設(shè)備分別配置一個(gè)用于接收PTP報(bào)文的報(bào)文輸入端口,即無(wú)法通過(guò)多個(gè)報(bào)文輸入端口分別接收來(lái)自不同虛擬局域網(wǎng)的發(fā)送端的PTP報(bào)文,只能通過(guò)一個(gè)報(bào)文輸入端口接收來(lái)自不同虛擬局域網(wǎng)的發(fā)送端的PTP報(bào)文。這樣,就無(wú)法利用報(bào)文輸入端口的端口號(hào)來(lái)識(shí)別PTP報(bào)文的發(fā)送端,基于此,本發(fā)明實(shí)施例中,可預(yù)先為報(bào)文輸入端口設(shè)置多個(gè)不同的虛擬端口號(hào),并建立多個(gè)虛擬局域網(wǎng)標(biāo)識(shí)(比如:VLAN標(biāo)識(shí))與多個(gè)虛擬端口號(hào)之間一對(duì)一的映射關(guān)系。這樣,接收到PTP報(bào)文后,就可以基于預(yù)先建立的多個(gè)VLAN標(biāo)識(shí)與多個(gè)虛擬端口號(hào)之間一對(duì)一的映射關(guān)系,確定出與接收到的PTP報(bào)文攜帶的VLAN標(biāo)識(shí)相關(guān)聯(lián)的虛擬端口號(hào),進(jìn)而,就可以根據(jù)確定出的虛擬端口號(hào),確定該P(yáng)TP報(bào)文的發(fā)送端。

較佳的,為了保證后續(xù)能夠從時(shí)間戳存儲(chǔ)單元106中,快速準(zhǔn)確地獲取到PTP報(bào)文對(duì)應(yīng)的發(fā)送時(shí)間戳和接收時(shí)間戳,在將PTP報(bào)文對(duì)應(yīng)的發(fā)送時(shí)間戳和接收時(shí)間戳等數(shù)據(jù)信息存儲(chǔ)至?xí)r間戳存儲(chǔ)單元106的過(guò)程中,可以根據(jù)該P(yáng)TP報(bào)文攜帶的VLAN標(biāo)識(shí),對(duì)PTP報(bào)文對(duì)應(yīng)的發(fā)送時(shí)間戳和接收時(shí)間戳等數(shù)據(jù)信息進(jìn)行存儲(chǔ)。這樣,后續(xù)需要從時(shí)間戳存儲(chǔ)單元106中,獲取PTP報(bào)文對(duì)應(yīng)的發(fā)送時(shí)間戳和接收時(shí)間戳?xí)r,就可以通過(guò)該P(yáng)TP報(bào)文攜帶的VLAN標(biāo)識(shí)進(jìn)行獲取。

A4:第二緩存單元107對(duì)報(bào)文進(jìn)行調(diào)度,即確定該報(bào)文需要上報(bào)的情況下,將該報(bào)文輸出至第二轉(zhuǎn)換單元109;確定該報(bào)文需要響應(yīng)(Reply)的情況下,將該報(bào)文輸出至響應(yīng)報(bào)文生成單元108,等等。

A5:第二轉(zhuǎn)換單元109按照網(wǎng)卡驅(qū)動(dòng)模塊110可接收的報(bào)文格式對(duì)報(bào)文進(jìn)行配置,并將配置后的報(bào)文輸出至網(wǎng)卡驅(qū)動(dòng)模塊110,由網(wǎng)卡驅(qū)動(dòng)模塊110對(duì)該報(bào)文進(jìn)行后續(xù)處理。

A6:響應(yīng)報(bào)文生成單元108基于需要Reply的報(bào)文,生成相應(yīng)的響應(yīng)報(bào)文,并將該響應(yīng)報(bào)文緩存至第二緩存單元107,由第二緩存單元107通過(guò)報(bào)文輸出端口MAC_tx輸出該響應(yīng)報(bào)文,其中,上述報(bào)文輸出端口MAC_tx可以是但不限于:GMII端口。

步驟210:驅(qū)動(dòng)層在存儲(chǔ)上述PTP報(bào)文后,為上述PTP報(bào)文申請(qǐng)存儲(chǔ)標(biāo)識(shí),并將上述存儲(chǔ)標(biāo)識(shí)加入至PTP報(bào)文存儲(chǔ)隊(duì)列,以及在確定滿足預(yù)設(shè)的時(shí)鐘同步觸發(fā)條件的情況下,觸發(fā)應(yīng)用層基于上述PTP報(bào)文存儲(chǔ)隊(duì)列記錄的存儲(chǔ)標(biāo)識(shí),獲取上述PTP報(bào)文。

在實(shí)際應(yīng)用中,“在存儲(chǔ)上述PTP報(bào)文后,為上述PTP報(bào)文申請(qǐng)存儲(chǔ)標(biāo)識(shí),并將上述存儲(chǔ)標(biāo)識(shí)加入至PTP報(bào)文存儲(chǔ)隊(duì)列”的操作是在上述SOC的網(wǎng)卡驅(qū)動(dòng)模塊110中進(jìn)行的(其中,網(wǎng)卡驅(qū)動(dòng)模塊110至少包括:注冊(cè)單元111、判斷單元112、PTP報(bào)文存儲(chǔ)單元113、鏈表維護(hù)單元114、喚醒單元115),具體地,網(wǎng)卡驅(qū)動(dòng)模塊110在執(zhí)行“在存儲(chǔ)上述PTP報(bào)文后,為上述PTP報(bào)文申請(qǐng)存儲(chǔ)標(biāo)識(shí),并將上述存儲(chǔ)標(biāo)識(shí)加入至PTP報(bào)文存儲(chǔ)隊(duì)列”的操作的情況下,網(wǎng)卡驅(qū)動(dòng)模塊110中的各個(gè)單元主要用于完成以下操作:

B1:注冊(cè)單元111接收到邏輯處理模塊100輸出的報(bào)文后,會(huì)注冊(cè)一個(gè)中斷處理函數(shù),基于該中斷處理函數(shù),調(diào)用軟中斷處理流程(即調(diào)用以下處理流程)。

B2:判斷單元112對(duì)該報(bào)文進(jìn)行解析,確定該報(bào)文是非PTP報(bào)文(比如:地址解析協(xié)議(Address Resolution Protocol,ARP)報(bào)文等)的情況下,將該非PTP報(bào)文輸出至非PTP報(bào)文處理模塊140,由非PTP報(bào)文處理模塊140采用現(xiàn)有技術(shù)中的調(diào)用處理函數(shù)的方法處理非PTP報(bào)文(具體地,非PTP報(bào)文的處理方法與現(xiàn)有技術(shù)中的處理方法相同,在此不再贅述);確定該報(bào)文是PTP報(bào)文的情況下,將該P(yáng)TP報(bào)文存儲(chǔ)至PTP報(bào)文存儲(chǔ)單元113(即第二指定區(qū)域)。

B3:鏈表維護(hù)單元114為該P(yáng)TP報(bào)文申請(qǐng)一個(gè)表征該P(yáng)TP報(bào)文起始存儲(chǔ)地址的存儲(chǔ)標(biāo)識(shí),在具體實(shí)施時(shí),該存儲(chǔ)標(biāo)識(shí)可以是但不限于:vlan_list_cache結(jié)構(gòu)體,該vlan_list_cache結(jié)構(gòu)體至少包含兩個(gè)部分:用于標(biāo)識(shí)該P(yáng)TP報(bào)文的第一結(jié)構(gòu)體struct list_head list,以及用于表征該P(yáng)TP報(bào)文存儲(chǔ)空間的第二結(jié)構(gòu)體指針struct sk_buff*sk。

其中,list為鏈表結(jié)點(diǎn)(至少包含兩個(gè)成員:前向指針list->pre和后向指針list->next);*sk為指向第二結(jié)構(gòu)體struct sk_buff起始存儲(chǔ)地址的指針;struct sk_buff中的報(bào)文長(zhǎng)度變量L可以賦值為該P(yáng)TP報(bào)文的長(zhǎng)度,struct sk_buff中的指針*ptr指向該P(yáng)TP報(bào)文的起始存儲(chǔ)地址。這樣,后續(xù)訪問(wèn)該P(yáng)TP報(bào)文時(shí),就可以根據(jù)vlan_list_cache結(jié)構(gòu)體中的指針*sk,確定struct sk_buff的起始存儲(chǔ)地址,進(jìn)一步根據(jù)struct sk_buff中的指針*ptr,確定該P(yáng)TP報(bào)文的起始存儲(chǔ)地址。

鏈表維護(hù)單元114為該P(yáng)TP報(bào)文申請(qǐng)vlan_list_cache結(jié)構(gòu)體后,若該P(yáng)TP報(bào)文是接收到的第一個(gè)PTP報(bào)文,則鏈表維護(hù)單元114會(huì)將該P(yáng)TP報(bào)文對(duì)應(yīng)的vlan_list_cache結(jié)構(gòu)體中成員list作為第一個(gè)鏈表結(jié)點(diǎn)插入到預(yù)先設(shè)定的鏈表頭結(jié)點(diǎn)struct list_head sb_list(即頭部標(biāo)識(shí))后面,具體的插入操作為:將該P(yáng)TP報(bào)文對(duì)應(yīng)的vlan_list_cache結(jié)構(gòu)體中成員list的指針list->pre指向鏈表頭結(jié)點(diǎn)struct list_head sb_list中成員sb_list的起始存儲(chǔ)地址,將鏈表頭結(jié)點(diǎn)struct list_head sb_list中成員sb_list的指針sb_list->next指向該P(yáng)TP報(bào)文對(duì)應(yīng)的vlan_list_cache結(jié)構(gòu)體中成員list的起始存儲(chǔ)地址;若該P(yáng)TP報(bào)文不是接收到的第一個(gè)PTP報(bào)文,則鏈表維護(hù)單元114會(huì)將該P(yáng)TP報(bào)文對(duì)應(yīng)的vlan_list_cache結(jié)構(gòu)體中成員list的指針list->pre指向前一次申請(qǐng)的vlan_list_cache結(jié)構(gòu)體(即上一次接收到的PTP報(bào)文對(duì)應(yīng)的結(jié)構(gòu)體)中成員list的起始存放地址,并將前一次申請(qǐng)的vlan_list_cache結(jié)構(gòu)體中成員list的指針list->next指向本次申請(qǐng)的vlan_list_cache結(jié)構(gòu)體中成員list的起始存放地址。這樣,鏈表維護(hù)單元114就可以基于各個(gè)PTP報(bào)文對(duì)應(yīng)的vlan_list_cache結(jié)構(gòu)體,生成一條如圖3所示的雙向鏈表,即生成PTP報(bào)文存儲(chǔ)隊(duì)列。

其中,雙向鏈表的鏈表頭結(jié)點(diǎn)struct list_head sb_list是鏈表維護(hù)單元114在struct net_device結(jié)構(gòu)體(其中,struct net_device結(jié)構(gòu)體用于描述網(wǎng)卡驅(qū)動(dòng)模塊110中的網(wǎng)卡eth1所在設(shè)備的屬性信息)的全局私有成員struct net_local中預(yù)先設(shè)定的,初始化時(shí),鏈表頭結(jié)點(diǎn)struct list_head sb_list中成員sb_list的指針sb_list->pre和指針sb_list->next均指向成員sb_list的起始存儲(chǔ)地址,首次申請(qǐng)vlan_list_cache結(jié)構(gòu)體時(shí),鏈表頭結(jié)點(diǎn)struct list_head sb_list中成員sb_list的指針sb_list->next的指向會(huì)更改為vlan_list_cache結(jié)構(gòu)體中成員list的起始存儲(chǔ)地址。這樣,后續(xù)訪問(wèn)雙向鏈表時(shí),就可以根據(jù)struct net_device結(jié)構(gòu)體的全局私有成員struct net_local,快速而準(zhǔn)確地確定出雙向鏈表的鏈表頭結(jié)點(diǎn)struct list_head sb_list,進(jìn)而,就可以確定出該雙向鏈表中各個(gè)鏈表結(jié)點(diǎn)各自指向的PTP報(bào)文的起始存儲(chǔ)地址。

B4:在鏈表維護(hù)單元114將該P(yáng)TP報(bào)文對(duì)應(yīng)的vlan_list_cache結(jié)構(gòu)體插入雙向鏈表后,喚醒單元115確定進(jìn)程等待隊(duì)列中存在訪問(wèn)PTP報(bào)文的進(jìn)程的情況下,即確定有訪問(wèn)PTP報(bào)文的進(jìn)程在進(jìn)程等待隊(duì)列中睡眠的情況下,會(huì)喚醒該進(jìn)程,觸發(fā)該進(jìn)程基于雙向鏈表中該P(yáng)TP報(bào)文對(duì)應(yīng)的vlan_list_cache結(jié)構(gòu)體,訪問(wèn)該P(yáng)TP報(bào)文。至此,軟中斷處理流程結(jié)束。

值得說(shuō)的是,上述訪問(wèn)PTP報(bào)文的進(jìn)程是上述SOC中接口驅(qū)動(dòng)模塊130接收到上述SOC中應(yīng)用處理模塊120發(fā)起的PTP報(bào)文訪問(wèn)請(qǐng)求后,確定雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列)為空的情況下,將該訪問(wèn)PTP報(bào)文的進(jìn)程加入至上述進(jìn)程等待隊(duì)列的。具體地,接口驅(qū)動(dòng)模塊130接收到應(yīng)用處理模塊120發(fā)起的PTP報(bào)文訪問(wèn)請(qǐng)求后,會(huì)將該P(yáng)TP報(bào)文訪問(wèn)請(qǐng)求轉(zhuǎn)發(fā)至網(wǎng)卡驅(qū)動(dòng)模塊110,并等待網(wǎng)卡驅(qū)動(dòng)模塊110返回的響應(yīng)消息,以及在接收到網(wǎng)卡驅(qū)動(dòng)模塊110返回的響應(yīng)消息的情況下,基于網(wǎng)卡驅(qū)動(dòng)模塊110返回的響應(yīng)消息,確定雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列)為空后,將該訪問(wèn)PTP報(bào)文的進(jìn)程加入至上述進(jìn)程等待隊(duì)列,并在確定該訪問(wèn)PTP報(bào)文的進(jìn)程被網(wǎng)卡驅(qū)動(dòng)模塊110中的喚醒單元115喚醒且雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列)為非空的情況下,調(diào)用MMAP函數(shù),使該訪問(wèn)PTP報(bào)文的進(jìn)程可以直接訪問(wèn)網(wǎng)卡驅(qū)動(dòng)模塊110中維護(hù)的雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列);接口驅(qū)動(dòng)模塊130基于網(wǎng)卡驅(qū)動(dòng)模塊110返回的響應(yīng)消息,確定雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列)為非空的情況下,直接調(diào)用MMAP函數(shù),使該訪問(wèn)PTP報(bào)文的進(jìn)程可以直接訪問(wèn)網(wǎng)卡驅(qū)動(dòng)模塊110中維護(hù)的雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列)。

較佳的,為了保證該訪問(wèn)PTP報(bào)文的進(jìn)程可以快速地找到網(wǎng)卡驅(qū)動(dòng)模塊110中維護(hù)的雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列),接口驅(qū)動(dòng)模塊130在初始化時(shí),還會(huì)利用dev_get_by_name(&init_net,"eth1")函數(shù),返回網(wǎng)卡驅(qū)動(dòng)模塊110中的表征網(wǎng)卡eth1屬性信息的struct net_device結(jié)構(gòu)體指針,并將該struct net_device結(jié)構(gòu)體指針存儲(chǔ)在全局變量中,以便訪問(wèn)PTP報(bào)文的進(jìn)程可以基于該struct net_device結(jié)構(gòu)體指針,快速準(zhǔn)確地找到網(wǎng)卡驅(qū)動(dòng)模塊110中的struct net_device結(jié)構(gòu)體,并根據(jù)struct net_device結(jié)構(gòu)體的全局私有成員struct net_local,找到雙向鏈表的鏈表頭結(jié)點(diǎn)struct list_head sb_list,進(jìn)而,就可以根據(jù)雙向鏈表中的vlan_list_cache結(jié)構(gòu)體,找出該vlan_list_cache結(jié)構(gòu)體指向的PTP報(bào)文的起始存儲(chǔ)地址,實(shí)現(xiàn)對(duì)PTP報(bào)文的訪問(wèn)。

進(jìn)一步地,在實(shí)際應(yīng)用中,“在確定滿足預(yù)設(shè)的時(shí)鐘同步觸發(fā)條件的情況下,基于上述PTP報(bào)文存儲(chǔ)隊(duì)列記錄的存儲(chǔ)標(biāo)識(shí),獲取上述PTP報(bào)文”的操作是在上述SOC的應(yīng)用處理模塊120中進(jìn)行的(其中,應(yīng)用處理模塊120至少包括:處理單元121和接口適配單元122),具體地,應(yīng)用處理模塊120在執(zhí)行“在確定滿足預(yù)設(shè)的時(shí)鐘同步觸發(fā)條件的情況下,基于上述PTP報(bào)文存儲(chǔ)隊(duì)列記錄的存儲(chǔ)標(biāo)識(shí),獲取上述PTP報(bào)文”的操作的情況下,應(yīng)用處理模塊120中的各個(gè)單元主要用于完成以下操作:

C1:處理單元121確定需要讀取PTP報(bào)文的情況下,會(huì)按照最大報(bào)文長(zhǎng)度申請(qǐng)一個(gè)用戶空間,并將該用戶空間對(duì)應(yīng)的用戶空間地址作為參數(shù)調(diào)用IOCTL函數(shù),通過(guò)IOCTL函數(shù)控制接口適配單元122向接口驅(qū)動(dòng)模塊130發(fā)起PTP報(bào)文訪問(wèn)請(qǐng)求。

C2:接口適配單元122接收到IOCTL函數(shù)并對(duì)IOCTL函數(shù)進(jìn)行解析后,會(huì)向接口驅(qū)動(dòng)模塊130發(fā)起PTP報(bào)文訪問(wèn)請(qǐng)求,并等待接口驅(qū)動(dòng)模塊130返回的響應(yīng)消息(該響應(yīng)消息可以是網(wǎng)卡驅(qū)動(dòng)模塊110返回至接口驅(qū)動(dòng)模塊130的響應(yīng)消息),接收到接口驅(qū)動(dòng)模塊130返回的響應(yīng)消息的情況下,基于該響應(yīng)消息,確定雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列)為空的情況下,等待網(wǎng)卡驅(qū)動(dòng)模塊110將訪問(wèn)PTP報(bào)文的進(jìn)程喚醒,并在被喚醒的情況下,基于存儲(chǔ)在接口驅(qū)動(dòng)模塊130全局變量中的struct net_device結(jié)構(gòu)體指針,找到網(wǎng)卡驅(qū)動(dòng)模塊110對(duì)應(yīng)的struct net_device結(jié)構(gòu)體,并根據(jù)struct net_device結(jié)構(gòu)體的全局私有成員struct net_local,找到雙向鏈表的鏈表頭結(jié)點(diǎn)struct list_head sb_list,進(jìn)而,根據(jù)鏈表頭結(jié)點(diǎn)struct list_head sb_list中成員sb_list的指針sb_list->next,找到雙向鏈表中的第一個(gè)vlan_list_cache結(jié)構(gòu)體中的成員list,并基于成員list的存儲(chǔ)地址與struct sk_buff的存儲(chǔ)地址之間的偏移量,找到第一個(gè)vlan_list_cache結(jié)構(gòu)體中的指針*sk,以及基于vlan_list_cache結(jié)構(gòu)體中的指針*sk找到struct sk_buff,進(jìn)一步根據(jù)sk_buff中的指針*ptr,找到指針*ptr指向的第一個(gè)PTP報(bào)文的起始存儲(chǔ)地址,并將該第一個(gè)PTP報(bào)文復(fù)制到處理單元121申請(qǐng)的用戶空間中。

進(jìn)一步地,應(yīng)用處理模塊120中接口適配單元122將PTP報(bào)文復(fù)制到處理單元121申請(qǐng)的用戶空間后,應(yīng)用處理模塊120中處理單元121繼續(xù)執(zhí)行以下步驟:

步驟220:應(yīng)用層在確定上述PTP報(bào)文的發(fā)送端后,基于上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,完成與上述發(fā)送端的時(shí)鐘同步。

具體地,應(yīng)用處理模塊120中的處理單元121在執(zhí)行步驟230時(shí),可以采用但不限于以下方式:

C3:處理單元121對(duì)用戶空間中的PTP報(bào)文進(jìn)行解析,獲取該P(yáng)TP報(bào)文攜帶的VLAN標(biāo)識(shí),并基于該VLAN標(biāo)識(shí),確定該P(yáng)TP報(bào)文的發(fā)送端,以及將該VLAN標(biāo)識(shí)攜帶在時(shí)間戳獲取請(qǐng)求中,通過(guò)接口適配單元122發(fā)送至接口驅(qū)動(dòng)模塊130,以及等待接口驅(qū)動(dòng)模塊130返回的攜帶有該P(yáng)TP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳的時(shí)間戳獲取響應(yīng)。

值得說(shuō)的是,接口驅(qū)動(dòng)模塊130接收到時(shí)間戳獲取請(qǐng)求后,會(huì)將該時(shí)間戳獲取請(qǐng)求轉(zhuǎn)發(fā)至邏輯處理模塊100;邏輯處理模塊100接收到該時(shí)間戳獲取請(qǐng)求后,會(huì)基于該時(shí)間戳獲取請(qǐng)求中攜帶的VLAN標(biāo)識(shí),從時(shí)間戳存儲(chǔ)單元106中獲取相應(yīng)PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,并將該P(yáng)TP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳攜帶在時(shí)間戳獲取響應(yīng)中返回至接口驅(qū)動(dòng)模塊130;接口驅(qū)動(dòng)模塊130接收到時(shí)間戳獲取響應(yīng)后,會(huì)將該時(shí)間戳獲取響應(yīng)轉(zhuǎn)發(fā)至應(yīng)用處理模塊120中的接口適配單元122,由接口適配單元122將該時(shí)間戳獲取響應(yīng)輸出至處理單元121。

C4:處理單元121接收時(shí)間戳獲取響應(yīng),并基于該時(shí)間戳獲取響應(yīng)攜帶的接收時(shí)間戳和發(fā)送時(shí)間戳,采用預(yù)設(shè)的時(shí)鐘同步算法(可以是但不限于:1588算法),完成與PTP報(bào)文發(fā)送端的時(shí)間同步和頻率同步。

下面僅以主節(jié)點(diǎn)或者從節(jié)點(diǎn)上電后第一次接收到PTP報(bào)文為具體應(yīng)用場(chǎng)景對(duì)上述實(shí)施例作進(jìn)一步詳細(xì)說(shuō)明,參閱圖4A所示,本發(fā)明實(shí)施例中,PTP報(bào)文處理方法流程如下:

步驟400:物理層邏輯處理模塊100接收到報(bào)文時(shí),基于當(dāng)前時(shí)間,為該報(bào)文添加接收時(shí)間戳,并在確定該報(bào)文為PTP報(bào)文時(shí),獲取該P(yáng)TP報(bào)文攜帶的發(fā)送時(shí)間戳,以及基于該P(yáng)TP報(bào)文攜帶的VLAN標(biāo)識(shí),存儲(chǔ)該P(yáng)TP報(bào)文的發(fā)送時(shí)間戳和接收時(shí)間戳后,將該P(yáng)TP報(bào)文上報(bào)至驅(qū)動(dòng)層網(wǎng)卡驅(qū)動(dòng)模塊110。

步驟410:驅(qū)動(dòng)層網(wǎng)卡驅(qū)動(dòng)模塊110接收到物理層邏輯處理模塊100上報(bào)的報(bào)文后,確定該報(bào)文是非PTP報(bào)文時(shí),將該非PTP報(bào)文輸出至協(xié)議層非PTP報(bào)文處理模塊140,由該協(xié)議層非PTP報(bào)文處理模塊140繼續(xù)執(zhí)行步驟440;確定該報(bào)文是PTP報(bào)文時(shí),為該P(yáng)TP報(bào)文申請(qǐng)一個(gè)vlan_list_cache結(jié)構(gòu)體,并將該vlan_list_cache結(jié)構(gòu)體插入雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列),以及喚醒進(jìn)程等待隊(duì)列中訪問(wèn)PTP報(bào)文的進(jìn)程。

步驟420:驅(qū)動(dòng)層接口驅(qū)動(dòng)模塊130確定該訪問(wèn)PTP報(bào)文的進(jìn)程被驅(qū)動(dòng)層網(wǎng)卡驅(qū)動(dòng)模塊110喚醒時(shí),調(diào)用MMAP函數(shù),使該訪問(wèn)PTP報(bào)文的進(jìn)程可以直接訪問(wèn)網(wǎng)卡驅(qū)動(dòng)模塊110中維護(hù)的雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列)。

步驟430:應(yīng)用層應(yīng)用處理模塊120通過(guò)驅(qū)動(dòng)層接口驅(qū)動(dòng)模塊130,訪問(wèn)網(wǎng)卡驅(qū)動(dòng)模塊110中維護(hù)的雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列),并基于雙向鏈表中的vlan_list_cache結(jié)構(gòu)體,獲取相應(yīng)的PTP報(bào)文,以及基于該P(yáng)TP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,采用預(yù)設(shè)的時(shí)鐘同步算法,完成與PTP報(bào)文發(fā)送端的時(shí)間同步和頻率同步。

步驟440:協(xié)議層非PTP報(bào)文處理模塊140采用現(xiàn)有技術(shù)中的調(diào)用處理函數(shù)的方法處理接收到的非PTP報(bào)文,具體的處理方法與現(xiàn)有技術(shù)中的處理方法相同,在此不再贅述。

下面結(jié)合附圖,針對(duì)SOC中每一個(gè)模塊的具體處理方式進(jìn)行詳細(xì)說(shuō)明。

參閱圖4B所示,本發(fā)明實(shí)施例中,物理層邏輯處理模塊100的具體處理流程如下:

步驟401:第一轉(zhuǎn)換單元101通過(guò)報(bào)文輸入端口MAC_rx接收?qǐng)?bào)文,并通過(guò)本地時(shí)鐘單元102維護(hù)的當(dāng)前時(shí)間,為該報(bào)文添加接收時(shí)間戳,以及將添加有接收時(shí)間戳的該報(bào)文分成兩路,一路緩存至第一緩存單元103,一路輸出至報(bào)文解析單元104。

步驟402:第一緩存單元103確定該報(bào)文緩存完成時(shí),將該報(bào)文的緩存地址輸出至信息獲取單元105。

步驟403:報(bào)文解析單元104對(duì)該報(bào)文進(jìn)行解析,確定該報(bào)文的報(bào)文類型,并將確定結(jié)果輸出至信息獲取單元105。

步驟404:信息獲取單元105基于接收到的緩存地址,從第一緩存單元103中獲取該報(bào)文,并基于接收到的確定結(jié)果,確定該報(bào)文是PTP報(bào)文時(shí),獲取該P(yáng)TP報(bào)文攜帶的發(fā)送時(shí)間戳。

步驟405:信息獲取單元105基于該P(yáng)TP報(bào)文攜帶的VLAN標(biāo)識(shí),將該P(yáng)TP報(bào)文的發(fā)送時(shí)間戳和接收時(shí)間戳等數(shù)據(jù)信息存儲(chǔ)至?xí)r間戳存儲(chǔ)單元106后,將該P(yáng)TP報(bào)文輸出至第二緩存單元107,由第二緩存單元107將該P(yáng)TP報(bào)文輸出至第二轉(zhuǎn)換單元109。

步驟406:第二轉(zhuǎn)換單元109按照網(wǎng)卡驅(qū)動(dòng)模塊110可接收的報(bào)文格式對(duì)該P(yáng)TP報(bào)文進(jìn)行配置,并將配置后的PTP報(bào)文輸出至網(wǎng)卡驅(qū)動(dòng)模塊110。

至此,物理層邏輯處理模塊100的處理流程結(jié)束。

參閱圖4C所示,本發(fā)明實(shí)施例中,驅(qū)動(dòng)層網(wǎng)卡驅(qū)動(dòng)模塊110的具體處理流程如下:

步驟411:注冊(cè)單元111接收到邏輯處理模塊100輸出的報(bào)文后,注冊(cè)一個(gè)中斷處理函數(shù),基于該中斷處理函數(shù),調(diào)用軟中斷處理流程(即調(diào)用以下處理流程)。

步驟412:判斷單元112對(duì)該報(bào)文進(jìn)行解析,判斷該報(bào)文是否為PTP報(bào)文,若是,則執(zhí)行步驟414;否則,執(zhí)行步驟413。

步驟413:判斷單元112將該非PTP報(bào)文輸出至非PTP報(bào)文處理模塊140,由非PTP報(bào)文處理模塊140采用現(xiàn)有技術(shù)中的調(diào)用處理函數(shù)的方法處理非PTP報(bào)文。

步驟414:判斷單元112將該P(yáng)TP報(bào)文存儲(chǔ)至PTP報(bào)文存儲(chǔ)單元113,觸發(fā)鏈表維護(hù)單元114為該P(yáng)TP報(bào)文申請(qǐng)一個(gè)vlan_list_cache結(jié)構(gòu)體。

步驟415:鏈表維護(hù)單元114為該P(yáng)TP報(bào)文申請(qǐng)一個(gè)vlan_list_cache結(jié)構(gòu)體,并將該vlan_list_cache結(jié)構(gòu)體插入雙向鏈表的鏈表頭結(jié)點(diǎn)struct list_head sb_list中,觸發(fā)喚醒單元115判斷進(jìn)程等待隊(duì)列中是否存在訪問(wèn)PTP報(bào)文的進(jìn)程。

具體地,鏈表維護(hù)單元114將該vlan_list_cache結(jié)構(gòu)體中成員list的指針list->pre指向鏈表頭結(jié)點(diǎn)struct list_head sb_list中成員sb_list的起始存儲(chǔ)地址,以及將該鏈表頭結(jié)點(diǎn)struct list_head sb_list中成員sb_list的指針sb_list->next指向該P(yáng)TP報(bào)文對(duì)應(yīng)的vlan_list_cache結(jié)構(gòu)體中成員list的起始存儲(chǔ)地址。其中,鏈表頭結(jié)點(diǎn)struct list_head sb_list存儲(chǔ)在表征網(wǎng)卡eth1所在設(shè)備屬性信息的struct net_device結(jié)構(gòu)體的全局私有成員struct net_local中。

步驟416:?jiǎn)拘褑卧?15確定進(jìn)程等待隊(duì)列中存在訪問(wèn)PTP報(bào)文的進(jìn)程時(shí),即確定有訪問(wèn)PTP報(bào)文的進(jìn)程在進(jìn)程等待隊(duì)列中睡眠時(shí),喚醒該進(jìn)程,觸發(fā)該進(jìn)程基于雙向鏈表中該P(yáng)TP報(bào)文對(duì)應(yīng)的vlan_list_cache結(jié)構(gòu)體,訪問(wèn)該P(yáng)TP報(bào)文。

至此,軟中斷處理流程結(jié)束,退出軟中斷處理流程,即驅(qū)動(dòng)層網(wǎng)卡驅(qū)動(dòng)模塊110的處理流程結(jié)束。

進(jìn)一步地,本發(fā)明實(shí)施例中,驅(qū)動(dòng)層還包括接口驅(qū)動(dòng)模塊130,該接口驅(qū)動(dòng)模塊130主要用于轉(zhuǎn)發(fā)邏輯處理模塊100與應(yīng)用處理模塊120,以及網(wǎng)卡驅(qū)動(dòng)模塊110與應(yīng)用處理模塊120之間的數(shù)據(jù)信息,并為應(yīng)用處理模塊120提供訪問(wèn)雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列)的訪問(wèn)途徑,接口驅(qū)動(dòng)模塊130具體操作如下:

(1)提供雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列)的訪問(wèn)途徑:

接口驅(qū)動(dòng)模塊130在初始化時(shí),調(diào)用dev_get_by_name(&init_net,"eth1")函數(shù),返回網(wǎng)卡驅(qū)動(dòng)模塊110中的表征網(wǎng)卡eth1屬性信息的struct net_device結(jié)構(gòu)體指針,并將該struct net_device結(jié)構(gòu)體指針存儲(chǔ)在全局變量中。

(2)轉(zhuǎn)發(fā)網(wǎng)卡驅(qū)動(dòng)模塊110和應(yīng)用處理模塊120之間的數(shù)據(jù)信息:

接口驅(qū)動(dòng)模塊130接收到應(yīng)用處理模塊120發(fā)送的PTP報(bào)文訪問(wèn)請(qǐng)求時(shí),將該P(yáng)TP報(bào)文訪問(wèn)請(qǐng)求轉(zhuǎn)發(fā)至網(wǎng)卡驅(qū)動(dòng)模塊110,并等待網(wǎng)卡驅(qū)動(dòng)模塊110返回的響應(yīng)消息。

接口驅(qū)動(dòng)模塊130接收到網(wǎng)卡驅(qū)動(dòng)模塊110返回的響應(yīng)消息時(shí),若基于該響應(yīng)消息,確定雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列)為空,則將該訪問(wèn)PTP報(bào)文的進(jìn)程加入至進(jìn)程等待隊(duì)列,并在確定該訪問(wèn)PTP報(bào)文的進(jìn)程被網(wǎng)卡驅(qū)動(dòng)模塊110中的喚醒單元115喚醒時(shí),調(diào)用MMAP函數(shù),使該訪問(wèn)PTP報(bào)文的進(jìn)程可以直接訪問(wèn)網(wǎng)卡驅(qū)動(dòng)模塊110中維護(hù)的雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列);若基于該響應(yīng)消息,確定雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列)不為空,則直接調(diào)用MMAP函數(shù),使該訪問(wèn)PTP報(bào)文的進(jìn)程可以直接訪問(wèn)網(wǎng)卡驅(qū)動(dòng)模塊110中維護(hù)的雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列)。

(3)轉(zhuǎn)發(fā)邏輯處理模塊100和應(yīng)用處理模塊120之間的數(shù)據(jù)信息:

接口驅(qū)動(dòng)模塊130接收到應(yīng)用處理模塊120發(fā)送的時(shí)間戳獲取請(qǐng)求時(shí),將該時(shí)間戳獲取請(qǐng)求轉(zhuǎn)發(fā)至邏輯處理模塊100,由邏輯處理模塊100基于該時(shí)間戳獲取請(qǐng)求中攜帶的VLAN標(biāo)識(shí),從時(shí)間戳存儲(chǔ)單元106中獲取相應(yīng)PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,并等待輯處理模塊100返回的攜帶有相應(yīng)PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳的時(shí)間戳獲取響應(yīng)。

接口驅(qū)動(dòng)模塊130接收到邏輯處理模塊100返回的時(shí)間戳獲取響應(yīng)時(shí),將該時(shí)間戳獲取響應(yīng)轉(zhuǎn)發(fā)至應(yīng)用處理模塊120中的接口適配單元122,由接口適配單元122將該時(shí)間戳獲取響應(yīng)輸出至處理單元121。

至此,驅(qū)動(dòng)層接口驅(qū)動(dòng)模塊130的主要操作流程結(jié)束。

參閱圖4D所示,本發(fā)明實(shí)施例中,應(yīng)用層應(yīng)用處理模塊120的具體處理流程如下:

步驟431:處理單元121確定需要讀取PTP報(bào)文時(shí),按照最大報(bào)文長(zhǎng)度申請(qǐng)一個(gè)用戶空間,并將該用戶空間對(duì)應(yīng)的用戶空間地址作為參數(shù)調(diào)用IOCTL函數(shù),通過(guò)該IOCTL函數(shù)控制接口適配單元122向驅(qū)動(dòng)層的接口驅(qū)動(dòng)模塊130發(fā)起PTP報(bào)文訪問(wèn)請(qǐng)求。

步驟432:接口適配單元122接收到該IOCTL函數(shù)并對(duì)該IOCTL函數(shù)進(jìn)行解析后,向接口驅(qū)動(dòng)模塊130發(fā)起PTP報(bào)文訪問(wèn)請(qǐng)求,并等待接口驅(qū)動(dòng)模塊130返回的響應(yīng)消息。

步驟433:接口適配單元122接收到接口驅(qū)動(dòng)模塊130返回的響應(yīng)消息時(shí),基于該響應(yīng)消息,確定雙向鏈表(即PTP報(bào)文存儲(chǔ)隊(duì)列)為空時(shí),等待網(wǎng)卡驅(qū)動(dòng)模塊110將訪問(wèn)PTP報(bào)文的進(jìn)程喚醒。

步驟434:接口適配單元122確定該訪問(wèn)PTP報(bào)文的進(jìn)程被喚醒時(shí),基于存儲(chǔ)在接口驅(qū)動(dòng)模塊130全局變量中的struct net_device結(jié)構(gòu)體指針,找到網(wǎng)卡驅(qū)動(dòng)模塊110對(duì)應(yīng)的struct net_device結(jié)構(gòu)體。

步驟435:接口適配單元122根據(jù)struct net_device結(jié)構(gòu)體的全局私有成員struct net_local,找到雙向鏈表的鏈表頭結(jié)點(diǎn)struct list_head sb_list,并根據(jù)鏈表頭結(jié)點(diǎn)struct list_head sb_list中成員sb_list的指針sb_list->next,找到雙向鏈表中的第一個(gè)vlan_list_cache結(jié)構(gòu)體中的成員list。

步驟436:接口適配單元122基于成員list的存儲(chǔ)地址與struct sk_buff的存儲(chǔ)地址之間的偏移量,找到第一個(gè)vlan_list_cache結(jié)構(gòu)體中的指針*sk,并基于vlan_list_cache結(jié)構(gòu)體中的指針*sk找到struct sk_buff,以及根據(jù)sk_buff中的指針*ptr,找到指針*ptr指向的第一個(gè)PTP報(bào)文的起始存儲(chǔ)地址,并將該第一個(gè)PTP報(bào)文復(fù)制到處理單元121申請(qǐng)的用戶空間中。

步驟437:處理單元121對(duì)用戶空間中的PTP報(bào)文進(jìn)行解析,獲取該P(yáng)TP報(bào)文攜帶的VLAN標(biāo)識(shí),并基于該VLAN標(biāo)識(shí),確定該P(yáng)TP報(bào)文的發(fā)送端。

步驟438:處理單元121將該VLAN標(biāo)識(shí)攜帶在時(shí)間戳獲取請(qǐng)求中,通過(guò)接口適配單元122發(fā)送至接口驅(qū)動(dòng)模塊130,并等待接口驅(qū)動(dòng)模塊130返回的時(shí)間戳獲取響應(yīng)。

步驟439:處理單元121接收接口驅(qū)動(dòng)模塊130返回的時(shí)間戳獲取響應(yīng),并基于該時(shí)間戳獲取響應(yīng)攜帶的接收時(shí)間戳和發(fā)送時(shí)間戳,采用預(yù)設(shè)的時(shí)鐘同步算法,完成與PTP報(bào)文發(fā)送端的時(shí)間同步和頻率同步。

至此,應(yīng)用層應(yīng)用處理模塊120的處理流程結(jié)束。

綜上所述,本發(fā)明實(shí)施例中,物理層在接收到報(bào)文的情況下,基于當(dāng)前時(shí)間,為上述報(bào)文添加接收時(shí)間戳,并在確定上述報(bào)文是PTP報(bào)文的情況下,獲取上述PTP報(bào)文攜帶的發(fā)送時(shí)間戳以及將上述PTP報(bào)文發(fā)送至驅(qū)動(dòng)層;驅(qū)動(dòng)層在存儲(chǔ)上述PTP報(bào)文后,為上述PTP報(bào)文申請(qǐng)存儲(chǔ)標(biāo)識(shí),并將上述存儲(chǔ)標(biāo)識(shí)加入至PTP報(bào)文存儲(chǔ)隊(duì)列,以及在確定滿足預(yù)設(shè)的時(shí)鐘同步觸發(fā)條件的情況下,觸發(fā)應(yīng)用層基于上述PTP報(bào)文存儲(chǔ)隊(duì)列記錄的存儲(chǔ)標(biāo)識(shí),獲取上述PTP報(bào)文;應(yīng)用層在確定上述PTP報(bào)文的發(fā)送端后,基于上述PTP報(bào)文的接收時(shí)間戳和發(fā)送時(shí)間戳,完成與上述發(fā)送端的時(shí)鐘同步。。這樣,通過(guò)將PTP報(bào)文加入PTP報(bào)文存儲(chǔ)隊(duì)列,就可以將PTP報(bào)文與非PTP報(bào)文進(jìn)行區(qū)分,無(wú)需采用調(diào)用處理函數(shù)的方法處理PTP報(bào)文,可以直接針對(duì)PTP報(bào)文存儲(chǔ)隊(duì)列中的各個(gè)PTP報(bào)文進(jìn)行時(shí)鐘同步處理,不僅減少了PTP報(bào)文的處理環(huán)節(jié),提高了PTP報(bào)文的處理效率,而且,也節(jié)省了調(diào)用處理函數(shù)所占用的存儲(chǔ)空間和處理資源。除此之外,通過(guò)物理層對(duì)接收到的PTP報(bào)文添加接收時(shí)間戳,減少了軟件處理的復(fù)雜度,避免了由于軟件處理PTP報(bào)文存在一定的延遲,導(dǎo)致通過(guò)軟件為PTP報(bào)文添加的接收時(shí)間戳存在較大誤差,從而導(dǎo)致時(shí)鐘同步不準(zhǔn)確的問(wèn)題,

進(jìn)一步地,本發(fā)明實(shí)施例中,只需要在struct net_device結(jié)構(gòu)體的全局私有成員struct net_local中預(yù)先設(shè)定雙向鏈表的鏈表頭結(jié)點(diǎn)struct list_head sb_list,接口驅(qū)動(dòng)模塊就可以根據(jù)struct net_device結(jié)構(gòu)體的全局私有成員struct net_local,從網(wǎng)卡驅(qū)動(dòng)模塊中,快速而準(zhǔn)確地確定出雙向鏈表的鏈表頭結(jié)點(diǎn)struct list_head sb_list,進(jìn)而,就可以確定出該雙向鏈表中各個(gè)鏈表結(jié)點(diǎn)各自指向的PTP報(bào)文的起始存儲(chǔ)地址,使得網(wǎng)卡驅(qū)動(dòng)模塊與接口驅(qū)動(dòng)模塊之間的信息傳遞簡(jiǎn)潔高效,進(jìn)一步地加快了PTP報(bào)文的處理效率。

本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。

本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。

這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。

這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。

盡管已描述了本發(fā)明的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本發(fā)明范圍的所有變更和修改。

顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明實(shí)施例進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明實(shí)施例的精神和范圍。這樣,倘若本發(fā)明實(shí)施例的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
琼海市| 白玉县| 普宁市| 吉安县| 永善县| 休宁县| 台北县| 株洲市| 肃北| 双江| 石泉县| 二连浩特市| 玛沁县| 吉水县| 乌拉特中旗| 当雄县| 衡南县| 长岭县| 藁城市| 台山市| 嘉义县| 长宁区| 大理市| 河池市| 乐清市| 石屏县| 繁峙县| 长子县| 孙吴县| 禄劝| 朔州市| 嘉善县| 永胜县| 屏边| 娱乐| 兰溪市| 临汾市| 米脂县| 华池县| 莱芜市| 龙岩市|