关于内核网络协议栈 inetsw_array 调试

zheolong 发布于 2012/06/14 11:56
阅读 253
收藏 0
运行环境:ubuntu 10.0.04
内核(重新编译):2.6.34.1
调试环境:两台虚拟机,一个作为开发机,一个作为目标机
调试方法:kgdb

各位大侠,小弟请教一个问题:
小弟在af_inet.c中修改了inetsw_array[],修改内容如下:

/* Upon startup we insert all the elements in inetsw_array[] into
 * the linked list inetsw.
 */

static struct inet_protosw inetsw_array[] =
{
{
.type =       SOCK_STREAM,
.protocol =   IPPROTO_TCP,
.prot =       &tcp_prot,
.ops =        &inet_stream_ops,
.no_check =   0,
.flags =      INET_PROTOSW_PERMANENT |
      INET_PROTOSW_ICSK,
},

{
.type =       SOCK_DGRAM,
.protocol =   IPPROTO_UDP,
.prot =       &udp_prot,
.ops =        &inet_dgram_ops,
.no_check =   UDP_CSUM_DEFAULT,
.flags =      INET_PROTOSW_PERMANENT,
       },


       {
       .type =       SOCK_RAW,
       .protocol =   IPPROTO_IP, /* wild card */
       .prot =       &raw_prot,
       .ops =        &inet_sockraw_ops,
       .no_check =   UDP_CSUM_DEFAULT,
       .flags =      INET_PROTOSW_REUSE,
       },

       /*qjl:mydup*/
       {
       .type =       SOCK_MYUDP,
               .protocol =   IPPROTO_MYUDP,
               .prot     =   &myudp_prot,
               .ops      =   &inet_dgram_ops,
               .no_check =   UDP_CSUM_DEFAULT,
               .flags    =   INET_PROTOSW_PERMANENT,
       }

};

也就是说我添加了一个自己的协议类型和sock类型,即IPPROTO_MYUDP和SOCK_MYUDP
对修改后的内核重新编译以后,在调试该内核时发现(用display inetsw_array命令)  inetsw_array中的内容并没有修改,下面是我用display inetsw_array命令查看的结果:

(gdb) display inetsw_array
1: inetsw_array = {{list = {next = 0xc08c9648, prev = 0xc08c9648}, type = 1, 
    protocol = 6, prot = 0xc0788020, ops = 0xc05e08a0, no_check = 0 '\000', 
    flags = 6 '\006'}, {list = {next = 0xc0788ad4, prev = 0xc08c9650}, 
    type = 2, protocol = 17, prot = 0xc07888a0, ops = 0xc05e0900, 
    no_check = 0 '\000', flags = 2 '\002'}, {list = {next = 0xc08c9658, 
      prev = 0xc08c9658}, type = 3, protocol = 0, prot = 0xc07883c0, 
    ops = 0xc05e09e0, no_check = 0 '\000', flags = 1 '\001'}}

也就是说还是没有加进我自己的sock和协议,不知道为什么,请各位赐教,小弟先行谢过!
加载中
返回顶部
顶部