All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: How to get a local IPv4 address from within a kernel module?
@ 2002-10-31 18:09 Juan Gomez
  2002-10-31 18:30 ` Jean Tourrilhes
  0 siblings, 1 reply; 9+ messages in thread
From: Juan Gomez @ 2002-10-31 18:09 UTC (permalink / raw)
  To: Josh Myer; +Cc: jbm, jt, linux-kernel





Josh

That is the purpose of my orignal message. In fact I have implemented
somthing along the lines of what you suggest below and I just want to test
the waters on whether this will be accepted. My current implementation is a
little more specific as it only gets the interfaces with IPv4 enabled on
them and skip lo but the idea is to get a consensus on what would be
genrally useful and then introduce that.

Regards, Juan



|---------+----------------------------->
|         |           Josh Myer         |
|         |           <jbm@joshisanerd.c|
|         |           om>               |
|         |           Sent by: Josh Myer|
|         |           <jbm@blessed.joshi|
|         |           sanerd.com>       |
|         |                             |
|         |                             |
|         |           10/31/02 10:01 AM |
|         |                             |
|---------+----------------------------->
  >------------------------------------------------------------------------------------------------------------------|
  |                                                                                                                  |
  |       To:       Juan Gomez/Almaden/IBM@IBMUS                                                                     |
  |       cc:       jt@hpl.hp.com, <linux-kernel@vger.kernel.org>                                                    |
  |       Subject:  Re: How to get a local IPv4 address from within a kernel module?                                 |
  |                                                                                                                  |
  |                                                                                                                  |
  >------------------------------------------------------------------------------------------------------------------|



In general, the only way a "get interface address" function would be
accepted into mainline is if it was Generally Useful.

In order for it to be Generally Useful, you'll want to make it able to
get any address of any interface. Otherwise it's useless cruft for one
specific purpose, which can't be used anywhere else.

I'd suggest a function to get a list of interfaces, and then a function to
get a list of addresses for a given interface. Then you could just grab
the first address of the first interface for your application. Don't
forget to take into account that interfaces can change address, go up and
down, disappear/reappear, and change actual hardware...

And even that isn't Generally Useful. In fact, what the hell it's good for
is left as an exercise for the reader (implementation, too).

Though if "any IPv4 on any interface" will do, just assume 127.0.0.1 on
lo. Anyone that changes that has sins to atone for, and finding kernel
quirks is appropriate penance.

Did we mention that you'd be best to get the address in userspace and pass
it into the module? That's really the best bet...
--
/jbm, but you can call me Josh. Really, you can!
 "What's a metaphor?" "For sheep to graze in"
7958 1C1C 306A CDF8 4468  3EDE 1F93 F49D 5FA1 49C4


On Thu, 31 Oct 2002, Juan Gomez wrote:

>
>
>
>
>
> Jean,
>
> I am aware of all this, however, my application will be happy to get any
> IPv4 assigned to any of the local interfaces as far as you consistently
> get the same on repeated calls.
> I think there should be an interface to query this from within the kernel
> so since I did not find it I am proposing to get one
> or may be there is something hidden which I missed so I decided to ask
> here.
>
> Juan
>
>
>
>
> |---------+---------------------------------->
> |         |           Jean Tourrilhes        |
> |         |           <jt@bougret.hpl.hp.com>|
> |         |           Sent by:               |
> |         |           linux-kernel-owner@vger|
> |         |           .kernel.org            |
> |         |                                  |
> |         |                                  |
> |         |           10/30/02 06:38 PM      |
> |         |           Please respond to jt   |
> |         |                                  |
> |---------+---------------------------------->
>
>------------------------------------------------------------------------------------------------------------------|

>   |
|
>   |       To:       Linux kernel mailing list
<linux-kernel@vger.kernel.org>                                         |
>   |       cc:
|
>   |       Subject:  Re: How to get a local IPv4 address from within a
kernel module?                                 |
>   |
|
>   |
|
>
>------------------------------------------------------------------------------------------------------------------|

>
>
>
> Juan Gomez wrote :
> >
> > Is there any standard way of doing this? I looked into ipv4 code but I
> did
> > not find a function that would provide a direct, clean way to query the
> > local IPv4 addresses of a given node.
>
>              There is no such thing as the local IPv4 addresses of a
given
> node. IP addresses are assigned for each network interfaces, so you
> may have more than one IP address. Note that I have many systems that
> don't have any "eth0" and still have many IP addresses (on wlan0,
> ppp0, bnep0...).
>              On top of that, the DNS may assign an IP address that map to
> your current hostname (which may correspond to one of the addresses
> above). That's purely a user space stuff.
>
>              So, you are basically starting on a wrong assumption, the
> information you are looking for doesn't exist, and I therefore suspect
> that you need to rethink the thing you want to do.
>
>              I suggest you use a user space application to pick the IP
> address most relevant to your setup (i.e. policy decision) and inject
> it in your module.
>
>              Good luck,
>
>              Jean
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel"
in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>
>
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel"
in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>





^ permalink raw reply	[flat|nested] 9+ messages in thread
* Re: How to get a local IPv4 address from within a kernel module?
@ 2002-10-31 18:56 Juan Gomez
  0 siblings, 0 replies; 9+ messages in thread
From: Juan Gomez @ 2002-10-31 18:56 UTC (permalink / raw)
  To: jt; +Cc: jbm, jbm, linux-kernel





I think wht you propose below is exactly what I would like to have, my
problem is that implementing
gethostbyname(hostname()) within the kernel is not that easy as most of the
code that supports these calls is designed to be used from user-land
Let's hope some other people will also advise on this so I can combine
ideas and propose something that will likely be accepted.

Juan



|---------+---------------------------->
|         |           Jean Tourrilhes  |
|         |           <jt@bougret.hpl.h|
|         |           p.com>           |
|         |                            |
|         |           10/31/02 10:30 AM|
|         |           Please respond to|
|         |           jt               |
|         |                            |
|---------+---------------------------->
  >------------------------------------------------------------------------------------------------------------------|
  |                                                                                                                  |
  |       To:       Juan Gomez/Almaden/IBM@IBMUS                                                                     |
  |       cc:       Josh Myer <jbm@joshisanerd.com>, jbm@blessed.joshisanerd.com, linux-kernel@vger.kernel.org       |
  |       Subject:  Re: How to get a local IPv4 address from within a kernel module?                                 |
  |                                                                                                                  |
  |                                                                                                                  |
  >------------------------------------------------------------------------------------------------------------------|



On Thu, Oct 31, 2002 at 10:09:54AM -0800, Juan Gomez wrote:
>
> Josh
>
> That is the purpose of my orignal message. In fact I have implemented
> somthing along the lines of what you suggest below and I just want to
test
> the waters on whether this will be accepted. My current implementation is
a
> little more specific as it only gets the interfaces with IPv4 enabled on
> them and skip lo but the idea is to get a consensus on what would be
> genrally useful and then introduce that.
>
> Regards, Juan

             I personally think it's a very bad idea, because it will lead
to confusion. You will define a concept of "the node IP address",
which doesn't exist and is a very dangerous assumption.
             Just take VPN, which is becoming very widespread. You have two
IP addresses, one on the interface, one on the tunnel. Which one do
you get ? Those two IP address will have widely different behaviour
and you can't exchange them.
             My fear is that people will start coding around this API and
flawed concept, and most of their programs will be immediately flawed,
because incapable to adapt to the reality of networking (it will work
in the simple case, but give bizarre behavior in non simple cases).
             Don't get me wrong, there is a small class of applications
where the IP address doesn't matter (and for those, 127.0.0.1 should
be fine). But, from my experience, the vast majority of people wanting
"the node IP address" have broken designs, i.e. it's not that they
want any one of them, it's that they assume that only one exist.

             Now, there is only one thing that could qualify as "the node
IP address", this is the IP address associated with the hostname :
                         gethostbyname(hostname());
             IMHO, if you define the interface you are proposing, it should
always return the result above, because this is a well defined
semantic and it is more useful.

             But, I'm only one of the little guy here, so what I say
doesn't matter much. Ask Alan or DaveM.
             Regards,

             Jean




^ permalink raw reply	[flat|nested] 9+ messages in thread
* Re: How to get a local IPv4 address from within a kernel module?
@ 2002-10-31 17:32 Juan Gomez
  2002-10-31 18:01 ` Josh Myer
  0 siblings, 1 reply; 9+ messages in thread
