From owner-freebsd-hackers@FreeBSD.ORG Wed Nov 23 16:15:03 2005 Return-Path: X-Original-To: freebsd-hackers@freebsd.org Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 73B6416A41F for ; Wed, 23 Nov 2005 16:15:03 +0000 (GMT) (envelope-from simon@comsys.ntu-kpi.kiev.ua) Received: from comsys.ntu-kpi.kiev.ua (comsys.ntu-kpi.kiev.ua [195.245.194.142]) by mx1.FreeBSD.org (Postfix) with ESMTP id 0643C43D58 for ; Wed, 23 Nov 2005 16:14:56 +0000 (GMT) (envelope-from simon@comsys.ntu-kpi.kiev.ua) Received: from pm513-1.comsys.ntu-kpi.kiev.ua (pm513-1.comsys.ntu-kpi.kiev.ua [10.18.52.101]) (authenticated bits=0) by comsys.ntu-kpi.kiev.ua (8.12.10/8.12.10) with ESMTP id jANGP1cp075037 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 23 Nov 2005 18:25:01 +0200 (EET) Received: by pm513-1.comsys.ntu-kpi.kiev.ua (Postfix, from userid 1001) id C1D485C023; Wed, 23 Nov 2005 18:14:53 +0200 (EET) Date: Wed, 23 Nov 2005 18:14:53 +0200 From: Andrey Simonenko To: gzh@net.pku.edu.cn Message-ID: <20051123161453.GA606@pm513-1.comsys.ntu-kpi.kiev.ua> References: <200511191408.jAJE8KGl024009@net.pku.edu.cn> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200511191408.jAJE8KGl024009@net.pku.edu.cn> User-Agent: Mutt/1.5.11 X-Spam-Status: No, score=-4.3 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.0.1 X-Spam-Checker-Version: SpamAssassin 3.0.1 (2004-10-22) on comsys.ntu-kpi.kiev.ua X-Virus-Scanned: ClamAV 0.82/1180/Sun Nov 20 12:20:28 2005 on comsys.ntu-kpi.kiev.ua X-Virus-Status: Clean Cc: freebsd-hackers@freebsd.org Subject: Re: a puzzle about FreeBSD X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Nov 2005 16:15:03 -0000 On Sat, Nov 19, 2005 at 09:51:58PM +0800, ?????? wrote: > > I read the source code of a project. I don??t understand SYSCTL_IN macro and > SYSCTL_PROC macro. I want to know when my function registered in SYSCTL_PROC > is called. This sysctl handler is called, for example, from __sysctl -> userland_sysctl -> sysctl_root as oid_handler, which is setuped, when SYSCTL_PROC declared struct sysctl_oid{}. SYSCTL_IN/OUT are used for copying to/from one buffer to another buffer with advancing pointers and offsets of buffers. Since there are two spaces userland and kernel, but interface should be general, there are two functions oldfunc and newfunc in struct sysctl_req{}, which are defined to sysctl_{new,old}_{kernel,user}, depending from which space it is necessary to make sysctl call.