Date: Fri, 22 Nov 2002 16:20:18 +0100 From: Juan Francisco Rodriguez Hervella <jrh@it.uc3m.es> To: Mattias Pettersson <mattias.pettersson@era.ericsson.se> Cc: snap-users@kame.net, freebsd-net@FreeBSD.ORG Subject: Re: (KAME-snap 7197) Interrupt levels and concurrency Message-ID: <3DDE4B32.107DD140@it.uc3m.es> References: <3DDD0E1B.80C8C4AA@it.uc3m.es> <3DDE045F.5CC8F5B5@era.ericsson.se>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi Mattias, Mattias Pettersson escribió: > > Hi, > > Giving it a try: > > Juan Francisco Rodriguez Hervella wrote: > > > > Hello (again :) > > > > I'm doing my best, but I'm in a mess trying to understand > > the interrup levels and if I should take it into account > > to implement what I want to implement :) > > > > As I'm working with KAME source code, I will CC this question. > > (KAME people always help me a lot :) > > > > I have the following situation: I've got an array, which > > is filled in using received packets, but it can also be filled in > > using the function "getaddrinfo()". Finally, this array > > is searched inside ip_output() function. > > > > So I was thinking of implementing the interaction between "getaddrinfo" > > and this kernel-array using "sysctl" interface, but I was wondering > > if I need to low the interrup level to fill in this array inside the > > sysctl_function(), because it could happen that at the same time > > a new packet arrived at and it can try to access the same structure. > > Yes, I think you should protect that piece of code with "spl(net)... " > inside sysctl, in case ip_input is pre-empting it. > > Doing that you can be sure that no other code running at "net" level > will mess with the array. > > > > I've implemented some other code with sysctls calls and I've never > > worried about the interrups levels, but now I've got a doubt... > > does "sysctl" takes into account the likehood of concurrent system calls > > ? > > I hope so.... > > > > Returning to my implementation, Would I have to worry about the case > > when "getaddrinfo" is calling to sysctl to add a new entry and then the > > function ip_output() begins to search the share structure also ? > > > > No. ip_output() I think runs at spl(net) too, so as long as sysctl is > running at net it should work fine. > > In addition, user space does not really have any priority over kernel. > > > I can see that my array can be accesed from (at least) the following > > points: > > > > 1. User layer (getaddrinfo) > > 2. IP layer (ip_input, ip_output) > > > > I was thinking of calling directly to the sysctl_function() inside > > ip_input() and also inside ip_output(). I hope there's no problem with > > this. > > Not sure. >I once tried to reuse in6_control() in the kernel to >achieve >something like an "ifconfig", but KAME didn't like that. > >Hope it helps. > > /Mattias Thanks for your fast reply... After thinking of it, I think you're right, with splnet inside sysctl function should be enough. Forget about my last paragraph, when I was talking about calling directly to sysctl_function from the ip_input(), I wanted to make that because the code for adding a new element in the array was implemented there.... forget it and thank you very much :) -- JFRH. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3DDE4B32.107DD140>