Skip site navigation (1)Skip section navigation (2)
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>