亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問板塊 發(fā)新帖
查看: 3551 | 回復(fù): 3
打印 上一主題 下一主題

請(qǐng)教:如何直接在LINUX內(nèi)核協(xié)議棧提高GRE轉(zhuǎn)發(fā)包的速度? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-08-25 10:00 |只看該作者 |倒序?yàn)g覽
目前遇到一個(gè)比較緊的問題,在一個(gè)網(wǎng)口收到UDP包,想將其進(jìn)行簡(jiǎn)單拆包后再封裝(GRE封裝),在另一個(gè)網(wǎng)口發(fā)出。
因?yàn)槎际菙?shù)據(jù)通道,要求的效率非常高,看到一些源碼是在內(nèi)核中做的,但最終會(huì)看到收發(fā)包是一些匯編調(diào)用。這樣的代碼具有能用性嗎?
不知哪位有經(jīng)驗(yàn),可否給些提示?

論壇徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [報(bào)告]
發(fā)表于 2008-08-25 10:10 |只看該作者

回復(fù) #1 alwayscy 的帖子

收包是匯編實(shí)現(xiàn),那是根據(jù)特定的處理器來實(shí)現(xiàn)的。而對(duì)于內(nèi)核與體系結(jié)構(gòu)不相關(guān)的處理,都遵循了網(wǎng)絡(luò)處理包的流程,應(yīng)該說各層實(shí)現(xiàn)各自的功能,你只要知道在那一層拆包再封包,轉(zhuǎn)發(fā)再調(diào)用下一層的接口即可。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2008-08-25 10:21 |只看該作者
看了下代碼,不得頭緒,還請(qǐng)指點(diǎn)下主要概念和參考資料,好去查閱。以前都只是LINUX應(yīng)用編程,內(nèi)核編程未有涉及。
下面是幾段源碼,不知道是要自己寫,還是有現(xiàn)成代碼?


/*
* Send to the message ring
*/
unsigned int fast_syscall_msgsnd(unsigned int size, unsigned int code,
                                     unsigned int stid, unsigned long long msg0,
                                     unsigned long long msg1)
{
  unsigned int status,
               arg0,
               arg1,
               arg2,
               arg3;;
  arg0 = (unsigned int)(msg0>>32);
  arg1 = (unsigned int)(msg0);
  arg2 = (unsigned int)(msg1>>32);
  arg3 = (unsigned int)(msg1);
  __asm__ volatile (
                    "move $8, %1\n"       /* t0 = (((size-1)<<16)|(code<<|stid */
                    "move $9, %2\n"       /* t1 = arg0 */
                    "move $10, %3\n"      /* t2 = arg1 */
                    "move $11, %4\n"      /* t3 = arg2 */
                    "move $12, %5\n"      /* t4 = arg3 */
                    "syscall 1\n"         /* syscall #xlr_fast_syscall_msgsnd */
                    "move %0, $9\n"       /* status = t1 */
                    : "=r"(status)
                    : "r"(((size-1)<<16)|(code<<|stid), "r"(arg0), "r"(arg1), "r"(arg2), "r"(arg3)
                    :"$8", "$9", "$10", "$11", "$12"
                    );
  return status;
}
/*
* Receive from the message ring
*/
int fast_syscall_msgrcv(int pri, int *size, int *code, int *src_id,
                            unsigned long long *msg0)
{
  unsigned int result,
               status,
               arg0,
               arg1;
  __asm__ volatile (
                    "move $8, %4\n"       /* t0 = pri */
                    "syscall 2\n"         /* syscall #xlr_fast_syscall_msgld */
                    "move %0, $8\n"       /* result = t0 */
                    "move %1, $9\n"       /* arg0 = t1 */
                    "move %2, $10\n"      /* arg1 = t2 */
                    "move %3, $11\n"      /* status = t3 */
                    : "=r"(result), "=r"(arg0), "=r"(arg1), "=r"(status)
                    : "r"(pri)
                    :"$8", "$9", "$10", "$11"
                    );
  if (!result) {
      *size=((status & 0xc0)>>6)+1;
      *code=(status & 0xff00)>>8;
      *src_id=(status & 0x7f0000)>>16;
      *msg0=(((unsigned long long)arg0)<<32)|arg1;
     return 0;
  }
  return result;
}

論壇徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
4 [報(bào)告]
發(fā)表于 2008-08-25 13:26 |只看該作者

回復(fù) #3 alwayscy 的帖子

你這個(gè)是基于特定處理器實(shí)現(xiàn)的,這個(gè)應(yīng)該是提供給發(fā)送和接收的接口。我覺得你應(yīng)該從整體上認(rèn)識(shí)清楚,如果整體上沒有認(rèn)識(shí)清楚,即使你把這兩個(gè)函數(shù)的每一行代碼都看懂了,你可能還是一頭霧水。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP