From mboxrd@z Thu Jan 1 00:00:00 1970 From: Evgeniy Polyakov Subject: [2/2] CARP implementation. HA master's failover. Date: Thu, 15 Jul 2004 17:37:10 +0400 Sender: netdev-bounce@oss.sgi.com Message-ID: <1089898596.6114.867.camel@uganda> References: <1089898339.6114.860.camel@uganda> Reply-To: johnpol@2ka.mipt.ru Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-8e7T7U6zlBuwtRlq0Usb" Cc: netfilter-failover@lists.netfilter.org Return-path: To: netdev@oss.sgi.com In-Reply-To: <1089898339.6114.860.camel@uganda> Errors-to: netdev-bounce@oss.sgi.com List-Id: netdev.vger.kernel.org --=-8e7T7U6zlBuwtRlq0Usb Content-Type: multipart/mixed; boundary="=-a+/kFhj9P+33ALSFH70e" --=-a+/kFhj9P+33ALSFH70e Content-Type: text/plain Content-Transfer-Encoding: quoted-printable On Thu, 2004-07-15 at 17:32, Evgeniy Polyakov wrote: > Hello, network developers. >=20 > I'm glad to introduce CARP failover mechanism implementation. > It is based on OpenBSD's CARP protocol but is not compatible with it > since OpenBSD's implementation does not contain protection against > repeated message sending. >=20 > The main goal of the project is to implement CARP + firewall sync, but > second part already implemented by Harald Welte an= d=20 > KOVACS Krisztian in ct_sync. >=20 > By design each node has it's own advertisement base and skew, node with > the least timeval constructed from them became a master. > It begins to advertise it's base and skew until shutdown or other node > lower it's base+skew pair. > CARP uses currently only IPv4 multicast, but can be easily changed to > use IPv6.=20 > Each CARP packet contains unique 64bit counter with it's SHA1 hmac > digest with 20byte secret key. By design this counter is incremented in > both master and backup before sending and while receiving accordingly. > If master and backup counters do not coincide with each other while > receiving backup node drops this packet and thus preventing repeated > sending attack. > When after predefined interval master didn't send any packet or it's > base+skew is bigger than that in the remote node those node becomes a > master and begins to advertise. >=20 > CARP has 2 work queues for "became_master" and "became_backup" events. > Such events may be easily registered in runtime by external modules. > One of such event handlers may send netlink message to ct_sync and/or > userspace daemon which will flush iptables rules, up/down interfaces and > so on... >=20 > Please review and comment. >=20 > Code against 2.6 attached=20 > in next 2 e-mails since netfilter-failover@lists.netfilter.org doesn't ac= cept > e-mail greater than 40kb. >=20 > Code also is available at > http://www.2ka.mipt.ru/~johnpol/carp_latest.tar.gz --=20 Evgeniy Polaykov ( s0mbre ) Crash is better than data corruption. -- Art Grabowski --=-a+/kFhj9P+33ALSFH70e Content-Disposition: attachment; filename=carpctl.c Content-Type: text/x-csrc; name=carpctl.c; charset=koi8-r Content-Transfer-Encoding: base64 LyoNCiAqIAljYXJwY3RsLmMNCiAqIA0KICogMjAwNCBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9s eWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+DQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICog DQogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQ0KICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQogKiAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUNCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQog Kg0KICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UNCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlDQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh Y2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBDQogKg0KICovDQoNCiNp bmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpbmNsdWRlIDxzeXMvaW9jdGwuaD4NCiNpbmNsdWRlIDxz eXMvc29ja2V0Lmg+DQoNCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0ZGludC5oPg0K I2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2luY2x1ZGUgPHVuaXN0 ZC5oPg0KI2luY2x1ZGUgPGVycm5vLmg+DQoNCiNpbmNsdWRlIDxsaW51eC9pZi5oPg0KDQojaW5j bHVkZSAiY2FycF9pb2N0bC5oIg0KDQojZGVmaW5lCUNBUlBfS0VZX0xFTgkJMjANCiNkZWZpbmUJ Q0FSUF9ITUFDX1BBRF9MRU4JNjQNCiNkZWZpbmUgSVBQUk9UT19DQVJQIAkJMTEyDQoNCnN0YXRp YyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByKQ0Kew0KCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6 ICVzOiBbLWhdIFstaSBpcGhdIFstYiBhZHZiYXNlXSBbLXMgYWR2c2tld10gWy1kIGRldmljZV0g Wy12IHZoaWRdIFstayBrZXldIFstcCBwYWRdIFstUyBzdGF0ZV0gIg0KCQkJIlstbSBtZF90aW1l b3V0XSBbLWEgYWR2X3RpbW91dF0uXG4iLA0KCQkJcHIpOw0KfQ0KDQpzdGF0aWMgdm9pZCBjYXJw X2R1bXBfcGFyYW1zKHN0cnVjdCBjYXJwX2lvY3RsX3BhcmFtcyBwKQ0Kew0KCXByaW50ZigiQXR0 YWNoZWQgdG8gZGV2aWNlICVzLlxuIiwgcC5kZXZuYW1lKTsNCglwcmludGYoIkFEVjogYmFzZT0l ZCwgc2tldz0lZC5cbiIsIHAuY2FycF9hZHZiYXNlLCBwLmNhcnBfYWR2c2tldyk7DQoJcHJpbnRm KCJWSElEPSVkLCBTVEFURT0lZC5cbiIsIHAuY2FycF92aGlkLCBwLnN0YXRlKTsNCn0NCg0KaW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCnsNCglpbnQgY2gsIGVyciwgcywgbmVlZF9j aGFuZ2U7DQoJc3RydWN0IGlmcmVxIGlmcjsNCgljaGFyIGRldm5hbWVbSUZOQU1TSVpdID0gImNh cnAwIjsNCglzdHJ1Y3QgY2FycF9pb2N0bF9wYXJhbXMgcDsNCg0KCW1lbXNldCgmcCwgMCwgc2l6 ZW9mKHApKTsNCgkNCgltZW1zZXQoJmlmciwgMCwgc2l6ZW9mKGlmcikpOw0KCXN0cm5jcHkoaWZy Lmlmcl9uYW1lLCBkZXZuYW1lLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7DQoJaWZyLmlmcl9pZnJ1 LmlmcnVfZGF0YSA9ICh2b2lkICopJnA7DQoNCglzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdS QU0sIDApOw0KCWlmIChzID09IC0xKQ0KCXsNCgkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8g Y3JlYXRlIENBUlAgY29udHJvbCBzb2NrZXQ6IFslZF0gJXMuXG4iLA0KCQkJCWVycm5vLCBzdHJl cnJvcihlcnJubykpOw0KCQlyZXR1cm4gLTE7DQoJfQ0KCQ0KCWVyciA9IGlvY3RsKHMsIFNJT0Nf R0VUQ0FSUFBBUkFNUywgJmlmcik7DQoJaWYgKGVyciA9PSAtMSkNCgl7DQoJCWZwcmludGYoc3Rk ZXJyLCAiRmFpbGVkIHRvIGNhbGwgaW9jdGw6IFslZF0gJXMuXG4iLA0KCQkJCWVycm5vLCBzdHJl cnJvcihlcnJubykpOw0KCQljbG9zZShzKTsNCgkJcmV0dXJuIC0xOw0KCX0NCg0KCWNhcnBfZHVt cF9wYXJhbXMocCk7DQoNCgluZWVkX2NoYW5nZSA9IDA7DQoJd2hpbGUoKGNoID0gZ2V0b3B0KGFy Z2MsIGFyZ3YsICJoaTpiOnM6ZDp2Oms6cDpTOm06YToiKSkgIT0gLTEpDQoJew0KCQluZWVkX2No YW5nZSA9IDE7DQoJCXN3aXRjaCAoY2gpDQoJCXsNCgkJCWNhc2UgJ20nOg0KCQkJCXAubWRfdGlt ZW91dCA9IGF0b2kob3B0YXJnKTsNCgkJCQlicmVhazsNCgkJCWNhc2UgJ2EnOg0KCQkJCXAuYWR2 X3RpbWVvdXQgPSBhdG9pKG9wdGFyZyk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICdiJzoNCgkJCQlw LmNhcnBfYWR2YmFzZSA9IGF0b2kob3B0YXJnKTsNCgkJCQlicmVhazsNCgkJCWNhc2UgJ3MnOg0K CQkJCXAuY2FycF9hZHZza2V3ID0gYXRvaShvcHRhcmcpOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSAn ZCc6DQoJCQkJbWVtY3B5KHAuZGV2bmFtZSwgb3B0YXJnLCBzaXplb2YocC5kZXZuYW1lKSk7DQoJ CQkJcC5kZXZuYW1lW3NpemVvZihwLmRldm5hbWUpIC0gMV0gPSAnXDAnOw0KCQkJCWJyZWFrOw0K CQkJY2FzZSAndic6DQoJCQkJcC5jYXJwX3ZoaWQgPSBhdG9pKG9wdGFyZyk7DQoJCQkJYnJlYWs7 DQoJCQljYXNlICdrJzoNCgkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0gc2l6ZW9mKHAuY2FycF9r ZXkpKQ0KCQkJCXsNCgkJCQkJZnByaW50ZihzdGRlcnIsICJXcm9uZyBrZXkgbGVuZ3RoLiBNdXN0 IGJlICVkLlxuIiwgc2l6ZW9mKHAuY2FycF9rZXkpKTsNCgkJCQkJcmV0dXJuIC0xOw0KCQkJCX0N CgkJCQltZW1jcHkocC5jYXJwX2tleSwgb3B0YXJnLCBzaXplb2YocC5jYXJwX2tleSkpOw0KCQkJ CWJyZWFrOw0KCQkJY2FzZSAncCc6DQoJCQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IHNpemVvZihw LmNhcnBfcGFkKSkNCgkJCQl7DQoJCQkJCWZwcmludGYoc3RkZXJyLCAiV3JvbmcgcGFkIGxlbmd0 aC4gTXVzdCBiZSAlZC5cbiIsIHNpemVvZihwLmNhcnBfcGFkKSk7DQoJCQkJCXJldHVybiAtMTsN CgkJCQl9DQoJCQkJbWVtY3B5KHAuY2FycF9wYWQsIG9wdGFyZywgc2l6ZW9mKHAuY2FycF9wYWQp KTsNCgkJCQlicmVhazsNCgkJCWNhc2UgJ1MnOg0KCQkJCXAuc3RhdGUgPSBhdG9pKG9wdGFyZyk7 DQoJCQkJYnJlYWs7DQoJCQljYXNlICdoJzoNCgkJCWRlZmF1bHQ6DQoJCQkJbmVlZF9jaGFuZ2Ug PSAwOw0KCQkJCXVzYWdlKGFyZ3ZbMF0pOw0KCQkJCXJldHVybiAtMTsNCgkJfQ0KCX0NCg0KCWlm ICghbmVlZF9jaGFuZ2UpDQoJew0KCQl1c2FnZShhcmd2WzBdKTsNCgkJcmV0dXJuIC0xOw0KCX0N CgkNCglpZnIuaWZyX2lmcnUuaWZydV9kYXRhID0gKHZvaWQgKikmcDsNCgkNCgllcnIgPSBpb2N0 bChzLCBTSU9DX1NFVENBUlBQQVJBTVMsICZpZnIpOw0KCWlmIChlcnIgPT0gLTEpDQoJew0KCQlm cHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBjYWxsIGlvY3RsOiBbJWRdICVzLlxuIiwNCgkJCQll cnJubywgc3RyZXJyb3IoZXJybm8pKTsNCgkJY2xvc2Uocyk7DQoJCXJldHVybiAtMTsNCgl9DQoN CgljbG9zZShzKTsNCg0KCXJldHVybiAwOw0KfQ0K --=-a+/kFhj9P+33ALSFH70e Content-Disposition: attachment; filename=carp_queue.c Content-Type: text/x-csrc; name=carp_queue.c; charset=koi8-r Content-Transfer-Encoding: base64 LyoNCiAqIAljYXJwX3F1ZXVlLmMNCiAqIA0KICogMjAwNCBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkg UG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+DQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0K ICogDQogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQ0KICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCiAqIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQogKiAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YN CiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUNCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu DQogKg0KICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UNCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg UGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBDQogKg0KICovDQoN CiNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4NCiNpbmNsdWRlIDxhc20vc3BpbmxvY2suaD4N Cg0KI2luY2x1ZGUgImNhcnAuaCINCiNpbmNsdWRlICJjYXJwX2xvZy5oIg0KI2luY2x1ZGUgImNh cnBfcXVldWUuaCINCg0Kc3RhdGljIHNwaW5sb2NrX3QgY2FycF9xdWV1ZV9sb2NrID0gU1BJTl9M T0NLX1VOTE9DS0VEOw0Kc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjYXJwX3F1ZXVl WzJdOw0Kc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgY2FycF93b3Jrc1syXTsNCnN0YXRpYyBpbnQg Y2FycF93b3JrX2NvdW50ZXI7DQoNCnN0YXRpYyB2b2lkIGNhcnBfcXVldWVfd3JhcHBlcih2b2lk ICpkYXRhKQ0Kew0KCXN0cnVjdCBjYXJwX21hc3Rlcl90YXNrICp0ID0gKHN0cnVjdCBjYXJwX21h c3Rlcl90YXNrICopZGF0YTsNCg0KCWF0b21pY19pbmMoJnQtPnRhc2stPnJlZmNudCk7DQoJdC0+ dGFzay0+Y2FsbGJhY2sodC0+dGFzay0+ZGF0YSk7DQoJYXRvbWljX2RlYygmdC0+dGFzay0+cmVm Y250KTsNCn0NCg0Kc3RydWN0IGNhcnBfbWFzdGVyX3Rhc2sgKmNhcnBfYWxsb2NfdGFzayhzdHJ1 Y3QgX19jYXJwX21hc3Rlcl90YXNrICp0KQ0Kew0KCXN0cnVjdCBjYXJwX21hc3Rlcl90YXNrICpu ZXd0Ow0KDQoJbmV3dCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjYXJwX21hc3Rlcl90YXNrKSwg R0ZQX0tFUk5FTCk7DQoJaWYgKCFuZXd0KQ0KCXsNCgkJbG9nKCJGYWlsZWQgdG8gY3JlYXRlIG5l dyBDQVJQIG1hc3RlciB0YXNrLlxuIik7DQoJCXJldHVybiBOVUxMOw0KCX0NCg0KCW1lbXNldChu ZXd0LCAwLCBzaXplb2Yoc3RydWN0IGNhcnBfbWFzdGVyX3Rhc2spKTsNCgkNCglhdG9taWNfc2V0 KCZ0LT5yZWZjbnQsIDEpOw0KCW5ld3QtPnRhc2sgPSB0Ow0KCW5ld3QtPnRhc2stPmlkID0gY2Fy cF93b3JrX2NvdW50ZXIrKzsNCgkNCglJTklUX1dPUksoJm5ld3QtPndvcmssICZjYXJwX3F1ZXVl X3dyYXBwZXIsIG5ld3QpOw0KDQoJcmV0dXJuIG5ld3Q7DQp9DQoNCnN0YXRpYyB2b2lkIGNhcnBf ZnJlZV90YXNrKHN0cnVjdCBjYXJwX21hc3Rlcl90YXNrICp0KQ0Kew0KCWNhbmNlbF9kZWxheWVk X3dvcmsoJnQtPndvcmspOw0KDQoJd2hpbGUoYXRvbWljX3JlYWQoJnQtPnRhc2stPnJlZmNudCkp DQoJCXNjaGVkdWxlX3RpbWVvdXQoMTApOw0KCQ0KCWtmcmVlKHQpOw0KfQ0KDQppbnQgY2FycF9h ZGRfdGFzayhzdHJ1Y3QgX19jYXJwX21hc3Rlcl90YXNrICptdCwgaW50IG51bSkNCnsNCglzdHJ1 Y3QgY2FycF9tYXN0ZXJfdGFzayAqbmV3dDsNCg0KCWlmIChudW0gIT0gTUFTVEVSX1FVRVVFICYm IG51bSAhPSBCQUNLVVBfUVVFVUUpDQoJCXJldHVybiAtRUlOVkFMOw0KDQoJbmV3dCA9IGNhcnBf YWxsb2NfdGFzayhtdCk7DQoJaWYgKCFuZXd0KQ0KCQlyZXR1cm4gLUVOT01FTTsNCgkNCglzcGlu X2xvY2soJmNhcnBfcXVldWVfbG9jayk7DQoJbGlzdF9hZGRfdGFpbCgmbmV3dC0+ZW50cnksICZj YXJwX3dvcmtzW251bV0pOw0KCXNwaW5fdW5sb2NrKCZjYXJwX3F1ZXVlX2xvY2spOw0KDQoJcmV0 dXJuIDA7DQp9DQoNCnZvaWQgY2FycF9kZWxfdGFzayhzdHJ1Y3QgX19jYXJwX21hc3Rlcl90YXNr ICptdCwgaW50IG51bSkNCnsNCglzdHJ1Y3QgbGlzdF9oZWFkICplbnQsICpuOw0KCXN0cnVjdCBj YXJwX21hc3Rlcl90YXNrICp0ID0gTlVMTDsNCglpbnQgZm91bmQgPSAwOw0KCQ0KCWlmIChudW0g IT0gTUFTVEVSX1FVRVVFICYmIG51bSAhPSBCQUNLVVBfUVVFVUUpDQoJCXJldHVybjsNCgkNCglz cGluX2xvY2soJmNhcnBfcXVldWVfbG9jayk7DQoJbGlzdF9mb3JfZWFjaF9zYWZlKGVudCwgbiwg JmNhcnBfd29ya3NbbnVtXSkNCgl7DQoJCXQgPSBsaXN0X2VudHJ5KGVudCwgc3RydWN0IGNhcnBf bWFzdGVyX3Rhc2ssIGVudHJ5KTsNCg0KCQlpZiAodC0+dGFzay0+aWQgPT0gbXQtPmlkKSB7DQoJ CQlsaXN0X2RlbCgmdC0+ZW50cnkpOw0KCQkJZm91bmQgPSAxOw0KCQkJYnJlYWs7DQoJCX0NCgl9 DQoJc3Bpbl91bmxvY2soJmNhcnBfcXVldWVfbG9jayk7DQoNCglpZiAoZm91bmQpDQoJew0KCQlh dG9taWNfZGVjKCZ0LT50YXNrLT5yZWZjbnQpOw0KCQljYXJwX2ZyZWVfdGFzayh0KTsNCgl9DQp9 DQoNCnZvaWQgY2FycF9jYWxsX3F1ZXVlKGludCBudW0pDQp7DQoJc3RydWN0IGxpc3RfaGVhZCAq ZW50LCAqbjsNCglzdHJ1Y3QgY2FycF9tYXN0ZXJfdGFzayAqdDsNCgkNCglpZiAobnVtICE9IE1B U1RFUl9RVUVVRSAmJiBudW0gIT0gQkFDS1VQX1FVRVVFKQ0KCQlyZXR1cm47DQoJDQoJc3Bpbl9s b2NrKCZjYXJwX3F1ZXVlX2xvY2spOw0KCWxpc3RfZm9yX2VhY2hfc2FmZShlbnQsIG4sICZjYXJw X3dvcmtzW251bV0pDQoJew0KCQl0ID0gbGlzdF9lbnRyeShlbnQsIHN0cnVjdCBjYXJwX21hc3Rl cl90YXNrLCBlbnRyeSk7DQoJCXF1ZXVlX3dvcmsoY2FycF9xdWV1ZVtudW1dLCAmdC0+d29yayk7 DQoJfQ0KCXNwaW5fdW5sb2NrKCZjYXJwX3F1ZXVlX2xvY2spOw0KfQ0KDQppbnQgY2FycF9pbml0 X3F1ZXVlcyh2b2lkKQ0Kew0KCWludCBpOw0KDQoJZm9yIChpPTA7IGk8MjsgKytpKQ0KCQlJTklU X0xJU1RfSEVBRCgmY2FycF93b3Jrc1tpXSk7DQoNCgljYXJwX3F1ZXVlW01BU1RFUl9RVUVVRV0g PSBjcmVhdGVfd29ya3F1ZXVlKCJDQVJQX20iKTsNCglpZiAoIWNhcnBfcXVldWVbTUFTVEVSX1FV RVVFXSkNCgl7DQoJCWxvZygiRmFpbGVkIHRvIGNyZWF0ZSBtYXN0ZXIgQ0FSUCBxdWV1ZS5cbiIp Ow0KCQlyZXR1cm4gLTE7DQoJfQ0KCQ0KCWNhcnBfcXVldWVbQkFDS1VQX1FVRVVFXSA9IGNyZWF0 ZV93b3JrcXVldWUoIkNBUlBfYiIpOw0KCWlmICghY2FycF9xdWV1ZVtCQUNLVVBfUVVFVUVdKQ0K CXsNCgkJZGVzdHJveV93b3JrcXVldWUoY2FycF9xdWV1ZVtNQVNURVJfUVVFVUVdKTsNCgkJbG9n KCJGYWlsZWQgdG8gY3JlYXRlIGJhY2t1cCBDQVJQIHF1ZXVlLlxuIik7DQoJCXJldHVybiAtMTsN Cgl9DQoNCglyZXR1cm4gMDsNCn0NCg0Kdm9pZCBjYXJwX2ZsdXNoX3F1ZXVlKGludCBudW0pDQp7 DQoJaWYgKG51bSAhPSBNQVNURVJfUVVFVUUgJiYgbnVtICE9IEJBQ0tVUF9RVUVVRSkNCgkJcmV0 dXJuOw0KCQ0KCWZsdXNoX3dvcmtxdWV1ZShjYXJwX3F1ZXVlW251bV0pOw0KfQ0KDQp2b2lkIGNh cnBfZmluaV9xdWV1ZXModm9pZCkNCnsNCgljYXJwX2ZsdXNoX3F1ZXVlKE1BU1RFUl9RVUVVRSk7 DQoJZGVzdHJveV93b3JrcXVldWUoY2FycF9xdWV1ZVtNQVNURVJfUVVFVUVdKTsNCgljYXJwX2Zs dXNoX3F1ZXVlKEJBQ0tVUF9RVUVVRSk7DQoJZGVzdHJveV93b3JrcXVldWUoY2FycF9xdWV1ZVtC QUNLVVBfUVVFVUVdKTsNCn0NCg0K --=-a+/kFhj9P+33ALSFH70e Content-Disposition: attachment; filename=carp_queue.h Content-Type: text/x-chdr; name=carp_queue.h; charset=koi8-r Content-Transfer-Encoding: base64 LyoNCiAqIAljYXJwX3F1ZXVlLmgNCiAqIA0KICogMjAwNCBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkg UG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+DQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0K ICogDQogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQ0KICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCiAqIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQogKiAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YN CiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUNCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu DQogKg0KICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UNCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg UGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBDQogKg0KICovDQoN CiNpZm5kZWYgX19DQVJQX1FVRVVFX0gNCiNkZWZpbmUgX19DQVJQX1FVRVVFX0gNCg0KI2luY2x1 ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPg0KDQojaW5jbHVkZSA8YXNtL2F0b21pYy5oPg0KDQplbnVt IGNhcnBfcXVldWVfbnVtYmVyIHtNQVNURVJfUVVFVUUgPSAwLCBCQUNLVVBfUVVFVUV9Ow0KDQpz dHJ1Y3QgX19jYXJwX21hc3Rlcl90YXNrDQp7DQoJYXRvbWljX3QJcmVmY250Ow0KCXUzMgkJaWQ7 DQoNCgl2b2lkIAkJKCogY2FsbGJhY2spKHZvaWQgKik7DQoJdm9pZAkJKmRhdGE7DQoNCgl2b2lk CQkqcHJpdjsNCn07DQoNCnN0cnVjdCBjYXJwX21hc3Rlcl90YXNrDQp7DQoJc3RydWN0IGxpc3Rf aGVhZAkJZW50cnk7DQoJc3RydWN0IF9fY2FycF9tYXN0ZXJfdGFzawkqdGFzazsNCg0KCXN0cnVj dCB3b3JrX3N0cnVjdAkJd29yazsNCn07DQoNCmludCBjYXJwX2luaXRfcXVldWVzKHZvaWQpOw0K dm9pZCBjYXJwX2ZsdXNoX3F1ZXVlKGludCk7DQp2b2lkIGNhcnBfZmluaV9xdWV1ZXModm9pZCk7 DQp2b2lkIGNhcnBfY2FsbF9xdWV1ZShpbnQpOw0KDQppbnQgY2FycF9hZGRfdGFzayhzdHJ1Y3Qg X19jYXJwX21hc3Rlcl90YXNrICosIGludCk7DQp2b2lkIGNhcnBfZGVsX3Rhc2soc3RydWN0IF9f Y2FycF9tYXN0ZXJfdGFzayAqLCBpbnQpOw0KDQojZW5kaWYgLyogX19DQVJQX1FVRVVFX0ggKi8N Cg== --=-a+/kFhj9P+33ALSFH70e Content-Disposition: attachment; filename=carp_log.c Content-Type: text/x-csrc; name=carp_log.c; charset=koi8-r Content-Transfer-Encoding: base64 LyoNCiAqIAljYXJwX2xvZy5jDQogKiANCiAqIDIwMDQgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBv bHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1Pg0KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAq IA0KICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkNCiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQogKiB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KICogKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCiAqDQogKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQog KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlDQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0K ICoNCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlDQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs YWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0KICoNCiAqLw0KDQoj aW5jbHVkZSA8bGludXgvY29uZmlnLmg+DQojaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQojaW5j bHVkZSA8bGludXgvdHlwZXMuaD4NCiNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPg0KI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPg0KI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPg0KI2luY2x1ZGUgPGxp bnV4L25ldGRldmljZS5oPg0KI2luY2x1ZGUgPGxpbnV4L2luLmg+DQojaW5jbHVkZSA8bGludXgv cmFuZG9tLmg+DQojaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+DQoNCiNpbmNsdWRlIDxuZXQvc29j ay5oPg0KI2luY2x1ZGUgPG5ldC9pcC5oPg0KI2luY2x1ZGUgPG5ldC9pY21wLmg+DQojaW5jbHVk ZSA8bmV0L3Byb3RvY29sLmg+DQojaW5jbHVkZSA8bmV0L2FycC5oPg0KDQojaW5jbHVkZSA8YXNt L3NjYXR0ZXJsaXN0Lmg+DQojaW5jbHVkZSA8YXNtL2RlbGF5Lmg+DQoNCiNpbmNsdWRlICJjYXJw LmgiDQojaW5jbHVkZSAiY2FycF9sb2cuaCINCg0Kdm9pZCBkdW1wX2FkZHJfaW5mbyhzdHJ1Y3Qg Y2FycF9wcml2ICpjcCkNCnsNCglpbnQgaTsNCgkNCglwcmludGsoS0VSTl9JTkZPICJDQVJQIGFk ZHI6IGh3PSIpOw0KCWZvciAoaT0wOyBpPEVUSF9BTEVOOyArK2kpDQoJCXByaW50aygiJTAyeCVj IiwgKHVuc2lnbmVkIGNoYXIpY3AtPm9kZXYtPmRldl9hZGRyW2ldLCAoaT09RVRIX0FMRU4tMSk/ JyAnOic6Jyk7DQoJcHJpbnRrKCIsIHN3PSIpOw0KCWZvciAoaT0wOyBpPDQ7ICsraSkNCgkJcHJp bnRrKCIlZCVjIiwgKG50b2hsKGNwLT5pcGguc2FkZHIpID4+ICgzLWkpKjgpJjB4ZmYsIChpPT0z KT8nICc6Jy4nKTsNCglwcmludGsoIiwgZHN0PSIpOw0KCWZvciAoaT0wOyBpPDQ7ICsraSkNCgkJ cHJpbnRrKCIlZCVjIiwgKG50b2hsKGNwLT5pcGguZGFkZHIpID4+ICgzLWkpKjgpJjB4ZmYsIChp PT0zKT8nICc6Jy4nKTsNCglwcmludGsoIlxuIik7DQp9DQoNCnZvaWQgZHVtcF9obWFjX3BhcmFt cyhzdHJ1Y3QgY2FycF9wcml2ICpjcCkNCnsNCglpbnQgaTsNCgl1bnNpZ25lZCBpbnQga2V5bGVu Ow0KCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsNCgl1OCBjYXJwX21kW0NBUlBfU0lHX0xFTl07DQoN CglrZXlsZW4gPSBzaXplb2YoY3AtPmNhcnBfa2V5KTsNCg0KCXNnLnBhZ2UJPSB2aXJ0X3RvX3Bh Z2UoJmNwLT5jYXJwX2Fkdl9jb3VudGVyKTsNCglzZy5vZmZzZXQgPSAodW5zaWduZWQgbG9uZyko JmNwLT5jYXJwX2Fkdl9jb3VudGVyKSAlIFBBR0VfU0laRTsNCglzZy5sZW5ndGggPSBzaXplb2Yo Y3AtPmNhcnBfYWR2X2NvdW50ZXIpOw0KCQ0KCWNyeXB0b19obWFjKGNwLT50Zm0sIGNwLT5jYXJw X2tleSwgJmtleWxlbiwgJnNnLCAxLCBjYXJwX21kKTsNCgkNCglwcmludGsoS0VSTl9JTkZPICJr ZXk6ICIpOw0KCWZvciAoaT0wOyBpPENBUlBfS0VZX0xFTjsgKytpKQ0KCQlwcmludGsoIiUwMngg IiwgY3AtPmNhcnBfa2V5W2ldKTsNCglwcmludGsoIlxuIik7DQoNCglwcmludGsoImNvdW50ZXI6 ICVsbHggIiwgY3AtPmNhcnBfYWR2X2NvdW50ZXIpOw0KDQoJcHJpbnRrKCJobWFjOiAiKTsNCglm b3IgKGk9MDsgaTxDQVJQX1NJR19MRU47ICsraSkNCgkJcHJpbnRrKCIlMDJ4ICIsIGNhcnBfbWRb aV0pOw0KCXByaW50aygiXG4iKTsNCn0NCg0Kdm9pZCBkdW1wX2NhcnBfaGVhZGVyKHN0cnVjdCBj YXJwX2hlYWRlciAqY2gpDQp7DQoJdTY0IGNvdW50ZXI7DQoJaW50IGk7DQoJDQoJY291bnRlciA9 IG50b2hsKGNoLT5jYXJwX2NvdW50ZXJbMF0pOw0KCWNvdW50ZXIgPSBjb3VudGVyPDwzMjsNCglj b3VudGVyICs9IG50b2hsKGNoLT5jYXJwX2NvdW50ZXJbMV0pOw0KCQ0KCWxvZygidHlwZT0ldSwg dmVyc2lvbj0ldSwgdmhpZD0ldSwgc2tldz0ldSwgYmFzZT0ldSwgY291bnRlcj0lbGx1LCBtZD17 IiwNCgkJCWNoLT5jYXJwX3R5cGUsDQoJCQljaC0+Y2FycF92ZXJzaW9uLA0KCQkJY2gtPmNhcnBf dmhpZCwNCgkJCWNoLT5jYXJwX2FkdnNrZXcsDQoJCQljaC0+Y2FycF9hZHZiYXNlLA0KCQkJY291 bnRlcik7DQoJDQoJZm9yIChpPTA7IGk8c2l6ZW9mKGNoLT5jYXJwX21kKTsgKytpKQ0KCXsNCgkJ cHJpbnRrKCIlMDJ4ICIsIGNoLT5jYXJwX21kW2ldKTsNCgl9DQoJcHJpbnRrKCJ9XG4iKTsNCn0N Cg0K --=-a+/kFhj9P+33ALSFH70e Content-Disposition: attachment; filename=carp_log.h Content-Type: text/x-chdr; name=carp_log.h; charset=koi8-r Content-Transfer-Encoding: base64 LyoNCiAqIAljYXJwX2xvZy5oDQogKiANCiAqIDIwMDQgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBv bHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1Pg0KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAq IA0KICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkNCiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQogKiB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KICogKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCiAqDQogKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQog KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlDQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0K ICoNCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlDQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs YWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0KICoNCiAqLw0KDQoj aWZuZGVmIF9fQ0FSUF9MT0dfSA0KI2RlZmluZSBfX0NBUlBfTE9HX0gNCg0KI2luY2x1ZGUgImNh cnAuaCINCg0KI2RlZmluZSBsb2coZiwgYS4uLikgcHJpbnRrKEtFUk5fSU5GTyBmLCAjI2EpDQoN CnZvaWQgZHVtcF9hZGRyX2luZm8oc3RydWN0IGNhcnBfcHJpdiAqKTsNCnZvaWQgZHVtcF9obWFj X3BhcmFtcyhzdHJ1Y3QgY2FycF9wcml2ICopOw0Kdm9pZCBkdW1wX2NhcnBfaGVhZGVyKHN0cnVj dCBjYXJwX2hlYWRlciAqKTsNCg0KI2VuZGlmIC8qIF9fQ0FSUF9MT0dfSCAqLw0K --=-a+/kFhj9P+33ALSFH70e Content-Disposition: attachment; filename=Makefile Content-Type: text/x-makefile; name=Makefile; charset=koi8-r Content-Transfer-Encoding: base64 b2JqLW0JCTo9IGlwX2NhcnAubw0KaXBfY2FycC1vYmpzCTo9IGNhcnAubyBjYXJwX2xvZy5vIGNh cnBfcXVldWUubw0KDQpLRElSCTo9IC91c3IvbG9jYWwvc3JjL2xpbnV4LTIuNg0KUFdECTo9ICQo c2hlbGwgcHdkKQ0KDQpkZWZhdWx0Og0KCSQoTUFLRSkgLUMgJChLRElSKSBTVUJESVJTPSQoUFdE KSBtb2R1bGVzDQoJZ2NjIC1XIC1XYWxsIGNhcnBjdGwuYyAtbyBjYXJwY3RsDQoNCmNvcHk6DQoJ c2NwIGlwX2NhcnAua28gY2FycGN0bCBtdGVzdDpjYXJwLw0KCXNjcCBpcF9jYXJwLmtvIGNhcnBj dGwgcGNpeDphV29yay9jYXJwLw0KDQpjbGVhbjoNCglybSAtZiAqLm8gKi5rbyAqLm1vZC4qIC4q LmNtZCAqfiBjYXJwY3RsDQoJcm0gLXJmIC50bXBfdmVyc2lvbnMNCg== --=-a+/kFhj9P+33ALSFH70e-- --=-8e7T7U6zlBuwtRlq0Usb Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) iD8DBQBA9ohkIKTPhE+8wY0RAk+SAJ9mjHxsXIJmP09tuQUSHamLTgQQTwCfYIMT naO2hbR7jdDNtH5UGzgf4bU= =2Nnu -----END PGP SIGNATURE----- --=-8e7T7U6zlBuwtRlq0Usb--