From owner-freebsd-net@freebsd.org Tue Feb 9 22:57:29 2016 Return-Path: Delivered-To: freebsd-net@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C03FCAA2012 for ; Tue, 9 Feb 2016 22:57:29 +0000 (UTC) (envelope-from pallav_bose@yahoo.com) Received: from nm49.bullet.mail.gq1.yahoo.com (nm49.bullet.mail.gq1.yahoo.com [67.195.87.85]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9D5D01894 for ; Tue, 9 Feb 2016 22:57:29 +0000 (UTC) (envelope-from pallav_bose@yahoo.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1455058503; bh=UccVnNQPbfgaa5QQUXIMuung1CA0uC5o14iIA4qriP0=; h=Date:From:Reply-To:To:Subject:References:From:Subject; b=HYvA9ZELv/U1GFn7DZjz7BeQ7T1pTJaRi+hCurwdvnbT+5lBfWXWeVY9XzPv6GacU1GZYr26yzpL9pwE6NTWAJz9nwOtIyZsDIk6IaVpxJhzQ5YuFWz2s/s9V97sgM4LixGdhY6Vu8qeF+uYq5Lg914+uoP901GHuFYQVnZWNzmfosxkyu5JWHlv1HTLMjs9jFbsj+W9Tirjw8JiNhNQ2JE5O41hDTiX4TbkUXqemjZDhzMPapHgkFwpJJmkmjlGHoFUNBYfU5zHAd6VPjoe8/dzhJOwhR5SWTgboVnon0DQBYB3I0Wn6imz8nHaHoZy7hlQj2/2F4SLtyWtiGLe6g== Received: from [127.0.0.1] by nm49.bullet.mail.gq1.yahoo.com with NNFMP; 09 Feb 2016 22:55:03 -0000 Received: from [98.137.12.63] by nm49.bullet.mail.gq1.yahoo.com with NNFMP; 09 Feb 2016 22:52:06 -0000 Received: from [98.137.12.212] by tm8.bullet.mail.gq1.yahoo.com with NNFMP; 09 Feb 2016 22:52:06 -0000 Received: from [127.0.0.1] by omp1020.mail.gq1.yahoo.com with NNFMP; 09 Feb 2016 22:52:06 -0000 X-Yahoo-Newman-Property: ymail-4 X-Yahoo-Newman-Id: 520743.73898.bm@omp1020.mail.gq1.yahoo.com X-YMail-OSG: ftZ1YDcVM1ljNUX0hh3KSxvh2nDRZbOooemj0yy7A3YubwDhYuQA._JmZW8b6oR AQxQnY37m1cDMzF0hkfnDOTWXy2jYq9ztSv51DgfmWq6829AquUlFA6U6a_kaxyCPiIl8.6DREUF KQbJrYLQW237iokqtLN53r7uoQ4pa5BQJBzMMPisx9GzLRzE41dUmF9f8.5YE51PhGX_0JQtLgR. AnxOAaArejiWYRYM3Qu8GYswaoy8HLlN5oZpLT.Y3jWRhjqvUdLv9FzTfGxmNxw5gZgfNCzt_Bap opTRX.HTBhUBod41I_LaLsmsKlkUd.GrBAXsV46jUGOv3qrMZo3I8.jdxKIeUHokpFUgojUasRSW gnaiP81f.3m8znqZTY_5eXmodP5LbVBpyflXJCXPj4ZgwK7WELB48RV109O4Eg0O0NurmpBgDukn fqg_ChcEsVO54BU6_.YBQ5m1bqjnOiUb7.6cLgveMn.LXmt9WFN70utMq8G99iHT2n0wN0gUjjKR AV3HdK7o__ygoqJwbmIcm Received: by 98.137.12.246; Tue, 09 Feb 2016 22:52:05 +0000 Date: Tue, 9 Feb 2016 22:51:27 +0000 (UTC) From: Pallav Bose Reply-To: Pallav Bose To: "freebsd-net@freebsd.org" Message-ID: <249322925.1631277.1455058288002.JavaMail.yahoo@mail.yahoo.com> Subject: C program API to determine negotiated link speed of a network interface? MIME-Version: 1.0 References: <249322925.1631277.1455058288002.JavaMail.yahoo.ref@mail.yahoo.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Feb 2016 22:57:29 -0000 Hi, I'm writing a C program to list all available interfaces and their link spe= ed. I can use getifaddrs(3) to obtain a list of network interfaces in a str= uct ifaddrs, but none of the fields in this struct gives me information abo= ut the negotiated link speed. From the man page of getifaddrs(3): The ifaddrs structure contains at least the following entries: =C2=A0=C2=A0=C2=A0 =C2=A0struct=C2=A0=C2=A0=C2=A0 ifaddrs=C2=A0=C2=A0=C2=A0= *ifa_next;=C2=A0=C2=A0=C2=A0 =C2=A0 /* Pointer to next struct */ =C2=A0=C2=A0=C2=A0 =C2=A0char=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 *ifa_name;=C2=A0=C2=A0=C2=A0 = =C2=A0 /* Interface name */ =C2=A0=C2=A0=C2=A0 =C2=A0u_int=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ifa_flags;=C2=A0=C2=A0=C2=A0 = =C2=A0 /* Interface flags=C2=A0=C2=A0=C2=A0 */ =C2=A0=C2=A0=C2=A0 =C2=A0struct=C2=A0=C2=A0=C2=A0 sockaddr=C2=A0 *ifa_addr;= =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0 /* Interface address */ =C2=A0=C2=A0=C2=A0 =C2=A0struct=C2=A0=C2=A0=C2=A0 sockaddr=C2=A0 *ifa_netma= sk;=C2=A0=C2=A0=C2=A0 /* Interface netmask */ =C2=A0=C2=A0=C2=A0 =C2=A0struct=C2=A0=C2=A0=C2=A0 sockaddr=C2=A0 *ifa_broad= addr;=C2=A0 /* Interface broadcast address */ =C2=A0=C2=A0=C2=A0 =C2=A0struct=C2=A0=C2=A0=C2=A0 sockaddr=C2=A0 *ifa_dstad= dr;=C2=A0=C2=A0=C2=A0 /* P2P interface destination */ =C2=A0=C2=A0=C2=A0 =C2=A0void=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 *ifa_data;=C2=A0=C2=A0=C2=A0 =C2=A0=C2= =A0 /* Address specific data */ Running truss on ifconfig(8) tells me that the ioctl SIOCGIFMEDIA can be us= ed, but it is not clear to me how. Is there an API in C which does this alr= eady? # truss ifconfig em0........ ioctl(3,SIOCGIFMAC,0xffffe210)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ERR#22 'Inv= alid argument' ioctl(3,SIOCGIFMEDIA,0xffffe1f0)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =3D 0 (0x0) ioctl(3,SIOCGIFMEDIA,0xffffe1f0)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =3D 0 (0x0) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 media: Ethernet autoselect (1000= baseT ) write(1,"\tmedia: Ethernet autoselect (10"...,54) =3D 54 (0x36) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 status: active write(1,"\tstatus: active\n",16)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =3D 16 (0x10) Thanks,Pallav