~ubuntu-branches/ubuntu/trusty/virtualbox/trusty-proposed

« back to all changes in this revision

Viewing changes to src/VBox/Main/src-server/linux/NetIf-linux.cpp

  • Committer: Package Import Robot
  • Author(s): Felix Geyer
  • Date: 2013-03-07 16:38:36 UTC
  • mfrom: (1.1.13) (3.1.20 experimental)
  • Revision ID: package-import@ubuntu.com-20130307163836-p93jpbgx39tp3gb4
Tags: 4.2.8-dfsg-0ubuntu1
* New upstream release. (Closes: #691148)
  - Fixes compatibility with kernel 3.8. (Closes: #700823; LP: #1101867)
* Switch to my @debian.org email address.
* Move package to contrib as virtualbox 4.2 needs a non-free compiler to
  build the BIOS.
* Build-depend on libdevmapper-dev.
* Refresh patches.
  - Drop 36-fix-ftbfs-xserver-112.patch, cve-2012-3221.patch,
    CVE-2013-0420.patch 37-kcompat-3.6.patch and 38-kcompat-3.7.patch.
* Drop all virtualbox-ose transitional packages.
* Drop the virtualbox-fuse package as vdfuse fails to build with
  virtualbox 4.2.
* Update install files and VBox.sh.
* Bump required kbuild version to 0.1.9998svn2577.
* Fix path to VBoxCreateUSBNode.sh in virtualbox.postinst. (Closes: #700479)
* Add an init script to virtuabox-guest-x11 which loads the vboxvideo
  kernel module. The X Server 1.13 doesn't load it anymore. (Closes: #686994)
* Update man pages. (Closes: #680053)
* Add 36-python-multiarch.patch from Rico Tzschichholz to fix detection of
  python in multiarch paths using pkg-config.

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
 */
5
5
 
6
6
/*
7
 
 * Copyright (C) 2008 Oracle Corporation
 
7
 * Copyright (C) 2008-2012 Oracle Corporation
8
8
 *
9
9
 * This file is part of VirtualBox Open Source Edition (OSE), as
10
10
 * available from http://www.virtualbox.org. This file is free software;
148
148
            }
149
149
            fclose(fp);
150
150
        }
 
151
        /*
 
152
         * Don't even try to get speed for non-Ethernet interfaces, it only
 
153
         * produces errors.
 
154
         */
 
155
        pInfo->uSpeedMbits = 0;
 
156
        if (pInfo->enmMediumType == NETIF_T_ETHERNET)
 
157
        {
 
158
            /*
 
159
             * I wish I could do simple ioctl here, but older kernels require root
 
160
             * privileges for any ethtool commands.
 
161
             */
 
162
            char szBuf[256];
 
163
            /* First, we try to retrieve the speed via sysfs. */
 
164
            RTStrPrintf(szBuf, sizeof(szBuf), "/sys/class/net/%s/speed", pszName);
 
165
            fp = fopen(szBuf, "r");
 
166
            if (fp)
 
167
            {
 
168
                if (fscanf(fp, "%u", &pInfo->uSpeedMbits) != 1)
 
169
                    pInfo->uSpeedMbits = 0;
 
170
                fclose(fp);
 
171
            }
 
172
            if (pInfo->uSpeedMbits == 10)
 
173
            {
 
174
                /* Check the cable is plugged in at all */
 
175
                unsigned uCarrier = 0;
 
176
                RTStrPrintf(szBuf, sizeof(szBuf), "/sys/class/net/%s/carrier", pszName);
 
177
                fp = fopen(szBuf, "r");
 
178
                if (fp)
 
179
                {
 
180
                    if (fscanf(fp, "%u", &uCarrier) != 1 || uCarrier == 0)
 
181
                        pInfo->uSpeedMbits = 0;
 
182
                    fclose(fp);
 
183
                }
 
184
            }
 
185
 
 
186
            if (pInfo->uSpeedMbits == 0)
 
187
            {
 
188
                /* Failed to get speed via sysfs, go to plan B. */
 
189
                int rc = NetIfAdpCtlOut(pszName, "speed", szBuf, sizeof(szBuf));
 
190
                if (RT_SUCCESS(rc))
 
191
                    pInfo->uSpeedMbits = RTStrToUInt32(szBuf);
 
192
            }
 
193
        }
151
194
    }
152
195
    return VINF_SUCCESS;
153
196
}