今天看完《linux kernel moduletcp/ip 程式設計》中實現ping命令是顯示hello module 的資料報程式後,也完成了試驗現在總結如下:
步驟一、在/net/core/dev.c中增加後門
int (*eefunction01)(struct sk_buff *)=0;//這是函式eefunction01的函式指標宣告
在函式int dev_queue_xmit(struct sk_buff *){}中新增
if(eefunction01)//著表示有乙個函式指標eefunction01,其傳遞的引數為(struct sk_buff *),當程式執行到dev_queue_xmit()函式的一開始時,由指令if(eefunction01)判斷指標是否存在。如果存在則會執行eefunction01(skb)函式。
當然還要在檔案/net/netsyms.c檔案下進行必要的修改
新增 extern int(*eefunction01)(struct sk_buff *)
export_symbol_novers(eefunction01);
步驟二、編寫function01函式之前
在寫之前有些編寫模組函式的,必不可少的開頭
//--------例行公事-------------
#ifndef __kernel__
#define __kernel__
#endif
#ifndef module
#define module
#endif
#ifdef config_smp
#define __smp__
#endif
//--------例行公事結束----------
三、開始編寫eefunction01函式
#include
#incldue
#include
#include
module_license("gpl");
extern int (*eefunction01)(struct sk_buff *);
static int eefunction01()
static init_module(void)
static int cleanup_module(void)
使用的編譯命令 gcc -c -i/usr/src/(linux核心檔案)/include eefunction.c 就會生成eefunction01.o檔案然後就載入模組用ping命令就可以實現了。
注:以上試驗是在linux核心2.4.32下完成的。
rt...想學寫網路核心模組...我的機器有兩張網絡卡eth0、eth1,只想收到然後**出去。
首先,我修改/net/core/dev.c加入:(抄原實現的~~呵呵)
void(*mybr_handle_frame_hook)(struct sk_buff *skb)=null;
static __inline__ int handle_mybr(struct sk_buff *skb,
struct packet_type *pt_prev)
} mybr_handle_frame_hook(skb);
return ret; }
在netif_receive_skb函式中加入
....
#ifdef config_net_divert
if (skb-> dev-> divert && skb-> dev-> divert-> divert)
ret = handle_diverter(skb);
#endif /* config_net_divert */
#if defined(config_bridge) || defined(config_bridge_module)
if (skb-> dev-> br_port != null &&
br_handle_frame_hook != null)
#endif
我加的:
if(mybr_handle_frame_hook!=null)
return handle_mybr(skb,pt_prev);
///
for (ptype=ptype_base[ntohs(type)&15];ptype;ptype=ptype-> next)
if(!strcmp(skb-> dev-> name, "eth1 "))
} int init_module()
void cleanup_module()
module_license( "gpl ");
但是我一載入就crash了,555,請高人指點
游標修改資料
declare updateemtinca rcursor cursor scroll 宣告乙個游標 for select emtincar.id as emtincar id,case when b.yieldtransitstatetype id is null then 3 else b.yi...
elasticSearch修改資料
elasticsearch幾乎能實時提供資料操作和搜尋功能。預設情況下,從開始索引 更新 刪除資料到出現搜尋結果的時間可以認為需要一秒的時間。這是與sql等其他平台的重要區別,其中資料在事務完成後可以立即使用。在上節中我們給索引建立了乙個文件,命令為 put customer doc 1 prett...
mongodb修改資料
修改資料 db.collectionname.update query,update,upsert,multi 功能 修改乙個文件 引數 query 篩選要修改的文件 相當於where子句,用法同查詢 update 將資料更新為什麼內容相當於set操作,需要使用修改器操作符 upsert bool值...