VirtualBox

Changeset 43994 in vbox for trunk


Ignore:
Timestamp:
Nov 29, 2012 8:58:17 AM (12 years ago)
Author:
vboxsync
Message:

Main/Metrics: Do not collect data for unplugged host interfaces (#6345)

Location:
trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/include/Performance.h

    r43958 r43994  
    528528        void init(ULONG period, ULONG length) { mPeriod = period; mLength = length; mLinkSpeed->init(length); };
    529529        void preCollect(CollectorHints& /* hints */, uint64_t /* iTick */) {};
    530         void collect() { mLinkSpeed->put(mSpeed); };
     530        void collect() { if (mSpeed) mLinkSpeed->put(mSpeed); };
    531531        const char *getUnit() { return "mbit/s"; };
    532532        ULONG getMinValue() { return 0; };
  • trunk/src/VBox/Main/src-server/Performance.cpp

    r43958 r43994  
    716716        {
    717717            LogFlowThisFunc(("Check cable for %s! speed=%llu period=%d.\n", mShortName.c_str(), mSpeed, getPeriod()));
     718            /* We do not collect host network metrics for unplugged interfaces!
    718719            mRx->put(0);
    719720            mTx->put(0);
     721            */
    720722        }
    721723        else
  • trunk/src/VBox/Main/src-server/linux/NetIf-linux.cpp

    r43668 r43994  
    170170                fclose(fp);
    171171            }
     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
    172186            if (pInfo->uSpeedMbits == 0)
    173187            {
  • trunk/src/apps/adpctl/VBoxNetAdpCtl.cpp

    r43516 r43994  
    301301                }
    302302                struct ifreq IfReq;
     303                struct ethtool_value EthToolVal;
    303304                struct ethtool_cmd EthToolReq;
    304305                int fd = socket(AF_INET, SOCK_DGRAM, 0);
     
    310311                    return ADPCTLERR_SOCKET_FAILED;
    311312                }
     313                /* Get link status first. */
     314                memset(&EthToolVal, 0, sizeof(EthToolVal));
    312315                memset(&IfReq, 0, sizeof(IfReq));
    313316                snprintf(IfReq.ifr_name, sizeof(IfReq.ifr_name), "%s", pszAdapterName);
    314                 EthToolReq.cmd = ETHTOOL_GSET;
    315                 IfReq.ifr_data = (caddr_t)&EthToolReq;
     317
     318                EthToolVal.cmd = ETHTOOL_GLINK;
     319                IfReq.ifr_data = (caddr_t)&EthToolVal;
    316320                rc = ioctl(fd, SIOCETHTOOL, &IfReq);
    317321                if (rc == 0)
    318322                {
    319                     printf("%u", EthToolReq.speed);
     323                    if (EthToolVal.data)
     324                    {
     325                        memset(&IfReq, 0, sizeof(IfReq));
     326                        snprintf(IfReq.ifr_name, sizeof(IfReq.ifr_name), "%s", pszAdapterName);
     327                        EthToolReq.cmd = ETHTOOL_GSET;
     328                        IfReq.ifr_data = (caddr_t)&EthToolReq;
     329                        rc = ioctl(fd, SIOCETHTOOL, &IfReq);
     330                        if (rc == 0)
     331                        {
     332                            printf("%u", EthToolReq.speed);
     333                        }
     334                        else
     335                        {
     336                            fprintf(stderr, "VBoxNetAdpCtl: Error while retrieving link "
     337                                    "speed for %s: ", pszAdapterName);
     338                            perror("VBoxNetAdpCtl: ioctl failed");
     339                            rc = ADPCTLERR_IOCTL_FAILED;
     340                        }
     341                    }
     342                    else
     343                        printf("0");
    320344                }
    321345                else
    322346                {
    323347                    fprintf(stderr, "VBoxNetAdpCtl: Error while retrieving link "
    324                             "speed for %s: ", pszAdapterName);
     348                            "status for %s: ", pszAdapterName);
    325349                    perror("VBoxNetAdpCtl: ioctl failed");
    326350                    rc = ADPCTLERR_IOCTL_FAILED;
    327351                }
     352
    328353                close(fd);
    329354                return rc;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette