免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: hqucocl
打印 上一主题 下一主题

[网络管理] ip_conntrack_standalone.c 的作用是什么?老编译失败 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-04-23 15:33 |只看该作者
原帖由 colddawn 于 2006-4-22 20:49 发表
说一句,connlimit的2.6版本是针对2.6.11以后的内核版本的,而CentOS4.X和RedHat AS4都是2.6.9内核,这两个版本之间netfilter有几个结构变量不同,所以编译失败是一定的。我也被这个问题困扰过好久,后来是找了些 ...

要修改哪些代码?怎么修改?大哥提供一下啊··被郁闷快一星期了……的确在2.6.15成功过·但一台设备的驱动在2.6.15工作不正常·所以只能维持2.6.9了··谢谢了··

论坛徽章:
0
12 [报告]
发表于 2006-04-23 17:15 |只看该作者
很早以前作的patch file了,试试看吧




  1. --- BUILD-connlimit/ipt_connlimit.c.RH  2005-07-04 20:53:55.000000000 +0200
  2. +++ BUILD-connlimit/ipt_connlimit.c     2005-07-04 20:56:12.619285450 +0200
  3. @@ -63,9 +63,9 @@
  4.         for (lh = hash->next; lh != hash; lh = lh->next) {
  5.                 conn = list_entry(lh,struct ipt_connlimit_conn,list);
  6.                 found = ip_conntrack_find_get(&conn->tuple,ct);
  7. -               if (found != NULL &&
  8. -                   0 == memcmp(&conn->tuple,&tuple,sizeof(tuple)) &&
  9. -                   found->ctrack->proto.tcp.state != TCP_CONNTRACK_TIME_WAIT) {
  10. +               if (found != NULL
  11. +                   && 0 == memcmp(&conn->tuple,&tuple,sizeof(tuple))
  12. +                   && found->ctrack->proto.tcp.state != TCP_CONNTRACK_TIME_WAIT) {
  13.                         /* Just to be sure we have it only once in the list.
  14.                            We should'nt see tuples twice unless someone hooks this
  15.                            into a table without "-p tcp --syn" */
  16. @@ -91,14 +91,14 @@
  17.                         lh = lh->prev;
  18.                         list_del(lh->next);
  19.                         kfree(conn);
  20. -                       nf_conntrack_put(&found->ctrack->infos[0]);
  21. +                       nf_conntrack_put(&found->ctrack->ct_general);
  22.                         continue;
  23.                 }
  24.                 if ((addr & mask) == (conn->tuple.src.ip & mask)) {
  25.                         /* same source IP address -> be counted! */
  26.                         matches++;
  27.                 }
  28. -               nf_conntrack_put(&found->ctrack->infos[0]);
  29. +               nf_conntrack_put(&found->ctrack->ct_general);
  30.         }
  31.         if (addit) {
  32.                 /* save the new connection in our list */
  33. @@ -109,8 +109,10 @@
  34.                        NIPQUAD(tuple.dst.ip), ntohs(tuple.dst.u.tcp.port));
  35. #endif
  36.                 conn = kmalloc(sizeof(*conn),GFP_ATOMIC);
  37. -               if (NULL == conn)
  38. +               if (NULL == conn) {
  39. +                       spin_unlock_bh(&data->lock);
  40.                         return -1;
  41. +               }
  42.                 memset(conn,0,sizeof(*conn));
  43.                 INIT_LIST_HEAD(&conn->list);
  44.                 conn->tuple = tuple;
  45. @@ -127,8 +129,6 @@
  46.        const struct net_device *out,
  47.        const void *matchinfo,
  48.        int offset,
  49. -      const void *hdr,
  50. -      u_int16_t datalen,
  51.        int *hotdrop)
  52. {
  53.         const struct ipt_connlimit_info *info = matchinfo;
  54. @@ -204,8 +204,14 @@
  55.         kfree(info->data);
  56. }

  57. -static struct ipt_match connlimit_match
  58. -= { { NULL, NULL }, "connlimit", &match, &check, &destroy, THIS_MODULE };
  59. +static struct ipt_match connlimit_match = {
  60. +       .list = { NULL, NULL },
  61. +       .name = "connlimit",
  62. +       .match = &match,
  63. +       .checkentry = &check,
  64. +       .destroy = &destroy,
  65. +       .me = THIS_MODULE
  66. +};

  67. static int __init init(void)
  68. {
复制代码

论坛徽章:
0
13 [报告]
发表于 2006-04-24 11:03 |只看该作者
死活给编进去了……但…………郁闷死了··
ipt_connlimit: no version for "struct_module" found: kernel tainted.
ipt_connlimit: disagrees about version of symbol ip_conntrack_find_get
ipt_connlimit: Unknown symbol ip_conntrack_find_get
ipt_connlimit: disagrees about version of symbol ipt_register_match
ipt_connlimit: Unknown symbol ipt_register_match
ipt_connlimit: disagrees about version of symbol ipt_unregister_match
ipt_connlimit: Unknown symbol ipt_unregister_match
ipt_connlimit: disagrees about version of symbol ip_conntrack_find_get
ipt_connlimit: Unknown symbol ip_conntrack_find_get
ipt_connlimit: disagrees about version of symbol ipt_register_match
ipt_connlimit: Unknown symbol ipt_register_match
ipt_connlimit: disagrees about version of symbol ipt_unregister_match
ipt_connlimit: Unknown symbol ipt_unregister_match

论坛徽章:
0
14 [报告]
发表于 2006-04-24 15:21 |只看该作者
2.6内核的netfilter部分的代码组织发生了一次改变.
以我的经验,把patch-o-matic-ng打到2.6.16.x上的话是编译不出来的,试试2.6.14.x应该没问题,或者等待更新的补丁.

论坛徽章:
0
15 [报告]
发表于 2006-04-24 15:23 |只看该作者
原帖由 JohnBull 于 2006-4-24 15:21 发表
2.6内核的netfilter部分的代码组织发生了一次改变.
以我的经验,把patch-o-matic-ng打到2.6.16.x上的话是编译不出来的,试试2.6.14.x应该没问题,或者等待更新的补丁.

我感觉从 2.6.16 以后,netfilter 与以前相比有了一次很大的变化,连 module name 都改了,叫 x_tables

论坛徽章:
0
16 [报告]
发表于 2006-04-24 20:25 |只看该作者
centos4.3的内核源码存放的位置是/usr/src/kernel/2.6.9.34-i686/ ,里面很多模块都不全 为了方便,我从网上下了个 linux-2.6.9.tar.gz ,并把connlimit注入到里面进行编译··但编译成模块之后无法用·具体信息为
ipt_connlimit: no version for "struct_module" found: kernel tainted.
ipt_connlimit: disagrees about version of symbol ip_conntrack_find_get
ipt_connlimit: Unknown symbol ip_conntrack_find_get
ipt_connlimit: disagrees about version of symbol ipt_register_match
ipt_connlimit: Unknown symbol ipt_register_match
ipt_connlimit: disagrees about version of symbol ipt_unregister_match
ipt_connlimit: Unknown symbol ipt_unregister_match
ipt_connlimit: disagrees about version of symbol ip_conntrack_find_get
ipt_connlimit: Unknown symbol ip_conntrack_find_get
ipt_connlimit: disagrees about version of symbol ipt_register_match
ipt_connlimit: Unknown symbol ipt_register_match
ipt_connlimit: disagrees about version of symbol ipt_unregister_match
ipt_connlimit: Unknown symbol ipt_unregister_match

有什么好的解决方法么?

论坛徽章:
0
17 [报告]
发表于 2006-04-24 20:47 |只看该作者
原帖由 hqucocl 于 2006-4-24 20:25 发表
为了方便,我从网上下了个 linux-2.6.9.tar.gz

既然已经不用发行版自带的了,既然已经用标准内核了,为何不用高版本的?

论坛徽章:
0
18 [报告]
发表于 2006-04-25 11:46 |只看该作者
原帖由 platinum 于 2006-4-24 20:47 发表

既然已经不用发行版自带的了,既然已经用标准内核了,为何不用高版本的?

以前用过2.6.15·可以成功应用·但某台重要设备的驱动无法正常工作··没办法··只能保持现状··无奈啊··

论坛徽章:
0
19 [报告]
发表于 2006-04-26 09:55 |只看该作者
原帖由 hqucocl 于 2006-4-24 20:25 发表
centos4.3的内核源码存放的位置是/usr/src/kernel/2.6.9.34-i686/ ,里面很多模块都不全 为了方便,我从网上下了个 linux-2.6.9.tar.gz ,并把connlimit注入到里面进行编译··但编译成模块之后无法用·具体信息为 ...

试验过我的patch了吗?应该是可用的,已经在多台AS4机器上应用过了,实际上我都做过srpm和rpm的,都能够成功,因为没有update3的机器,就没有办法做as4u3和Centos4.3的版本的了,但是patchfile应该还是可以通用的,如果是你这种情况的话,建议试试看。

另外,你这里关于编译内核的方法是错误的,内核源码的位置仍然是/usr/src/linux-XXX,你所说的只是kernel-devel包安装的东西,只包含了用于kernelmod开发的代码,并不是所有代码,内核源代码应该是kernel-sourcecode包,这个包redhat已经不提供了,但是可以自己做出来,centos则可以直接yum install到这个包,具体可以参考我以前发过的帖子:

http://bbs.chinaunix.net/viewthr ... ;highlight=colddawn

论坛徽章:
0
20 [报告]
发表于 2006-05-01 15:12 |只看该作者
太感谢楼上的了…………
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP