Message ID | 151007437551.31225.7183381961531333303@sif (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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==
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==
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 > > > >
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=
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 > > > > > > > > >
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=
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 > > > > > > > > > > > > > > > >
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+
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 --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; } }