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

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: 獨孤九賤
打印 上一主題 下一主題

iptables 源碼分析 [復(fù)制鏈接]

論壇徽章:
0
21 [報告]
發(fā)表于 2005-12-07 13:10 |只看該作者
原帖由 mq110 于 2005-12-7 12:42 發(fā)表


內(nèi)核進程和用戶進程 共享內(nèi)存了 你如何實現(xiàn)互斥???

你說的<<Unix環(huán)境高級編程>>只是提到了System V 共享內(nèi)存的方式。他是用戶態(tài)的。。不是我說的內(nèi)核進程和用戶進程共享內(nèi)存的方式。


可能我誤解你的意思了!

但是偶認(rèn)為,包過濾函數(shù)與用戶空間操作函數(shù)之間共享規(guī)則:
1、可以通過共享空間來完成的,在Win下邊做防火墻,偶就是這樣子做的;至于linux下內(nèi)核與用戶進程共享內(nèi)存的互斥,到是沒有做過。實現(xiàn)不行,用最笨的方法,自己實現(xiàn)互斥鎖應(yīng)該是可以的吧,回頭我做做測試先。

2、netfilter在實現(xiàn)的時候,應(yīng)該是使用 find_table_lock來實現(xiàn)的,不過偶沒有認(rèn)真地跟下去看這個函數(shù)了。如果我沒有分析錯的話,iptables通過調(diào)用setsockopt函數(shù),進過層層調(diào)用,最后是
nf_sockopts(),它事實上是操作了:
static struct nf_sockopt_ops ipt_sockopts
= { { NULL, NULL }, PF_INET, IPT_BASE_CTL, IPT_SO_SET_MAX+1, do_ipt_set_ctl,
    IPT_BASE_CTL, IPT_SO_GET_MAX+1, do_ipt_get_ctl, 0, NULL  };

因為在這個結(jié)構(gòu)中,封裝了set/get函數(shù)。比如get,它把內(nèi)核空間的規(guī)則拷貝到用戶這間:
static int
do_ipt_get_ctl(struct sock *sk, int cmd, void *user, int *len)
……
        case IPT_SO_GET_ENTRIES: {
                struct ipt_get_entries get;

                if (*len < sizeof(get)) {
                        duprintf("get_entries: %u < %u\n", *len, sizeof(get));
                        ret = -EINVAL;
                } else if (copy_from_user(&get, user, sizeof(get)) != 0) {
                        ret = -EFAULT;
                } else if (*len != sizeof(struct ipt_get_entries) + get.size) {
                        duprintf("get_entries: %u != %u\n", *len,
                                 sizeof(struct ipt_get_entries) + get.size);
                        ret = -EINVAL;
                } else
                        ret = get_entries(&get, user);
                break;
        }
進入get_entries
static int
get_entries(const struct ipt_get_entries *entries,
            struct ipt_get_entries *uptr)
{
        int ret;
        struct ipt_table *t;


        t = find_table_lock(entries->name, &ret, &ipt_mutex);
        if (t) {
                duprintf("t->private->number = %u\n",
                         t->private->number);
                if (entries->size == t->private->size)
                        ret = copy_entries_to_user(t->private->size,
                                                   t, uptr->entrytable);
                else {
                        duprintf("get_entries: I've got %u not %u!\n",
                                 t->private->size,
                                 entries->size);
                        ret = -EINVAL;
                }
                up(&ipt_mutex);
        } else
                duprintf("get_entries: Can't find %s!\n",
                         entries->name);

        return ret;
}

find_table_lock用于返回查找的表的元素,同時第三個參數(shù)應(yīng)該即為互斥鎖,應(yīng)該就是你所關(guān)心的。不過前一遍看它時并沒有仔細地分析它。我看完第二遍的時候,或許可以寫個詳盡的分析出來。

[ 本帖最后由 獨孤九賤 于 2005-12-7 13:16 編輯 ]

論壇徽章:
0
22 [報告]
發(fā)表于 2005-12-07 13:16 |只看該作者
原帖由 mq110 于 2005-12-7 12:42 發(fā)表


內(nèi)核進程和用戶進程 共享內(nèi)存了 你如何實現(xiàn)互斥???

你說的<<Unix環(huán)境高級編程>>只是提到了System V 共享內(nèi)存的方式。他是用戶態(tài)的。。不是我說的內(nèi)核進程和用戶進程共享內(nèi)存的方式。



內(nèi)核和用戶可以實現(xiàn)內(nèi)存共享、并且同步的,不過我也沒思路,只記得linuxforum有個人在wheelz版主的指點下做出來了,wheelz版主還給了個小例子──可惜我沒保存,這兩天linuxforum又上不去。


