Date: Fri, 22 Nov 2002 11:18:07 +0100 From: Mattias Pettersson <mattias.pettersson@era.ericsson.se> To: snap-users@kame.net Cc: freebsd-net@freebsd.org Subject: Re: (KAME-snap 7197) Interrupt levels and concurrency Message-ID: <3DDE045F.5CC8F5B5@era.ericsson.se> References: <3DDD0E1B.80C8C4AA@it.uc3m.es>
next in thread | previous in thread | raw e-mail | index | archive | help
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.Subject: Re: (KAME-snap 7197) Interrupt levels and concurrency Date: Fri, 22 Nov 2002 09:57:57 +0100 From: Mattias Pettersson <mattias.pettersson@era.ericsson.se> Organization: Ericsson Research To: jrh@it.uc3m.es References: 1 Hi, I send this to you privately, because I don't want to embarass myself on the lists if I'm saying something stupid... ;) 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 > > Could you suggest me anything ? You have a lot of experience > with these topics, and any guideline or explanation that you give > me will be very very thanksfully thanked (sorry for my awful English :) > > Thanks! > > -- > 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?3DDE045F.5CC8F5B5>