From: Juan Gomez @ 2002-10-31 17:32 UTC (permalink / raw)
  To: jt; +Cc: linux-kernel

                                                                                                               
                                                                                                               
                                                                                                               


Jean,

I am aware of all this, however, my application will be happy to get any
IPv4 assigned to any of the local interfaces as far as you consistently
get the same on repeated calls.
I think there should be an interface to query this from within the kernel
so since I did not find it I am proposing to get one
or may be there is something hidden which I missed so I decided to ask
here.

Juan




|---------+---------------------------------->
|         |           Jean Tourrilhes        |
|         |           <jt@bougret.hpl.hp.com>|
|         |           Sent by:               |
|         |           linux-kernel-owner@vger|
|         |           .kernel.org            |
|         |                                  |
|         |                                  |
|         |           10/30/02 06:38 PM      |
|         |           Please respond to jt   |
|         |                                  |
|---------+---------------------------------->
  >------------------------------------------------------------------------------------------------------------------|
  |                                                                                                                  |
  |       To:       Linux kernel mailing list <linux-kernel@vger.kernel.org>                                         |
  |       cc:                                                                                                        |
  |       Subject:  Re: How to get a local IPv4 address from within a kernel module?                                 |
  |                                                                                                                  |
  |                                                                                                                  |
  >------------------------------------------------------------------------------------------------------------------|