一般常用的通訊方式有這么幾種:1, 注冊一個字符設(shè)備,實現(xiàn)read/write等---相當(dāng)于驅(qū)動了一個物理上不存在的設(shè)備;2, proc文件系統(tǒng);3, 系統(tǒng)調(diào)用,改寫某個sys_ni_syscall或者添加新的syscal或者reuse某個已有的syscall;4, netlink,可以man 7 netlink查看,手冊中說:netlink, PF_NETLINK - Communication between kernel and user,不過我沒接觸過,不知道好不好用。

我知道的就這么多了

論壇徽章:
0
23 [報告]
發(fā)表于 2005-12-07 13:19 |只看該作者
原帖由 albcamus 于 2005-12-7 13:16 發(fā)表



內(nèi)核和用戶可以實現(xiàn)內(nèi)存共享、并且同步的,不過我也沒思路,只記得linuxforum有個人在wheelz版主的指點下做出來了,wheelz版主還給了個小例子──可惜我沒保存,這兩天linuxforum又上不去。


一般常用的 ...


OK,我也試試先……

至防火墻規(guī)則,其實把規(guī)則放在過濾函數(shù)那里,用戶空間到時去拷貝也是可以的,而且簡單,互斥可以自己簡單地實現(xiàn)……

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
24 [報告]
發(fā)表于 2005-12-07 13:23 |只看該作者
原帖由 albcamus 于 2005-12-7 13:16 發(fā)表



內(nèi)核和用戶可以實現(xiàn)內(nèi)存共享、并且同步的,不過我也沒思路,只記得linuxforum有個人在wheelz版主的指點下做出來了,wheelz版主還給了個小例子──可惜我沒保存,這兩天linuxforum又上不去。


一般常用的 ...


哪個例子我保存了 需要的話給你發(fā)上來。
我就是想改進 wheelz版主的例子 。來做一個通用的內(nèi)核進程 和 用戶進程共享內(nèi)存的通用方法。

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
25 [報告]
發(fā)表于 2005-12-07 13:27 |只看該作者
想法 是內(nèi)核分配內(nèi)存。然后存入/proc 文件系統(tǒng) 一個內(nèi)存地址。用戶空間的進程讀這個地址。。然后就可以共享內(nèi)存了!,F(xiàn)在只是不知道如何互斥的操作。。

ps:這幾天linuxforum上不去 好是郁悶。。
我比較同意 白金兄的觀點。。其實分析netfilter架構(gòu)。以及tcp/ip協(xié)議棧 來實現(xiàn)自己的架構(gòu)比較好。。

論壇徽章:
0
26 [報告]
發(fā)表于 2005-12-07 13:28 |只看該作者

回復(fù) 24樓 mq110 的帖子

關(guān)于用netlink來做,這篇貼子寫得非常好。

http://www-128.ibm.com/developer ... cn-newsletter-linux

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
27 [報告]
發(fā)表于 2005-12-07 13:28 |只看該作者
或許我應(yīng)該換個思路了。。
注冊字符設(shè)備 驅(qū)動 這個方式比較好。實現(xiàn)起來也不麻煩。

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
28 [報告]
發(fā)表于 2005-12-07 13:30 |只看該作者
原帖由 獨孤九賤 于 2005-12-7 13:28 發(fā)表
關(guān)于用netlink來做,這篇貼子寫得非常好。

http://www-128.ibm.com/developer ... cn-newsletter-linux


多謝多謝。

論壇徽章:
0
29 [報告]
發(fā)表于 2005-12-07 13:35 |只看該作者
原帖由 mq110 于 2005-12-7 13:30 發(fā)表


多謝多謝。


不用謝了,好像那個很現(xiàn)成,正符合你要求。
我正在請教偶老大,內(nèi)核態(tài)與用戶空間用shm做怎么互斥。試驗去了。

剛轉(zhuǎn)到linux下邊來一兩個月,還是個新手,不明白的地方很多,我貼代碼的本來目的,就是想多幾個人一起討論學(xué)習(xí),上次貼《snort源碼分析》就把各人打擊慘了,可能是研究它的人太少了。呵呵,以后多交流了……

論壇徽章:
0
30 [報告]
發(fā)表于 2005-12-07 13:35 |只看該作者
TCP/IP協(xié)議棧我在網(wǎng)上找了一些資料,仍然未愜人意。 特別是由于缺少印刷的圖書, 進展很慢。
大家可以在emule上找一本叫做the Linux Networking Architectures: Design and Implementation of Network Protocols in the Linux Kernel的書,德國人寫的,可惜英文譯本不是很好。
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP