diff mbox

[v2] qga: replace GetIfEntry

Message ID 151007437551.31225.7183381961531333303@sif (mailing list archive)
State New, archived
Headers show

Commit Message

Michael Roth Nov. 7, 2017, 5:06 p.m. UTC
Quoting ZhiPeng Lu (2017-11-03 09:54:20)
> The data obtained by GetIfEntry is 32 bits, and it may overflow. Thus using GetIfEntry2 instead of GetIfEntry.
> 
> Signed-off-by: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> ---
>  qga/commands-win32.c | 31 ++++++++++++++++++-------------
>  1 file changed, 18 insertions(+), 13 deletions(-)
> 
> diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> index 0322188..d096dc2 100644
> --- a/qga/commands-win32.c
> +++ b/qga/commands-win32.c
> @@ -1173,20 +1173,25 @@ static int guest_get_network_stats(const char *name,
>                         GuestNetworkInterfaceStat *stats)
>  {
>      DWORD if_index = 0;
> -    MIB_IFROW a_mid_ifrow;
> -    memset(&a_mid_ifrow, 0, sizeof(a_mid_ifrow));
> +    OSVERSIONINFO OSver;
>      if_index = get_interface_index(name);
> -    a_mid_ifrow.dwIndex = if_index;
> -    if (NO_ERROR == GetIfEntry(&a_mid_ifrow)) {
> -        stats->rx_bytes = a_mid_ifrow.dwInOctets;
> -        stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> -        stats->rx_errs = a_mid_ifrow.dwInErrors;
> -        stats->rx_dropped = a_mid_ifrow.dwInDiscards;
> -        stats->tx_bytes = a_mid_ifrow.dwOutOctets;
> -        stats->tx_packets = a_mid_ifrow.dwOutUcastPkts;
> -        stats->tx_errs = a_mid_ifrow.dwOutErrors;
> -        stats->tx_dropped = a_mid_ifrow.dwOutDiscards;
> -        return 0;
> +    OSver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
> +    GetVersionEx(&OSver);
> +    if (OSver.dwMajorVersion >= 6) {
> +        MIB_IF_ROW2 a_mid_ifrow;
> +        memset(&a_mid_ifrow, 0, sizeof(a_mid_ifrow));
> +        a_mid_ifrow.dwIndex = if_index;
> +        if (NO_ERROR == GetIfEntry2(&a_mid_ifrow)) {
> +            stats->rx_bytes = a_mid_ifrow.dwInOctets;
> +            stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> +            stats->rx_errs = a_mid_ifrow.dwInErrors;
> +            stats->rx_dropped = a_mid_ifrow.dwInDiscards;
> +            stats->tx_bytes = a_mid_ifrow.dwOutOctets;
> +            stats->tx_packets = a_mid_ifrow.dwOutUcastPkts;
> +            stats->tx_errs = a_mid_ifrow.dwOutErrors;
> +            stats->tx_dropped = a_mid_ifrow.dwOutDiscards;
> +            return 0;

This fails to build in my fc20 mingw64 environment:

/home/mdroth/w/qemu4.git/qga/commands-win32.c:1184:20: error: 'MIB_IF_ROW2' has no member named 'dwIndex'
         a_mid_ifrow.dwIndex = if_index;
                    ^
/home/mdroth/w/qemu4.git/qga/commands-win32.c:1186:42: error: 'MIB_IF_ROW2' has no member named 'dwInOctets'
             stats->rx_bytes = a_mid_ifrow.dwInOctets;
                                          ^
/home/mdroth/w/qemu4.git/qga/commands-win32.c:1187:44: error: 'MIB_IF_ROW2' has no member named 'dwInUcastPkts'
             stats->rx_packets = a_mid_ifrow.dwInUcastPkts;

etc ...

The patch seems to assume MIB_IFROW and MIB_IF_ROW2 have the same field names
for the stats, but according to this they're slightly different:

  https://msdn.microsoft.com/en-us/library/windows/desktop/aa814491(v=vs.85).aspx

This change on top of your patch seems to work:


I have the modified patch staged here:

  https://github.com/mdroth/qemu/commit/de597a8b27722ce4f9cc660f930f7dccc712712d

Let me know if it looks okay and I'll send a pull request for rc1

> +        }
>      }
>      return -1;
>  }
> -- 
> 1.8.3.1
>

Comments

ZhiPeng Lu Nov. 8, 2017, 2:54 a.m. UTC | #1
PkkgaGF2ZSB0aGUgbW9kaWZpZWQgcGF0Y2ggc3RhZ2VkIGhlcmU6DQoNCg0KDQo+ICBodHRwczov
L2dpdGh1Yi5jb20vbWRyb3RoL3FlbXUvY29tbWl0L2RlNTk3YThiMjc3MjJjZTRmOWNjNjYwZjkz
MGY3ZGNjYzcxMjcxMmQ+TGV0IG1lIGtub3cgaWYgaXQgbG9va3Mgb2theSBhbmQgSSdsbCBzZW5k
IGEgcHVsbCByZXF1ZXN0IGZvciByYzENCg0KDQogDQoNCg0KdGhlIGNvZGUgcmlnaHQsIGJ1dCBy
dW5uaW5nIFFHQSBvbiB0aGUgV2luZG93cyBYUCwgZXJyb3I6IGNhbiBub3QgZmluZCB0aGUgbGlu
ayB0byAgR2V0SWZFbnRyeTIgaW4gaXBobHBhcGkuRExMLg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQoNCg0KDQrkuLrkuoborqnmgqjnmoRWUGxhdOiZmuaLn+acuuaVhemanOWSjGRv
Y2tlcuaVhemanOW+l+WIsOmrmOaViOeahOWkhOeQhu+8jOivt+S4iuaKpeaVhemanOWIsDogJFZQ
bGF05oqA5pyv5pSv5oyB44CCDQoNCg0K6Iqm5b+X5pyLIGx1emhpcGVuZw0KDQoNCg0KDQoNCg0K
SVTlvIDlj5Hlt6XnqIvluIggSVQgRGV2ZWxvcG1lbnQKRW5naW5lZXINCuaTjeS9nOezu+e7n+S6
p+WTgemDqC/kuK3lv4PnoJTnqbbpmaIv57O757uf5Lqn5ZOBIE9TIFByb2R1Y3QgRGVwdC4vQ2Vu
dHJhbCBS77yGRCBJbnN0aXR1dGUvU3lzdGVtIFByb2R1Y3QNCg0KDQoNCg0KDQoNCg0KDQoNCuWb
m+W3neecgeaIkOmDveW4guWkqeW6nOWkp+mBk+S4reautTgwMOWPtw0KRTogbHUuemhpcGVuZ0B6
dGUuY29tLmNuIA0Kd3d3Lnp0ZS5jb20uY24NCg0KDQoNCg0KDQoNCg0KDQoNCg0K5Y6f5aeL6YKu
5Lu2DQoNCg0KDQoNCuWPkeS7tuS6uu+8miA8bWRyb3RoQGxpbnV4LnZuZXQuaWJtLmNvbT47DQrm
lLbku7bkurrvvJroiqblv5fmnIsxMDEwODI3MjsNCuaKhOmAgeS6uu+8miA8cWVtdS1kZXZlbEBu
b25nbnUub3JnPjvoiqblv5fmnIsxMDEwODI3MjsNCuaXpSDmnJ8g77yaMjAxN+W5tDEx5pyIMDjm
l6UgMDE6MDcNCuS4uyDpopgg77yaUmU6IFtQQVRDSCB2Ml0gcWdhOiByZXBsYWNlIEdldElmRW50
cnkNCg0KDQoNCg0KDQoNClF1b3RpbmcgWmhpUGVuZyBMdSAoMjAxNy0xMS0wMyAwOTo1NDoyMCkN
Cj4gVGhlIGRhdGEgb2J0YWluZWQgYnkgR2V0SWZFbnRyeSBpcyAzMiBiaXRzLCBhbmQgaXQgbWF5
IG92ZXJmbG93LiBUaHVzIHVzaW5nIEdldElmRW50cnkyIGluc3RlYWQgb2YgR2V0SWZFbnRyeS4N
Cj4gDQo+IFNpZ25lZC1vZmYtYnk6IFpoaVBlbmcgTHUgPGx1LnpoaXBlbmdAenRlLmNvbS5jbj4N
Cj4gLS0tDQo+ICBxZ2EvY29tbWFuZHMtd2luMzIuYyB8IDMxICsrKysrKysrKysrKysrKysrKy0t
LS0tLS0tLS0tLS0NCj4gIDEgZmlsZSBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAxMyBkZWxl
dGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9xZ2EvY29tbWFuZHMtd2luMzIuYyBiL3FnYS9j
b21tYW5kcy13aW4zMi5jDQo+IGluZGV4IDAzMjIxODguLmQwOTZkYzIgMTAwNjQ0DQo+IC0tLSBh
L3FnYS9jb21tYW5kcy13aW4zMi5jDQo+ICsrKyBiL3FnYS9jb21tYW5kcy13aW4zMi5jDQo+IEBA
IC0xMTczLDIwICsxMTczLDI1IEBAIHN0YXRpYyBpbnQgZ3Vlc3RfZ2V0X25ldHdvcmtfc3RhdHMo
Y29uc3QgY2hhciAqbmFtZSwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgR3Vlc3ROZXR3b3Jr
SW50ZXJmYWNlU3RhdCAqc3RhdHMpDQo+ICB7DQo+ICAgICAgRFdPUkQgaWZfaW5kZXggPSAwOw0K
PiAtICAgIE1JQl9JRlJPVyBhX21pZF9pZnJvdzsNCj4gLSAgICBtZW1zZXQoJmFfbWlkX2lmcm93
LCAwLCBzaXplb2YoYV9taWRfaWZyb3cpKTsNCj4gKyAgICBPU1ZFUlNJT05JTkZPIE9TdmVyOw0K
PiAgICAgIGlmX2luZGV4ID0gZ2V0X2ludGVyZmFjZV9pbmRleChuYW1lKTsNCj4gLSAgICBhX21p
ZF9pZnJvdy5kd0luZGV4ID0gaWZfaW5kZXg7DQo+IC0gICAgaWYgKE5PX0VSUk9SID09IEdldElm
RW50cnkoJmFfbWlkX2lmcm93KSkgew0KPiAtICAgICAgICBzdGF0cy0+cnhfYnl0ZXMgPSBhX21p
ZF9pZnJvdy5kd0luT2N0ZXRzOw0KPiAtICAgICAgICBzdGF0cy0+cnhfcGFja2V0cyA9IGFfbWlk
X2lmcm93LmR3SW5VY2FzdFBrdHM7DQo+IC0gICAgICAgIHN0YXRzLT5yeF9lcnJzID0gYV9taWRf
aWZyb3cuZHdJbkVycm9yczsNCj4gLSAgICAgICAgc3RhdHMtPnJ4X2Ryb3BwZWQgPSBhX21pZF9p
ZnJvdy5kd0luRGlzY2FyZHM7DQo+IC0gICAgICAgIHN0YXRzLT50eF9ieXRlcyA9IGFfbWlkX2lm
cm93LmR3T3V0T2N0ZXRzOw0KPiAtICAgICAgICBzdGF0cy0+dHhfcGFja2V0cyA9IGFfbWlkX2lm
cm93LmR3T3V0VWNhc3RQa3RzOw0KPiAtICAgICAgICBzdGF0cy0+dHhfZXJycyA9IGFfbWlkX2lm
cm93LmR3T3V0RXJyb3JzOw0KPiAtICAgICAgICBzdGF0cy0+dHhfZHJvcHBlZCA9IGFfbWlkX2lm
cm93LmR3T3V0RGlzY2FyZHM7DQo+IC0gICAgICAgIHJldHVybiAwOw0KPiArICAgIE9TdmVyLmR3
T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YoT1NWRVJTSU9OSU5GTyk7DQo+ICsgICAgR2V0VmVy
c2lvbkV4KCZPU3Zlcik7DQo+ICsgICAgaWYgKE9TdmVyLmR3TWFqb3JWZXJzaW9uID49IDYpIHsN
Cj4gKyAgICAgICAgTUlCX0lGX1JPVzIgYV9taWRfaWZyb3c7DQo+ICsgICAgICAgIG1lbXNldCgm
YV9taWRfaWZyb3csIDAsIHNpemVvZihhX21pZF9pZnJvdykpOw0KPiArICAgICAgICBhX21pZF9p
ZnJvdy5kd0luZGV4ID0gaWZfaW5kZXg7DQo+ICsgICAgICAgIGlmIChOT19FUlJPUiA9PSBHZXRJ
ZkVudHJ5MigmYV9taWRfaWZyb3cpKSB7DQo+ICsgICAgICAgICAgICBzdGF0cy0+cnhfYnl0ZXMg
PSBhX21pZF9pZnJvdy5kd0luT2N0ZXRzOw0KPiArICAgICAgICAgICAgc3RhdHMtPnJ4X3BhY2tl
dHMgPSBhX21pZF9pZnJvdy5kd0luVWNhc3RQa3RzOw0KPiArICAgICAgICAgICAgc3RhdHMtPnJ4
X2VycnMgPSBhX21pZF9pZnJvdy5kd0luRXJyb3JzOw0KPiArICAgICAgICAgICAgc3RhdHMtPnJ4
X2Ryb3BwZWQgPSBhX21pZF9pZnJvdy5kd0luRGlzY2FyZHM7DQo+ICsgICAgICAgICAgICBzdGF0
cy0+dHhfYnl0ZXMgPSBhX21pZF9pZnJvdy5kd091dE9jdGV0czsNCj4gKyAgICAgICAgICAgIHN0
YXRzLT50eF9wYWNrZXRzID0gYV9taWRfaWZyb3cuZHdPdXRVY2FzdFBrdHM7DQo+ICsgICAgICAg
ICAgICBzdGF0cy0+dHhfZXJycyA9IGFfbWlkX2lmcm93LmR3T3V0RXJyb3JzOw0KPiArICAgICAg
ICAgICAgc3RhdHMtPnR4X2Ryb3BwZWQgPSBhX21pZF9pZnJvdy5kd091dERpc2NhcmRzOw0KPiAr
ICAgICAgICAgICAgcmV0dXJuIDA7DQoNClRoaXMgZmFpbHMgdG8gYnVpbGQgaW4gbXkgZmMyMCBt
aW5ndzY0IGVudmlyb25tZW50Og0KDQovaG9tZS9tZHJvdGgvdy9xZW11NC5naXQvcWdhL2NvbW1h
bmRzLXdpbjMyLmM6MTE4NDoyMDogZXJyb3I6ICdNSUJfSUZfUk9XMicgaGFzIG5vIG1lbWJlciBu
YW1lZCAnZHdJbmRleCcNCiAgICAgICAgIGFfbWlkX2lmcm93LmR3SW5kZXggPSBpZl9pbmRleDsN
CiAgICAgICAgICAgICAgICAgICAgXg0KL2hvbWUvbWRyb3RoL3cvcWVtdTQuZ2l0L3FnYS9jb21t
YW5kcy13aW4zMi5jOjExODY6NDI6IGVycm9yOiAnTUlCX0lGX1JPVzInIGhhcyBubyBtZW1iZXIg
bmFtZWQgJ2R3SW5PY3RldHMnDQogICAgICAgICAgICAgc3RhdHMtPnJ4X2J5dGVzID0gYV9taWRf
aWZyb3cuZHdJbk9jdGV0czsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF4NCi9ob21lL21kcm90aC93L3FlbXU0LmdpdC9xZ2EvY29tbWFuZHMtd2luMzIuYzoxMTg3
OjQ0OiBlcnJvcjogJ01JQl9JRl9ST1cyJyBoYXMgbm8gbWVtYmVyIG5hbWVkICdkd0luVWNhc3RQ
a3RzJw0KICAgICAgICAgICAgIHN0YXRzLT5yeF9wYWNrZXRzID0gYV9taWRfaWZyb3cuZHdJblVj
YXN0UGt0czsNCg0KZXRjIC4uLg0KDQpUaGUgcGF0Y2ggc2VlbXMgdG8gYXNzdW1lIE1JQl9JRlJP
VyBhbmQgTUlCX0lGX1JPVzIgaGF2ZSB0aGUgc2FtZSBmaWVsZCBuYW1lcw0KZm9yIHRoZSBzdGF0
cywgYnV0IGFjY29yZGluZyB0byB0aGlzIHRoZXkncmUgc2xpZ2h0bHkgZGlmZmVyZW50Og0KDQog
IGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9w
L2FhODE0NDkxKHY9dnMuODUpLmFzcHgNCg0KVGhpcyBjaGFuZ2Ugb24gdG9wIG9mIHlvdXIgcGF0
Y2ggc2VlbXMgdG8gd29yazoNCg0KZGlmZiAtLWdpdCBhL3FnYS9jb21tYW5kcy13aW4zMi5jIGIv
cWdhL2NvbW1hbmRzLXdpbjMyLmMNCmluZGV4IGUxN2ZjM2MyODQuLjU4ZTQ3MDg3N2YgMTAwNjQ0
DQotLS0gYS9xZ2EvY29tbWFuZHMtd2luMzIuYw0KKysrIGIvcWdhL2NvbW1hbmRzLXdpbjMyLmMN
CkBAIC0xMTgxLDE2ICsxMTgxLDE2IEBAIHN0YXRpYyBpbnQgZ3Vlc3RfZ2V0X25ldHdvcmtfc3Rh
dHMoY29uc3QgY2hhciAqbmFtZSwNCiAgICAgaWYgKG9zX3Zlci5kd01ham9yVmVyc2lvbiA+PSA2
KSB7DQogICAgICAgICBNSUJfSUZfUk9XMiBhX21pZF9pZnJvdzsNCiAgICAgICAgIG1lbXNldCgm
YV9taWRfaWZyb3csIDAsIHNpemVvZihhX21pZF9pZnJvdykpOw0KLSAgICAgICAgYV9taWRfaWZy
b3cuZHdJbmRleCA9IGlmX2luZGV4Ow0KKyAgICAgICAgYV9taWRfaWZyb3cuSW50ZXJmYWNlSW5k
ZXggPSBpZl9pbmRleDsNCiAgICAgICAgIGlmIChOT19FUlJPUiA9PSBHZXRJZkVudHJ5MigmYV9t
aWRfaWZyb3cpKSB7DQotICAgICAgICAgICAgc3RhdHMtPnJ4X2J5dGVzID0gYV9taWRfaWZyb3cu
ZHdJbk9jdGV0czsNCi0gICAgICAgICAgICBzdGF0cy0+cnhfcGFja2V0cyA9IGFfbWlkX2lmcm93
LmR3SW5VY2FzdFBrdHM7DQotICAgICAgICAgICAgc3RhdHMtPnJ4X2VycnMgPSBhX21pZF9pZnJv
dy5kd0luRXJyb3JzOw0KLSAgICAgICAgICAgIHN0YXRzLT5yeF9kcm9wcGVkID0gYV9taWRfaWZy
b3cuZHdJbkRpc2NhcmRzOw0KLSAgICAgICAgICAgIHN0YXRzLT50eF9ieXRlcyA9IGFfbWlkX2lm
cm93LmR3T3V0T2N0ZXRzOw0KLSAgICAgICAgICAgIHN0YXRzLT50eF9wYWNrZXRzID0gYV9taWRf
aWZyb3cuZHdPdXRVY2FzdFBrdHM7DQotICAgICAgICAgICAgc3RhdHMtPnR4X2VycnMgPSBhX21p
ZF9pZnJvdy5kd091dEVycm9yczsNCi0gICAgICAgICAgICBzdGF0cy0+dHhfZHJvcHBlZCA9IGFf
bWlkX2lmcm93LmR3T3V0RGlzY2FyZHM7DQorICAgICAgICAgICAgc3RhdHMtPnJ4X2J5dGVzID0g
YV9taWRfaWZyb3cuSW5PY3RldHM7DQorICAgICAgICAgICAgc3RhdHMtPnJ4X3BhY2tldHMgPSBh
X21pZF9pZnJvdy5JblVjYXN0UGt0czsNCisgICAgICAgICAgICBzdGF0cy0+cnhfZXJycyA9IGFf
bWlkX2lmcm93LkluRXJyb3JzOw0KKyAgICAgICAgICAgIHN0YXRzLT5yeF9kcm9wcGVkID0gYV9t
aWRfaWZyb3cuSW5EaXNjYXJkczsNCisgICAgICAgICAgICBzdGF0cy0+dHhfYnl0ZXMgPSBhX21p
ZF9pZnJvdy5PdXRPY3RldHM7DQorICAgICAgICAgICAgc3RhdHMtPnR4X3BhY2tldHMgPSBhX21p
ZF9pZnJvdy5PdXRVY2FzdFBrdHM7DQorICAgICAgICAgICAgc3RhdHMtPnR4X2VycnMgPSBhX21p
ZF9pZnJvdy5PdXRFcnJvcnM7DQorICAgICAgICAgICAgc3RhdHMtPnR4X2Ryb3BwZWQgPSBhX21p
ZF9pZnJvdy5PdXREaXNjYXJkczsNCiAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgIH0N
CiAgICAgfQ0KDQpJIGhhdmUgdGhlIG1vZGlmaWVkIHBhdGNoIHN0YWdlZCBoZXJlOg0KDQogIGh0
dHBzOi8vZ2l0aHViLmNvbS9tZHJvdGgvcWVtdS9jb21taXQvZGU1OTdhOGIyNzcyMmNlNGY5Y2M2
NjBmOTMwZjdkY2NjNzEyNzEyZA0KDQpMZXQgbWUga25vdyBpZiBpdCBsb29rcyBva2F5IGFuZCBJ
J2xsIHNlbmQgYSBwdWxsIHJlcXVlc3QgZm9yIHJjMQ0KDQo+ICsgICAgICAgIH0NCj4gICAgICB9
DQo+ICAgICAgcmV0dXJuIC0xOw0KPiAgfQ0KPiAtLSANCj4gMS44LjMuMQ0KPg==
ZhiPeng Lu Nov. 9, 2017, 11:26 a.m. UTC | #2
aSB0aGluayB0aGUgY29kZSBpcyBiZXR0ZXINCg0KIGlmIChPU3Zlci5kd01ham9yVmVyc2lvbiA+
PSA2KSB7IAogICAgICBNSUJfSUZfUk9XMiBhTWliX2lmcm93OwogICAgICB0eXBlZGVmIE5FVElP
QVBJX0FQSSAoV0lOQVBJICpnZXRpZmVudHJ5Ml90KShQTUlCX0lGX1JPVzIgUm93KTsKICAgICAg
bWVtc2V0KCZhTWliX2lmcm93LCAwLCBzaXplb2YoYU1pYl9pZnJvdykpOwogICAgICBhTWliX2lm
cm93LkludGVyZmFjZUluZGV4ID0gbmljSWQ7CiAgICAgIEhNT0RVTEUgbW9kdWxlID0gR2V0TW9k
dWxlSGFuZGxlKCJpcGhscGFwaSIpOwogICAgICBQVk9JRCBmdW4gPSBHZXRQcm9jQWRkcmVzcyht
b2R1bGUsICJHZXRJZkVudHJ5MiIpOwogICAgICBpZiAoZnVuID09IE5VTEwpIHsKICAgICAgICAg
IGVycm9yX3NldGcoZXJycCwgUUVSUl9RR0FfQ09NTUFORF9GQUlMRUQsCiAgICAgICAgICAgICAg
ICAgICAgICJGYWlsZWQgdG8gZ2V0IGFkZHJlc3Mgb2YgR2V0SWZFbnRyeTIiKTsKICAgICAgICAg
IHJldHVybiBOVUxMOwogICAgICB9CiAgICBnZXRpZmVudHJ5Ml90IGdldGlmZW50cnkyX2V4ID0g
KGdldGlmZW50cnkyX3QpZnVuOw0KICAgIGlmIChOT19FUlJPUiA9PSBnZXRpZmVudHJ5Ml9leCgm
YU1pYl9pZnJvdykpew0KICAgIH0NCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCuS4uuS6huiuqeaCqOeahFZQbGF06Jma5ouf5py65pWF6Zqc5ZKMZG9ja2Vy5pWF6Zqc
5b6X5Yiw6auY5pWI55qE5aSE55CG77yM6K+35LiK5oql5pWF6Zqc5YiwOiAkVlBsYXTmioDmnK/m
lK/mjIHjgIINCg0KDQroiqblv5fmnIsgbHV6aGlwZW5nDQoNCg0KDQoNCg0KDQpJVOW8gOWPkeW3
peeoi+W4iCBJVCBEZXZlbG9wbWVudApFbmdpbmVlcg0K5pON5L2c57O757uf5Lqn5ZOB6YOoL+S4
reW/g+eglOeptumZoi/ns7vnu5/kuqflk4EgT1MgUHJvZHVjdCBEZXB0Li9DZW50cmFsIFLvvIZE
IEluc3RpdHV0ZS9TeXN0ZW0gUHJvZHVjdA0KDQoNCg0KDQoNCg0KDQoNCg0K5Zub5bed55yB5oiQ
6YO95biC5aSp5bqc5aSn6YGT5Lit5q61ODAw5Y+3DQpFOiBsdS56aGlwZW5nQHp0ZS5jb20uY24g
DQp3d3cuenRlLmNvbS5jbg0KDQoNCg0KDQoNCg0KDQoNCg0KDQrljp/lp4vpgq7ku7YNCg0KDQoN
Cg0K5Y+R5Lu25Lq677ya6Iqm5b+X5pyLMTAxMDgyNzINCuaUtuS7tuS6uu+8miA8bWRyb3RoQGxp
bnV4LnZuZXQuaWJtLmNvbT47DQrmioTpgIHkurrvvJogPHFlbXUtZGV2ZWxAbm9uZ251Lm9yZz47
DQrml6Ug5pyfIO+8mjIwMTflubQxMeaciDA45pelIDEwOjU0DQrkuLsg6aKYIO+8muetlOWkjTog
UmU6IFtQQVRDSCB2Ml0gcWdhOiByZXBsYWNlIEdldElmRW50cnkNCg0KDQoNCg0KDQoNCg0KDQo+
SSBoYXZlIHRoZSBtb2RpZmllZCBwYXRjaCBzdGFnZWQgaGVyZToNCg0KDQoNCj4gIGh0dHBzOi8v
Z2l0aHViLmNvbS9tZHJvdGgvcWVtdS9jb21taXQvZGU1OTdhOGIyNzcyMmNlNGY5Y2M2NjBmOTMw
ZjdkY2NjNzEyNzEyZD5MZXQgbWUga25vdyBpZiBpdCBsb29rcyBva2F5IGFuZCBJJ2xsIHNlbmQg
YSBwdWxsIHJlcXVlc3QgZm9yIHJjMQ0KDQoNCiANCg0KDQp0aGUgY29kZSByaWdodCwgYnV0IHJ1
bm5pbmcgUUdBIG9uIHRoZSBXaW5kb3dzIFhQLCBlcnJvcjogY2FuIG5vdCBmaW5kIHRoZSBsaW5r
IHRvICBHZXRJZkVudHJ5MiBpbiBpcGhscGFwaS5ETEwuDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCuS4uuS6huiuqeaCqOeahFZQbGF06Jma5ouf5py65pWF6Zqc5ZKMZG9j
a2Vy5pWF6Zqc5b6X5Yiw6auY5pWI55qE5aSE55CG77yM6K+35LiK5oql5pWF6Zqc5YiwOiAkVlBs
YXTmioDmnK/mlK/mjIHjgIINCg0KDQroiqblv5fmnIsgbHV6aGlwZW5nDQoNCg0KDQoNCg0KDQpJ
VOW8gOWPkeW3peeoi+W4iCBJVCBEZXZlbG9wbWVudCBFbmdpbmVlcg0K5pON5L2c57O757uf5Lqn
5ZOB6YOoL+S4reW/g+eglOeptumZoi/ns7vnu5/kuqflk4EgT1MgUHJvZHVjdCBEZXB0Li9DZW50
cmFsIFLvvIZEIEluc3RpdHV0ZS9TeXN0ZW0gUHJvZHVjdA0KDQoNCg0KDQoNCg0KDQoNCg0K5Zub
5bed55yB5oiQ6YO95biC5aSp5bqc5aSn6YGT5Lit5q61ODAw5Y+3DQpFOiBsdS56aGlwZW5nQHp0
ZS5jb20uY24gDQp3d3cuenRlLmNvbS5jbg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCuWPkeS7tuS6uu+8miA8bWRyb3RoQGxpbnV4LnZuZXQuaWJtLmNvbT47DQrmlLbku7bkurrv
vJroiqblv5fmnIsxMDEwODI3MjsNCuaKhOmAgeS6uu+8miA8cWVtdS1kZXZlbEBub25nbnUub3Jn
Pjvoiqblv5fmnIsxMDEwODI3MjsNCuaXpSDmnJ8g77yaMjAxN+W5tDEx5pyIMDjml6UgMDE6MDcN
CuS4uyDpopgg77yaUmU6IFtQQVRDSCB2Ml0gcWdhOiByZXBsYWNlIEdldElmRW50cnkNCg0KDQoN
Cg0KDQoNClF1b3RpbmcgWmhpUGVuZyBMdSAoMjAxNy0xMS0wMyAwOTo1NDoyMCkNCj4gVGhlIGRh
dGEgb2J0YWluZWQgYnkgR2V0SWZFbnRyeSBpcyAzMiBiaXRzLCBhbmQgaXQgbWF5IG92ZXJmbG93
LiBUaHVzIHVzaW5nIEdldElmRW50cnkyIGluc3RlYWQgb2YgR2V0SWZFbnRyeS4NCj4gDQo+IFNp
Z25lZC1vZmYtYnk6IFpoaVBlbmcgTHUgPGx1LnpoaXBlbmdAenRlLmNvbS5jbj4NCj4gLS0tDQo+
ICBxZ2EvY29tbWFuZHMtd2luMzIuYyB8IDMxICsrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t
LS0NCj4gIDEgZmlsZSBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkN
Cj4gDQo+IGRpZmYgLS1naXQgYS9xZ2EvY29tbWFuZHMtd2luMzIuYyBiL3FnYS9jb21tYW5kcy13
aW4zMi5jDQo+IGluZGV4IDAzMjIxODguLmQwOTZkYzIgMTAwNjQ0DQo+IC0tLSBhL3FnYS9jb21t
YW5kcy13aW4zMi5jDQo+ICsrKyBiL3FnYS9jb21tYW5kcy13aW4zMi5jDQo+IEBAIC0xMTczLDIw
ICsxMTczLDI1IEBAIHN0YXRpYyBpbnQgZ3Vlc3RfZ2V0X25ldHdvcmtfc3RhdHMoY29uc3QgY2hh
ciAqbmFtZSwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgR3Vlc3ROZXR3b3JrSW50ZXJmYWNl
U3RhdCAqc3RhdHMpDQo+ICB7DQo+ICAgICAgRFdPUkQgaWZfaW5kZXggPSAwOw0KPiAtICAgIE1J
Ql9JRlJPVyBhX21pZF9pZnJvdzsNCj4gLSAgICBtZW1zZXQoJmFfbWlkX2lmcm93LCAwLCBzaXpl
b2YoYV9taWRfaWZyb3cpKTsNCj4gKyAgICBPU1ZFUlNJT05JTkZPIE9TdmVyOw0KPiAgICAgIGlm
X2luZGV4ID0gZ2V0X2ludGVyZmFjZV9pbmRleChuYW1lKTsNCj4gLSAgICBhX21pZF9pZnJvdy5k
d0luZGV4ID0gaWZfaW5kZXg7DQo+IC0gICAgaWYgKE5PX0VSUk9SID09IEdldElmRW50cnkoJmFf
bWlkX2lmcm93KSkgew0KPiAtICAgICAgICBzdGF0cy0+cnhfYnl0ZXMgPSBhX21pZF9pZnJvdy5k
d0luT2N0ZXRzOw0KPiAtICAgICAgICBzdGF0cy0+cnhfcGFja2V0cyA9IGFfbWlkX2lmcm93LmR3
SW5VY2FzdFBrdHM7DQo+IC0gICAgICAgIHN0YXRzLT5yeF9lcnJzID0gYV9taWRfaWZyb3cuZHdJ
bkVycm9yczsNCj4gLSAgICAgICAgc3RhdHMtPnJ4X2Ryb3BwZWQgPSBhX21pZF9pZnJvdy5kd0lu
RGlzY2FyZHM7DQo+IC0gICAgICAgIHN0YXRzLT50eF9ieXRlcyA9IGFfbWlkX2lmcm93LmR3T3V0
T2N0ZXRzOw0KPiAtICAgICAgICBzdGF0cy0+dHhfcGFja2V0cyA9IGFfbWlkX2lmcm93LmR3T3V0
VWNhc3RQa3RzOw0KPiAtICAgICAgICBzdGF0cy0+dHhfZXJycyA9IGFfbWlkX2lmcm93LmR3T3V0
RXJyb3JzOw0KPiAtICAgICAgICBzdGF0cy0+dHhfZHJvcHBlZCA9IGFfbWlkX2lmcm93LmR3T3V0
RGlzY2FyZHM7DQo+IC0gICAgICAgIHJldHVybiAwOw0KPiArICAgIE9TdmVyLmR3T1NWZXJzaW9u
SW5mb1NpemUgPSBzaXplb2YoT1NWRVJTSU9OSU5GTyk7DQo+ICsgICAgR2V0VmVyc2lvbkV4KCZP
U3Zlcik7DQo+ICsgICAgaWYgKE9TdmVyLmR3TWFqb3JWZXJzaW9uID49IDYpIHsNCj4gKyAgICAg
ICAgTUlCX0lGX1JPVzIgYV9taWRfaWZyb3c7DQo+ICsgICAgICAgIG1lbXNldCgmYV9taWRfaWZy
b3csIDAsIHNpemVvZihhX21pZF9pZnJvdykpOw0KPiArICAgICAgICBhX21pZF9pZnJvdy5kd0lu
ZGV4ID0gaWZfaW5kZXg7DQo+ICsgICAgICAgIGlmIChOT19FUlJPUiA9PSBHZXRJZkVudHJ5Migm
YV9taWRfaWZyb3cpKSB7DQo+ICsgICAgICAgICAgICBzdGF0cy0+cnhfYnl0ZXMgPSBhX21pZF9p
ZnJvdy5kd0luT2N0ZXRzOw0KPiArICAgICAgICAgICAgc3RhdHMtPnJ4X3BhY2tldHMgPSBhX21p
ZF9pZnJvdy5kd0luVWNhc3RQa3RzOw0KPiArICAgICAgICAgICAgc3RhdHMtPnJ4X2VycnMgPSBh
X21pZF9pZnJvdy5kd0luRXJyb3JzOw0KPiArICAgICAgICAgICAgc3RhdHMtPnJ4X2Ryb3BwZWQg
PSBhX21pZF9pZnJvdy5kd0luRGlzY2FyZHM7DQo+ICsgICAgICAgICAgICBzdGF0cy0+dHhfYnl0
ZXMgPSBhX21pZF9pZnJvdy5kd091dE9jdGV0czsNCj4gKyAgICAgICAgICAgIHN0YXRzLT50eF9w
YWNrZXRzID0gYV9taWRfaWZyb3cuZHdPdXRVY2FzdFBrdHM7DQo+ICsgICAgICAgICAgICBzdGF0
cy0+dHhfZXJycyA9IGFfbWlkX2lmcm93LmR3T3V0RXJyb3JzOw0KPiArICAgICAgICAgICAgc3Rh
dHMtPnR4X2Ryb3BwZWQgPSBhX21pZF9pZnJvdy5kd091dERpc2NhcmRzOw0KPiArICAgICAgICAg
ICAgcmV0dXJuIDA7DQoNClRoaXMgZmFpbHMgdG8gYnVpbGQgaW4gbXkgZmMyMCBtaW5ndzY0IGVu
dmlyb25tZW50Og0KDQovaG9tZS9tZHJvdGgvdy9xZW11NC5naXQvcWdhL2NvbW1hbmRzLXdpbjMy
LmM6MTE4NDoyMDogZXJyb3I6ICdNSUJfSUZfUk9XMicgaGFzIG5vIG1lbWJlciBuYW1lZCAnZHdJ
bmRleCcNCiAgICAgICAgIGFfbWlkX2lmcm93LmR3SW5kZXggPSBpZl9pbmRleDsNCiAgICAgICAg
ICAgICAgICAgICAgXg0KL2hvbWUvbWRyb3RoL3cvcWVtdTQuZ2l0L3FnYS9jb21tYW5kcy13aW4z
Mi5jOjExODY6NDI6IGVycm9yOiAnTUlCX0lGX1JPVzInIGhhcyBubyBtZW1iZXIgbmFtZWQgJ2R3
SW5PY3RldHMnDQogICAgICAgICAgICAgc3RhdHMtPnJ4X2J5dGVzID0gYV9taWRfaWZyb3cuZHdJ
bk9jdGV0czsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4NCi9o
b21lL21kcm90aC93L3FlbXU0LmdpdC9xZ2EvY29tbWFuZHMtd2luMzIuYzoxMTg3OjQ0OiBlcnJv
cjogJ01JQl9JRl9ST1cyJyBoYXMgbm8gbWVtYmVyIG5hbWVkICdkd0luVWNhc3RQa3RzJw0KICAg
ICAgICAgICAgIHN0YXRzLT5yeF9wYWNrZXRzID0gYV9taWRfaWZyb3cuZHdJblVjYXN0UGt0czsN
Cg0KZXRjIC4uLg0KDQpUaGUgcGF0Y2ggc2VlbXMgdG8gYXNzdW1lIE1JQl9JRlJPVyBhbmQgTUlC
X0lGX1JPVzIgaGF2ZSB0aGUgc2FtZSBmaWVsZCBuYW1lcw0KZm9yIHRoZSBzdGF0cywgYnV0IGFj
Y29yZGluZyB0byB0aGlzIHRoZXkncmUgc2xpZ2h0bHkgZGlmZmVyZW50Og0KDQogIGh0dHBzOi8v
bXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhODE0NDkx
KHY9dnMuODUpLmFzcHgNCg0KVGhpcyBjaGFuZ2Ugb24gdG9wIG9mIHlvdXIgcGF0Y2ggc2VlbXMg
dG8gd29yazoNCg0KZGlmZiAtLWdpdCBhL3FnYS9jb21tYW5kcy13aW4zMi5jIGIvcWdhL2NvbW1h
bmRzLXdpbjMyLmMNCmluZGV4IGUxN2ZjM2MyODQuLjU4ZTQ3MDg3N2YgMTAwNjQ0DQotLS0gYS9x
Z2EvY29tbWFuZHMtd2luMzIuYw0KKysrIGIvcWdhL2NvbW1hbmRzLXdpbjMyLmMNCkBAIC0xMTgx
LDE2ICsxMTgxLDE2IEBAIHN0YXRpYyBpbnQgZ3Vlc3RfZ2V0X25ldHdvcmtfc3RhdHMoY29uc3Qg
Y2hhciAqbmFtZSwNCiAgICAgaWYgKG9zX3Zlci5kd01ham9yVmVyc2lvbiA+PSA2KSB7DQogICAg
ICAgICBNSUJfSUZfUk9XMiBhX21pZF9pZnJvdzsNCiAgICAgICAgIG1lbXNldCgmYV9taWRfaWZy
b3csIDAsIHNpemVvZihhX21pZF9pZnJvdykpOw0KLSAgICAgICAgYV9taWRfaWZyb3cuZHdJbmRl
eCA9IGlmX2luZGV4Ow0KKyAgICAgICAgYV9taWRfaWZyb3cuSW50ZXJmYWNlSW5kZXggPSBpZl9p
bmRleDsNCiAgICAgICAgIGlmIChOT19FUlJPUiA9PSBHZXRJZkVudHJ5MigmYV9taWRfaWZyb3cp
KSB7DQotICAgICAgICAgICAgc3RhdHMtPnJ4X2J5dGVzID0gYV9taWRfaWZyb3cuZHdJbk9jdGV0
czsNCi0gICAgICAgICAgICBzdGF0cy0+cnhfcGFja2V0cyA9IGFfbWlkX2lmcm93LmR3SW5VY2Fz
dFBrdHM7DQotICAgICAgICAgICAgc3RhdHMtPnJ4X2VycnMgPSBhX21pZF9pZnJvdy5kd0luRXJy
b3JzOw0KLSAgICAgICAgICAgIHN0YXRzLT5yeF9kcm9wcGVkID0gYV9taWRfaWZyb3cuZHdJbkRp
c2NhcmRzOw0KLSAgICAgICAgICAgIHN0YXRzLT50eF9ieXRlcyA9IGFfbWlkX2lmcm93LmR3T3V0
T2N0ZXRzOw0KLSAgICAgICAgICAgIHN0YXRzLT50eF9wYWNrZXRzID0gYV9taWRfaWZyb3cuZHdP
dXRVY2FzdFBrdHM7DQotICAgICAgICAgICAgc3RhdHMtPnR4X2VycnMgPSBhX21pZF9pZnJvdy5k
d091dEVycm9yczsNCi0gICAgICAgICAgICBzdGF0cy0+dHhfZHJvcHBlZCA9IGFfbWlkX2lmcm93
LmR3T3V0RGlzY2FyZHM7DQorICAgICAgICAgICAgc3RhdHMtPnJ4X2J5dGVzID0gYV9taWRfaWZy
b3cuSW5PY3RldHM7DQorICAgICAgICAgICAgc3RhdHMtPnJ4X3BhY2tldHMgPSBhX21pZF9pZnJv
dy5JblVjYXN0UGt0czsNCisgICAgICAgICAgICBzdGF0cy0+cnhfZXJycyA9IGFfbWlkX2lmcm93
LkluRXJyb3JzOw0KKyAgICAgICAgICAgIHN0YXRzLT5yeF9kcm9wcGVkID0gYV9taWRfaWZyb3cu
SW5EaXNjYXJkczsNCisgICAgICAgICAgICBzdGF0cy0+dHhfYnl0ZXMgPSBhX21pZF9pZnJvdy5P
dXRPY3RldHM7DQorICAgICAgICAgICAgc3RhdHMtPnR4X3BhY2tldHMgPSBhX21pZF9pZnJvdy5P
dXRVY2FzdFBrdHM7DQorICAgICAgICAgICAgc3RhdHMtPnR4X2VycnMgPSBhX21pZF9pZnJvdy5P
dXRFcnJvcnM7DQorICAgICAgICAgICAgc3RhdHMtPnR4X2Ryb3BwZWQgPSBhX21pZF9pZnJvdy5P
dXREaXNjYXJkczsNCiAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgIH0NCiAgICAgfQ0K
DQpJIGhhdmUgdGhlIG1vZGlmaWVkIHBhdGNoIHN0YWdlZCBoZXJlOg0KDQogIGh0dHBzOi8vZ2l0
aHViLmNvbS9tZHJvdGgvcWVtdS9jb21taXQvZGU1OTdhOGIyNzcyMmNlNGY5Y2M2NjBmOTMwZjdk
Y2NjNzEyNzEyZA0KDQpMZXQgbWUga25vdyBpZiBpdCBsb29rcyBva2F5IGFuZCBJJ2xsIHNlbmQg
YSBwdWxsIHJlcXVlc3QgZm9yIHJjMQ0KDQo+ICsgICAgICAgIH0NCj4gICAgICB9DQo+ICAgICAg
cmV0dXJuIC0xOw0KPiAgfQ0KPiAtLSANCj4gMS44LjMuMQ0KPg==
Michael Roth Nov. 13, 2017, 11:57 p.m. UTC | #3
Quoting lu.zhipeng@zte.com.cn (2017-11-09 05:26:15)
>  i think the code is better
> 
>  if (OSver.dwMajorVersion >= 6) {
>       MIB_IF_ROW2 aMib_ifrow;
>       typedef NETIOAPI_API (WINAPI *getifentry2_t)(PMIB_IF_ROW2 Row);
>       memset(&aMib_ifrow, 0, sizeof(aMib_ifrow));
>       aMib_ifrow.InterfaceIndex = nicId;
>       HMODULE module = GetModuleHandle("iphlpapi");
>       PVOID fun = GetProcAddress(module, "GetIfEntry2");
>       if (fun == NULL) {
>           error_setg(errp, QERR_QGA_COMMAND_FAILED,
>                      "Failed to get address of GetIfEntry2");
>           return NULL;
>       }
>     getifentry2_t getifentry2_ex = (getifentry2_t)fun;
>     if (NO_ERROR == getifentry2_ex(&aMib_ifrow)){
>     }

I've updated the patch with this change:
  https://github.com/mdroth/qemu/commits/qga-if-stats

But I'm a bit confused now: when I tried to test this on XP I realized that
that qemu-ga no longer works on XP, and generates the following error
when I try to start it (even without your stats patch):

  "The procedure entry point AcquireSRWLockExclusive could not be located
   in the dynamic link library KERNEL32.dll"

I think this may be due to the following commit, which notes that Vista+
are now required as a result:

commit 12f8def0e02232d7c6416ad9b66640f973c531d1
Author: Andrey Shedel <ashedel@microsoft.com>
Date:   Fri Mar 24 15:01:41 2017 -0700

    win32: replace custom mutex and condition variable with native
    primitives

So, are you actually able to run on XP currently? If so, how? And if
not, I think we have other issues that need to be addressed if we
want to support XP still; I'm not even sure that's realistic at this
point.

Unless there's actually a way to test QGA on XP right now I think I
we should just get in the updated patch minus the dynamic DLL stuff,
i.e.:
  https://github.com/mdroth/qemu/commit/de597a8b27722ce4f9cc660f930f7dccc712712d

Make sense?

> 
> 
> 
> 
> 
> 为了让您的VPlat虚拟机故障和docker故障得到高效的处理,请上报故障到: $VPlat技术支
> 持。
> 
> 芦志朋 luzhipeng
> 
> 
> IT开发工程师 IT Development Engineer
> 操作系统产品部/中心研究院/系统产品 OS Product Dept./Central R&D Institute/
> System Product
> 
> 
> [cid]          [cid]
>                四川省成都市天府大道中段800号
>                E: lu.zhipeng@zte.com.cn
>                www.zte.com.cn
> 
> 原始邮件
> 发件人:芦志朋10108272
> 收件人: <mdroth@linux.vnet.ibm.com>;
> 抄送人: <qemu-devel@nongnu.org>;
> 日期:2017年11月08日 10:54
> 主题:答复: Re: [PATCH v2] qga: replace GetIfEntry
> 
> 
> >I have the modified patch staged here:
> 
> >  https://github.com/mdroth/qemu/commit/
> de597a8b27722ce4f9cc660f930f7dccc712712d
> >Let me know if it looks okay and I'll send a pull request for rc1
> 
>  
> 
> the code right, but running QGA on the Windows XP, error: can not find the link
> to  GetIfEntry2 in iphlpapi.DLL.
> 
> 
> 
> 
> 为了让您的VPlat虚拟机故障和docker故障得到高效的处理,请上报故障到: $VPlat技术支
> 持。
> 
> 芦志朋 luzhipeng
> 
> 
> IT开发工程师 IT Development Engineer
> 操作系统产品部/中心研究院/系统产品 OS Product Dept./Central R&D Institute/
> System Product
> 
> 
> [cid]          [cid]
>                四川省成都市天府大道中段800号
>                E: lu.zhipeng@zte.com.cn
>                www.zte.com.cn
> 
> 
> 发件人: <mdroth@linux.vnet.ibm.com>;
> 收件人:芦志朋10108272;
> 抄送人: <qemu-devel@nongnu.org>;芦志朋10108272;
> 日期:2017年11月08日 01:07
> 主题:Re: [PATCH v2] qga: replace GetIfEntry
> 
> 
> Quoting ZhiPeng Lu (2017-11-03 09:54:20)
> >
>  The data obtained by GetIfEntry is 32 bits, and it may overflow. Thus using GetIfEntry2 instead of GetIfEntry.
> > 
> > Signed-off-by: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> > ---
> >  qga/commands-win32.c | 31 ++++++++++++++++++-------------
> >  1 file changed, 18 insertions(+), 13 deletions(-)
> > 
> > diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> > index 0322188..d096dc2 100644
> > --- a/qga/commands-win32.c
> > +++ b/qga/commands-win32.c
> > @@ -1173,20 +1173,25 @@ static int guest_get_network_stats(const char *name,
> >                         GuestNetworkInterfaceStat *stats)
> >  {
> >      DWORD if_index = 0;
> > -    MIB_IFROW a_mid_ifrow;
> > -    memset(&a_mid_ifrow, 0, sizeof(a_mid_ifrow));
> > +    OSVERSIONINFO OSver;
> >      if_index = get_interface_index(name);
> > -    a_mid_ifrow.dwIndex = if_index;
> > -    if (NO_ERROR == GetIfEntry(&a_mid_ifrow)) {
> > -        stats->rx_bytes = a_mid_ifrow.dwInOctets;
> > -        stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> > -        stats->rx_errs = a_mid_ifrow.dwInErrors;
> > -        stats->rx_dropped = a_mid_ifrow.dwInDiscards;
> > -        stats->tx_bytes = a_mid_ifrow.dwOutOctets;
> > -        stats->tx_packets = a_mid_ifrow.dwOutUcastPkts;
> > -        stats->tx_errs = a_mid_ifrow.dwOutErrors;
> > -        stats->tx_dropped = a_mid_ifrow.dwOutDiscards;
> > -        return 0;
> > +    OSver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
> > +    GetVersionEx(&OSver);
> > +    if (OSver.dwMajorVersion >= 6) {
> > +        MIB_IF_ROW2 a_mid_ifrow;
> > +        memset(&a_mid_ifrow, 0, sizeof(a_mid_ifrow));
> > +        a_mid_ifrow.dwIndex = if_index;
> > +        if (NO_ERROR == GetIfEntry2(&a_mid_ifrow)) {
> > +            stats->rx_bytes = a_mid_ifrow.dwInOctets;
> > +            stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> > +            stats->rx_errs = a_mid_ifrow.dwInErrors;
> > +            stats->rx_dropped = a_mid_ifrow.dwInDiscards;
> > +            stats->tx_bytes = a_mid_ifrow.dwOutOctets;
> > +            stats->tx_packets = a_mid_ifrow.dwOutUcastPkts;
> > +            stats->tx_errs = a_mid_ifrow.dwOutErrors;
> > +            stats->tx_dropped = a_mid_ifrow.dwOutDiscards;
> > +            return 0;
> 
> This fails to build in my fc20 mingw64 environment:
> 
> /home/mdroth/w/qemu4.git/qga/
> commands-win32.c:1184:20: error: 'MIB_IF_ROW2' has no member named 'dwIndex'
>          a_mid_ifrow.dwIndex = if_index;
>                     ^
> /home/mdroth/w/qemu4.git/qga/
> commands-win32.c:1186:42: error: 'MIB_IF_ROW2' has no member named 'dwInOctets'
>              stats->rx_bytes = a_mid_ifrow.dwInOctets;
>                                           ^
> /home/mdroth/w/qemu4.git/qga/
> commands-win32.c:1187:44: error: 'MIB_IF_ROW2' has no member named 'dwInUcastPkts'
>              stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> 
> etc ...
> 
> The patch seems to assume MIB_IFROW and MIB_IF_ROW2 have the same field names
> for the stats, but according to this they're slightly different:
> 
>   https://msdn.microsoft.com/en-us/library/windows/desktop/aa814491(v=
> vs.85).aspx
> 
> This change on top of your patch seems to work:
> 
> diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> index e17fc3c284..58e470877f 100644
> --- a/qga/commands-win32.c
> +++ b/qga/commands-win32.c
> @@ -1181,16 +1181,16 @@ static int guest_get_network_stats(const char *name,
>      if (os_ver.dwMajorVersion >= 6) {
>          MIB_IF_ROW2 a_mid_ifrow;
>          memset(&a_mid_ifrow, 0, sizeof(a_mid_ifrow));
> -        a_mid_ifrow.dwIndex = if_index;
> +        a_mid_ifrow.InterfaceIndex = if_index;
>          if (NO_ERROR == GetIfEntry2(&a_mid_ifrow)) {
> -            stats->rx_bytes = a_mid_ifrow.dwInOctets;
> -            stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> -            stats->rx_errs = a_mid_ifrow.dwInErrors;
> -            stats->rx_dropped = a_mid_ifrow.dwInDiscards;
> -            stats->tx_bytes = a_mid_ifrow.dwOutOctets;
> -            stats->tx_packets = a_mid_ifrow.dwOutUcastPkts;
> -            stats->tx_errs = a_mid_ifrow.dwOutErrors;
> -            stats->tx_dropped = a_mid_ifrow.dwOutDiscards;
> +            stats->rx_bytes = a_mid_ifrow.InOctets;
> +            stats->rx_packets = a_mid_ifrow.InUcastPkts;
> +            stats->rx_errs = a_mid_ifrow.InErrors;
> +            stats->rx_dropped = a_mid_ifrow.InDiscards;
> +            stats->tx_bytes = a_mid_ifrow.OutOctets;
> +            stats->tx_packets = a_mid_ifrow.OutUcastPkts;
> +            stats->tx_errs = a_mid_ifrow.OutErrors;
> +            stats->tx_dropped = a_mid_ifrow.OutDiscards;
>              return 0;
>          }
>      }
> 
> I have the modified patch staged here:
> 
>   https://github.com/mdroth/qemu/commit/
> de597a8b27722ce4f9cc660f930f7dccc712712d
> 
> Let me know if it looks okay and I'll send a pull request for rc1
> 
> > +        }
> >      }
> >      return -1;
> >  }
> > -- 
> > 1.8.3.1
> > 
> 
>
ZhiPeng Lu Nov. 14, 2017, 11:09 a.m. UTC | #4
aSB0ZXN0IHRoZSBsYXRlc3QgcWdhIGluIHhwICwgaXQgcnVuIG9rIC4NCg0KDQoNCg0KDQoNCm15
IHFnYSBjb25maWcgOg0KDQoNCkNvbmZpZ3VyZWQgd2l0aDogJy4vY29uZmlndXJlJyAnLS1lbmFi
bGUtZ3Vlc3QtYWdlbnQnICctLWNyb3NzLXByZWZpeD14ODZfNjQtdzY0LW1pbmd3MzItJyAnLS13
aXRoLXZzcy1zZGs9L2hvbWUvVlNTU0RLNzInICctLWRpc2FibGUtZmR0JyAgICAgICAgICctLXRh
cmdldC1saXN0PXg4Nl82NC1zb2Z0bW11Jw0KDQoNCnVzZWQgcWdhIHZlcnNpb24gaW5mbw0KDQpb
cm9vdEBjZXNoaSBxZW11XSMgZ2l0IGxvZw0KDQpjb21taXQgNTMzYWI4M2VhMDc0ZDVmYzQ1Nzc2
OWY2YWM2OTg1MjRhMTJmMTE1Ng0KDQpBdXRob3I6IFpoaVBlbmcgTHUgPGx1LnpoaXBlbmdAenRl
LmNvbS5jbj4NCg0KRGF0ZTogICBGcmkgTm92IDEwIDEwOjE3OjE0IDIwMTcgKzA4MDANCg0KDQoN
Cg0KICAgIHFnYTogZml4IHNvbWUgZXJyb3JzIGZvciBndWVzdF9nZXRfbmV0d29ya19zdGF0cw0K
DQogICAgDQoNCiAgICBmaXggc29tZSBlcnJvczoNCg0KICAgIDEuaWYgYnVpbGRpbmcgcWdhIG9u
IFdpbmRvd3MgVmlzdGEvMjAwOCBhbmQgbmV3ZXIsDQoNCiAgICBpdCBjYW5uJ3QgZmluZCB0aGUg
bGluayB0byBHZXRJZkVudHJ5MiBpbiB3aW5kb3dzIHhwLg0KDQogICAgMi4gY2hlY2sgdmFsaWQg
b2YgaWZfaW5kZXguDQoNCiAgICANCg0KICAgIFNpZ25lZC1vZmYtYnk6IFpoaVBlbmcgTHUgPGx1
LnpoaXBlbmdAenRlLmNvbS5jbj4NCg0KDQoNCg0KY29tbWl0IGRlNTk3YThiMjc3MjJjZTRmOWNj
NjYwZjkzMGY3ZGNjYzcxMjcxMmQNCg0KQXV0aG9yOiBaaGlQZW5nIEx1IDxsdS56aGlwZW5nQHp0
ZS5jb20uY24+DQoNCkRhdGU6ICAgRnJpIE5vdiAzIDIyOjU0OjIwIDIwMTcgKzA4MDANCg0KDQoN
Cg0KICAgIHFnYTogcmVwbGFjZSBHZXRJZkVudHJ5DQoNCiAgICANCg0KICAgIFRoZSBkYXRhIG9i
dGFpbmVkIGJ5IEdldElmRW50cnkgaXMgMzIgYml0cywgYW5kIGl0IG1heSBvdmVyZmxvdy4gVGh1
cyB1c2luZyBHZXRJZkVudHJ5MiBpbnN0ZWFkIG9mIEdldElmRW50cnkuDQoNCiAgICANCg0KICAg
IFNpZ25lZC1vZmYtYnk6IFpoaVBlbmcgTHUgPGx1LnpoaXBlbmdAenRlLmNvbS5jbj4NCg0KICAg
ICphdm9pZCBDYW1lbENhc2UgdmFyaWFibGUgbmFtZXMNCg0KICAgICp1cGRhdGUgZmllbGQgbmFt
ZXMgZm9yIE1JQl9JRlJPVyAtPiBNSUJfSUZfUk9XMg0KDQogICAgU2lnbmVkLW9mZi1ieTogTWlj
aGFlbCBSb3RoIDxtZHJvdGhAbGludXgudm5ldC5pYm0uY29tPg0KDQoNCg0KDQpjb21taXQgNWNh
N2EzY2JhNDY4NzM2Y2ZlNTU1ODg3YWYxZjZiYTc1NGY2ZWFjOQ0KDQpNZXJnZTogYTRmMDUzNyAx
MGE3YjdlDQoNCkF1dGhvcjogUGV0ZXIgTWF5ZGVsbCA8cGV0ZXIubWF5ZGVsbEBsaW5hcm8ub3Jn
Pg0KDQpEYXRlOiAgIFR1ZSBOb3YgNyAxNDo0MzozNSAyMDE3ICswMDAwDQoNCg0KDQoNCiAgICBN
ZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdyZW1vdGVzL2JlcnJhbmdlL3RhZ3MvcHVsbC0y
MDE3LTExLTA2LTInIGludG8gc3RhZ2luZw0KDQogICAgDQoNCiAgICBQdWxsIElPIDIwMTcvMTEv
MDYgdjINCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K5Li65LqG6K6p5oKo
55qEVlBsYXTomZrmi5/mnLrmlYXpmpzlkoxkb2NrZXLmlYXpmpzlvpfliLDpq5jmlYjnmoTlpITn
kIbvvIzor7fkuIrmiqXmlYXpmpzliLA6ICRWUGxhdOaKgOacr+aUr+aMgeOAgg0KDQoNCuiKpuW/
l+aciyBsdXpoaXBlbmcNCg0KDQoNCg0KDQoNCklU5byA5Y+R5bel56iL5biIIElUIERldmVsb3Bt
ZW50CkVuZ2luZWVyDQrmk43kvZzns7vnu5/kuqflk4Hpg6gv5Lit5b+D56CU56m26ZmiL+ezu+e7
n+S6p+WTgSBPUyBQcm9kdWN0IERlcHQuL0NlbnRyYWwgUu+8hkQgSW5zdGl0dXRlL1N5c3RlbSBQ
cm9kdWN0DQoNCg0KDQoNCg0KDQoNCg0KDQrlm5vlt53nnIHmiJDpg73luILlpKnlupzlpKfpgZPk
uK3mrrU4MDDlj7cNCkU6IGx1LnpoaXBlbmdAenRlLmNvbS5jbiANCnd3dy56dGUuY29tLmNuDQoN
Cg0KDQoNCg0KDQoNCg0KDQoNCuWOn+Wni+mCruS7tg0KDQoNCg0K5Y+R5Lu25Lq677yaIDxtZHJv
dGhAbGludXgudm5ldC5pYm0uY29tPjsNCuaUtuS7tuS6uu+8muiKpuW/l+acizEwMTA4MjcyOw0K
5oqE6YCB5Lq677yaIDxxZW11LWRldmVsQG5vbmdudS5vcmc+Ow0K5pelIOacnyDvvJoyMDE35bm0
MTHmnIgxNOaXpSAwNzo1Nw0K5Li7IOmimCDvvJpSZTog562U5aSNOiBSZTogW1BBVENIIHYyXSBx
Z2E6IHJlcGxhY2UgR2V0SWZFbnRyeQ0KDQoNClF1b3RpbmcgbHUuemhpcGVuZ0B6dGUuY29tLmNu
ICgyMDE3LTExLTA5IDA1OjI2OjE1KQ0KPiAgaSB0aGluayB0aGUgY29kZSBpcyBiZXR0ZXINCj4g
DQo+ICBpZiAoT1N2ZXIuZHdNYWpvclZlcnNpb24gPj0gNikgew0KPiAgICAgICBNSUJfSUZfUk9X
MiBhTWliX2lmcm93Ow0KPiAgICAgICB0eXBlZGVmIE5FVElPQVBJX0FQSSAoV0lOQVBJICpnZXRp
ZmVudHJ5Ml90KShQTUlCX0lGX1JPVzIgUm93KTsNCj4gICAgICAgbWVtc2V0KCZhTWliX2lmcm93
LCAwLCBzaXplb2YoYU1pYl9pZnJvdykpOw0KPiAgICAgICBhTWliX2lmcm93LkludGVyZmFjZUlu
ZGV4ID0gbmljSWQ7DQo+ICAgICAgIEhNT0RVTEUgbW9kdWxlID0gR2V0TW9kdWxlSGFuZGxlKCJp
cGhscGFwaSIpOw0KPiAgICAgICBQVk9JRCBmdW4gPSBHZXRQcm9jQWRkcmVzcyhtb2R1bGUsICJH
ZXRJZkVudHJ5MiIpOw0KPiAgICAgICBpZiAoZnVuID09IE5VTEwpIHsNCj4gICAgICAgICAgIGVy
cm9yX3NldGcoZXJycCwgUUVSUl9RR0FfQ09NTUFORF9GQUlMRUQsDQo+ICAgICAgICAgICAgICAg
ICAgICAgICJGYWlsZWQgdG8gZ2V0IGFkZHJlc3Mgb2YgR2V0SWZFbnRyeTIiKTsNCj4gICAgICAg
ICAgIHJldHVybiBOVUxMOw0KPiAgICAgICB9DQo+ICAgICBnZXRpZmVudHJ5Ml90IGdldGlmZW50
cnkyX2V4ID0gKGdldGlmZW50cnkyX3QpZnVuOw0KPiAgICAgaWYgKE5PX0VSUk9SID09IGdldGlm
ZW50cnkyX2V4KCZhTWliX2lmcm93KSl7DQo+ICAgICB9DQoNCkkndmUgdXBkYXRlZCB0aGUgcGF0
Y2ggd2l0aCB0aGlzIGNoYW5nZToNCiAgaHR0cHM6Ly9naXRodWIuY29tL21kcm90aC9xZW11L2Nv
bW1pdHMvcWdhLWlmLXN0YXRzDQoNCkJ1dCBJJ20gYSBiaXQgY29uZnVzZWQgbm93OiB3aGVuIEkg
dHJpZWQgdG8gdGVzdCB0aGlzIG9uIFhQIEkgcmVhbGl6ZWQgdGhhdA0KdGhhdCBxZW11LWdhIG5v
IGxvbmdlciB3b3JrcyBvbiBYUCwgYW5kIGdlbmVyYXRlcyB0aGUgZm9sbG93aW5nIGVycm9yDQp3
aGVuIEkgdHJ5IHRvIHN0YXJ0IGl0IChldmVuIHdpdGhvdXQgeW91ciBzdGF0cyBwYXRjaCk6DQoN
CiAgIlRoZSBwcm9jZWR1cmUgZW50cnkgcG9pbnQgQWNxdWlyZVNSV0xvY2tFeGNsdXNpdmUgY291
bGQgbm90IGJlIGxvY2F0ZWQNCiAgIGluIHRoZSBkeW5hbWljIGxpbmsgbGlicmFyeSBLRVJORUwz
Mi5kbGwiDQoNCkkgdGhpbmsgdGhpcyBtYXkgYmUgZHVlIHRvIHRoZSBmb2xsb3dpbmcgY29tbWl0
LCB3aGljaCBub3RlcyB0aGF0IFZpc3RhKw0KYXJlIG5vdyByZXF1aXJlZCBhcyBhIHJlc3VsdDoN
Cg0KY29tbWl0IDEyZjhkZWYwZTAyMjMyZDdjNjQxNmFkOWI2NjY0MGY5NzNjNTMxZDENCkF1dGhv
cjogQW5kcmV5IFNoZWRlbCA8YXNoZWRlbEBtaWNyb3NvZnQuY29tPg0KRGF0ZTogICBGcmkgTWFy
IDI0IDE1OjAxOjQxIDIwMTcgLTA3MDANCg0KICAgIHdpbjMyOiByZXBsYWNlIGN1c3RvbSBtdXRl
eCBhbmQgY29uZGl0aW9uIHZhcmlhYmxlIHdpdGggbmF0aXZlDQogICAgcHJpbWl0aXZlcw0KDQpT
bywgYXJlIHlvdSBhY3R1YWxseSBhYmxlIHRvIHJ1biBvbiBYUCBjdXJyZW50bHk/IElmIHNvLCBo
b3c/IEFuZCBpZg0Kbm90LCBJIHRoaW5rIHdlIGhhdmUgb3RoZXIgaXNzdWVzIHRoYXQgbmVlZCB0
byBiZSBhZGRyZXNzZWQgaWYgd2UNCndhbnQgdG8gc3VwcG9ydCBYUCBzdGlsbDsgSSdtIG5vdCBl
dmVuIHN1cmUgdGhhdCdzIHJlYWxpc3RpYyBhdCB0aGlzDQpwb2ludC4NCg0KVW5sZXNzIHRoZXJl
J3MgYWN0dWFsbHkgYSB3YXkgdG8gdGVzdCBRR0Egb24gWFAgcmlnaHQgbm93IEkgdGhpbmsgSQ0K
d2Ugc2hvdWxkIGp1c3QgZ2V0IGluIHRoZSB1cGRhdGVkIHBhdGNoIG1pbnVzIHRoZSBkeW5hbWlj
IERMTCBzdHVmZiwNCmkuZS46DQogIGh0dHBzOi8vZ2l0aHViLmNvbS9tZHJvdGgvcWVtdS9jb21t
aXQvZGU1OTdhOGIyNzcyMmNlNGY5Y2M2NjBmOTMwZjdkY2NjNzEyNzEyZA0KDQpNYWtlIHNlbnNl
Pw0KDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g5Li65LqG6K6p5oKo55qEVlBsYXTomZrmi5/mnLrm
lYXpmpzlkoxkb2NrZXLmlYXpmpzlvpfliLDpq5jmlYjnmoTlpITnkIbvvIzor7fkuIrmiqXmlYXp
mpzliLA6ICRWUGxhdOaKgOacr+aUrw0KPiDmjIHjgIINCj4gDQo+IOiKpuW/l+aciyBsdXpoaXBl
bmcNCj4gDQo+IA0KPiBJVOW8gOWPkeW3peeoi+W4iCBJVCBEZXZlbG9wbWVudCBFbmdpbmVlcg0K
PiDmk43kvZzns7vnu5/kuqflk4Hpg6gv5Lit5b+D56CU56m26ZmiL+ezu+e7n+S6p+WTgSBPUyBQ
cm9kdWN0IERlcHQuL0NlbnRyYWwgUu+8hkQgSW5zdGl0dXRlLw0KPiBTeXN0ZW0gUHJvZHVjdA0K
PiANCj4gDQo+IFtjaWRdICAgICAgICAgIFtjaWRdDQo+ICAgICAgICAgICAgICAgIOWbm+W3neec
geaIkOmDveW4guWkqeW6nOWkp+mBk+S4reautTgwMOWPtw0KPiAgICAgICAgICAgICAgICBFOiBs
dS56aGlwZW5nQHp0ZS5jb20uY24NCj4gICAgICAgICAgICAgICAgd3d3Lnp0ZS5jb20uY24NCj4g
DQo+IOWOn+Wni+mCruS7tg0KPiDlj5Hku7bkurrvvJroiqblv5fmnIsxMDEwODI3Mg0KPiDmlLbk
u7bkurrvvJogPG1kcm90aEBsaW51eC52bmV0LmlibS5jb20+Ow0KPiDmioTpgIHkurrvvJogPHFl
bXUtZGV2ZWxAbm9uZ251Lm9yZz47DQo+IOaXpeacn++8mjIwMTflubQxMeaciDA45pelIDEwOjU0
DQo+IOS4u+mimO+8muetlOWkjTogUmU6IFtQQVRDSCB2Ml0gcWdhOiByZXBsYWNlIEdldElmRW50
cnkNCj4gDQo+IA0KPiA+SSBoYXZlIHRoZSBtb2RpZmllZCBwYXRjaCBzdGFnZWQgaGVyZToNCj4g
DQo+ID4gIGh0dHBzOi8vZ2l0aHViLmNvbS9tZHJvdGgvcWVtdS9jb21taXQvDQo+IGRlNTk3YThi
Mjc3MjJjZTRmOWNjNjYwZjkzMGY3ZGNjYzcxMjcxMmQNCj4gPkxldCBtZSBrbm93IGlmIGl0IGxv
b2tzIG9rYXkgYW5kIEknbGwgc2VuZCBhIHB1bGwgcmVxdWVzdCBmb3IgcmMxDQo+IA0KPiAgDQo+
IA0KPiB0aGUgY29kZSByaWdodCwgYnV0IHJ1bm5pbmcgUUdBIG9uIHRoZSBXaW5kb3dzIFhQLCBl
cnJvcjogY2FuIG5vdCBmaW5kIHRoZSBsaW5rDQo+IHRvICBHZXRJZkVudHJ5MiBpbiBpcGhscGFw
aS5ETEwuDQo+IA0KPiANCj4gDQo+IA0KPiDkuLrkuoborqnmgqjnmoRWUGxhdOiZmuaLn+acuuaV
hemanOWSjGRvY2tlcuaVhemanOW+l+WIsOmrmOaViOeahOWkhOeQhu+8jOivt+S4iuaKpeaVhema
nOWIsDogJFZQbGF05oqA5pyv5pSvDQo+IOaMgeOAgg0KPiANCj4g6Iqm5b+X5pyLIGx1emhpcGVu
Zw0KPiANCj4gDQo+IElU5byA5Y+R5bel56iL5biIIElUIERldmVsb3BtZW50IEVuZ2luZWVyDQo+
IOaTjeS9nOezu+e7n+S6p+WTgemDqC/kuK3lv4PnoJTnqbbpmaIv57O757uf5Lqn5ZOBIE9TIFBy
b2R1Y3QgRGVwdC4vQ2VudHJhbCBS77yGRCBJbnN0aXR1dGUvDQo+IFN5c3RlbSBQcm9kdWN0DQo+
IA0KPiANCj4gW2NpZF0gICAgICAgICAgW2NpZF0NCj4gICAgICAgICAgICAgICAg5Zub5bed55yB
5oiQ6YO95biC5aSp5bqc5aSn6YGT5Lit5q61ODAw5Y+3DQo+ICAgICAgICAgICAgICAgIEU6IGx1
LnpoaXBlbmdAenRlLmNvbS5jbg0KPiAgICAgICAgICAgICAgICB3d3cuenRlLmNvbS5jbg0KPiAN
Cj4gDQo+IOWPkeS7tuS6uu+8miA8bWRyb3RoQGxpbnV4LnZuZXQuaWJtLmNvbT47DQo+IOaUtuS7
tuS6uu+8muiKpuW/l+acizEwMTA4MjcyOw0KPiDmioTpgIHkurrvvJogPHFlbXUtZGV2ZWxAbm9u
Z251Lm9yZz476Iqm5b+X5pyLMTAxMDgyNzI7DQo+IOaXpeacn++8mjIwMTflubQxMeaciDA45pel
IDAxOjA3DQo+IOS4u+mimO+8mlJlOiBbUEFUQ0ggdjJdIHFnYTogcmVwbGFjZSBHZXRJZkVudHJ5
DQo+IA0KPiANCj4gUXVvdGluZyBaaGlQZW5nIEx1ICgyMDE3LTExLTAzIDA5OjU0OjIwKQ0KPiA+
DQo+ICBUaGUgZGF0YSBvYnRhaW5lZCBieSBHZXRJZkVudHJ5IGlzIDMyIGJpdHMsIGFuZCBpdCBt
YXkgb3ZlcmZsb3cuIFRodXMgdXNpbmcgR2V0SWZFbnRyeTIgaW5zdGVhZCBvZiBHZXRJZkVudHJ5
Lg0KPiA+IA0KPiA+IFNpZ25lZC1vZmYtYnk6IFpoaVBlbmcgTHUgPGx1LnpoaXBlbmdAenRlLmNv
bS5jbj4NCj4gPiAtLS0NCj4gPiAgcWdhL2NvbW1hbmRzLXdpbjMyLmMgfCAzMSArKysrKysrKysr
KysrKysrKystLS0tLS0tLS0tLS0tDQo+ID4gIDEgZmlsZSBjaGFuZ2VkLCAxOCBpbnNlcnRpb25z
KCspLCAxMyBkZWxldGlvbnMoLSkNCj4gPiANCj4gPiBkaWZmIC0tZ2l0IGEvcWdhL2NvbW1hbmRz
LXdpbjMyLmMgYi9xZ2EvY29tbWFuZHMtd2luMzIuYw0KPiA+IGluZGV4IDAzMjIxODguLmQwOTZk
YzIgMTAwNjQ0DQo+ID4gLS0tIGEvcWdhL2NvbW1hbmRzLXdpbjMyLmMNCj4gPiArKysgYi9xZ2Ev
Y29tbWFuZHMtd2luMzIuYw0KPiA+IEBAIC0xMTczLDIwICsxMTczLDI1IEBAIHN0YXRpYyBpbnQg
Z3Vlc3RfZ2V0X25ldHdvcmtfc3RhdHMoY29uc3QgY2hhciAqbmFtZSwNCj4gPiAgICAgICAgICAg
ICAgICAgICAgICAgICBHdWVzdE5ldHdvcmtJbnRlcmZhY2VTdGF0ICpzdGF0cykNCj4gPiAgew0K
PiA+ICAgICAgRFdPUkQgaWZfaW5kZXggPSAwOw0KPiA+IC0gICAgTUlCX0lGUk9XIGFfbWlkX2lm
cm93Ow0KPiA+IC0gICAgbWVtc2V0KCZhX21pZF9pZnJvdywgMCwgc2l6ZW9mKGFfbWlkX2lmcm93
KSk7DQo+ID4gKyAgICBPU1ZFUlNJT05JTkZPIE9TdmVyOw0KPiA+ICAgICAgaWZfaW5kZXggPSBn
ZXRfaW50ZXJmYWNlX2luZGV4KG5hbWUpOw0KPiA+IC0gICAgYV9taWRfaWZyb3cuZHdJbmRleCA9
IGlmX2luZGV4Ow0KPiA+IC0gICAgaWYgKE5PX0VSUk9SID09IEdldElmRW50cnkoJmFfbWlkX2lm
cm93KSkgew0KPiA+IC0gICAgICAgIHN0YXRzLT5yeF9ieXRlcyA9IGFfbWlkX2lmcm93LmR3SW5P
Y3RldHM7DQo+ID4gLSAgICAgICAgc3RhdHMtPnJ4X3BhY2tldHMgPSBhX21pZF9pZnJvdy5kd0lu
VWNhc3RQa3RzOw0KPiA+IC0gICAgICAgIHN0YXRzLT5yeF9lcnJzID0gYV9taWRfaWZyb3cuZHdJ
bkVycm9yczsNCj4gPiAtICAgICAgICBzdGF0cy0+cnhfZHJvcHBlZCA9IGFfbWlkX2lmcm93LmR3
SW5EaXNjYXJkczsNCj4gPiAtICAgICAgICBzdGF0cy0+dHhfYnl0ZXMgPSBhX21pZF9pZnJvdy5k
d091dE9jdGV0czsNCj4gPiAtICAgICAgICBzdGF0cy0+dHhfcGFja2V0cyA9IGFfbWlkX2lmcm93
LmR3T3V0VWNhc3RQa3RzOw0KPiA+IC0gICAgICAgIHN0YXRzLT50eF9lcnJzID0gYV9taWRfaWZy
b3cuZHdPdXRFcnJvcnM7DQo+ID4gLSAgICAgICAgc3RhdHMtPnR4X2Ryb3BwZWQgPSBhX21pZF9p
ZnJvdy5kd091dERpc2NhcmRzOw0KPiA+IC0gICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgT1N2
ZXIuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZihPU1ZFUlNJT05JTkZPKTsNCj4gPiArICAg
IEdldFZlcnNpb25FeCgmT1N2ZXIpOw0KPiA+ICsgICAgaWYgKE9TdmVyLmR3TWFqb3JWZXJzaW9u
ID49IDYpIHsNCj4gPiArICAgICAgICBNSUJfSUZfUk9XMiBhX21pZF9pZnJvdzsNCj4gPiArICAg
ICAgICBtZW1zZXQoJmFfbWlkX2lmcm93LCAwLCBzaXplb2YoYV9taWRfaWZyb3cpKTsNCj4gPiAr
ICAgICAgICBhX21pZF9pZnJvdy5kd0luZGV4ID0gaWZfaW5kZXg7DQo+ID4gKyAgICAgICAgaWYg
KE5PX0VSUk9SID09IEdldElmRW50cnkyKCZhX21pZF9pZnJvdykpIHsNCj4gPiArICAgICAgICAg
ICAgc3RhdHMtPnJ4X2J5dGVzID0gYV9taWRfaWZyb3cuZHdJbk9jdGV0czsNCj4gPiArICAgICAg
ICAgICAgc3RhdHMtPnJ4X3BhY2tldHMgPSBhX21pZF9pZnJvdy5kd0luVWNhc3RQa3RzOw0KPiA+
ICsgICAgICAgICAgICBzdGF0cy0+cnhfZXJycyA9IGFfbWlkX2lmcm93LmR3SW5FcnJvcnM7DQo+
ID4gKyAgICAgICAgICAgIHN0YXRzLT5yeF9kcm9wcGVkID0gYV9taWRfaWZyb3cuZHdJbkRpc2Nh
cmRzOw0KPiA+ICsgICAgICAgICAgICBzdGF0cy0+dHhfYnl0ZXMgPSBhX21pZF9pZnJvdy5kd091
dE9jdGV0czsNCj4gPiArICAgICAgICAgICAgc3RhdHMtPnR4X3BhY2tldHMgPSBhX21pZF9pZnJv
dy5kd091dFVjYXN0UGt0czsNCj4gPiArICAgICAgICAgICAgc3RhdHMtPnR4X2VycnMgPSBhX21p
ZF9pZnJvdy5kd091dEVycm9yczsNCj4gPiArICAgICAgICAgICAgc3RhdHMtPnR4X2Ryb3BwZWQg
PSBhX21pZF9pZnJvdy5kd091dERpc2NhcmRzOw0KPiA+ICsgICAgICAgICAgICByZXR1cm4gMDsN
Cj4gDQo+IFRoaXMgZmFpbHMgdG8gYnVpbGQgaW4gbXkgZmMyMCBtaW5ndzY0IGVudmlyb25tZW50
Og0KPiANCj4gL2hvbWUvbWRyb3RoL3cvcWVtdTQuZ2l0L3FnYS8NCj4gY29tbWFuZHMtd2luMzIu
YzoxMTg0OjIwOiBlcnJvcjogJ01JQl9JRl9ST1cyJyBoYXMgbm8gbWVtYmVyIG5hbWVkICdkd0lu
ZGV4Jw0KPiAgICAgICAgICBhX21pZF9pZnJvdy5kd0luZGV4ID0gaWZfaW5kZXg7DQo+ICAgICAg
ICAgICAgICAgICAgICAgXg0KPiAvaG9tZS9tZHJvdGgvdy9xZW11NC5naXQvcWdhLw0KPiBjb21t
YW5kcy13aW4zMi5jOjExODY6NDI6IGVycm9yOiAnTUlCX0lGX1JPVzInIGhhcyBubyBtZW1iZXIg
bmFtZWQgJ2R3SW5PY3RldHMnDQo+ICAgICAgICAgICAgICBzdGF0cy0+cnhfYnl0ZXMgPSBhX21p
ZF9pZnJvdy5kd0luT2N0ZXRzOw0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBeDQo+IC9ob21lL21kcm90aC93L3FlbXU0LmdpdC9xZ2EvDQo+IGNvbW1hbmRzLXdp
bjMyLmM6MTE4Nzo0NDogZXJyb3I6ICdNSUJfSUZfUk9XMicgaGFzIG5vIG1lbWJlciBuYW1lZCAn
ZHdJblVjYXN0UGt0cycNCj4gICAgICAgICAgICAgIHN0YXRzLT5yeF9wYWNrZXRzID0gYV9taWRf
aWZyb3cuZHdJblVjYXN0UGt0czsNCj4gDQo+IGV0YyAuLi4NCj4gDQo+IFRoZSBwYXRjaCBzZWVt
cyB0byBhc3N1bWUgTUlCX0lGUk9XIGFuZCBNSUJfSUZfUk9XMiBoYXZlIHRoZSBzYW1lIGZpZWxk
IG5hbWVzDQo+IGZvciB0aGUgc3RhdHMsIGJ1dCBhY2NvcmRpbmcgdG8gdGhpcyB0aGV5J3JlIHNs
aWdodGx5IGRpZmZlcmVudDoNCj4gDQo+ICAgaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4t
dXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWE4MTQ0OTEodj0NCj4gdnMuODUpLmFzcHgNCj4g
DQo+IFRoaXMgY2hhbmdlIG9uIHRvcCBvZiB5b3VyIHBhdGNoIHNlZW1zIHRvIHdvcms6DQo+IA0K
PiBkaWZmIC0tZ2l0IGEvcWdhL2NvbW1hbmRzLXdpbjMyLmMgYi9xZ2EvY29tbWFuZHMtd2luMzIu
Yw0KPiBpbmRleCBlMTdmYzNjMjg0Li41OGU0NzA4NzdmIDEwMDY0NA0KPiAtLS0gYS9xZ2EvY29t
bWFuZHMtd2luMzIuYw0KPiArKysgYi9xZ2EvY29tbWFuZHMtd2luMzIuYw0KPiBAQCAtMTE4MSwx
NiArMTE4MSwxNiBAQCBzdGF0aWMgaW50IGd1ZXN0X2dldF9uZXR3b3JrX3N0YXRzKGNvbnN0IGNo
YXIgKm5hbWUsDQo+ICAgICAgaWYgKG9zX3Zlci5kd01ham9yVmVyc2lvbiA+PSA2KSB7DQo+ICAg
ICAgICAgIE1JQl9JRl9ST1cyIGFfbWlkX2lmcm93Ow0KPiAgICAgICAgICBtZW1zZXQoJmFfbWlk
X2lmcm93LCAwLCBzaXplb2YoYV9taWRfaWZyb3cpKTsNCj4gLSAgICAgICAgYV9taWRfaWZyb3cu
ZHdJbmRleCA9IGlmX2luZGV4Ow0KPiArICAgICAgICBhX21pZF9pZnJvdy5JbnRlcmZhY2VJbmRl
eCA9IGlmX2luZGV4Ow0KPiAgICAgICAgICBpZiAoTk9fRVJST1IgPT0gR2V0SWZFbnRyeTIoJmFf
bWlkX2lmcm93KSkgew0KPiAtICAgICAgICAgICAgc3RhdHMtPnJ4X2J5dGVzID0gYV9taWRfaWZy
b3cuZHdJbk9jdGV0czsNCj4gLSAgICAgICAgICAgIHN0YXRzLT5yeF9wYWNrZXRzID0gYV9taWRf
aWZyb3cuZHdJblVjYXN0UGt0czsNCj4gLSAgICAgICAgICAgIHN0YXRzLT5yeF9lcnJzID0gYV9t
aWRfaWZyb3cuZHdJbkVycm9yczsNCj4gLSAgICAgICAgICAgIHN0YXRzLT5yeF9kcm9wcGVkID0g
YV9taWRfaWZyb3cuZHdJbkRpc2NhcmRzOw0KPiAtICAgICAgICAgICAgc3RhdHMtPnR4X2J5dGVz
ID0gYV9taWRfaWZyb3cuZHdPdXRPY3RldHM7DQo+IC0gICAgICAgICAgICBzdGF0cy0+dHhfcGFj
a2V0cyA9IGFfbWlkX2lmcm93LmR3T3V0VWNhc3RQa3RzOw0KPiAtICAgICAgICAgICAgc3RhdHMt
PnR4X2VycnMgPSBhX21pZF9pZnJvdy5kd091dEVycm9yczsNCj4gLSAgICAgICAgICAgIHN0YXRz
LT50eF9kcm9wcGVkID0gYV9taWRfaWZyb3cuZHdPdXREaXNjYXJkczsNCj4gKyAgICAgICAgICAg
IHN0YXRzLT5yeF9ieXRlcyA9IGFfbWlkX2lmcm93LkluT2N0ZXRzOw0KPiArICAgICAgICAgICAg
c3RhdHMtPnJ4X3BhY2tldHMgPSBhX21pZF9pZnJvdy5JblVjYXN0UGt0czsNCj4gKyAgICAgICAg
ICAgIHN0YXRzLT5yeF9lcnJzID0gYV9taWRfaWZyb3cuSW5FcnJvcnM7DQo+ICsgICAgICAgICAg
ICBzdGF0cy0+cnhfZHJvcHBlZCA9IGFfbWlkX2lmcm93LkluRGlzY2FyZHM7DQo+ICsgICAgICAg
ICAgICBzdGF0cy0+dHhfYnl0ZXMgPSBhX21pZF9pZnJvdy5PdXRPY3RldHM7DQo+ICsgICAgICAg
ICAgICBzdGF0cy0+dHhfcGFja2V0cyA9IGFfbWlkX2lmcm93Lk91dFVjYXN0UGt0czsNCj4gKyAg
ICAgICAgICAgIHN0YXRzLT50eF9lcnJzID0gYV9taWRfaWZyb3cuT3V0RXJyb3JzOw0KPiArICAg
ICAgICAgICAgc3RhdHMtPnR4X2Ryb3BwZWQgPSBhX21pZF9pZnJvdy5PdXREaXNjYXJkczsNCj4g
ICAgICAgICAgICAgIHJldHVybiAwOw0KPiAgICAgICAgICB9DQo+ICAgICAgfQ0KPiANCj4gSSBo
YXZlIHRoZSBtb2RpZmllZCBwYXRjaCBzdGFnZWQgaGVyZToNCj4gDQo+ICAgaHR0cHM6Ly9naXRo
dWIuY29tL21kcm90aC9xZW11L2NvbW1pdC8NCj4gZGU1OTdhOGIyNzcyMmNlNGY5Y2M2NjBmOTMw
ZjdkY2NjNzEyNzEyZA0KPiANCj4gTGV0IG1lIGtub3cgaWYgaXQgbG9va3Mgb2theSBhbmQgSSds
bCBzZW5kIGEgcHVsbCByZXF1ZXN0IGZvciByYzENCj4gDQo+ID4gKyAgICAgICAgfQ0KPiA+ICAg
ICAgfQ0KPiA+ICAgICAgcmV0dXJuIC0xOw0KPiA+ICB9DQo+ID4gLS0gDQo+ID4gMS44LjMuMQ0K
PiA+IA0KPiANCj4=
Michael Roth Nov. 15, 2017, 1:21 a.m. UTC | #5
Quoting lu.zhipeng@zte.com.cn (2017-11-14 05:09:35)
>  i test the latest qga in xp , it run ok .
> 
> 
> my qga config :
> 
> Configured with: './configure' '--enable-guest-agent' '--cross-prefix=
> x86_64-w64-mingw32-' '--with-vss-sdk=/home/VSSSDK72' '--disable-fdt'        
> '--target-list=x86_64-softmmu'

Hmm, so you're testing with Windows XP x64? I was using XP 32-bit (SP3),
but I retried with XP x64 (SP2) and I still have the same issue.

I can only get qemu-ga working if I build on top of something prior to
commit 12f8def0e.

What build environment are you using? I've tried Fedora Core 18 and 20
and have the same issue with both.

> 
> used qga version info
> 
> [root@ceshi qemu]# git log
> 
> commit 533ab83ea074d5fc457769f6ac698524a12f1156
> 
> Author: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> 
> Date:   Fri Nov 10 10:17:14 2017 +0800
> 
> 
>     qga: fix some errors for guest_get_network_stats
> 
>     
> 
>     fix some erros:
> 
>     1.if building qga on Windows Vista/2008 and newer,
> 
>     it cann't find the link to GetIfEntry2 in windows xp.
> 
>     2. check valid of if_index.
> 
>     
> 
>     Signed-off-by: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> 
> 
> commit de597a8b27722ce4f9cc660f930f7dccc712712d
> 
> Author: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> 
> Date:   Fri Nov 3 22:54:20 2017 +0800
> 
> 
>     qga: replace GetIfEntry
> 
>     
> 
>     The data obtained by GetIfEntry is 32 bits, and it may overflow. Thus using
> GetIfEntry2 instead of GetIfEntry.
> 
>     
> 
>     Signed-off-by: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> 
>     *avoid CamelCase variable names
> 
>     *update field names for MIB_IFROW -> MIB_IF_ROW2
> 
>     Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
> 
> 
> commit 5ca7a3cba468736cfe555887af1f6ba754f6eac9
> 
> Merge: a4f0537 10a7b7e
> 
> Author: Peter Maydell <peter.maydell@linaro.org>
> 
> Date:   Tue Nov 7 14:43:35 2017 +0000
> 
> 
>     Merge remote-tracking branch 'remotes/berrange/tags/pull-2017-11-06-2' into
> staging
> 
>     
> 
>     Pull IO 2017/11/06 v2
> 
> 
> 
> 
> 为了让您的VPlat虚拟机故障和docker故障得到高效的处理,请上报故障到: $VPlat技术支
> 持。
> 
> 芦志朋 luzhipeng
> 
> 
> IT开发工程师 IT Development Engineer
> 操作系统产品部/中心研究院/系统产品 OS Product Dept./Central R&D Institute/
> System Product
> 
> 
> [cid]          [cid]
>                四川省成都市天府大道中段800号
>                E: lu.zhipeng@zte.com.cn
>                www.zte.com.cn
> 
> 原始邮件
> 发件人: <mdroth@linux.vnet.ibm.com>;
> 收件人:芦志朋10108272;
> 抄送人: <qemu-devel@nongnu.org>;
> 日期:2017年11月14日 07:57
> 主题:Re: 答复: Re: [PATCH v2] qga: replace GetIfEntry
> Quoting lu.zhipeng@zte.com.cn (2017-11-09 05:26:15)
> >  i think the code is better
> > 
> >  if (OSver.dwMajorVersion >= 6) {
> >       MIB_IF_ROW2 aMib_ifrow;
> >       typedef NETIOAPI_API (WINAPI *getifentry2_t)(PMIB_IF_ROW2 Row);
> >       memset(&aMib_ifrow, 0, sizeof(aMib_ifrow));
> >       aMib_ifrow.InterfaceIndex = nicId;
> >       HMODULE module = GetModuleHandle("iphlpapi");
> >       PVOID fun = GetProcAddress(module, "GetIfEntry2");
> >       if (fun == NULL) {
> >           error_setg(errp, QERR_QGA_COMMAND_FAILED,
> >                      "Failed to get address of GetIfEntry2");
> >           return NULL;
> >       }
> >     getifentry2_t getifentry2_ex = (getifentry2_t)fun;
> >     if (NO_ERROR == getifentry2_ex(&aMib_ifrow)){
> >     }
> 
> I've updated the patch with this change:
>   https://github.com/mdroth/qemu/commits/qga-if-stats
> 
> But I'm a bit confused now: when I tried to test this on XP I realized that
> that qemu-ga no longer works on XP, and generates the following error
> when I try to start it (even without your stats patch):
> 
>   "The procedure entry point AcquireSRWLockExclusive could not be located
>    in the dynamic link library KERNEL32.dll"
> 
> I think this may be due to the following commit, which notes that Vista+
> are now required as a result:
> 
> commit 12f8def0e02232d7c6416ad9b66640f973c531d1
> Author: Andrey Shedel <ashedel@microsoft.com>
> Date:   Fri Mar 24 15:01:41 2017 -0700
> 
>     win32: replace custom mutex and condition variable with native
>     primitives
> 
> So, are you actually able to run on XP currently? If so, how? And if
> not, I think we have other issues that need to be addressed if we
> want to support XP still; I'm not even sure that's realistic at this
> point.
> 
> Unless there's actually a way to test QGA on XP right now I think I
> we should just get in the updated patch minus the dynamic DLL stuff,
> i.e.:
>   https://github.com/mdroth/qemu/commit/
> de597a8b27722ce4f9cc660f930f7dccc712712d
> 
> Make sense?
> 
> > 
> > 
> > 
> > 
> > 
> > 为了让您的VPlat虚拟机故障和docker故障得到高效的处理,请上报故障到: $VPlat技术
> 支
> > 持。
> > 
> > 芦志朋 luzhipeng
> > 
> > 
> > IT开发工程师 IT Development Engineer
> > 操作系统产品部/中心研究院/系统产品 OS Product Dept./Central R&D Institute/
> > System Product
> > 
> > 
> > [cid]          [cid]
> >                四川省成都市天府大道中段800号
> >                E: lu.zhipeng@zte.com.cn
> >                www.zte.com.cn
> > 
> > 原始邮件
> > 发件人:芦志朋10108272
> > 收件人: <mdroth@linux.vnet.ibm.com>;
> > 抄送人: <qemu-devel@nongnu.org>;
> > 日期:2017年11月08日 10:54
> > 主题:答复: Re: [PATCH v2] qga: replace GetIfEntry
> > 
> > 
> > >I have the modified patch staged here:
> > 
> > >  https://github.com/mdroth/qemu/commit/
> > de597a8b27722ce4f9cc660f930f7dccc712712d
> > >Let me know if it looks okay and I'll send a pull request for rc1
> > 
> >  
> > 
> >
>  the code right, but running QGA on the Windows XP, error: can not find the link
> > to  GetIfEntry2 in iphlpapi.DLL.
> > 
> > 
> > 
> > 
> > 为了让您的VPlat虚拟机故障和docker故障得到高效的处理,请上报故障到: $VPlat技术
> 支
> > 持。
> > 
> > 芦志朋 luzhipeng
> > 
> > 
> > IT开发工程师 IT Development Engineer
> > 操作系统产品部/中心研究院/系统产品 OS Product Dept./Central R&D Institute/
> > System Product
> > 
> > 
> > [cid]          [cid]
> >                四川省成都市天府大道中段800号
> >                E: lu.zhipeng@zte.com.cn
> >                www.zte.com.cn
> > 
> > 
> > 发件人: <mdroth@linux.vnet.ibm.com>;
> > 收件人:芦志朋10108272;
> > 抄送人: <qemu-devel@nongnu.org>;芦志朋10108272;
> > 日期:2017年11月08日 01:07
> > 主题:Re: [PATCH v2] qga: replace GetIfEntry
> > 
> > 
> > Quoting ZhiPeng Lu (2017-11-03 09:54:20)
> > >
> >
>   The data obtained by GetIfEntry is 32 bits, and it may overflow. Thus using GetIfEntry2 instead of GetIfEntry.
> > > 
> > > Signed-off-by: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> > > ---
> > >  qga/commands-win32.c | 31 ++++++++++++++++++-------------
> > >  1 file changed, 18 insertions(+), 13 deletions(-)
> > > 
> > > diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> > > index 0322188..d096dc2 100644
> > > --- a/qga/commands-win32.c
> > > +++ b/qga/commands-win32.c
> > > @@ -1173,20 +1173,25 @@ static int guest_get_network_stats
> (const char *name,
> > >                         GuestNetworkInterfaceStat *stats)
> > >  {
> > >      DWORD if_index = 0;
> > > -    MIB_IFROW a_mid_ifrow;
> > > -    memset(&a_mid_ifrow, 0, sizeof(a_mid_ifrow));
> > > +    OSVERSIONINFO OSver;
> > >      if_index = get_interface_index(name);
> > > -    a_mid_ifrow.dwIndex = if_index;
> > > -    if (NO_ERROR == GetIfEntry(&a_mid_ifrow)) {
> > > -        stats->rx_bytes = a_mid_ifrow.dwInOctets;
> > > -        stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> > > -        stats->rx_errs = a_mid_ifrow.dwInErrors;
> > > -        stats->rx_dropped = a_mid_ifrow.dwInDiscards;
> > > -        stats->tx_bytes = a_mid_ifrow.dwOutOctets;
> > > -        stats->tx_packets = a_mid_ifrow.dwOutUcastPkts;
> > > -        stats->tx_errs = a_mid_ifrow.dwOutErrors;
> > > -        stats->tx_dropped = a_mid_ifrow.dwOutDiscards;
> > > -        return 0;
> > > +    OSver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
> > > +    GetVersionEx(&OSver);
> > > +    if (OSver.dwMajorVersion >= 6) {
> > > +        MIB_IF_ROW2 a_mid_ifrow;
> > > +        memset(&a_mid_ifrow, 0, sizeof(a_mid_ifrow));
> > > +        a_mid_ifrow.dwIndex = if_index;
> > > +        if (NO_ERROR == GetIfEntry2(&a_mid_ifrow)) {
> > > +            stats->rx_bytes = a_mid_ifrow.dwInOctets;
> > > +            stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> > > +            stats->rx_errs = a_mid_ifrow.dwInErrors;
> > > +            stats->rx_dropped = a_mid_ifrow.dwInDiscards;
> > > +            stats->tx_bytes = a_mid_ifrow.dwOutOctets;
> > > +            stats->tx_packets = a_mid_ifrow.dwOutUcastPkts;
> > > +            stats->tx_errs = a_mid_ifrow.dwOutErrors;
> > > +            stats->tx_dropped = a_mid_ifrow.dwOutDiscards;
> > > +            return 0;
> > 
> > This fails to build in my fc20 mingw64 environment:
> > 
> > /home/mdroth/w/qemu4.git/qga/
> > commands-win32.c:1184:20: error: 'MIB_IF_ROW2' has no member named 'dwIndex'
> >          a_mid_ifrow.dwIndex = if_index;
> >                     ^
> > /home/mdroth/w/qemu4.git/qga/
> >
>  commands-win32.c:1186:42: error: 'MIB_IF_ROW2' has no member named 'dwInOctets'
> >              stats->rx_bytes = a_mid_ifrow.dwInOctets;
> >                                           ^
> > /home/mdroth/w/qemu4.git/qga/
> >
>  commands-win32.c:1187:44: error: 'MIB_IF_ROW2' has no member named 'dwInUcastPkts'
> >              stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> > 
> > etc ...
> > 
> > The patch seems to assume MIB_IFROW and MIB_IF_ROW2 have the same field names
> > for the stats, but according to this they're slightly different:
> > 
> >   https://msdn.microsoft.com/en-us/library/windows/desktop/aa814491(v=
> > vs.85).aspx
> > 
> > This change on top of your patch seems to work:
> > 
> > diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> > index e17fc3c284..58e470877f 100644
> > --- a/qga/commands-win32.c
> > +++ b/qga/commands-win32.c
> > @@ -1181,16 +1181,16 @@ static int guest_get_network_stats(const char *name,
> >      if (os_ver.dwMajorVersion >= 6) {
> >          MIB_IF_ROW2 a_mid_ifrow;
> >          memset(&a_mid_ifrow, 0, sizeof(a_mid_ifrow));
> > -        a_mid_ifrow.dwIndex = if_index;
> > +        a_mid_ifrow.InterfaceIndex = if_index;
> >          if (NO_ERROR == GetIfEntry2(&a_mid_ifrow)) {
> > -            stats->rx_bytes = a_mid_ifrow.dwInOctets;
> > -            stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> > -            stats->rx_errs = a_mid_ifrow.dwInErrors;
> > -            stats->rx_dropped = a_mid_ifrow.dwInDiscards;
> > -            stats->tx_bytes = a_mid_ifrow.dwOutOctets;
> > -            stats->tx_packets = a_mid_ifrow.dwOutUcastPkts;
> > -            stats->tx_errs = a_mid_ifrow.dwOutErrors;
> > -            stats->tx_dropped = a_mid_ifrow.dwOutDiscards;
> > +            stats->rx_bytes = a_mid_ifrow.InOctets;
> > +            stats->rx_packets = a_mid_ifrow.InUcastPkts;
> > +            stats->rx_errs = a_mid_ifrow.InErrors;
> > +            stats->rx_dropped = a_mid_ifrow.InDiscards;
> > +            stats->tx_bytes = a_mid_ifrow.OutOctets;
> > +            stats->tx_packets = a_mid_ifrow.OutUcastPkts;
> > +            stats->tx_errs = a_mid_ifrow.OutErrors;
> > +            stats->tx_dropped = a_mid_ifrow.OutDiscards;
> >              return 0;
> >          }
> >      }
> > 
> > I have the modified patch staged here:
> > 
> >   https://github.com/mdroth/qemu/commit/
> > de597a8b27722ce4f9cc660f930f7dccc712712d
> > 
> > Let me know if it looks okay and I'll send a pull request for rc1
> > 
> > > +        }
> > >      }
> > >      return -1;
> > >  }
> > > -- 
> > > 1.8.3.1
> > > 
> > 
> > 
> 
>
ZhiPeng Lu Nov. 15, 2017, 1:41 a.m. UTC | #6
aSB1c2VkICB4cCAgdmVyc2lvbjoNCg0KDQp4cCBwcm9mZXNzaW9uYWwgMjAwMiBzZXJ2aWNlIHBh
Y2sgMw0KDQoNCmJ1aWxkIGVudmlyb25tZW50OiANCg0KDQoNCg0Kcm9vdEBsb2NhbGhvc3QgcWVt
dS0yLjUuMF0jIGNhdCAvZXRjL3JlZGhhdC1yZWxlYXNlIA0KDQpDZW50T1MgTGludXggcmVsZWFz
ZSA3LjAuMTQwNiAoQ29yZSkgDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
Cg0KDQoNCg0KDQrkuLrkuoborqnmgqjnmoRWUGxhdOiZmuaLn+acuuaVhemanOWSjGRvY2tlcuaV
hemanOW+l+WIsOmrmOaViOeahOWkhOeQhu+8jOivt+S4iuaKpeaVhemanOWIsDogJFZQbGF05oqA
5pyv5pSv5oyB44CCDQoNCg0K6Iqm5b+X5pyLIGx1emhpcGVuZw0KDQoNCg0KDQoNCg0KSVTlvIDl
j5Hlt6XnqIvluIggSVQgRGV2ZWxvcG1lbnQKRW5naW5lZXINCuaTjeS9nOezu+e7n+S6p+WTgemD
qC/kuK3lv4PnoJTnqbbpmaIv57O757uf5Lqn5ZOBIE9TIFByb2R1Y3QgRGVwdC4vQ2VudHJhbCBS
77yGRCBJbnN0aXR1dGUvU3lzdGVtIFByb2R1Y3QNCg0KDQoNCg0KDQoNCg0KDQoNCuWbm+W3neec
geaIkOmDveW4guWkqeW6nOWkp+mBk+S4reautTgwMOWPtw0KRTogbHUuemhpcGVuZ0B6dGUuY29t
LmNuIA0Kd3d3Lnp0ZS5jb20uY24NCg0KDQoNCg0KDQoNCg0KDQoNCg0K5Y6f5aeL6YKu5Lu2DQoN
Cg0KDQrlj5Hku7bkurrvvJogPG1kcm90aEBsaW51eC52bmV0LmlibS5jb20+Ow0K5pS25Lu25Lq6
77ya6Iqm5b+X5pyLMTAxMDgyNzI7DQrmioTpgIHkurrvvJogPHFlbXUtZGV2ZWxAbm9uZ251Lm9y
Zz47DQrml6Ug5pyfIO+8mjIwMTflubQxMeaciDE15pelIDA5OjIyDQrkuLsg6aKYIO+8mlJlOiDn
rZTlpI06IFJlOiDnrZTlpI06IFJlOiBbUEFUQ0ggdjJdIHFnYTogcmVwbGFjZSBHZXRJZkVudHJ5
DQoNCg0KUXVvdGluZyBsdS56aGlwZW5nQHp0ZS5jb20uY24gKDIwMTctMTEtMTQgMDU6MDk6MzUp
DQo+ICBpIHRlc3QgdGhlIGxhdGVzdCBxZ2EgaW4geHAgLCBpdCBydW4gb2sgLg0KPiANCj4gDQo+
IG15IHFnYSBjb25maWcgOg0KPiANCj4gQ29uZmlndXJlZCB3aXRoOiAnLi9jb25maWd1cmUnICct
LWVuYWJsZS1ndWVzdC1hZ2VudCcgJy0tY3Jvc3MtcHJlZml4PQ0KPiB4ODZfNjQtdzY0LW1pbmd3
MzItJyAnLS13aXRoLXZzcy1zZGs9L2hvbWUvVlNTU0RLNzInICctLWRpc2FibGUtZmR0JyAgICAg
ICAgDQo+ICctLXRhcmdldC1saXN0PXg4Nl82NC1zb2Z0bW11Jw0KDQpIbW0sIHNvIHlvdSdyZSB0
ZXN0aW5nIHdpdGggV2luZG93cyBYUCB4NjQ/IEkgd2FzIHVzaW5nIFhQIDMyLWJpdCAoU1AzKSwN
CmJ1dCBJIHJldHJpZWQgd2l0aCBYUCB4NjQgKFNQMikgYW5kIEkgc3RpbGwgaGF2ZSB0aGUgc2Ft
ZSBpc3N1ZS4NCg0KSSBjYW4gb25seSBnZXQgcWVtdS1nYSB3b3JraW5nIGlmIEkgYnVpbGQgb24g
dG9wIG9mIHNvbWV0aGluZyBwcmlvciB0bw0KY29tbWl0IDEyZjhkZWYwZS4NCg0KV2hhdCBidWls
ZCBlbnZpcm9ubWVudCBhcmUgeW91IHVzaW5nPyBJJ3ZlIHRyaWVkIEZlZG9yYSBDb3JlIDE4IGFu
ZCAyMA0KYW5kIGhhdmUgdGhlIHNhbWUgaXNzdWUgd2l0aCBib3RoLg0KDQo+IA0KPiB1c2VkIHFn
YSB2ZXJzaW9uIGluZm8NCj4gDQo+IFtyb290QGNlc2hpIHFlbXVdIyBnaXQgbG9nDQo+IA0KPiBj
b21taXQgNTMzYWI4M2VhMDc0ZDVmYzQ1Nzc2OWY2YWM2OTg1MjRhMTJmMTE1Ng0KPiANCj4gQXV0
aG9yOiBaaGlQZW5nIEx1IDxsdS56aGlwZW5nQHp0ZS5jb20uY24+DQo+IA0KPiBEYXRlOiAgIEZy
aSBOb3YgMTAgMTA6MTc6MTQgMjAxNyArMDgwMA0KPiANCj4gDQo+ICAgICBxZ2E6IGZpeCBzb21l
IGVycm9ycyBmb3IgZ3Vlc3RfZ2V0X25ldHdvcmtfc3RhdHMNCj4gDQo+ICAgICANCj4gDQo+ICAg
ICBmaXggc29tZSBlcnJvczoNCj4gDQo+ICAgICAxLmlmIGJ1aWxkaW5nIHFnYSBvbiBXaW5kb3dz
IFZpc3RhLzIwMDggYW5kIG5ld2VyLA0KPiANCj4gICAgIGl0IGNhbm4ndCBmaW5kIHRoZSBsaW5r
IHRvIEdldElmRW50cnkyIGluIHdpbmRvd3MgeHAuDQo+IA0KPiAgICAgMi4gY2hlY2sgdmFsaWQg
b2YgaWZfaW5kZXguDQo+IA0KPiAgICAgDQo+IA0KPiAgICAgU2lnbmVkLW9mZi1ieTogWmhpUGVu
ZyBMdSA8bHUuemhpcGVuZ0B6dGUuY29tLmNuPg0KPiANCj4gDQo+IGNvbW1pdCBkZTU5N2E4YjI3
NzIyY2U0ZjljYzY2MGY5MzBmN2RjY2M3MTI3MTJkDQo+IA0KPiBBdXRob3I6IFpoaVBlbmcgTHUg
PGx1LnpoaXBlbmdAenRlLmNvbS5jbj4NCj4gDQo+IERhdGU6ICAgRnJpIE5vdiAzIDIyOjU0OjIw
IDIwMTcgKzA4MDANCj4gDQo+IA0KPiAgICAgcWdhOiByZXBsYWNlIEdldElmRW50cnkNCj4gDQo+
ICAgICANCj4gDQo+ICAgICBUaGUgZGF0YSBvYnRhaW5lZCBieSBHZXRJZkVudHJ5IGlzIDMyIGJp
dHMsIGFuZCBpdCBtYXkgb3ZlcmZsb3cuIFRodXMgdXNpbmcNCj4gR2V0SWZFbnRyeTIgaW5zdGVh
ZCBvZiBHZXRJZkVudHJ5Lg0KPiANCj4gICAgIA0KPiANCj4gICAgIFNpZ25lZC1vZmYtYnk6IFpo
aVBlbmcgTHUgPGx1LnpoaXBlbmdAenRlLmNvbS5jbj4NCj4gDQo+ICAgICAqYXZvaWQgQ2FtZWxD
YXNlIHZhcmlhYmxlIG5hbWVzDQo+IA0KPiAgICAgKnVwZGF0ZSBmaWVsZCBuYW1lcyBmb3IgTUlC
X0lGUk9XIC0+IE1JQl9JRl9ST1cyDQo+IA0KPiAgICAgU2lnbmVkLW9mZi1ieTogTWljaGFlbCBS
b3RoIDxtZHJvdGhAbGludXgudm5ldC5pYm0uY29tPg0KPiANCj4gDQo+IGNvbW1pdCA1Y2E3YTNj
YmE0Njg3MzZjZmU1NTU4ODdhZjFmNmJhNzU0ZjZlYWM5DQo+IA0KPiBNZXJnZTogYTRmMDUzNyAx
MGE3YjdlDQo+IA0KPiBBdXRob3I6IFBldGVyIE1heWRlbGwgPHBldGVyLm1heWRlbGxAbGluYXJv
Lm9yZz4NCj4gDQo+IERhdGU6ICAgVHVlIE5vdiA3IDE0OjQzOjM1IDIwMTcgKzAwMDANCj4gDQo+
IA0KPiAgICAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAncmVtb3Rlcy9iZXJyYW5nZS90
YWdzL3B1bGwtMjAxNy0xMS0wNi0yJyBpbnRvDQo+IHN0YWdpbmcNCj4gDQo+ICAgICANCj4gDQo+
ICAgICBQdWxsIElPIDIwMTcvMTEvMDYgdjINCj4gDQo+IA0KPiANCj4gDQo+IOS4uuS6huiuqeaC
qOeahFZQbGF06Jma5ouf5py65pWF6Zqc5ZKMZG9ja2Vy5pWF6Zqc5b6X5Yiw6auY5pWI55qE5aSE
55CG77yM6K+35LiK5oql5pWF6Zqc5YiwOiAkVlBsYXTmioDmnK/mlK8NCj4g5oyB44CCDQo+IA0K
PiDoiqblv5fmnIsgbHV6aGlwZW5nDQo+IA0KPiANCj4gSVTlvIDlj5Hlt6XnqIvluIggSVQgRGV2
ZWxvcG1lbnQgRW5naW5lZXINCj4g5pON5L2c57O757uf5Lqn5ZOB6YOoL+S4reW/g+eglOeptumZ
oi/ns7vnu5/kuqflk4EgT1MgUHJvZHVjdCBEZXB0Li9DZW50cmFsIFLvvIZEIEluc3RpdHV0ZS8N
Cj4gU3lzdGVtIFByb2R1Y3QNCj4gDQo+IA0KPiBbY2lkXSAgICAgICAgICBbY2lkXQ0KPiAgICAg
ICAgICAgICAgICDlm5vlt53nnIHmiJDpg73luILlpKnlupzlpKfpgZPkuK3mrrU4MDDlj7cNCj4g
ICAgICAgICAgICAgICAgRTogbHUuemhpcGVuZ0B6dGUuY29tLmNuDQo+ICAgICAgICAgICAgICAg
IHd3dy56dGUuY29tLmNuDQo+IA0KPiDljp/lp4vpgq7ku7YNCj4g5Y+R5Lu25Lq677yaIDxtZHJv
dGhAbGludXgudm5ldC5pYm0uY29tPjsNCj4g5pS25Lu25Lq677ya6Iqm5b+X5pyLMTAxMDgyNzI7
DQo+IOaKhOmAgeS6uu+8miA8cWVtdS1kZXZlbEBub25nbnUub3JnPjsNCj4g5pel5pyf77yaMjAx
N+W5tDEx5pyIMTTml6UgMDc6NTcNCj4g5Li76aKY77yaUmU6IOetlOWkjTogUmU6IFtQQVRDSCB2
Ml0gcWdhOiByZXBsYWNlIEdldElmRW50cnkNCj4gUXVvdGluZyBsdS56aGlwZW5nQHp0ZS5jb20u
Y24gKDIwMTctMTEtMDkgMDU6MjY6MTUpDQo+ID4gIGkgdGhpbmsgdGhlIGNvZGUgaXMgYmV0dGVy
DQo+ID4gDQo+ID4gIGlmIChPU3Zlci5kd01ham9yVmVyc2lvbiA+PSA2KSB7DQo+ID4gICAgICAg
TUlCX0lGX1JPVzIgYU1pYl9pZnJvdzsNCj4gPiAgICAgICB0eXBlZGVmIE5FVElPQVBJX0FQSSAo
V0lOQVBJICpnZXRpZmVudHJ5Ml90KShQTUlCX0lGX1JPVzIgUm93KTsNCj4gPiAgICAgICBtZW1z
ZXQoJmFNaWJfaWZyb3csIDAsIHNpemVvZihhTWliX2lmcm93KSk7DQo+ID4gICAgICAgYU1pYl9p
ZnJvdy5JbnRlcmZhY2VJbmRleCA9IG5pY0lkOw0KPiA+ICAgICAgIEhNT0RVTEUgbW9kdWxlID0g
R2V0TW9kdWxlSGFuZGxlKCJpcGhscGFwaSIpOw0KPiA+ICAgICAgIFBWT0lEIGZ1biA9IEdldFBy
b2NBZGRyZXNzKG1vZHVsZSwgIkdldElmRW50cnkyIik7DQo+ID4gICAgICAgaWYgKGZ1biA9PSBO
VUxMKSB7DQo+ID4gICAgICAgICAgIGVycm9yX3NldGcoZXJycCwgUUVSUl9RR0FfQ09NTUFORF9G
QUlMRUQsDQo+ID4gICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBnZXQgYWRkcmVzcyBv
ZiBHZXRJZkVudHJ5MiIpOw0KPiA+ICAgICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiAgICAgICB9
DQo+ID4gICAgIGdldGlmZW50cnkyX3QgZ2V0aWZlbnRyeTJfZXggPSAoZ2V0aWZlbnRyeTJfdClm
dW47DQo+ID4gICAgIGlmIChOT19FUlJPUiA9PSBnZXRpZmVudHJ5Ml9leCgmYU1pYl9pZnJvdykp
ew0KPiA+ICAgICB9DQo+IA0KPiBJJ3ZlIHVwZGF0ZWQgdGhlIHBhdGNoIHdpdGggdGhpcyBjaGFu
Z2U6DQo+ICAgaHR0cHM6Ly9naXRodWIuY29tL21kcm90aC9xZW11L2NvbW1pdHMvcWdhLWlmLXN0
YXRzDQo+IA0KPiBCdXQgSSdtIGEgYml0IGNvbmZ1c2VkIG5vdzogd2hlbiBJIHRyaWVkIHRvIHRl
c3QgdGhpcyBvbiBYUCBJIHJlYWxpemVkIHRoYXQNCj4gdGhhdCBxZW11LWdhIG5vIGxvbmdlciB3
b3JrcyBvbiBYUCwgYW5kIGdlbmVyYXRlcyB0aGUgZm9sbG93aW5nIGVycm9yDQo+IHdoZW4gSSB0
cnkgdG8gc3RhcnQgaXQgKGV2ZW4gd2l0aG91dCB5b3VyIHN0YXRzIHBhdGNoKToNCj4gDQo+ICAg
IlRoZSBwcm9jZWR1cmUgZW50cnkgcG9pbnQgQWNxdWlyZVNSV0xvY2tFeGNsdXNpdmUgY291bGQg
bm90IGJlIGxvY2F0ZWQNCj4gICAgaW4gdGhlIGR5bmFtaWMgbGluayBsaWJyYXJ5IEtFUk5FTDMy
LmRsbCINCj4gDQo+IEkgdGhpbmsgdGhpcyBtYXkgYmUgZHVlIHRvIHRoZSBmb2xsb3dpbmcgY29t
bWl0LCB3aGljaCBub3RlcyB0aGF0IFZpc3RhKw0KPiBhcmUgbm93IHJlcXVpcmVkIGFzIGEgcmVz
dWx0Og0KPiANCj4gY29tbWl0IDEyZjhkZWYwZTAyMjMyZDdjNjQxNmFkOWI2NjY0MGY5NzNjNTMx
ZDENCj4gQXV0aG9yOiBBbmRyZXkgU2hlZGVsIDxhc2hlZGVsQG1pY3Jvc29mdC5jb20+DQo+IERh
dGU6ICAgRnJpIE1hciAyNCAxNTowMTo0MSAyMDE3IC0wNzAwDQo+IA0KPiAgICAgd2luMzI6IHJl
cGxhY2UgY3VzdG9tIG11dGV4IGFuZCBjb25kaXRpb24gdmFyaWFibGUgd2l0aCBuYXRpdmUNCj4g
ICAgIHByaW1pdGl2ZXMNCj4gDQo+IFNvLCBhcmUgeW91IGFjdHVhbGx5IGFibGUgdG8gcnVuIG9u
IFhQIGN1cnJlbnRseT8gSWYgc28sIGhvdz8gQW5kIGlmDQo+IG5vdCwgSSB0aGluayB3ZSBoYXZl
IG90aGVyIGlzc3VlcyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkIGlmIHdlDQo+IHdhbnQgdG8g
c3VwcG9ydCBYUCBzdGlsbDsgSSdtIG5vdCBldmVuIHN1cmUgdGhhdCdzIHJlYWxpc3RpYyBhdCB0
aGlzDQo+IHBvaW50Lg0KPiANCj4gVW5sZXNzIHRoZXJlJ3MgYWN0dWFsbHkgYSB3YXkgdG8gdGVz
dCBRR0Egb24gWFAgcmlnaHQgbm93IEkgdGhpbmsgSQ0KPiB3ZSBzaG91bGQganVzdCBnZXQgaW4g
dGhlIHVwZGF0ZWQgcGF0Y2ggbWludXMgdGhlIGR5bmFtaWMgRExMIHN0dWZmLA0KPiBpLmUuOg0K
PiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tZHJvdGgvcWVtdS9jb21taXQvDQo+IGRlNTk3YThiMjc3
MjJjZTRmOWNjNjYwZjkzMGY3ZGNjYzcxMjcxMmQNCj4gDQo+IE1ha2Ugc2Vuc2U/DQo+IA0KPiA+
IA0KPiA+IA0KPiA+IA0KPiA+IA0KPiA+IA0KPiA+IOS4uuS6huiuqeaCqOeahFZQbGF06Jma5ouf
5py65pWF6Zqc5ZKMZG9ja2Vy5pWF6Zqc5b6X5Yiw6auY5pWI55qE5aSE55CG77yM6K+35LiK5oql
5pWF6Zqc5YiwOiAkVlBsYXTmioDmnK8NCj4g5pSvDQo+ID4g5oyB44CCDQo+ID4gDQo+ID4g6Iqm
5b+X5pyLIGx1emhpcGVuZw0KPiA+IA0KPiA+IA0KPiA+IElU5byA5Y+R5bel56iL5biIIElUIERl
dmVsb3BtZW50IEVuZ2luZWVyDQo+ID4g5pON5L2c57O757uf5Lqn5ZOB6YOoL+S4reW/g+eglOep
tumZoi/ns7vnu5/kuqflk4EgT1MgUHJvZHVjdCBEZXB0Li9DZW50cmFsIFLvvIZEIEluc3RpdHV0
ZS8NCj4gPiBTeXN0ZW0gUHJvZHVjdA0KPiA+IA0KPiA+IA0KPiA+IFtjaWRdICAgICAgICAgIFtj
aWRdDQo+ID4gICAgICAgICAgICAgICAg5Zub5bed55yB5oiQ6YO95biC5aSp5bqc5aSn6YGT5Lit
5q61ODAw5Y+3DQo+ID4gICAgICAgICAgICAgICAgRTogbHUuemhpcGVuZ0B6dGUuY29tLmNuDQo+
ID4gICAgICAgICAgICAgICAgd3d3Lnp0ZS5jb20uY24NCj4gPiANCj4gPiDljp/lp4vpgq7ku7YN
Cj4gPiDlj5Hku7bkurrvvJroiqblv5fmnIsxMDEwODI3Mg0KPiA+IOaUtuS7tuS6uu+8miA8bWRy
b3RoQGxpbnV4LnZuZXQuaWJtLmNvbT47DQo+ID4g5oqE6YCB5Lq677yaIDxxZW11LWRldmVsQG5v
bmdudS5vcmc+Ow0KPiA+IOaXpeacn++8mjIwMTflubQxMeaciDA45pelIDEwOjU0DQo+ID4g5Li7
6aKY77ya562U5aSNOiBSZTogW1BBVENIIHYyXSBxZ2E6IHJlcGxhY2UgR2V0SWZFbnRyeQ0KPiA+
IA0KPiA+IA0KPiA+ID5JIGhhdmUgdGhlIG1vZGlmaWVkIHBhdGNoIHN0YWdlZCBoZXJlOg0KPiA+
IA0KPiA+ID4gIGh0dHBzOi8vZ2l0aHViLmNvbS9tZHJvdGgvcWVtdS9jb21taXQvDQo+ID4gZGU1
OTdhOGIyNzcyMmNlNGY5Y2M2NjBmOTMwZjdkY2NjNzEyNzEyZA0KPiA+ID5MZXQgbWUga25vdyBp
ZiBpdCBsb29rcyBva2F5IGFuZCBJJ2xsIHNlbmQgYSBwdWxsIHJlcXVlc3QgZm9yIHJjMQ0KPiA+
IA0KPiA+ICANCj4gPiANCj4gPg0KPiAgdGhlIGNvZGUgcmlnaHQsIGJ1dCBydW5uaW5nIFFHQSBv
biB0aGUgV2luZG93cyBYUCwgZXJyb3I6IGNhbiBub3QgZmluZCB0aGUgbGluaw0KPiA+IHRvICBH
ZXRJZkVudHJ5MiBpbiBpcGhscGFwaS5ETEwuDQo+ID4gDQo+ID4gDQo+ID4gDQo+ID4gDQo+ID4g
5Li65LqG6K6p5oKo55qEVlBsYXTomZrmi5/mnLrmlYXpmpzlkoxkb2NrZXLmlYXpmpzlvpfliLDp
q5jmlYjnmoTlpITnkIbvvIzor7fkuIrmiqXmlYXpmpzliLA6ICRWUGxhdOaKgOacrw0KPiDmlK8N
Cj4gPiDmjIHjgIINCj4gPiANCj4gPiDoiqblv5fmnIsgbHV6aGlwZW5nDQo+ID4gDQo+ID4gDQo+
ID4gSVTlvIDlj5Hlt6XnqIvluIggSVQgRGV2ZWxvcG1lbnQgRW5naW5lZXINCj4gPiDmk43kvZzn
s7vnu5/kuqflk4Hpg6gv5Lit5b+D56CU56m26ZmiL+ezu+e7n+S6p+WTgSBPUyBQcm9kdWN0IERl
cHQuL0NlbnRyYWwgUu+8hkQgSW5zdGl0dXRlLw0KPiA+IFN5c3RlbSBQcm9kdWN0DQo+ID4gDQo+
ID4gDQo+ID4gW2NpZF0gICAgICAgICAgW2NpZF0NCj4gPiAgICAgICAgICAgICAgICDlm5vlt53n
nIHmiJDpg73luILlpKnlupzlpKfpgZPkuK3mrrU4MDDlj7cNCj4gPiAgICAgICAgICAgICAgICBF
OiBsdS56aGlwZW5nQHp0ZS5jb20uY24NCj4gPiAgICAgICAgICAgICAgICB3d3cuenRlLmNvbS5j
bg0KPiA+IA0KPiA+IA0KPiA+IOWPkeS7tuS6uu+8miA8bWRyb3RoQGxpbnV4LnZuZXQuaWJtLmNv
bT47DQo+ID4g5pS25Lu25Lq677ya6Iqm5b+X5pyLMTAxMDgyNzI7DQo+ID4g5oqE6YCB5Lq677ya
IDxxZW11LWRldmVsQG5vbmdudS5vcmc+O+iKpuW/l+acizEwMTA4MjcyOw0KPiA+IOaXpeacn++8
mjIwMTflubQxMeaciDA45pelIDAxOjA3DQo+ID4g5Li76aKY77yaUmU6IFtQQVRDSCB2Ml0gcWdh
OiByZXBsYWNlIEdldElmRW50cnkNCj4gPiANCj4gPiANCj4gPiBRdW90aW5nIFpoaVBlbmcgTHUg
KDIwMTctMTEtMDMgMDk6NTQ6MjApDQo+ID4gPg0KPiA+DQo+ICAgVGhlIGRhdGEgb2J0YWluZWQg
YnkgR2V0SWZFbnRyeSBpcyAzMiBiaXRzLCBhbmQgaXQgbWF5IG92ZXJmbG93LiBUaHVzIHVzaW5n
IEdldElmRW50cnkyIGluc3RlYWQgb2YgR2V0SWZFbnRyeS4NCj4gPiA+IA0KPiA+ID4gU2lnbmVk
LW9mZi1ieTogWmhpUGVuZyBMdSA8bHUuemhpcGVuZ0B6dGUuY29tLmNuPg0KPiA+ID4gLS0tDQo+
ID4gPiAgcWdhL2NvbW1hbmRzLXdpbjMyLmMgfCAzMSArKysrKysrKysrKysrKysrKystLS0tLS0t
LS0tLS0tDQo+ID4gPiAgMSBmaWxlIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDEzIGRlbGV0
aW9ucygtKQ0KPiA+ID4gDQo+ID4gPiBkaWZmIC0tZ2l0IGEvcWdhL2NvbW1hbmRzLXdpbjMyLmMg
Yi9xZ2EvY29tbWFuZHMtd2luMzIuYw0KPiA+ID4gaW5kZXggMDMyMjE4OC4uZDA5NmRjMiAxMDA2
NDQNCj4gPiA+IC0tLSBhL3FnYS9jb21tYW5kcy13aW4zMi5jDQo+ID4gPiArKysgYi9xZ2EvY29t
bWFuZHMtd2luMzIuYw0KPiA+ID4gQEAgLTExNzMsMjAgKzExNzMsMjUgQEAgc3RhdGljIGludCBn
dWVzdF9nZXRfbmV0d29ya19zdGF0cw0KPiAoY29uc3QgY2hhciAqbmFtZSwNCj4gPiA+ICAgICAg
ICAgICAgICAgICAgICAgICAgIEd1ZXN0TmV0d29ya0ludGVyZmFjZVN0YXQgKnN0YXRzKQ0KPiA+
ID4gIHsNCj4gPiA+ICAgICAgRFdPUkQgaWZfaW5kZXggPSAwOw0KPiA+ID4gLSAgICBNSUJfSUZS
T1cgYV9taWRfaWZyb3c7DQo+ID4gPiAtICAgIG1lbXNldCgmYV9taWRfaWZyb3csIDAsIHNpemVv
ZihhX21pZF9pZnJvdykpOw0KPiA+ID4gKyAgICBPU1ZFUlNJT05JTkZPIE9TdmVyOw0KPiA+ID4g
ICAgICBpZl9pbmRleCA9IGdldF9pbnRlcmZhY2VfaW5kZXgobmFtZSk7DQo+ID4gPiAtICAgIGFf
bWlkX2lmcm93LmR3SW5kZXggPSBpZl9pbmRleDsNCj4gPiA+IC0gICAgaWYgKE5PX0VSUk9SID09
IEdldElmRW50cnkoJmFfbWlkX2lmcm93KSkgew0KPiA+ID4gLSAgICAgICAgc3RhdHMtPnJ4X2J5
dGVzID0gYV9taWRfaWZyb3cuZHdJbk9jdGV0czsNCj4gPiA+IC0gICAgICAgIHN0YXRzLT5yeF9w
YWNrZXRzID0gYV9taWRfaWZyb3cuZHdJblVjYXN0UGt0czsNCj4gPiA+IC0gICAgICAgIHN0YXRz
LT5yeF9lcnJzID0gYV9taWRfaWZyb3cuZHdJbkVycm9yczsNCj4gPiA+IC0gICAgICAgIHN0YXRz
LT5yeF9kcm9wcGVkID0gYV9taWRfaWZyb3cuZHdJbkRpc2NhcmRzOw0KPiA+ID4gLSAgICAgICAg
c3RhdHMtPnR4X2J5dGVzID0gYV9taWRfaWZyb3cuZHdPdXRPY3RldHM7DQo+ID4gPiAtICAgICAg
ICBzdGF0cy0+dHhfcGFja2V0cyA9IGFfbWlkX2lmcm93LmR3T3V0VWNhc3RQa3RzOw0KPiA+ID4g
LSAgICAgICAgc3RhdHMtPnR4X2VycnMgPSBhX21pZF9pZnJvdy5kd091dEVycm9yczsNCj4gPiA+
IC0gICAgICAgIHN0YXRzLT50eF9kcm9wcGVkID0gYV9taWRfaWZyb3cuZHdPdXREaXNjYXJkczsN
Cj4gPiA+IC0gICAgICAgIHJldHVybiAwOw0KPiA+ID4gKyAgICBPU3Zlci5kd09TVmVyc2lvbklu
Zm9TaXplID0gc2l6ZW9mKE9TVkVSU0lPTklORk8pOw0KPiA+ID4gKyAgICBHZXRWZXJzaW9uRXgo
Jk9TdmVyKTsNCj4gPiA+ICsgICAgaWYgKE9TdmVyLmR3TWFqb3JWZXJzaW9uID49IDYpIHsNCj4g
PiA+ICsgICAgICAgIE1JQl9JRl9ST1cyIGFfbWlkX2lmcm93Ow0KPiA+ID4gKyAgICAgICAgbWVt
c2V0KCZhX21pZF9pZnJvdywgMCwgc2l6ZW9mKGFfbWlkX2lmcm93KSk7DQo+ID4gPiArICAgICAg
ICBhX21pZF9pZnJvdy5kd0luZGV4ID0gaWZfaW5kZXg7DQo+ID4gPiArICAgICAgICBpZiAoTk9f
RVJST1IgPT0gR2V0SWZFbnRyeTIoJmFfbWlkX2lmcm93KSkgew0KPiA+ID4gKyAgICAgICAgICAg
IHN0YXRzLT5yeF9ieXRlcyA9IGFfbWlkX2lmcm93LmR3SW5PY3RldHM7DQo+ID4gPiArICAgICAg
ICAgICAgc3RhdHMtPnJ4X3BhY2tldHMgPSBhX21pZF9pZnJvdy5kd0luVWNhc3RQa3RzOw0KPiA+
ID4gKyAgICAgICAgICAgIHN0YXRzLT5yeF9lcnJzID0gYV9taWRfaWZyb3cuZHdJbkVycm9yczsN
Cj4gPiA+ICsgICAgICAgICAgICBzdGF0cy0+cnhfZHJvcHBlZCA9IGFfbWlkX2lmcm93LmR3SW5E
aXNjYXJkczsNCj4gPiA+ICsgICAgICAgICAgICBzdGF0cy0+dHhfYnl0ZXMgPSBhX21pZF9pZnJv
dy5kd091dE9jdGV0czsNCj4gPiA+ICsgICAgICAgICAgICBzdGF0cy0+dHhfcGFja2V0cyA9IGFf
bWlkX2lmcm93LmR3T3V0VWNhc3RQa3RzOw0KPiA+ID4gKyAgICAgICAgICAgIHN0YXRzLT50eF9l
cnJzID0gYV9taWRfaWZyb3cuZHdPdXRFcnJvcnM7DQo+ID4gPiArICAgICAgICAgICAgc3RhdHMt
PnR4X2Ryb3BwZWQgPSBhX21pZF9pZnJvdy5kd091dERpc2NhcmRzOw0KPiA+ID4gKyAgICAgICAg
ICAgIHJldHVybiAwOw0KPiA+IA0KPiA+IFRoaXMgZmFpbHMgdG8gYnVpbGQgaW4gbXkgZmMyMCBt
aW5ndzY0IGVudmlyb25tZW50Og0KPiA+IA0KPiA+IC9ob21lL21kcm90aC93L3FlbXU0LmdpdC9x
Z2EvDQo+ID4gY29tbWFuZHMtd2luMzIuYzoxMTg0OjIwOiBlcnJvcjogJ01JQl9JRl9ST1cyJyBo
YXMgbm8gbWVtYmVyIG5hbWVkICdkd0luZGV4Jw0KPiA+ICAgICAgICAgIGFfbWlkX2lmcm93LmR3
SW5kZXggPSBpZl9pbmRleDsNCj4gPiAgICAgICAgICAgICAgICAgICAgIF4NCj4gPiAvaG9tZS9t
ZHJvdGgvdy9xZW11NC5naXQvcWdhLw0KPiA+DQo+ICBjb21tYW5kcy13aW4zMi5jOjExODY6NDI6
IGVycm9yOiAnTUlCX0lGX1JPVzInIGhhcyBubyBtZW1iZXIgbmFtZWQgJ2R3SW5PY3RldHMnDQo+
ID4gICAgICAgICAgICAgIHN0YXRzLT5yeF9ieXRlcyA9IGFfbWlkX2lmcm93LmR3SW5PY3RldHM7
DQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXg0KPiA+IC9o
b21lL21kcm90aC93L3FlbXU0LmdpdC9xZ2EvDQo+ID4NCj4gIGNvbW1hbmRzLXdpbjMyLmM6MTE4
Nzo0NDogZXJyb3I6ICdNSUJfSUZfUk9XMicgaGFzIG5vIG1lbWJlciBuYW1lZCAnZHdJblVjYXN0
UGt0cycNCj4gPiAgICAgICAgICAgICAgc3RhdHMtPnJ4X3BhY2tldHMgPSBhX21pZF9pZnJvdy5k
d0luVWNhc3RQa3RzOw0KPiA+IA0KPiA+IGV0YyAuLi4NCj4gPiANCj4gPiBUaGUgcGF0Y2ggc2Vl
bXMgdG8gYXNzdW1lIE1JQl9JRlJPVyBhbmQgTUlCX0lGX1JPVzIgaGF2ZSB0aGUgc2FtZSBmaWVs
ZCBuYW1lcw0KPiA+IGZvciB0aGUgc3RhdHMsIGJ1dCBhY2NvcmRpbmcgdG8gdGhpcyB0aGV5J3Jl
IHNsaWdodGx5IGRpZmZlcmVudDoNCj4gPiANCj4gPiAgIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQu
Y29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhODE0NDkxKHY9DQo+ID4gdnMuODUp
LmFzcHgNCj4gPiANCj4gPiBUaGlzIGNoYW5nZSBvbiB0b3Agb2YgeW91ciBwYXRjaCBzZWVtcyB0
byB3b3JrOg0KPiA+IA0KPiA+IGRpZmYgLS1naXQgYS9xZ2EvY29tbWFuZHMtd2luMzIuYyBiL3Fn
YS9jb21tYW5kcy13aW4zMi5jDQo+ID4gaW5kZXggZTE3ZmMzYzI4NC4uNThlNDcwODc3ZiAxMDA2
NDQNCj4gPiAtLS0gYS9xZ2EvY29tbWFuZHMtd2luMzIuYw0KPiA+ICsrKyBiL3FnYS9jb21tYW5k
cy13aW4zMi5jDQo+ID4gQEAgLTExODEsMTYgKzExODEsMTYgQEAgc3RhdGljIGludCBndWVzdF9n
ZXRfbmV0d29ya19zdGF0cyhjb25zdCBjaGFyICpuYW1lLA0KPiA+ICAgICAgaWYgKG9zX3Zlci5k
d01ham9yVmVyc2lvbiA+PSA2KSB7DQo+ID4gICAgICAgICAgTUlCX0lGX1JPVzIgYV9taWRfaWZy
b3c7DQo+ID4gICAgICAgICAgbWVtc2V0KCZhX21pZF9pZnJvdywgMCwgc2l6ZW9mKGFfbWlkX2lm
cm93KSk7DQo+ID4gLSAgICAgICAgYV9taWRfaWZyb3cuZHdJbmRleCA9IGlmX2luZGV4Ow0KPiA+
ICsgICAgICAgIGFfbWlkX2lmcm93LkludGVyZmFjZUluZGV4ID0gaWZfaW5kZXg7DQo+ID4gICAg
ICAgICAgaWYgKE5PX0VSUk9SID09IEdldElmRW50cnkyKCZhX21pZF9pZnJvdykpIHsNCj4gPiAt
ICAgICAgICAgICAgc3RhdHMtPnJ4X2J5dGVzID0gYV9taWRfaWZyb3cuZHdJbk9jdGV0czsNCj4g
PiAtICAgICAgICAgICAgc3RhdHMtPnJ4X3BhY2tldHMgPSBhX21pZF9pZnJvdy5kd0luVWNhc3RQ
a3RzOw0KPiA+IC0gICAgICAgICAgICBzdGF0cy0+cnhfZXJycyA9IGFfbWlkX2lmcm93LmR3SW5F
cnJvcnM7DQo+ID4gLSAgICAgICAgICAgIHN0YXRzLT5yeF9kcm9wcGVkID0gYV9taWRfaWZyb3cu
ZHdJbkRpc2NhcmRzOw0KPiA+IC0gICAgICAgICAgICBzdGF0cy0+dHhfYnl0ZXMgPSBhX21pZF9p
ZnJvdy5kd091dE9jdGV0czsNCj4gPiAtICAgICAgICAgICAgc3RhdHMtPnR4X3BhY2tldHMgPSBh
X21pZF9pZnJvdy5kd091dFVjYXN0UGt0czsNCj4gPiAtICAgICAgICAgICAgc3RhdHMtPnR4X2Vy
cnMgPSBhX21pZF9pZnJvdy5kd091dEVycm9yczsNCj4gPiAtICAgICAgICAgICAgc3RhdHMtPnR4
X2Ryb3BwZWQgPSBhX21pZF9pZnJvdy5kd091dERpc2NhcmRzOw0KPiA+ICsgICAgICAgICAgICBz
dGF0cy0+cnhfYnl0ZXMgPSBhX21pZF9pZnJvdy5Jbk9jdGV0czsNCj4gPiArICAgICAgICAgICAg
c3RhdHMtPnJ4X3BhY2tldHMgPSBhX21pZF9pZnJvdy5JblVjYXN0UGt0czsNCj4gPiArICAgICAg
ICAgICAgc3RhdHMtPnJ4X2VycnMgPSBhX21pZF9pZnJvdy5JbkVycm9yczsNCj4gPiArICAgICAg
ICAgICAgc3RhdHMtPnJ4X2Ryb3BwZWQgPSBhX21pZF9pZnJvdy5JbkRpc2NhcmRzOw0KPiA+ICsg
ICAgICAgICAgICBzdGF0cy0+dHhfYnl0ZXMgPSBhX21pZF9pZnJvdy5PdXRPY3RldHM7DQo+ID4g
KyAgICAgICAgICAgIHN0YXRzLT50eF9wYWNrZXRzID0gYV9taWRfaWZyb3cuT3V0VWNhc3RQa3Rz
Ow0KPiA+ICsgICAgICAgICAgICBzdGF0cy0+dHhfZXJycyA9IGFfbWlkX2lmcm93Lk91dEVycm9y
czsNCj4gPiArICAgICAgICAgICAgc3RhdHMtPnR4X2Ryb3BwZWQgPSBhX21pZF9pZnJvdy5PdXRE
aXNjYXJkczsNCj4gPiAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gICAgICAgICAgfQ0KPiA+
ICAgICAgfQ0KPiA+IA0KPiA+IEkgaGF2ZSB0aGUgbW9kaWZpZWQgcGF0Y2ggc3RhZ2VkIGhlcmU6
DQo+ID4gDQo+ID4gICBodHRwczovL2dpdGh1Yi5jb20vbWRyb3RoL3FlbXUvY29tbWl0Lw0KPiA+
IGRlNTk3YThiMjc3MjJjZTRmOWNjNjYwZjkzMGY3ZGNjYzcxMjcxMmQNCj4gPiANCj4gPiBMZXQg
bWUga25vdyBpZiBpdCBsb29rcyBva2F5IGFuZCBJJ2xsIHNlbmQgYSBwdWxsIHJlcXVlc3QgZm9y
IHJjMQ0KPiA+IA0KPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gICAgICB9DQo+ID4gPiAgICAgIHJl
dHVybiAtMTsNCj4gPiA+ICB9DQo+ID4gPiAtLSANCj4gPiA+IDEuOC4zLjENCj4gPiA+IA0KPiA+
IA0KPiA+IA0KPiANCj4=
Michael Roth Nov. 15, 2017, 2:22 a.m. UTC | #7
Quoting lu.zhipeng@zte.com.cn (2017-11-14 19:41:58)
> i used  xp  version:
> 
> xp professional 2002 service pack 3

Hmm, doesn't --cross-prefix=x86_64-w64-mingw32- result in a 64-bit
qemu-ga.exe? How are you running this on 32-bit Windows XP?

> 
> build environment: 
> 
> root@localhost qemu-2.5.0]# cat /etc/redhat-release 
> 
> CentOS Linux release 7.0.1406 (Core) 

Thanks, I'll try to see if there's anything there that would account for
the difference.

> 
> 
> 
> 
> 
> 
> 为了让您的VPlat虚拟机故障和docker故障得到高效的处理,请上报故障到: $VPlat技术支
> 持。
> 
> 芦志朋 luzhipeng
> 
> 
> IT开发工程师 IT Development Engineer
> 操作系统产品部/中心研究院/系统产品 OS Product Dept./Central R&D Institute/
> System Product
> 
> 
> [cid]          [cid]
>                四川省成都市天府大道中段800号
>                E: lu.zhipeng@zte.com.cn
>                www.zte.com.cn
> 
> 原始邮件
> 发件人: <mdroth@linux.vnet.ibm.com>;
> 收件人:芦志朋10108272;
> 抄送人: <qemu-devel@nongnu.org>;
> 日期:2017年11月15日 09:22
> 主题:Re: 答复: Re: 答复: Re: [PATCH v2] qga: replace GetIfEntry
> Quoting lu.zhipeng@zte.com.cn (2017-11-14 05:09:35)
> >  i test the latest qga in xp , it run ok .
> > 
> > 
> > my qga config :
> > 
> > Configured with: './configure' '--enable-guest-agent' '--cross-prefix=
> > x86_64-w64-mingw32-' '--with-vss-sdk=/home/VSSSDK72' '--disable-fdt'        
> > '--target-list=x86_64-softmmu'
> 
> Hmm, so you're testing with Windows XP x64? I was using XP 32-bit (SP3),
> but I retried with XP x64 (SP2) and I still have the same issue.
> 
> I can only get qemu-ga working if I build on top of something prior to
> commit 12f8def0e.
> 
> What build environment are you using? I've tried Fedora Core 18 and 20
> and have the same issue with both.
> 
> > 
> > used qga version info
> > 
> > [root@ceshi qemu]# git log
> > 
> > commit 533ab83ea074d5fc457769f6ac698524a12f1156
> > 
> > Author: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> > 
> > Date:   Fri Nov 10 10:17:14 2017 +0800
> > 
> > 
> >     qga: fix some errors for guest_get_network_stats
> > 
> >     
> > 
> >     fix some erros:
> > 
> >     1.if building qga on Windows Vista/2008 and newer,
> > 
> >     it cann't find the link to GetIfEntry2 in windows xp.
> > 
> >     2. check valid of if_index.
> > 
> >     
> > 
> >     Signed-off-by: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> > 
> > 
> > commit de597a8b27722ce4f9cc660f930f7dccc712712d
> > 
> > Author: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> > 
> > Date:   Fri Nov 3 22:54:20 2017 +0800
> > 
> > 
> >     qga: replace GetIfEntry
> > 
> >     
> > 
> >
>      The data obtained by GetIfEntry is 32 bits, and it may overflow. Thus using
> > GetIfEntry2 instead of GetIfEntry.
> > 
> >     
> > 
> >     Signed-off-by: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> > 
> >     *avoid CamelCase variable names
> > 
> >     *update field names for MIB_IFROW -> MIB_IF_ROW2
> > 
> >     Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
> > 
> > 
> > commit 5ca7a3cba468736cfe555887af1f6ba754f6eac9
> > 
> > Merge: a4f0537 10a7b7e
> > 
> > Author: Peter Maydell <peter.maydell@linaro.org>
> > 
> > Date:   Tue Nov 7 14:43:35 2017 +0000
> > 
> > 
> >     Merge remote-tracking branch 'remotes/berrange/tags/
> pull-2017-11-06-2' into
> > staging
> > 
> >     
> > 
> >     Pull IO 2017/11/06 v2
> > 
> > 
> > 
> > 
> > 为了让您的VPlat虚拟机故障和docker故障得到高效的处理,请上报故障到: $VPlat技术
> 支
> > 持。
> > 
> > 芦志朋 luzhipeng
> > 
> > 
> > IT开发工程师 IT Development Engineer
> > 操作系统产品部/中心研究院/系统产品 OS Product Dept./Central R&D Institute/
> > System Product
> > 
> > 
> > [cid]          [cid]
> >                四川省成都市天府大道中段800号
> >                E: lu.zhipeng@zte.com.cn
> >                www.zte.com.cn
> > 
> > 原始邮件
> > 发件人: <mdroth@linux.vnet.ibm.com>;
> > 收件人:芦志朋10108272;
> > 抄送人: <qemu-devel@nongnu.org>;
> > 日期:2017年11月14日 07:57
> > 主题:Re: 答复: Re: [PATCH v2] qga: replace GetIfEntry
> > Quoting lu.zhipeng@zte.com.cn (2017-11-09 05:26:15)
> > >  i think the code is better
> > > 
> > >  if (OSver.dwMajorVersion >= 6) {
> > >       MIB_IF_ROW2 aMib_ifrow;
> > >       typedef NETIOAPI_API (WINAPI *getifentry2_t)(PMIB_IF_ROW2 Row);
> > >       memset(&aMib_ifrow, 0, sizeof(aMib_ifrow));
> > >       aMib_ifrow.InterfaceIndex = nicId;
> > >       HMODULE module = GetModuleHandle("iphlpapi");
> > >       PVOID fun = GetProcAddress(module, "GetIfEntry2");
> > >       if (fun == NULL) {
> > >           error_setg(errp, QERR_QGA_COMMAND_FAILED,
> > >                      "Failed to get address of GetIfEntry2");
> > >           return NULL;
> > >       }
> > >     getifentry2_t getifentry2_ex = (getifentry2_t)fun;
> > >     if (NO_ERROR == getifentry2_ex(&aMib_ifrow)){
> > >     }
> > 
> > I've updated the patch with this change:
> >   https://github.com/mdroth/qemu/commits/qga-if-stats
> > 
> > But I'm a bit confused now: when I tried to test this on XP I realized that
> > that qemu-ga no longer works on XP, and generates the following error
> > when I try to start it (even without your stats patch):
> > 
> >   "The procedure entry point AcquireSRWLockExclusive could not be located
> >    in the dynamic link library KERNEL32.dll"
> > 
> > I think this may be due to the following commit, which notes that Vista+
> > are now required as a result:
> > 
> > commit 12f8def0e02232d7c6416ad9b66640f973c531d1
> > Author: Andrey Shedel <ashedel@microsoft.com>
> > Date:   Fri Mar 24 15:01:41 2017 -0700
> > 
> >     win32: replace custom mutex and condition variable with native
> >     primitives
> > 
> > So, are you actually able to run on XP currently? If so, how? And if
> > not, I think we have other issues that need to be addressed if we
> > want to support XP still; I'm not even sure that's realistic at this
> > point.
> > 
> > Unless there's actually a way to test QGA on XP right now I think I
> > we should just get in the updated patch minus the dynamic DLL stuff,
> > i.e.:
> >   https://github.com/mdroth/qemu/commit/
> > de597a8b27722ce4f9cc660f930f7dccc712712d
> > 
> > Make sense?
> > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 为了让您的VPlat虚拟机故障和docker故障得到高效的处理,请上报故障到: $VPlat技
> 术
> > 支
> > > 持。
> > > 
> > > 芦志朋 luzhipeng
> > > 
> > > 
> > > IT开发工程师 IT Development Engineer
> > > 操作系统产品部/中心研究院/系统产品 OS Product Dept./Central R&D Institute/
> > > System Product
> > > 
> > > 
> > > [cid]          [cid]
> > >                四川省成都市天府大道中段800号
> > >                E: lu.zhipeng@zte.com.cn
> > >                www.zte.com.cn
> > > 
> > > 原始邮件
> > > 发件人:芦志朋10108272
> > > 收件人: <mdroth@linux.vnet.ibm.com>;
> > > 抄送人: <qemu-devel@nongnu.org>;
> > > 日期:2017年11月08日 10:54
> > > 主题:答复: Re: [PATCH v2] qga: replace GetIfEntry
> > > 
> > > 
> > > >I have the modified patch staged here:
> > > 
> > > >  https://github.com/mdroth/qemu/commit/
> > > de597a8b27722ce4f9cc660f930f7dccc712712d
> > > >Let me know if it looks okay and I'll send a pull request for rc1
> > > 
> > >  
> > > 
> > >
> >
>   the code right, but running QGA on the Windows XP, error: can not find the link
> > > to  GetIfEntry2 in iphlpapi.DLL.
> > > 
> > > 
> > > 
> > > 
> > > 为了让您的VPlat虚拟机故障和docker故障得到高效的处理,请上报故障到: $VPlat技
> 术
> > 支
> > > 持。
> > > 
> > > 芦志朋 luzhipeng
> > > 
> > > 
> > > IT开发工程师 IT Development Engineer
> > > 操作系统产品部/中心研究院/系统产品 OS Product Dept./Central R&D Institute/
> > > System Product
> > > 
> > > 
> > > [cid]          [cid]
> > >                四川省成都市天府大道中段800号
> > >                E: lu.zhipeng@zte.com.cn
> > >                www.zte.com.cn
> > > 
> > > 
> > > 发件人: <mdroth@linux.vnet.ibm.com>;
> > > 收件人:芦志朋10108272;
> > > 抄送人: <qemu-devel@nongnu.org>;芦志朋10108272;
> > > 日期:2017年11月08日 01:07
> > > 主题:Re: [PATCH v2] qga: replace GetIfEntry
> > > 
> > > 
> > > Quoting ZhiPeng Lu (2017-11-03 09:54:20)
> > > >
> > >
> >
>    The data obtained by GetIfEntry is 32 bits, and it may overflow. Thus using GetIfEntry2 instead of GetIfEntry.
> > > > 
> > > > Signed-off-by: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> > > > ---
> > > >  qga/commands-win32.c | 31 ++++++++++++++++++-------------
> > > >  1 file changed, 18 insertions(+), 13 deletions(-)
> > > > 
> > > > diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> > > > index 0322188..d096dc2 100644
> > > > --- a/qga/commands-win32.c
> > > > +++ b/qga/commands-win32.c
> > > > @@ -1173,20 +1173,25 @@ static int guest_get_network_stats
> > (const char *name,
> > > >                         GuestNetworkInterfaceStat *stats)
> > > >  {
> > > >      DWORD if_index = 0;
> > > > -    MIB_IFROW a_mid_ifrow;
> > > > -    memset(&a_mid_ifrow, 0, sizeof(a_mid_ifrow));
> > > > +    OSVERSIONINFO OSver;
> > > >      if_index = get_interface_index(name);
> > > > -    a_mid_ifrow.dwIndex = if_index;
> > > > -    if (NO_ERROR == GetIfEntry(&a_mid_ifrow)) {
> > > > -        stats->rx_bytes = a_mid_ifrow.dwInOctets;
> > > > -        stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> > > > -        stats->rx_errs = a_mid_ifrow.dwInErrors;
> > > > -        stats->rx_dropped = a_mid_ifrow.dwInDiscards;
> > > > -        stats->tx_bytes = a_mid_ifrow.dwOutOctets;
> > > > -        stats->tx_packets = a_mid_ifrow.dwOutUcastPkts;
> > > > -        stats->tx_errs = a_mid_ifrow.dwOutErrors;
> > > > -        stats->tx_dropped = a_mid_ifrow.dwOutDiscards;
> > > > -        return 0;
> > > > +    OSver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
> > > > +    GetVersionEx(&OSver);
> > > > +    if (OSver.dwMajorVersion >= 6) {
> > > > +        MIB_IF_ROW2 a_mid_ifrow;
> > > > +        memset(&a_mid_ifrow, 0, sizeof(a_mid_ifrow));
> > > > +        a_mid_ifrow.dwIndex = if_index;
> > > > +        if (NO_ERROR == GetIfEntry2(&a_mid_ifrow)) {
> > > > +            stats->rx_bytes = a_mid_ifrow.dwInOctets;
> > > > +            stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> > > > +            stats->rx_errs = a_mid_ifrow.dwInErrors;
> > > > +            stats->rx_dropped = a_mid_ifrow.dwInDiscards;
> > > > +            stats->tx_bytes = a_mid_ifrow.dwOutOctets;
> > > > +            stats->tx_packets = a_mid_ifrow.dwOutUcastPkts;
> > > > +            stats->tx_errs = a_mid_ifrow.dwOutErrors;
> > > > +            stats->tx_dropped = a_mid_ifrow.dwOutDiscards;
> > > > +            return 0;
> > > 
> > > This fails to build in my fc20 mingw64 environment:
> > > 
> > > /home/mdroth/w/qemu4.git/qga/
> > >
>  commands-win32.c:1184:20: error: 'MIB_IF_ROW2' has no member named 'dwIndex'
> > >          a_mid_ifrow.dwIndex = if_index;
> > >                     ^
> > > /home/mdroth/w/qemu4.git/qga/
> > >
> >
>   commands-win32.c:1186:42: error: 'MIB_IF_ROW2' has no member named 'dwInOctets'
> > >              stats->rx_bytes = a_mid_ifrow.dwInOctets;
> > >                                           ^
> > > /home/mdroth/w/qemu4.git/qga/
> > >
> >
>   commands-win32.c:1187:44: error: 'MIB_IF_ROW2' has no member named 'dwInUcastPkts'
> > >              stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> > > 
> > > etc ...
> > > 
> > >
>  The patch seems to assume MIB_IFROW and MIB_IF_ROW2 have the same field names
> > > for the stats, but according to this they're slightly different:
> > > 
> > >   https://msdn.microsoft.com/en-us/library/windows/desktop/aa814491(v=
> > > vs.85).aspx
> > > 
> > > This change on top of your patch seems to work:
> > > 
> > > diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> > > index e17fc3c284..58e470877f 100644
> > > --- a/qga/commands-win32.c
> > > +++ b/qga/commands-win32.c
> > > @@ -1181,16 +1181,16 @@ static int guest_get_network_stats
> (const char *name,
> > >      if (os_ver.dwMajorVersion >= 6) {
> > >          MIB_IF_ROW2 a_mid_ifrow;
> > >          memset(&a_mid_ifrow, 0, sizeof(a_mid_ifrow));
> > > -        a_mid_ifrow.dwIndex = if_index;
> > > +        a_mid_ifrow.InterfaceIndex = if_index;
> > >          if (NO_ERROR == GetIfEntry2(&a_mid_ifrow)) {
> > > -            stats->rx_bytes = a_mid_ifrow.dwInOctets;
> > > -            stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> > > -            stats->rx_errs = a_mid_ifrow.dwInErrors;
> > > -            stats->rx_dropped = a_mid_ifrow.dwInDiscards;
> > > -            stats->tx_bytes = a_mid_ifrow.dwOutOctets;
> > > -            stats->tx_packets = a_mid_ifrow.dwOutUcastPkts;
> > > -            stats->tx_errs = a_mid_ifrow.dwOutErrors;
> > > -            stats->tx_dropped = a_mid_ifrow.dwOutDiscards;
> > > +            stats->rx_bytes = a_mid_ifrow.InOctets;
> > > +            stats->rx_packets = a_mid_ifrow.InUcastPkts;
> > > +            stats->rx_errs = a_mid_ifrow.InErrors;
> > > +            stats->rx_dropped = a_mid_ifrow.InDiscards;
> > > +            stats->tx_bytes = a_mid_ifrow.OutOctets;
> > > +            stats->tx_packets = a_mid_ifrow.OutUcastPkts;
> > > +            stats->tx_errs = a_mid_ifrow.OutErrors;
> > > +            stats->tx_dropped = a_mid_ifrow.OutDiscards;
> > >              return 0;
> > >          }
> > >      }
> > > 
> > > I have the modified patch staged here:
> > > 
> > >   https://github.com/mdroth/qemu/commit/
> > > de597a8b27722ce4f9cc660f930f7dccc712712d
> > > 
> > > Let me know if it looks okay and I'll send a pull request for rc1
> > > 
> > > > +        }
> > > >      }
> > > >      return -1;
> > > >  }
> > > > -- 
> > > > 1.8.3.1
> > > > 
> > > 
> > > 
> > 
> > 
> 
>
ZhiPeng Lu Nov. 15, 2017, 2:48 a.m. UTC | #8
UXVvdGluZyBsdS56aGlwZW5nQHp0ZS5jb20uY24gKDIwMTctMTEtMTQgMTk6NDE6NTgpPiBpIHVz
ZWQgIHhwICB2ZXJzaW9uOj4gPiB4cCBwcm9mZXNzaW9uYWwgMjAwMiBzZXJ2aWNlIHBhY2sgMz5I
bW0sIGRvZXNuJ3QgLS1jcm9zcy1wcmVmaXg9eDg2XzY0LXc2NC1taW5ndzMyLSByZXN1bHQgaW4g
YSA2NC1iaXQ+IHFlbXUtZ2EuZXhlPyBIb3cgYXJlIHlvdSBydW5uaW5nIHRoaXMgb24gMzItYml0
IFdpbmRvd3MgWFA/DQoNCg0KDQoNCg0KDQppIGJ1aWxkIHR3byB2ZXJzaW9uIDozMmJpdCBhbmQg
NjQgYml0ICwgcnVuIDMyYml0IGluIHhwIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQoNCg0KDQoNCuS4uuS6huiuqeaCqOeahFZQbGF06Jma5ouf5py65pWF6Zqc5ZKMZG9j
a2Vy5pWF6Zqc5b6X5Yiw6auY5pWI55qE5aSE55CG77yM6K+35LiK5oql5pWF6Zqc5YiwOiAkVlBs
YXTmioDmnK/mlK/mjIHjgIINCg0KDQroiqblv5fmnIsgbHV6aGlwZW5nDQoNCg0KDQoNCg0KDQpJ
VOW8gOWPkeW3peeoi+W4iCBJVCBEZXZlbG9wbWVudApFbmdpbmVlcg0K5pON5L2c57O757uf5Lqn
5ZOB6YOoL+S4reW/g+eglOeptumZoi/ns7vnu5/kuqflk4EgT1MgUHJvZHVjdCBEZXB0Li9DZW50
cmFsIFLvvIZEIEluc3RpdHV0ZS9TeXN0ZW0gUHJvZHVjdA0KDQoNCg0KDQoNCg0KDQoNCg0K5Zub
5bed55yB5oiQ6YO95biC5aSp5bqc5aSn6YGT5Lit5q61ODAw5Y+3DQpFOiBsdS56aGlwZW5nQHp0
ZS5jb20uY24gDQp3d3cuenRlLmNvbS5jbg0KDQoNCg0KDQoNCg0KDQoNCg0KDQrljp/lp4vpgq7k
u7YNCg0KDQoNCuWPkeS7tuS6uu+8miA8bWRyb3RoQGxpbnV4LnZuZXQuaWJtLmNvbT47DQrmlLbk
u7bkurrvvJroiqblv5fmnIsxMDEwODI3MjsNCuaKhOmAgeS6uu+8miA8cWVtdS1kZXZlbEBub25n
bnUub3JnPjsNCuaXpSDmnJ8g77yaMjAxN+W5tDEx5pyIMTXml6UgMTA6MjMNCuS4uyDpopgg77ya
UmU6IOetlOWkjTogUmU6IOetlOWkjTogUmU6IOetlOWkjTogUmU6IFtQQVRDSCB2Ml0gcWdhOiBy
ZXBsYWNlIEdldElmRW50cnkNCg0KDQpRdW90aW5nIGx1LnpoaXBlbmdAenRlLmNvbS5jbiAoMjAx
Ny0xMS0xNCAxOTo0MTo1OCkNCj4gaSB1c2VkICB4cCAgdmVyc2lvbjoNCj4gDQo+IHhwIHByb2Zl
c3Npb25hbCAyMDAyIHNlcnZpY2UgcGFjayAzDQoNCkhtbSwgZG9lc24ndCAtLWNyb3NzLXByZWZp
eD14ODZfNjQtdzY0LW1pbmd3MzItIHJlc3VsdCBpbiBhIDY0LWJpdA0KcWVtdS1nYS5leGU/IEhv
dyBhcmUgeW91IHJ1bm5pbmcgdGhpcyBvbiAzMi1iaXQgV2luZG93cyBYUD8NCg0KPiANCj4gYnVp
bGQgZW52aXJvbm1lbnQ6IA0KPiANCj4gcm9vdEBsb2NhbGhvc3QgcWVtdS0yLjUuMF0jIGNhdCAv
ZXRjL3JlZGhhdC1yZWxlYXNlIA0KPiANCj4gQ2VudE9TIExpbnV4IHJlbGVhc2UgNy4wLjE0MDYg
KENvcmUpIA0KDQpUaGFua3MsIEknbGwgdHJ5IHRvIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIHRo
ZXJlIHRoYXQgd291bGQgYWNjb3VudCBmb3INCnRoZSBkaWZmZXJlbmNlLg0KDQo+IA0KPiANCj4g
DQo+IA0KPiANCj4gDQo+IOS4uuS6huiuqeaCqOeahFZQbGF06Jma5ouf5py65pWF6Zqc5ZKMZG9j
a2Vy5pWF6Zqc5b6X5Yiw6auY5pWI55qE5aSE55CG77yM6K+35LiK5oql5pWF6Zqc5YiwOiAkVlBs
YXTmioDmnK/mlK8NCj4g5oyB44CCDQo+IA0KPiDoiqblv5fmnIsgbHV6aGlwZW5nDQo+IA0KPiAN
Cj4gSVTlvIDlj5Hlt6XnqIvluIggSVQgRGV2ZWxvcG1lbnQgRW5naW5lZXINCj4g5pON5L2c57O7
57uf5Lqn5ZOB6YOoL+S4reW/g+eglOeptumZoi/ns7vnu5/kuqflk4EgT1MgUHJvZHVjdCBEZXB0
Li9DZW50cmFsIFLvvIZEIEluc3RpdHV0ZS8NCj4gU3lzdGVtIFByb2R1Y3QNCj4gDQo+IA0KPiBb
Y2lkXSAgICAgICAgICBbY2lkXQ0KPiAgICAgICAgICAgICAgICDlm5vlt53nnIHmiJDpg73luILl
pKnlupzlpKfpgZPkuK3mrrU4MDDlj7cNCj4gICAgICAgICAgICAgICAgRTogbHUuemhpcGVuZ0B6
dGUuY29tLmNuDQo+ICAgICAgICAgICAgICAgIHd3dy56dGUuY29tLmNuDQo+IA0KPiDljp/lp4vp
gq7ku7YNCj4g5Y+R5Lu25Lq677yaIDxtZHJvdGhAbGludXgudm5ldC5pYm0uY29tPjsNCj4g5pS2
5Lu25Lq677ya6Iqm5b+X5pyLMTAxMDgyNzI7DQo+IOaKhOmAgeS6uu+8miA8cWVtdS1kZXZlbEBu
b25nbnUub3JnPjsNCj4g5pel5pyf77yaMjAxN+W5tDEx5pyIMTXml6UgMDk6MjINCj4g5Li76aKY
77yaUmU6IOetlOWkjTogUmU6IOetlOWkjTogUmU6IFtQQVRDSCB2Ml0gcWdhOiByZXBsYWNlIEdl
dElmRW50cnkNCj4gUXVvdGluZyBsdS56aGlwZW5nQHp0ZS5jb20uY24gKDIwMTctMTEtMTQgMDU6
MDk6MzUpDQo+ID4gIGkgdGVzdCB0aGUgbGF0ZXN0IHFnYSBpbiB4cCAsIGl0IHJ1biBvayAuDQo+
ID4gDQo+ID4gDQo+ID4gbXkgcWdhIGNvbmZpZyA6DQo+ID4gDQo+ID4gQ29uZmlndXJlZCB3aXRo
OiAnLi9jb25maWd1cmUnICctLWVuYWJsZS1ndWVzdC1hZ2VudCcgJy0tY3Jvc3MtcHJlZml4PQ0K
PiA+IHg4Nl82NC13NjQtbWluZ3czMi0nICctLXdpdGgtdnNzLXNkaz0vaG9tZS9WU1NTREs3Micg
Jy0tZGlzYWJsZS1mZHQnICAgICAgICANCj4gPiAnLS10YXJnZXQtbGlzdD14ODZfNjQtc29mdG1t
dScNCj4gDQo+IEhtbSwgc28geW91J3JlIHRlc3Rpbmcgd2l0aCBXaW5kb3dzIFhQIHg2ND8gSSB3
YXMgdXNpbmcgWFAgMzItYml0IChTUDMpLA0KPiBidXQgSSByZXRyaWVkIHdpdGggWFAgeDY0IChT
UDIpIGFuZCBJIHN0aWxsIGhhdmUgdGhlIHNhbWUgaXNzdWUuDQo+IA0KPiBJIGNhbiBvbmx5IGdl
dCBxZW11LWdhIHdvcmtpbmcgaWYgSSBidWlsZCBvbiB0b3Agb2Ygc29tZXRoaW5nIHByaW9yIHRv
DQo+IGNvbW1pdCAxMmY4ZGVmMGUuDQo+IA0KPiBXaGF0IGJ1aWxkIGVudmlyb25tZW50IGFyZSB5
b3UgdXNpbmc/IEkndmUgdHJpZWQgRmVkb3JhIENvcmUgMTggYW5kIDIwDQo+IGFuZCBoYXZlIHRo
ZSBzYW1lIGlzc3VlIHdpdGggYm90aC4NCj4gDQo+ID4gDQo+ID4gdXNlZCBxZ2EgdmVyc2lvbiBp
bmZvDQo+ID4gDQo+ID4gW3Jvb3RAY2VzaGkgcWVtdV0jIGdpdCBsb2cNCj4gPiANCj4gPiBjb21t
aXQgNTMzYWI4M2VhMDc0ZDVmYzQ1Nzc2OWY2YWM2OTg1MjRhMTJmMTE1Ng0KPiA+IA0KPiA+IEF1
dGhvcjogWmhpUGVuZyBMdSA8bHUuemhpcGVuZ0B6dGUuY29tLmNuPg0KPiA+IA0KPiA+IERhdGU6
ICAgRnJpIE5vdiAxMCAxMDoxNzoxNCAyMDE3ICswODAwDQo+ID4gDQo+ID4gDQo+ID4gICAgIHFn
YTogZml4IHNvbWUgZXJyb3JzIGZvciBndWVzdF9nZXRfbmV0d29ya19zdGF0cw0KPiA+IA0KPiA+
ICAgICANCj4gPiANCj4gPiAgICAgZml4IHNvbWUgZXJyb3M6DQo+ID4gDQo+ID4gICAgIDEuaWYg
YnVpbGRpbmcgcWdhIG9uIFdpbmRvd3MgVmlzdGEvMjAwOCBhbmQgbmV3ZXIsDQo+ID4gDQo+ID4g
ICAgIGl0IGNhbm4ndCBmaW5kIHRoZSBsaW5rIHRvIEdldElmRW50cnkyIGluIHdpbmRvd3MgeHAu
DQo+ID4gDQo+ID4gICAgIDIuIGNoZWNrIHZhbGlkIG9mIGlmX2luZGV4Lg0KPiA+IA0KPiA+ICAg
ICANCj4gPiANCj4gPiAgICAgU2lnbmVkLW9mZi1ieTogWmhpUGVuZyBMdSA8bHUuemhpcGVuZ0B6
dGUuY29tLmNuPg0KPiA+IA0KPiA+IA0KPiA+IGNvbW1pdCBkZTU5N2E4YjI3NzIyY2U0ZjljYzY2
MGY5MzBmN2RjY2M3MTI3MTJkDQo+ID4gDQo+ID4gQXV0aG9yOiBaaGlQZW5nIEx1IDxsdS56aGlw
ZW5nQHp0ZS5jb20uY24+DQo+ID4gDQo+ID4gRGF0ZTogICBGcmkgTm92IDMgMjI6NTQ6MjAgMjAx
NyArMDgwMA0KPiA+IA0KPiA+IA0KPiA+ICAgICBxZ2E6IHJlcGxhY2UgR2V0SWZFbnRyeQ0KPiA+
IA0KPiA+ICAgICANCj4gPiANCj4gPg0KPiAgICAgIFRoZSBkYXRhIG9idGFpbmVkIGJ5IEdldElm
RW50cnkgaXMgMzIgYml0cywgYW5kIGl0IG1heSBvdmVyZmxvdy4gVGh1cyB1c2luZw0KPiA+IEdl
dElmRW50cnkyIGluc3RlYWQgb2YgR2V0SWZFbnRyeS4NCj4gPiANCj4gPiAgICAgDQo+ID4gDQo+
ID4gICAgIFNpZ25lZC1vZmYtYnk6IFpoaVBlbmcgTHUgPGx1LnpoaXBlbmdAenRlLmNvbS5jbj4N
Cj4gPiANCj4gPiAgICAgKmF2b2lkIENhbWVsQ2FzZSB2YXJpYWJsZSBuYW1lcw0KPiA+IA0KPiA+
ICAgICAqdXBkYXRlIGZpZWxkIG5hbWVzIGZvciBNSUJfSUZST1cgLT4gTUlCX0lGX1JPVzINCj4g
PiANCj4gPiAgICAgU2lnbmVkLW9mZi1ieTogTWljaGFlbCBSb3RoIDxtZHJvdGhAbGludXgudm5l
dC5pYm0uY29tPg0KPiA+IA0KPiA+IA0KPiA+IGNvbW1pdCA1Y2E3YTNjYmE0Njg3MzZjZmU1NTU4
ODdhZjFmNmJhNzU0ZjZlYWM5DQo+ID4gDQo+ID4gTWVyZ2U6IGE0ZjA1MzcgMTBhN2I3ZQ0KPiA+
IA0KPiA+IEF1dGhvcjogUGV0ZXIgTWF5ZGVsbCA8cGV0ZXIubWF5ZGVsbEBsaW5hcm8ub3JnPg0K
PiA+IA0KPiA+IERhdGU6ICAgVHVlIE5vdiA3IDE0OjQzOjM1IDIwMTcgKzAwMDANCj4gPiANCj4g
PiANCj4gPiAgICAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAncmVtb3Rlcy9iZXJyYW5n
ZS90YWdzLw0KPiBwdWxsLTIwMTctMTEtMDYtMicgaW50bw0KPiA+IHN0YWdpbmcNCj4gPiANCj4g
PiAgICAgDQo+ID4gDQo+ID4gICAgIFB1bGwgSU8gMjAxNy8xMS8wNiB2Mg0KPiA+IA0KPiA+IA0K
PiA+IA0KPiA+IA0KPiA+IOS4uuS6huiuqeaCqOeahFZQbGF06Jma5ouf5py65pWF6Zqc5ZKMZG9j
a2Vy5pWF6Zqc5b6X5Yiw6auY5pWI55qE5aSE55CG77yM6K+35LiK5oql5pWF6Zqc5YiwOiAkVlBs
YXTmioDmnK8NCj4g5pSvDQo+ID4g5oyB44CCDQo+ID4gDQo+ID4g6Iqm5b+X5pyLIGx1emhpcGVu
Zw0KPiA+IA0KPiA+IA0KPiA+IElU5byA5Y+R5bel56iL5biIIElUIERldmVsb3BtZW50IEVuZ2lu
ZWVyDQo+ID4g5pON5L2c57O757uf5Lqn5ZOB6YOoL+S4reW/g+eglOeptumZoi/ns7vnu5/kuqfl
k4EgT1MgUHJvZHVjdCBEZXB0Li9DZW50cmFsIFLvvIZEIEluc3RpdHV0ZS8NCj4gPiBTeXN0ZW0g
UHJvZHVjdA0KPiA+IA0KPiA+IA0KPiA+IFtjaWRdICAgICAgICAgIFtjaWRdDQo+ID4gICAgICAg
ICAgICAgICAg5Zub5bed55yB5oiQ6YO95biC5aSp5bqc5aSn6YGT5Lit5q61ODAw5Y+3DQo+ID4g
ICAgICAgICAgICAgICAgRTogbHUuemhpcGVuZ0B6dGUuY29tLmNuDQo+ID4gICAgICAgICAgICAg
ICAgd3d3Lnp0ZS5jb20uY24NCj4gPiANCj4gPiDljp/lp4vpgq7ku7YNCj4gPiDlj5Hku7bkurrv
vJogPG1kcm90aEBsaW51eC52bmV0LmlibS5jb20+Ow0KPiA+IOaUtuS7tuS6uu+8muiKpuW/l+ac
izEwMTA4MjcyOw0KPiA+IOaKhOmAgeS6uu+8miA8cWVtdS1kZXZlbEBub25nbnUub3JnPjsNCj4g
PiDml6XmnJ/vvJoyMDE35bm0MTHmnIgxNOaXpSAwNzo1Nw0KPiA+IOS4u+mimO+8mlJlOiDnrZTl
pI06IFJlOiBbUEFUQ0ggdjJdIHFnYTogcmVwbGFjZSBHZXRJZkVudHJ5DQo+ID4gUXVvdGluZyBs
dS56aGlwZW5nQHp0ZS5jb20uY24gKDIwMTctMTEtMDkgMDU6MjY6MTUpDQo+ID4gPiAgaSB0aGlu
ayB0aGUgY29kZSBpcyBiZXR0ZXINCj4gPiA+IA0KPiA+ID4gIGlmIChPU3Zlci5kd01ham9yVmVy
c2lvbiA+PSA2KSB7DQo+ID4gPiAgICAgICBNSUJfSUZfUk9XMiBhTWliX2lmcm93Ow0KPiA+ID4g
ICAgICAgdHlwZWRlZiBORVRJT0FQSV9BUEkgKFdJTkFQSSAqZ2V0aWZlbnRyeTJfdCkoUE1JQl9J
Rl9ST1cyIFJvdyk7DQo+ID4gPiAgICAgICBtZW1zZXQoJmFNaWJfaWZyb3csIDAsIHNpemVvZihh
TWliX2lmcm93KSk7DQo+ID4gPiAgICAgICBhTWliX2lmcm93LkludGVyZmFjZUluZGV4ID0gbmlj
SWQ7DQo+ID4gPiAgICAgICBITU9EVUxFIG1vZHVsZSA9IEdldE1vZHVsZUhhbmRsZSgiaXBobHBh
cGkiKTsNCj4gPiA+ICAgICAgIFBWT0lEIGZ1biA9IEdldFByb2NBZGRyZXNzKG1vZHVsZSwgIkdl
dElmRW50cnkyIik7DQo+ID4gPiAgICAgICBpZiAoZnVuID09IE5VTEwpIHsNCj4gPiA+ICAgICAg
ICAgICBlcnJvcl9zZXRnKGVycnAsIFFFUlJfUUdBX0NPTU1BTkRfRkFJTEVELA0KPiA+ID4gICAg
ICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBnZXQgYWRkcmVzcyBvZiBHZXRJZkVudHJ5MiIp
Ow0KPiA+ID4gICAgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ID4gICAgICAgfQ0KPiA+ID4gICAg
IGdldGlmZW50cnkyX3QgZ2V0aWZlbnRyeTJfZXggPSAoZ2V0aWZlbnRyeTJfdClmdW47DQo+ID4g
PiAgICAgaWYgKE5PX0VSUk9SID09IGdldGlmZW50cnkyX2V4KCZhTWliX2lmcm93KSl7DQo+ID4g
PiAgICAgfQ0KPiA+IA0KPiA+IEkndmUgdXBkYXRlZCB0aGUgcGF0Y2ggd2l0aCB0aGlzIGNoYW5n
ZToNCj4gPiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tZHJvdGgvcWVtdS9jb21taXRzL3FnYS1pZi1z
dGF0cw0KPiA+IA0KPiA+IEJ1dCBJJ20gYSBiaXQgY29uZnVzZWQgbm93OiB3aGVuIEkgdHJpZWQg
dG8gdGVzdCB0aGlzIG9uIFhQIEkgcmVhbGl6ZWQgdGhhdA0KPiA+IHRoYXQgcWVtdS1nYSBubyBs
b25nZXIgd29ya3Mgb24gWFAsIGFuZCBnZW5lcmF0ZXMgdGhlIGZvbGxvd2luZyBlcnJvcg0KPiA+
IHdoZW4gSSB0cnkgdG8gc3RhcnQgaXQgKGV2ZW4gd2l0aG91dCB5b3VyIHN0YXRzIHBhdGNoKToN
Cj4gPiANCj4gPiAgICJUaGUgcHJvY2VkdXJlIGVudHJ5IHBvaW50IEFjcXVpcmVTUldMb2NrRXhj
bHVzaXZlIGNvdWxkIG5vdCBiZSBsb2NhdGVkDQo+ID4gICAgaW4gdGhlIGR5bmFtaWMgbGluayBs
aWJyYXJ5IEtFUk5FTDMyLmRsbCINCj4gPiANCj4gPiBJIHRoaW5rIHRoaXMgbWF5IGJlIGR1ZSB0
byB0aGUgZm9sbG93aW5nIGNvbW1pdCwgd2hpY2ggbm90ZXMgdGhhdCBWaXN0YSsNCj4gPiBhcmUg
bm93IHJlcXVpcmVkIGFzIGEgcmVzdWx0Og0KPiA+IA0KPiA+IGNvbW1pdCAxMmY4ZGVmMGUwMjIz
MmQ3YzY0MTZhZDliNjY2NDBmOTczYzUzMWQxDQo+ID4gQXV0aG9yOiBBbmRyZXkgU2hlZGVsIDxh
c2hlZGVsQG1pY3Jvc29mdC5jb20+DQo+ID4gRGF0ZTogICBGcmkgTWFyIDI0IDE1OjAxOjQxIDIw
MTcgLTA3MDANCj4gPiANCj4gPiAgICAgd2luMzI6IHJlcGxhY2UgY3VzdG9tIG11dGV4IGFuZCBj
b25kaXRpb24gdmFyaWFibGUgd2l0aCBuYXRpdmUNCj4gPiAgICAgcHJpbWl0aXZlcw0KPiA+IA0K
PiA+IFNvLCBhcmUgeW91IGFjdHVhbGx5IGFibGUgdG8gcnVuIG9uIFhQIGN1cnJlbnRseT8gSWYg
c28sIGhvdz8gQW5kIGlmDQo+ID4gbm90LCBJIHRoaW5rIHdlIGhhdmUgb3RoZXIgaXNzdWVzIHRo
YXQgbmVlZCB0byBiZSBhZGRyZXNzZWQgaWYgd2UNCj4gPiB3YW50IHRvIHN1cHBvcnQgWFAgc3Rp
bGw7IEknbSBub3QgZXZlbiBzdXJlIHRoYXQncyByZWFsaXN0aWMgYXQgdGhpcw0KPiA+IHBvaW50
Lg0KPiA+IA0KPiA+IFVubGVzcyB0aGVyZSdzIGFjdHVhbGx5IGEgd2F5IHRvIHRlc3QgUUdBIG9u
IFhQIHJpZ2h0IG5vdyBJIHRoaW5rIEkNCj4gPiB3ZSBzaG91bGQganVzdCBnZXQgaW4gdGhlIHVw
ZGF0ZWQgcGF0Y2ggbWludXMgdGhlIGR5bmFtaWMgRExMIHN0dWZmLA0KPiA+IGkuZS46DQo+ID4g
ICBodHRwczovL2dpdGh1Yi5jb20vbWRyb3RoL3FlbXUvY29tbWl0Lw0KPiA+IGRlNTk3YThiMjc3
MjJjZTRmOWNjNjYwZjkzMGY3ZGNjYzcxMjcxMmQNCj4gPiANCj4gPiBNYWtlIHNlbnNlPw0KPiA+
IA0KPiA+ID4gDQo+ID4gPiANCj4gPiA+IA0KPiA+ID4gDQo+ID4gPiANCj4gPiA+IOS4uuS6huiu
qeaCqOeahFZQbGF06Jma5ouf5py65pWF6Zqc5ZKMZG9ja2Vy5pWF6Zqc5b6X5Yiw6auY5pWI55qE
5aSE55CG77yM6K+35LiK5oql5pWF6Zqc5YiwOiAkVlBsYXTmioANCj4g5pyvDQo+ID4g5pSvDQo+
ID4gPiDmjIHjgIINCj4gPiA+IA0KPiA+ID4g6Iqm5b+X5pyLIGx1emhpcGVuZw0KPiA+ID4gDQo+
ID4gPiANCj4gPiA+IElU5byA5Y+R5bel56iL5biIIElUIERldmVsb3BtZW50IEVuZ2luZWVyDQo+
ID4gPiDmk43kvZzns7vnu5/kuqflk4Hpg6gv5Lit5b+D56CU56m26ZmiL+ezu+e7n+S6p+WTgSBP
UyBQcm9kdWN0IERlcHQuL0NlbnRyYWwgUu+8hkQgSW5zdGl0dXRlLw0KPiA+ID4gU3lzdGVtIFBy
b2R1Y3QNCj4gPiA+IA0KPiA+ID4gDQo+ID4gPiBbY2lkXSAgICAgICAgICBbY2lkXQ0KPiA+ID4g
ICAgICAgICAgICAgICAg5Zub5bed55yB5oiQ6YO95biC5aSp5bqc5aSn6YGT5Lit5q61ODAw5Y+3
DQo+ID4gPiAgICAgICAgICAgICAgICBFOiBsdS56aGlwZW5nQHp0ZS5jb20uY24NCj4gPiA+ICAg
ICAgICAgICAgICAgIHd3dy56dGUuY29tLmNuDQo+ID4gPiANCj4gPiA+IOWOn+Wni+mCruS7tg0K
PiA+ID4g5Y+R5Lu25Lq677ya6Iqm5b+X5pyLMTAxMDgyNzINCj4gPiA+IOaUtuS7tuS6uu+8miA8
bWRyb3RoQGxpbnV4LnZuZXQuaWJtLmNvbT47DQo+ID4gPiDmioTpgIHkurrvvJogPHFlbXUtZGV2
ZWxAbm9uZ251Lm9yZz47DQo+ID4gPiDml6XmnJ/vvJoyMDE35bm0MTHmnIgwOOaXpSAxMDo1NA0K
PiA+ID4g5Li76aKY77ya562U5aSNOiBSZTogW1BBVENIIHYyXSBxZ2E6IHJlcGxhY2UgR2V0SWZF
bnRyeQ0KPiA+ID4gDQo+ID4gPiANCj4gPiA+ID5JIGhhdmUgdGhlIG1vZGlmaWVkIHBhdGNoIHN0
YWdlZCBoZXJlOg0KPiA+ID4gDQo+ID4gPiA+ICBodHRwczovL2dpdGh1Yi5jb20vbWRyb3RoL3Fl
bXUvY29tbWl0Lw0KPiA+ID4gZGU1OTdhOGIyNzcyMmNlNGY5Y2M2NjBmOTMwZjdkY2NjNzEyNzEy
ZA0KPiA+ID4gPkxldCBtZSBrbm93IGlmIGl0IGxvb2tzIG9rYXkgYW5kIEknbGwgc2VuZCBhIHB1
bGwgcmVxdWVzdCBmb3IgcmMxDQo+ID4gPiANCj4gPiA+ICANCj4gPiA+IA0KPiA+ID4NCj4gPg0K
PiAgIHRoZSBjb2RlIHJpZ2h0LCBidXQgcnVubmluZyBRR0Egb24gdGhlIFdpbmRvd3MgWFAsIGVy
cm9yOiBjYW4gbm90IGZpbmQgdGhlIGxpbmsNCj4gPiA+IHRvICBHZXRJZkVudHJ5MiBpbiBpcGhs
cGFwaS5ETEwuDQo+ID4gPiANCj4gPiA+IA0KPiA+ID4gDQo+ID4gPiANCj4gPiA+IOS4uuS6huiu
qeaCqOeahFZQbGF06Jma5ouf5py65pWF6Zqc5ZKMZG9ja2Vy5pWF6Zqc5b6X5Yiw6auY5pWI55qE
5aSE55CG77yM6K+35LiK5oql5pWF6Zqc5YiwOiAkVlBsYXTmioANCj4g5pyvDQo+ID4g5pSvDQo+
ID4gPiDmjIHjgIINCj4gPiA+IA0KPiA+ID4g6Iqm5b+X5pyLIGx1emhpcGVuZw0KPiA+ID4gDQo+
ID4gPiANCj4gPiA+IElU5byA5Y+R5bel56iL5biIIElUIERldmVsb3BtZW50IEVuZ2luZWVyDQo+
ID4gPiDmk43kvZzns7vnu5/kuqflk4Hpg6gv5Lit5b+D56CU56m26ZmiL+ezu+e7n+S6p+WTgSBP
UyBQcm9kdWN0IERlcHQuL0NlbnRyYWwgUu+8hkQgSW5zdGl0dXRlLw0KPiA+ID4gU3lzdGVtIFBy
b2R1Y3QNCj4gPiA+IA0KPiA+ID4gDQo+ID4gPiBbY2lkXSAgICAgICAgICBbY2lkXQ0KPiA+ID4g
ICAgICAgICAgICAgICAg5Zub5bed55yB5oiQ6YO95biC5aSp5bqc5aSn6YGT5Lit5q61ODAw5Y+3
DQo+ID4gPiAgICAgICAgICAgICAgICBFOiBsdS56aGlwZW5nQHp0ZS5jb20uY24NCj4gPiA+ICAg
ICAgICAgICAgICAgIHd3dy56dGUuY29tLmNuDQo+ID4gPiANCj4gPiA+IA0KPiA+ID4g5Y+R5Lu2
5Lq677yaIDxtZHJvdGhAbGludXgudm5ldC5pYm0uY29tPjsNCj4gPiA+IOaUtuS7tuS6uu+8muiK
puW/l+acizEwMTA4MjcyOw0KPiA+ID4g5oqE6YCB5Lq677yaIDxxZW11LWRldmVsQG5vbmdudS5v
cmc+O+iKpuW/l+acizEwMTA4MjcyOw0KPiA+ID4g5pel5pyf77yaMjAxN+W5tDEx5pyIMDjml6Ug
MDE6MDcNCj4gPiA+IOS4u+mimO+8mlJlOiBbUEFUQ0ggdjJdIHFnYTogcmVwbGFjZSBHZXRJZkVu
dHJ5DQo+ID4gPiANCj4gPiA+IA0KPiA+ID4gUXVvdGluZyBaaGlQZW5nIEx1ICgyMDE3LTExLTAz
IDA5OjU0OjIwKQ0KPiA+ID4gPg0KPiA+ID4NCj4gPg0KPiAgICBUaGUgZGF0YSBvYnRhaW5lZCBi
eSBHZXRJZkVudHJ5IGlzIDMyIGJpdHMsIGFuZCBpdCBtYXkgb3ZlcmZsb3cuIFRodXMgdXNpbmcg
R2V0SWZFbnRyeTIgaW5zdGVhZCBvZiBHZXRJZkVudHJ5Lg0KPiA+ID4gPiANCj4gPiA+ID4gU2ln
bmVkLW9mZi1ieTogWmhpUGVuZyBMdSA8bHUuemhpcGVuZ0B6dGUuY29tLmNuPg0KPiA+ID4gPiAt
LS0NCj4gPiA+ID4gIHFnYS9jb21tYW5kcy13aW4zMi5jIHwgMzEgKysrKysrKysrKysrKysrKysr
LS0tLS0tLS0tLS0tLQ0KPiA+ID4gPiAgMSBmaWxlIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyks
IDEzIGRlbGV0aW9ucygtKQ0KPiA+ID4gPiANCj4gPiA+ID4gZGlmZiAtLWdpdCBhL3FnYS9jb21t
YW5kcy13aW4zMi5jIGIvcWdhL2NvbW1hbmRzLXdpbjMyLmMNCj4gPiA+ID4gaW5kZXggMDMyMjE4
OC4uZDA5NmRjMiAxMDA2NDQNCj4gPiA+ID4gLS0tIGEvcWdhL2NvbW1hbmRzLXdpbjMyLmMNCj4g
PiA+ID4gKysrIGIvcWdhL2NvbW1hbmRzLXdpbjMyLmMNCj4gPiA+ID4gQEAgLTExNzMsMjAgKzEx
NzMsMjUgQEAgc3RhdGljIGludCBndWVzdF9nZXRfbmV0d29ya19zdGF0cw0KPiA+IChjb25zdCBj
aGFyICpuYW1lLA0KPiA+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICBHdWVzdE5ldHdvcmtJ
bnRlcmZhY2VTdGF0ICpzdGF0cykNCj4gPiA+ID4gIHsNCj4gPiA+ID4gICAgICBEV09SRCBpZl9p
bmRleCA9IDA7DQo+ID4gPiA+IC0gICAgTUlCX0lGUk9XIGFfbWlkX2lmcm93Ow0KPiA+ID4gPiAt
ICAgIG1lbXNldCgmYV9taWRfaWZyb3csIDAsIHNpemVvZihhX21pZF9pZnJvdykpOw0KPiA+ID4g
PiArICAgIE9TVkVSU0lPTklORk8gT1N2ZXI7DQo+ID4gPiA+ICAgICAgaWZfaW5kZXggPSBnZXRf
aW50ZXJmYWNlX2luZGV4KG5hbWUpOw0KPiA+ID4gPiAtICAgIGFfbWlkX2lmcm93LmR3SW5kZXgg
PSBpZl9pbmRleDsNCj4gPiA+ID4gLSAgICBpZiAoTk9fRVJST1IgPT0gR2V0SWZFbnRyeSgmYV9t
aWRfaWZyb3cpKSB7DQo+ID4gPiA+IC0gICAgICAgIHN0YXRzLT5yeF9ieXRlcyA9IGFfbWlkX2lm
cm93LmR3SW5PY3RldHM7DQo+ID4gPiA+IC0gICAgICAgIHN0YXRzLT5yeF9wYWNrZXRzID0gYV9t
aWRfaWZyb3cuZHdJblVjYXN0UGt0czsNCj4gPiA+ID4gLSAgICAgICAgc3RhdHMtPnJ4X2VycnMg
PSBhX21pZF9pZnJvdy5kd0luRXJyb3JzOw0KPiA+ID4gPiAtICAgICAgICBzdGF0cy0+cnhfZHJv
cHBlZCA9IGFfbWlkX2lmcm93LmR3SW5EaXNjYXJkczsNCj4gPiA+ID4gLSAgICAgICAgc3RhdHMt
PnR4X2J5dGVzID0gYV9taWRfaWZyb3cuZHdPdXRPY3RldHM7DQo+ID4gPiA+IC0gICAgICAgIHN0
YXRzLT50eF9wYWNrZXRzID0gYV9taWRfaWZyb3cuZHdPdXRVY2FzdFBrdHM7DQo+ID4gPiA+IC0g
ICAgICAgIHN0YXRzLT50eF9lcnJzID0gYV9taWRfaWZyb3cuZHdPdXRFcnJvcnM7DQo+ID4gPiA+
IC0gICAgICAgIHN0YXRzLT50eF9kcm9wcGVkID0gYV9taWRfaWZyb3cuZHdPdXREaXNjYXJkczsN
Cj4gPiA+ID4gLSAgICAgICAgcmV0dXJuIDA7DQo+ID4gPiA+ICsgICAgT1N2ZXIuZHdPU1ZlcnNp
b25JbmZvU2l6ZSA9IHNpemVvZihPU1ZFUlNJT05JTkZPKTsNCj4gPiA+ID4gKyAgICBHZXRWZXJz
aW9uRXgoJk9TdmVyKTsNCj4gPiA+ID4gKyAgICBpZiAoT1N2ZXIuZHdNYWpvclZlcnNpb24gPj0g
Nikgew0KPiA+ID4gPiArICAgICAgICBNSUJfSUZfUk9XMiBhX21pZF9pZnJvdzsNCj4gPiA+ID4g
KyAgICAgICAgbWVtc2V0KCZhX21pZF9pZnJvdywgMCwgc2l6ZW9mKGFfbWlkX2lmcm93KSk7DQo+
ID4gPiA+ICsgICAgICAgIGFfbWlkX2lmcm93LmR3SW5kZXggPSBpZl9pbmRleDsNCj4gPiA+ID4g
KyAgICAgICAgaWYgKE5PX0VSUk9SID09IEdldElmRW50cnkyKCZhX21pZF9pZnJvdykpIHsNCj4g
PiA+ID4gKyAgICAgICAgICAgIHN0YXRzLT5yeF9ieXRlcyA9IGFfbWlkX2lmcm93LmR3SW5PY3Rl
dHM7DQo+ID4gPiA+ICsgICAgICAgICAgICBzdGF0cy0+cnhfcGFja2V0cyA9IGFfbWlkX2lmcm93
LmR3SW5VY2FzdFBrdHM7DQo+ID4gPiA+ICsgICAgICAgICAgICBzdGF0cy0+cnhfZXJycyA9IGFf
bWlkX2lmcm93LmR3SW5FcnJvcnM7DQo+ID4gPiA+ICsgICAgICAgICAgICBzdGF0cy0+cnhfZHJv
cHBlZCA9IGFfbWlkX2lmcm93LmR3SW5EaXNjYXJkczsNCj4gPiA+ID4gKyAgICAgICAgICAgIHN0
YXRzLT50eF9ieXRlcyA9IGFfbWlkX2lmcm93LmR3T3V0T2N0ZXRzOw0KPiA+ID4gPiArICAgICAg
ICAgICAgc3RhdHMtPnR4X3BhY2tldHMgPSBhX21pZF9pZnJvdy5kd091dFVjYXN0UGt0czsNCj4g
PiA+ID4gKyAgICAgICAgICAgIHN0YXRzLT50eF9lcnJzID0gYV9taWRfaWZyb3cuZHdPdXRFcnJv
cnM7DQo+ID4gPiA+ICsgICAgICAgICAgICBzdGF0cy0+dHhfZHJvcHBlZCA9IGFfbWlkX2lmcm93
LmR3T3V0RGlzY2FyZHM7DQo+ID4gPiA+ICsgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiA+IA0K
PiA+ID4gVGhpcyBmYWlscyB0byBidWlsZCBpbiBteSBmYzIwIG1pbmd3NjQgZW52aXJvbm1lbnQ6
DQo+ID4gPiANCj4gPiA+IC9ob21lL21kcm90aC93L3FlbXU0LmdpdC9xZ2EvDQo+ID4gPg0KPiAg
Y29tbWFuZHMtd2luMzIuYzoxMTg0OjIwOiBlcnJvcjogJ01JQl9JRl9ST1cyJyBoYXMgbm8gbWVt
YmVyIG5hbWVkICdkd0luZGV4Jw0KPiA+ID4gICAgICAgICAgYV9taWRfaWZyb3cuZHdJbmRleCA9
IGlmX2luZGV4Ow0KPiA+ID4gICAgICAgICAgICAgICAgICAgICBeDQo+ID4gPiAvaG9tZS9tZHJv
dGgvdy9xZW11NC5naXQvcWdhLw0KPiA+ID4NCj4gPg0KPiAgIGNvbW1hbmRzLXdpbjMyLmM6MTE4
Njo0MjogZXJyb3I6ICdNSUJfSUZfUk9XMicgaGFzIG5vIG1lbWJlciBuYW1lZCAnZHdJbk9jdGV0
cycNCj4gPiA+ICAgICAgICAgICAgICBzdGF0cy0+cnhfYnl0ZXMgPSBhX21pZF9pZnJvdy5kd0lu
T2N0ZXRzOw0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Xg0KPiA+ID4gL2hvbWUvbWRyb3RoL3cvcWVtdTQuZ2l0L3FnYS8NCj4gPiA+DQo+ID4NCj4gICBj
b21tYW5kcy13aW4zMi5jOjExODc6NDQ6IGVycm9yOiAnTUlCX0lGX1JPVzInIGhhcyBubyBtZW1i
ZXIgbmFtZWQgJ2R3SW5VY2FzdFBrdHMnDQo+ID4gPiAgICAgICAgICAgICAgc3RhdHMtPnJ4X3Bh
Y2tldHMgPSBhX21pZF9pZnJvdy5kd0luVWNhc3RQa3RzOw0KPiA+ID4gDQo+ID4gPiBldGMgLi4u
DQo+ID4gPiANCj4gPiA+DQo+ICBUaGUgcGF0Y2ggc2VlbXMgdG8gYXNzdW1lIE1JQl9JRlJPVyBh
bmQgTUlCX0lGX1JPVzIgaGF2ZSB0aGUgc2FtZSBmaWVsZCBuYW1lcw0KPiA+ID4gZm9yIHRoZSBz
dGF0cywgYnV0IGFjY29yZGluZyB0byB0aGlzIHRoZXkncmUgc2xpZ2h0bHkgZGlmZmVyZW50Og0K
PiA+ID4gDQo+ID4gPiAgIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
d2luZG93cy9kZXNrdG9wL2FhODE0NDkxKHY9DQo+ID4gPiB2cy44NSkuYXNweA0KPiA+ID4gDQo+
ID4gPiBUaGlzIGNoYW5nZSBvbiB0b3Agb2YgeW91ciBwYXRjaCBzZWVtcyB0byB3b3JrOg0KPiA+
ID4gDQo+ID4gPiBkaWZmIC0tZ2l0IGEvcWdhL2NvbW1hbmRzLXdpbjMyLmMgYi9xZ2EvY29tbWFu
ZHMtd2luMzIuYw0KPiA+ID4gaW5kZXggZTE3ZmMzYzI4NC4uNThlNDcwODc3ZiAxMDA2NDQNCj4g
PiA+IC0tLSBhL3FnYS9jb21tYW5kcy13aW4zMi5jDQo+ID4gPiArKysgYi9xZ2EvY29tbWFuZHMt
d2luMzIuYw0KPiA+ID4gQEAgLTExODEsMTYgKzExODEsMTYgQEAgc3RhdGljIGludCBndWVzdF9n
ZXRfbmV0d29ya19zdGF0cw0KPiAoY29uc3QgY2hhciAqbmFtZSwNCj4gPiA+ICAgICAgaWYgKG9z
X3Zlci5kd01ham9yVmVyc2lvbiA+PSA2KSB7DQo+ID4gPiAgICAgICAgICBNSUJfSUZfUk9XMiBh
X21pZF9pZnJvdzsNCj4gPiA+ICAgICAgICAgIG1lbXNldCgmYV9taWRfaWZyb3csIDAsIHNpemVv
ZihhX21pZF9pZnJvdykpOw0KPiA+ID4gLSAgICAgICAgYV9taWRfaWZyb3cuZHdJbmRleCA9IGlm
X2luZGV4Ow0KPiA+ID4gKyAgICAgICAgYV9taWRfaWZyb3cuSW50ZXJmYWNlSW5kZXggPSBpZl9p
bmRleDsNCj4gPiA+ICAgICAgICAgIGlmIChOT19FUlJPUiA9PSBHZXRJZkVudHJ5MigmYV9taWRf
aWZyb3cpKSB7DQo+ID4gPiAtICAgICAgICAgICAgc3RhdHMtPnJ4X2J5dGVzID0gYV9taWRfaWZy
b3cuZHdJbk9jdGV0czsNCj4gPiA+IC0gICAgICAgICAgICBzdGF0cy0+cnhfcGFja2V0cyA9IGFf
bWlkX2lmcm93LmR3SW5VY2FzdFBrdHM7DQo+ID4gPiAtICAgICAgICAgICAgc3RhdHMtPnJ4X2Vy
cnMgPSBhX21pZF9pZnJvdy5kd0luRXJyb3JzOw0KPiA+ID4gLSAgICAgICAgICAgIHN0YXRzLT5y
eF9kcm9wcGVkID0gYV9taWRfaWZyb3cuZHdJbkRpc2NhcmRzOw0KPiA+ID4gLSAgICAgICAgICAg
IHN0YXRzLT50eF9ieXRlcyA9IGFfbWlkX2lmcm93LmR3T3V0T2N0ZXRzOw0KPiA+ID4gLSAgICAg
ICAgICAgIHN0YXRzLT50eF9wYWNrZXRzID0gYV9taWRfaWZyb3cuZHdPdXRVY2FzdFBrdHM7DQo+
ID4gPiAtICAgICAgICAgICAgc3RhdHMtPnR4X2VycnMgPSBhX21pZF9pZnJvdy5kd091dEVycm9y
czsNCj4gPiA+IC0gICAgICAgICAgICBzdGF0cy0+dHhfZHJvcHBlZCA9IGFfbWlkX2lmcm93LmR3
T3V0RGlzY2FyZHM7DQo+ID4gPiArICAgICAgICAgICAgc3RhdHMtPnJ4X2J5dGVzID0gYV9taWRf
aWZyb3cuSW5PY3RldHM7DQo+ID4gPiArICAgICAgICAgICAgc3RhdHMtPnJ4X3BhY2tldHMgPSBh
X21pZF9pZnJvdy5JblVjYXN0UGt0czsNCj4gPiA+ICsgICAgICAgICAgICBzdGF0cy0+cnhfZXJy
cyA9IGFfbWlkX2lmcm93LkluRXJyb3JzOw0KPiA+ID4gKyAgICAgICAgICAgIHN0YXRzLT5yeF9k
cm9wcGVkID0gYV9taWRfaWZyb3cuSW5EaXNjYXJkczsNCj4gPiA+ICsgICAgICAgICAgICBzdGF0
cy0+dHhfYnl0ZXMgPSBhX21pZF9pZnJvdy5PdXRPY3RldHM7DQo+ID4gPiArICAgICAgICAgICAg
c3RhdHMtPnR4X3BhY2tldHMgPSBhX21pZF9pZnJvdy5PdXRVY2FzdFBrdHM7DQo+ID4gPiArICAg
ICAgICAgICAgc3RhdHMtPnR4X2VycnMgPSBhX21pZF9pZnJvdy5PdXRFcnJvcnM7DQo+ID4gPiAr
ICAgICAgICAgICAgc3RhdHMtPnR4X2Ryb3BwZWQgPSBhX21pZF9pZnJvdy5PdXREaXNjYXJkczsN
Cj4gPiA+ICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiA+ICAgICAgICAgIH0NCj4gPiA+ICAg
ICAgfQ0KPiA+ID4gDQo+ID4gPiBJIGhhdmUgdGhlIG1vZGlmaWVkIHBhdGNoIHN0YWdlZCBoZXJl
Og0KPiA+ID4gDQo+ID4gPiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tZHJvdGgvcWVtdS9jb21taXQv
DQo+ID4gPiBkZTU5N2E4YjI3NzIyY2U0ZjljYzY2MGY5MzBmN2RjY2M3MTI3MTJkDQo+ID4gPiAN
Cj4gPiA+IExldCBtZSBrbm93IGlmIGl0IGxvb2tzIG9rYXkgYW5kIEknbGwgc2VuZCBhIHB1bGwg
cmVxdWVzdCBmb3IgcmMxDQo+ID4gPiANCj4gPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gPiAgICAg
IH0NCj4gPiA+ID4gICAgICByZXR1cm4gLTE7DQo+ID4gPiA+ICB9DQo+ID4gPiA+IC0tIA0KPiA+
ID4gPiAxLjguMy4xDQo+ID4gPiA+IA0KPiA+ID4gDQo+ID4gPiANCj4gPiANCj4gPiANCj4gDQo+
Michael Roth Nov. 20, 2017, 9:57 p.m. UTC | #9
Quoting lu.zhipeng@zte.com.cn (2017-11-14 19:41:58)
> i used  xp  version:
> 
> xp professional 2002 service pack 3
> 
> build environment: 
> 
> root@localhost qemu-2.5.0]# cat /etc/redhat-release 
> 
> CentOS Linux release 7.0.1406 (Core) 

I haven't yet figured out why exactly, but with a CentOS 7.4 mingw
environment (via EPEL) I was indeed able to generate a binary that's
compatible with XP.

Still looking into it, but I've posted a pull for your modified patch in
the meantime. One notable change I made was to not make it fatal if we
fail to probe for GetIfStats2, since the stats are an optional return
value.

> 
> 
> 
> 
> 
> 
> 为了让您的VPlat虚拟机故障和docker故障得到高效的处理,请上报故障到: $VPlat技术支
> 持。
> 
> 芦志朋 luzhipeng
> 
> 
> IT开发工程师 IT Development Engineer
> 操作系统产品部/中心研究院/系统产品 OS Product Dept./Central R&D Institute/
> System Product
> 
> 
> [cid]          [cid]
>                四川省成都市天府大道中段800号
>                E: lu.zhipeng@zte.com.cn
>                www.zte.com.cn
> 
> 原始邮件
> 发件人: <mdroth@linux.vnet.ibm.com>;
> 收件人:芦志朋10108272;
> 抄送人: <qemu-devel@nongnu.org>;
> 日期:2017年11月15日 09:22
> 主题:Re: 答复: Re: 答复: Re: [PATCH v2] qga: replace GetIfEntry
> Quoting lu.zhipeng@zte.com.cn (2017-11-14 05:09:35)
> >  i test the latest qga in xp , it run ok .
> > 
> > 
> > my qga config :
> > 
> > Configured with: './configure' '--enable-guest-agent' '--cross-prefix=
> > x86_64-w64-mingw32-' '--with-vss-sdk=/home/VSSSDK72' '--disable-fdt'        
> > '--target-list=x86_64-softmmu'
> 
> Hmm, so you're testing with Windows XP x64? I was using XP 32-bit (SP3),
> but I retried with XP x64 (SP2) and I still have the same issue.
> 
> I can only get qemu-ga working if I build on top of something prior to
> commit 12f8def0e.
> 
> What build environment are you using? I've tried Fedora Core 18 and 20
> and have the same issue with both.
> 
> > 
> > used qga version info
> > 
> > [root@ceshi qemu]# git log
> > 
> > commit 533ab83ea074d5fc457769f6ac698524a12f1156
> > 
> > Author: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> > 
> > Date:   Fri Nov 10 10:17:14 2017 +0800
> > 
> > 
> >     qga: fix some errors for guest_get_network_stats
> > 
> >     
> > 
> >     fix some erros:
> > 
> >     1.if building qga on Windows Vista/2008 and newer,
> > 
> >     it cann't find the link to GetIfEntry2 in windows xp.
> > 
> >     2. check valid of if_index.
> > 
> >     
> > 
> >     Signed-off-by: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> > 
> > 
> > commit de597a8b27722ce4f9cc660f930f7dccc712712d
> > 
> > Author: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> > 
> > Date:   Fri Nov 3 22:54:20 2017 +0800
> > 
> > 
> >     qga: replace GetIfEntry
> > 
> >     
> > 
> >
>      The data obtained by GetIfEntry is 32 bits, and it may overflow. Thus using
> > GetIfEntry2 instead of GetIfEntry.
> > 
> >     
> > 
> >     Signed-off-by: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> > 
> >     *avoid CamelCase variable names
> > 
> >     *update field names for MIB_IFROW -> MIB_IF_ROW2
> > 
> >     Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
> > 
> > 
> > commit 5ca7a3cba468736cfe555887af1f6ba754f6eac9
> > 
> > Merge: a4f0537 10a7b7e
> > 
> > Author: Peter Maydell <peter.maydell@linaro.org>
> > 
> > Date:   Tue Nov 7 14:43:35 2017 +0000
> > 
> > 
> >     Merge remote-tracking branch 'remotes/berrange/tags/
> pull-2017-11-06-2' into
> > staging
> > 
> >     
> > 
> >     Pull IO 2017/11/06 v2
> > 
> > 
> > 
> > 
> > 为了让您的VPlat虚拟机故障和docker故障得到高效的处理,请上报故障到: $VPlat技术
> 支
> > 持。
> > 
> > 芦志朋 luzhipeng
> > 
> > 
> > IT开发工程师 IT Development Engineer
> > 操作系统产品部/中心研究院/系统产品 OS Product Dept./Central R&D Institute/
> > System Product
> > 
> > 
> > [cid]          [cid]
> >                四川省成都市天府大道中段800号
> >                E: lu.zhipeng@zte.com.cn
> >                www.zte.com.cn
> > 
> > 原始邮件
> > 发件人: <mdroth@linux.vnet.ibm.com>;
> > 收件人:芦志朋10108272;
> > 抄送人: <qemu-devel@nongnu.org>;
> > 日期:2017年11月14日 07:57
> > 主题:Re: 答复: Re: [PATCH v2] qga: replace GetIfEntry
> > Quoting lu.zhipeng@zte.com.cn (2017-11-09 05:26:15)
> > >  i think the code is better
> > > 
> > >  if (OSver.dwMajorVersion >= 6) {
> > >       MIB_IF_ROW2 aMib_ifrow;
> > >       typedef NETIOAPI_API (WINAPI *getifentry2_t)(PMIB_IF_ROW2 Row);
> > >       memset(&aMib_ifrow, 0, sizeof(aMib_ifrow));
> > >       aMib_ifrow.InterfaceIndex = nicId;
> > >       HMODULE module = GetModuleHandle("iphlpapi");
> > >       PVOID fun = GetProcAddress(module, "GetIfEntry2");
> > >       if (fun == NULL) {
> > >           error_setg(errp, QERR_QGA_COMMAND_FAILED,
> > >                      "Failed to get address of GetIfEntry2");
> > >           return NULL;
> > >       }
> > >     getifentry2_t getifentry2_ex = (getifentry2_t)fun;
> > >     if (NO_ERROR == getifentry2_ex(&aMib_ifrow)){
> > >     }
> > 
> > I've updated the patch with this change:
> >   https://github.com/mdroth/qemu/commits/qga-if-stats
> > 
> > But I'm a bit confused now: when I tried to test this on XP I realized that
> > that qemu-ga no longer works on XP, and generates the following error
> > when I try to start it (even without your stats patch):
> > 
> >   "The procedure entry point AcquireSRWLockExclusive could not be located
> >    in the dynamic link library KERNEL32.dll"
> > 
> > I think this may be due to the following commit, which notes that Vista+
> > are now required as a result:
> > 
> > commit 12f8def0e02232d7c6416ad9b66640f973c531d1
> > Author: Andrey Shedel <ashedel@microsoft.com>
> > Date:   Fri Mar 24 15:01:41 2017 -0700
> > 
> >     win32: replace custom mutex and condition variable with native
> >     primitives
> > 
> > So, are you actually able to run on XP currently? If so, how? And if
> > not, I think we have other issues that need to be addressed if we
> > want to support XP still; I'm not even sure that's realistic at this
> > point.
> > 
> > Unless there's actually a way to test QGA on XP right now I think I
> > we should just get in the updated patch minus the dynamic DLL stuff,
> > i.e.:
> >   https://github.com/mdroth/qemu/commit/
> > de597a8b27722ce4f9cc660f930f7dccc712712d
> > 
> > Make sense?
> > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 为了让您的VPlat虚拟机故障和docker故障得到高效的处理,请上报故障到: $VPlat技
> 术
> > 支
> > > 持。
> > > 
> > > 芦志朋 luzhipeng
> > > 
> > > 
> > > IT开发工程师 IT Development Engineer
> > > 操作系统产品部/中心研究院/系统产品 OS Product Dept./Central R&D Institute/
> > > System Product
> > > 
> > > 
> > > [cid]          [cid]
> > >                四川省成都市天府大道中段800号
> > >                E: lu.zhipeng@zte.com.cn
> > >                www.zte.com.cn
> > > 
> > > 原始邮件
> > > 发件人:芦志朋10108272
> > > 收件人: <mdroth@linux.vnet.ibm.com>;
> > > 抄送人: <qemu-devel@nongnu.org>;
> > > 日期:2017年11月08日 10:54
> > > 主题:答复: Re: [PATCH v2] qga: replace GetIfEntry
> > > 
> > > 
> > > >I have the modified patch staged here:
> > > 
> > > >  https://github.com/mdroth/qemu/commit/
> > > de597a8b27722ce4f9cc660f930f7dccc712712d
> > > >Let me know if it looks okay and I'll send a pull request for rc1
> > > 
> > >  
> > > 
> > >
> >
>   the code right, but running QGA on the Windows XP, error: can not find the link
> > > to  GetIfEntry2 in iphlpapi.DLL.
> > > 
> > > 
> > > 
> > > 
> > > 为了让您的VPlat虚拟机故障和docker故障得到高效的处理,请上报故障到: $VPlat技
> 术
> > 支
> > > 持。
> > > 
> > > 芦志朋 luzhipeng
> > > 
> > > 
> > > IT开发工程师 IT Development Engineer
> > > 操作系统产品部/中心研究院/系统产品 OS Product Dept./Central R&D Institute/
> > > System Product
> > > 
> > > 
> > > [cid]          [cid]
> > >                四川省成都市天府大道中段800号
> > >                E: lu.zhipeng@zte.com.cn
> > >                www.zte.com.cn
> > > 
> > > 
> > > 发件人: <mdroth@linux.vnet.ibm.com>;
> > > 收件人:芦志朋10108272;
> > > 抄送人: <qemu-devel@nongnu.org>;芦志朋10108272;
> > > 日期:2017年11月08日 01:07
> > > 主题:Re: [PATCH v2] qga: replace GetIfEntry
> > > 
> > > 
> > > Quoting ZhiPeng Lu (2017-11-03 09:54:20)
> > > >
> > >
> >
>    The data obtained by GetIfEntry is 32 bits, and it may overflow. Thus using GetIfEntry2 instead of GetIfEntry.
> > > > 
> > > > Signed-off-by: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
> > > > ---
> > > >  qga/commands-win32.c | 31 ++++++++++++++++++-------------
> > > >  1 file changed, 18 insertions(+), 13 deletions(-)
> > > > 
> > > > diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> > > > index 0322188..d096dc2 100644
> > > > --- a/qga/commands-win32.c
> > > > +++ b/qga/commands-win32.c
> > > > @@ -1173,20 +1173,25 @@ static int guest_get_network_stats
> > (const char *name,
> > > >                         GuestNetworkInterfaceStat *stats)
> > > >  {
> > > >      DWORD if_index = 0;
> > > > -    MIB_IFROW a_mid_ifrow;
> > > > -    memset(&a_mid_ifrow, 0, sizeof(a_mid_ifrow));
> > > > +    OSVERSIONINFO OSver;
> > > >      if_index = get_interface_index(name);
> > > > -    a_mid_ifrow.dwIndex = if_index;
> > > > -    if (NO_ERROR == GetIfEntry(&a_mid_ifrow)) {
> > > > -        stats->rx_bytes = a_mid_ifrow.dwInOctets;
> > > > -        stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> > > > -        stats->rx_errs = a_mid_ifrow.dwInErrors;
> > > > -        stats->rx_dropped = a_mid_ifrow.dwInDiscards;
> > > > -        stats->tx_bytes = a_mid_ifrow.dwOutOctets;
> > > > -        stats->tx_packets = a_mid_ifrow.dwOutUcastPkts;
> > > > -        stats->tx_errs = a_mid_ifrow.dwOutErrors;
> > > > -        stats->tx_dropped = a_mid_ifrow.dwOutDiscards;
> > > > -        return 0;
> > > > +    OSver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
> > > > +    GetVersionEx(&OSver);
> > > > +    if (OSver.dwMajorVersion >= 6) {
> > > > +        MIB_IF_ROW2 a_mid_ifrow;
> > > > +        memset(&a_mid_ifrow, 0, sizeof(a_mid_ifrow));
> > > > +        a_mid_ifrow.dwIndex = if_index;
> > > > +        if (NO_ERROR == GetIfEntry2(&a_mid_ifrow)) {
> > > > +            stats->rx_bytes = a_mid_ifrow.dwInOctets;
> > > > +            stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> > > > +            stats->rx_errs = a_mid_ifrow.dwInErrors;
> > > > +            stats->rx_dropped = a_mid_ifrow.dwInDiscards;
> > > > +            stats->tx_bytes = a_mid_ifrow.dwOutOctets;
> > > > +            stats->tx_packets = a_mid_ifrow.dwOutUcastPkts;
> > > > +            stats->tx_errs = a_mid_ifrow.dwOutErrors;
> > > > +            stats->tx_dropped = a_mid_ifrow.dwOutDiscards;
> > > > +            return 0;
> > > 
> > > This fails to build in my fc20 mingw64 environment:
> > > 
> > > /home/mdroth/w/qemu4.git/qga/
> > >
>  commands-win32.c:1184:20: error: 'MIB_IF_ROW2' has no member named 'dwIndex'
> > >          a_mid_ifrow.dwIndex = if_index;
> > >                     ^
> > > /home/mdroth/w/qemu4.git/qga/
> > >
> >
>   commands-win32.c:1186:42: error: 'MIB_IF_ROW2' has no member named 'dwInOctets'
> > >              stats->rx_bytes = a_mid_ifrow.dwInOctets;
> > >                                           ^
> > > /home/mdroth/w/qemu4.git/qga/
> > >
> >
>   commands-win32.c:1187:44: error: 'MIB_IF_ROW2' has no member named 'dwInUcastPkts'
> > >              stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> > > 
> > > etc ...
> > > 
> > >
>  The patch seems to assume MIB_IFROW and MIB_IF_ROW2 have the same field names
> > > for the stats, but according to this they're slightly different:
> > > 
> > >   https://msdn.microsoft.com/en-us/library/windows/desktop/aa814491(v=
> > > vs.85).aspx
> > > 
> > > This change on top of your patch seems to work:
> > > 
> > > diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> > > index e17fc3c284..58e470877f 100644
> > > --- a/qga/commands-win32.c
> > > +++ b/qga/commands-win32.c
> > > @@ -1181,16 +1181,16 @@ static int guest_get_network_stats
> (const char *name,
> > >      if (os_ver.dwMajorVersion >= 6) {
> > >          MIB_IF_ROW2 a_mid_ifrow;
> > >          memset(&a_mid_ifrow, 0, sizeof(a_mid_ifrow));
> > > -        a_mid_ifrow.dwIndex = if_index;
> > > +        a_mid_ifrow.InterfaceIndex = if_index;
> > >          if (NO_ERROR == GetIfEntry2(&a_mid_ifrow)) {
> > > -            stats->rx_bytes = a_mid_ifrow.dwInOctets;
> > > -            stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
> > > -            stats->rx_errs = a_mid_ifrow.dwInErrors;
> > > -            stats->rx_dropped = a_mid_ifrow.dwInDiscards;
> > > -            stats->tx_bytes = a_mid_ifrow.dwOutOctets;
> > > -            stats->tx_packets = a_mid_ifrow.dwOutUcastPkts;
> > > -            stats->tx_errs = a_mid_ifrow.dwOutErrors;
> > > -            stats->tx_dropped = a_mid_ifrow.dwOutDiscards;
> > > +            stats->rx_bytes = a_mid_ifrow.InOctets;
> > > +            stats->rx_packets = a_mid_ifrow.InUcastPkts;
> > > +            stats->rx_errs = a_mid_ifrow.InErrors;
> > > +            stats->rx_dropped = a_mid_ifrow.InDiscards;
> > > +            stats->tx_bytes = a_mid_ifrow.OutOctets;
> > > +            stats->tx_packets = a_mid_ifrow.OutUcastPkts;
> > > +            stats->tx_errs = a_mid_ifrow.OutErrors;
> > > +            stats->tx_dropped = a_mid_ifrow.OutDiscards;
> > >              return 0;
> > >          }
> > >      }
> > > 
> > > I have the modified patch staged here:
> > > 
> > >   https://github.com/mdroth/qemu/commit/
> > > de597a8b27722ce4f9cc660f930f7dccc712712d
> > > 
> > > Let me know if it looks okay and I'll send a pull request for rc1
> > > 
> > > > +        }
> > > >      }
> > > >      return -1;
> > > >  }
> > > > -- 
> > > > 1.8.3.1
> > > > 
> > > 
> > > 
> > 
> > 
> 
>
diff mbox

Patch

diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index e17fc3c284..58e470877f 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -1181,16 +1181,16 @@  static int guest_get_network_stats(const char *name,
     if (os_ver.dwMajorVersion >= 6) {
         MIB_IF_ROW2 a_mid_ifrow;
         memset(&a_mid_ifrow, 0, sizeof(a_mid_ifrow));
-        a_mid_ifrow.dwIndex = if_index;
+        a_mid_ifrow.InterfaceIndex = if_index;
         if (NO_ERROR == GetIfEntry2(&a_mid_ifrow)) {
-            stats->rx_bytes = a_mid_ifrow.dwInOctets;
-            stats->rx_packets = a_mid_ifrow.dwInUcastPkts;
-            stats->rx_errs = a_mid_ifrow.dwInErrors;
-            stats->rx_dropped = a_mid_ifrow.dwInDiscards;
-            stats->tx_bytes = a_mid_ifrow.dwOutOctets;
-            stats->tx_packets = a_mid_ifrow.dwOutUcastPkts;
-            stats->tx_errs = a_mid_ifrow.dwOutErrors;
-            stats->tx_dropped = a_mid_ifrow.dwOutDiscards;
+            stats->rx_bytes = a_mid_ifrow.InOctets;
+            stats->rx_packets = a_mid_ifrow.InUcastPkts;
+            stats->rx_errs = a_mid_ifrow.InErrors;
+            stats->rx_dropped = a_mid_ifrow.InDiscards;
+            stats->tx_bytes = a_mid_ifrow.OutOctets;
+            stats->tx_packets = a_mid_ifrow.OutUcastPkts;
+            stats->tx_errs = a_mid_ifrow.OutErrors;
+            stats->tx_dropped = a_mid_ifrow.OutDiscards;
             return 0;
         }
     }