whoops...sorry about that.. you are right about them bugs. I was originally
just printing it out instead of putting it in a variable.. i forgot to
increase the character arrays :) As far as having to mask the hardware
digits with 0xff, for some reason, the digits in ifr.ifr_hwaddr.sa_data are
ffffffb4 when the actual value is b4.. I had to mask off the upper bits to
give the correct value.

-Andy

> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
> Sent: Thursday, December 21, 2000 12:18 PM
> To: Andy Angrick
> Cc: [EMAIL PROTECTED]
> Subject: Re: Retrieving IP/MAC
>
>
> In message <[EMAIL PROTECTED]> Andy
> Angrick wrote:
> > With a lot of research and great help from a few on the list
> (thanks Luc)..
> > this is what i finally came up with for find out the IP and MAC
> address of
> > an interface in case anyone is interested.
> ...
> > int main(void){
> > printf("Hardware: %s\n",gethwaddr("eth0"));
> > printf("IP: %s\n",getipaddr("eth0"));
> > }
> warning: control reaches end of non-void function
>
> >
> > char *gethwaddr(char *device)
> > {
> >     int fd,i;
> warning: unused variable `i'
>
> >     static char ethaddr[8];
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> >     struct ifreq ifr;
> >     unsigned char *txt;
> >
> >     if((fd=socket(AF_INET,SOCK_DGRAM,0))<0)
> >         return 0;
> >     memset(&ifr,0,sizeof(ifr));
> >     strncpy(ifr.ifr_name,device,sizeof(ifr.ifr_name));
> >
> >     if(ioctl(fd,SIOCGIFHWADDR,(char *)&ifr)==-1)
> >     {
> >         close(fd);
> >         return 0;
> >     }
> >     close(fd);
> >     txt=(unsigned char *)&ifr.ifr_hwaddr.sa_data;
> >     sprintf(ethaddr, "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X",
> txt[0]&0x000000ff,\
>
> *** ERROR *** This format outputs 19 characters (including the final '\0')
>             into a character array which can only hold 8 chars...
>
> >       txt[1]&0x000000ff,txt[2]&0x000000ff,txt[3]&0x000000ff,\
> >       txt[4]&0x000000ff,txt[5]&0x000000ff);
>
> ??? What is the "&0xFF" needed for? You are using unsigned chars, and
>     an unsigned format string???
>
> >     return ethaddr;
> > }
> >
> > char *getipaddr(char *device)
> > {
> >     int fd,i;
> warning: unused variable `i'
>
> >     static char ipaddr[14];
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> >     struct ifreq ifr;
> >     unsigned long int myip;
> warning: unused variable `myip'
>
> >     char tmp[14]="",str[14]="";
> warning: unused variable `str'
> warning: unused variable `tmp'
>
> >     unsigned char *txt;
> >
> >     if((fd=socket(AF_INET,SOCK_DGRAM,0))<0)
> >         return 0;
> >     memset(&ifr,0,sizeof(ifr));
> >
> >     strncpy(ifr.ifr_name,device,sizeof(ifr.ifr_name));
> >     ifr.ifr_addr.sa_family = AF_INET;
> >
> >     if(ioctl(fd,SIOCGIFADDR,(char *)&ifr)==-1)
> >       {
> >         close(fd);
> >         return 0;
> >       }
> >     close(fd);
> >     txt=(unsigned char *)&ifr.ifr_addr.sa_data;
> >     sprintf(ipaddr, "%d.%d.%d.%d", txt[2],txt[3],txt[4],txt[5]);
>
> *** ERROR *** This format outputs up to 16 characters (including
> the final '\0')
>               into a character array which can only hold 14 chars...
>
> >     return ipaddr;
> > }
>
> Ummmm... you better fix them bugs...
>
> Wolfgang Denk
> Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
> Phone: (+49)-8142-4596-87  Fax: (+49)-8142-4596-88  Email: [EMAIL PROTECTED]
> Drun'? 'm not drun'! You woudn' dare call m' drun' if I was sober!
>                                      - Terry Pratchett, _Men at Arms_
>


--
To unsubscribe from this list, send a message to [EMAIL PROTECTED]
with the command "unsubscribe linux-embedded" in the message body.
For more information, see <http://waste.org/mail/linux-embedded>.

Reply via email to