Andrea Righi a écrit :
> Thomas Krause wrote:
>> The best thing (tm) IME would be to not rely on the ifconfig output at
>> all and find some other way to obtain the ip address of an interface,
>> but I’m not sure how to do this.
>
> Thomas,
>
> thanks for raising this problem. If I'm not wrong the same issue has
> been reported other times in the list and I agree with you that ifconfig
> output is not portable at all due to languages issue.
yes, good memory, it was the same case for me some weeks ago on a
french debian etch with LANG = fr_FR.UTF-8
the issue for me had been to export LANG=C but i dont know if it's
sufficient in order to return "adr" instead of "addr"
waiting for the valid patch it might be helpful to report this little
problem on the documentation?
>
> I've found a way to get the ip address of an interface directly using
> ioctl() and so fully implemented in perl. See the patch below. It's a
> bit tricky, but it would be independent on language settings and
> ifconfig output in general (so it'll work even if ifconfig will change
> its output).
>
i will try to test your patch tomorrow
thanks
ML
> I've tested it in Ubuntu 7.10 and it seems to work. Could you test if it
> works also for you? Otherwise we can always fall back to your patch.
>
> Thanks,
> -Andrea
>
> --
> Index: sbin/si_installbtimage
> ===================================================================
> --- sbin/si_installbtimage (revision 4443)
> +++ sbin/si_installbtimage (working copy)
> @@ -10,6 +10,7 @@
> use File::Basename;
> use Getopt::Long;
> use SystemImager::Config;
> +use Socket qw/PF_INET SOCK_DGRAM inet_ntoa sockaddr_in/;
> use vars qw($config $VERSION);
>
> my $config_dir = "/etc/systemimager";
> @@ -107,7 +108,20 @@
> if (m/BT_TRACKER_PORT=([0-9]+)/) {
> $tracker_port = $1;
> } elsif (m/BT_INTERFACE=(.+)/) {
> - ($image_server) = (`/sbin/ifconfig $1`)[1] =~ /inet addr:(\S+)/;
> + # Get IP address of the specified interface.
> + # This is quite tricky but more portable than retrieving the IP address
> + # from ifconfig output (see language issue).
> + socket(SOCKET, PF_INET, SOCK_DGRAM, getprotobyname('ip'))
> + or die("ERROR: couldn't create socket!\n");
> +
> + # use ioctl() interface with SIOCGIFADDR.
> + my $ifreq = pack('a32', $1);
> + ioctl(SOCKET, 0x8915, $ifreq) or
> + die("ERROR: ioctl failed: $!\n");
> +
> + # Format the IP address from the output of ioctl().
> + $image_server = inet_ntoa((sockaddr_in((unpack('a16 a16',
> $ifreq))[1]))[1]) or
> + die("ERROR: couldn't retrieve IP address from: $ifreq\n");
> }
> }
> unless ($tracker_port) {
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
> Don't miss this year's exciting event. There's still time to save $100.
> Use priority code J8TL2D2.
> http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
> _______________________________________________
> sisuite-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/sisuite-users
--
Maurice Libes
Tel : +33 (04) 91 82 93 25 Centre d'Oceanologie de Marseille
Fax : +33 (04) 91 82 93 03 UMS2196CNRS- Campus de Luminy,
Case 901
F-13288 Marseille cedex 9
Veuillez noter ma nouvelle adresse ==> [EMAIL PROTECTED]
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
sisuite-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sisuite-users