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>