Juan Gomez wrote :
>
> Is there any standard way of doing this? I looked into ipv4 code but I
did
> not find a function that would provide a direct, clean way to query the
> local IPv4 addresses of a given node.

             There is no such thing as the local IPv4 addresses of a given
node. IP addresses are assigned for each network interfaces, so you
may have more than one IP address. Note that I have many systems that
don't have any "eth0" and still have many IP addresses (on wlan0,
ppp0, bnep0...).
             On top of that, the DNS may assign an IP address that map to
your current hostname (which may correspond to one of the addresses
above). That's purely a user space stuff.

             So, you are basically starting on a wrong assumption, the
information you are looking for doesn't exist, and I therefore suspect
that you need to rethink the thing you want to do.

             I suggest you use a user space application to pick the IP
address most relevant to your setup (i.e. policy decision) and inject
it in your module.

             Good luck,

             Jean
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/




^ permalink raw reply	[flat|nested] 9+ messages in thread
* Re: How to get a local IPv4 address from within a kernel module?
@ 2002-10-31  2:38 Jean Tourrilhes
  0 siblings, 0 replies; 9+ messages in thread
From: Jean Tourrilhes @ 2002-10-31  2:38 UTC (permalink / raw)
  To: Linux kernel mailing list

Juan Gomez wrote :
> 
> Is there any standard way of doing this? I looked into ipv4 code but I did
> not find a function that would provide a direct, clean way to query the
> local IPv4 addresses of a given node.

	There is no such thing as the local IPv4 addresses of a given
node. IP addresses are assigned for each network interfaces, so you
may have more than one IP address. Note that I have many systems that
don't have any "eth0" and still have many IP addresses (on wlan0,
ppp0, bnep0...).
	On top of that, the DNS may assign an IP address that map to
your current hostname (which may correspond to one of the addresses
above). That's purely a user space stuff.

	So, you are basically starting on a wrong assumption, the
information you are looking for doesn't exist, and I therefore suspect
that you need to rethink the thing you want to do.

	I suggest you use a user space application to pick the IP
address most relevant to your setup (i.e. policy decision) and inject
it in your module.

	Good luck,

	Jean

^ permalink raw reply	[flat|nested] 9+ messages in thread
* How to get a local IPv4 address from within a kernel module?
@ 2002-10-31  0:52 Juan Gomez
  0 siblings, 0 replies; 9+ messages in thread
From: Juan Gomez @ 2002-10-31  0:52 UTC (permalink / raw)
  To: linux-kernel


Is there any standard way of doing this? I looked into ipv4 code but I did
not find a function that would provide a direct, clean way to query the
local IPv4 addresses of a given node.
If this information is not available could we create an interface for it?
Any suggestions on the way to do it?

The interfaces provided to user-level applications do the copy to/from user
that I guess will not work with kernel modules...

Juan


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2002-10-31 19:05 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-10-31 18:09 How to get a local IPv4 address from within a kernel module? Juan Gomez
2002-10-31 18:30 ` Jean Tourrilhes
2002-10-31 18:57   ` Richard B. Johnson
2002-10-31 19:09   ` Jesse Pollard
  -- strict thread matches above, loose matches on Subject: below --
2002-10-31 18:56 Juan Gomez
2002-10-31 17:32 Juan Gomez
2002-10-31 18:01 ` Josh Myer
2002-10-31  2:38 Jean Tourrilhes
2002-10-31  0:52 Juan Gomez

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.