drcom的进展
Saturday, 15. April 2006, 07:03:09
struct socket {
socket_state state;
unsigned long flags;
const struct proto_ops *ops;
struct fasync_struct *fasync_list;
struct file *file;
struct sock *sk;
wait_queue_head_t wait;
short type;
};
这是所有unix,linux程序共同的地方,否则也不存在网络应用程序的可移植性了,再往下面一层就是inet层了,需要的入口肯定在这里。却不能在这个结构体里面进行指定,原来天真的想可以覆盖下面具体的函数实现,仔细一看内核的代码,但发现是不可操作的。后来想能否通过操作inetsw_array [ ]来实现。它是一个静态数组,但是却不是外部变量,所以从内核模块无法操作这个变量。inet_stream_ops等等被声明定义为常量,所以无法操作,再往下就是ops所调用的各个函数,而这些函数却是无法被暂时的替换然后在模块退出时返回原值的。再往下就到了网络层,这层往下的操作如何来做,我是不知道。
最近还有些其他的事情,所以这个也只有暂时放下了,我想除了FC5,其他的发型版还是用老版的内核吧,应该还有时间等后面有人做出来。自己能力有限吧,我需要时间再加强加强。如果是FC5的用户,需要用的,那么就自己hacker一下内核吧,为了drcom发布一个内核补丁是不值的。应该还有其他的解决方案。下面是通过读内核源码想到的hacker内核的方法,我自己还没有测试过,我懒得装2.6.16的内核,有用FC5的就先充当这个测试吧。内核版本为 2.6.16.1,其他版本的应该行数也没有变或者在附近。该完之后重新编译内核和drcomsuite
1. 修改声明
/*file:include/net/inet_common.h,第四行和第五行,去掉常量的声明*/ extern struct proto_ops inet_stream_ops; extern struct proto_ops inet_dgram_ops;
2. 修改定义
/*file:net/ipv4/af_inet.c,line 790,811行,去掉常量声明*/
790: struct proto_ops inet_stream_ops = {
//omited
};
811: struct proto_ops inet_dgram_ops = {
//omited
};













