As a matter of fact, I referred to code in simple udp server, to write some of my own code. However, as I said, I need to use system calls to get a socket fd to be used in sys_poll(). Otherwise, I guess I will have to call something like tcp_poll or udp_poll.
About why system calls are not to be used in kernel space:
1. I did not find anything useful yet. May be my search terms are wrong.
2. One of the links that you have given, again makes a generic statement "Generally speaking, trying to use any of the sys_*() functions from the kernel itself is a bad idea" without giving any specific reasons. It, however, gives reasons about why its a bad idea to read/write to files from kernel space, to which I agree.
On Mon, Aug 3, 2009 at 1:43 AM, Pei Lin <telent997@xxxxxxxxx> wrote:
it is not commended to use system call in the kernel space. It has no
necessary to do so.
u can research the maillist for why.
i think the system call is the interface for user space applications to use.
u wanna write the sock in the kernel, plz use the function the kernel provide.
give u two articles for reference:
http://kernelnewbies.org/Simple_UDP_Server
http://kernelnewbies.org/FAQ/WhyWritingFilesFromKernelIsBad
IMO, the functions designed had their own scope for using.
BRs
Lin
2009/8/3 Methos <methos.oldest@xxxxxxxxx>:
> hi,
> I want to write a simple network client server inside kernel(2.6.22). I know
> that this should not be done in kernel, however, this is a research project
> and I just wanted to compare a few things. I was using sock_create() to
> create a socket. This call returns an allocated struct socket upon
> successful completion. However, now I want to use sys_poll() to poll the
> socket to check if the data is available. Since I need fd for this, I was
> thinking about recompiling kernel with exported sock_map_fd() (and
> sock_poll()) and using that to get an fd.
> My questions:
> 1. I assume that usually when a socket is created from user level process,
> sock_map_fd() will allocate an fd from table that is associated with that
> user level process. However, in this case, my kernel thread is not
> associated with any process. Would it be still safe to call sock_map_fd(),
> get an fd and call sys_poll() on it?
> 2. In the latest kernel (2.6.30), I see that most of the system calls are
> defined using SYSCALL_DEFINEN() macro. What is the reason in doing so? Can
> one still use system calls defined in this way inside the kernel?
> In general, why system calls are hidden from kernel processes?