VirtualBox

儲存庫 vbox 的更動 49745


忽略:
時間撮記:
2013-12-2 下午11:40:35 (11 年 以前)
作者:
vboxsync
訊息:

pxping_recv4: propagate DF flag if OS provides a socket option for that.

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/NetworkServices/NAT/pxping.c

    r49715 r49745  
    8080    int ttl;
    8181    int tos;
     82    int df;
    8283
    8384    SOCKET sock6;
     
    262263        g_pxping.ttl = -1;
    263264        g_pxping.tos = 0;
     265        g_pxping.df = -1;
    264266
    265267        g_pxping.pmhdl4.callback = pxping_pmgr_pump;
     
    481483        }
    482484    }
     485
     486#if defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS) || defined(RT_OS_WINDOWS)
     487    {
     488        const int df_flag = IPH_OFFSET(iph) & PP_HTONS(IP_DF);
     489
     490#if   defined(RT_OS_LINUX)
     491        const char * const dfoptname = "IP_MTU_DISCOVER";
     492        const int dfopt = IP_MTU_DISCOVER;
     493        int df = df_flag ? IP_PMTUDISC_PROBE : IP_PMTUDISC_DONT;
     494#elif defined(RT_OS_SOLARIS)
     495        const char * const dfoptname = "IP_DONTFRAG";
     496        const int dfopt = IP_DONTFRAG;
     497        int df = !!df_flag;
     498#elif defined(RT_OS_WINDOWS)
     499        const char * const dfoptname = "IP_DONTFRAGMENT";
     500        const int dfopt = IP_DONTFRAGMENT;
     501        DWORD df = !!df_flag;
     502#endif
     503        if (df != pxping->df) {
     504            status = setsockopt(pxping->sock4, IPPROTO_IP, dfopt,
     505                                (char *)&df, sizeof(df));
     506            if (status == 0) {
     507                pxping->df = df;
     508            }
     509            else {
     510                perror(dfoptname);
     511            }
     512        }
     513    }
     514#endif /* don't fragment */
    483515
    484516    proxy_sendto(pxping->sock4, p,
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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