#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#define BLACKLIST_SIZE 512
typedef struct {
/* IPV4 address as 32-bit integer */
unsigned long ib_blackaddr;
/* CIDR mask as 32-bit integer */
unsigned long ib_blackmask;
} ib_arrayelement;
/* Number of entries in the blacklist table */
int ib_blacklist_size;
/* IPv4 address - CIDR mask blacklist */
ib_arrayelement ib_blackarray[BLACKLIST_SIZE];
static int ib_cmpfunc (const void *a, const void *b) {
const ib_arrayelement* aa = reinterpret_cast<const ib_arrayelement*>(a);
const ib_arrayelement* bb = reinterpret_cast<const ib_arrayelement*>(b);
if ( aa->ib_blackaddr - bb->ib_blackaddr > 0) return 1;
if ( aa->ib_blackaddr - bb->ib_blackaddr < 0) return -1;
return 0;
}
int main (int argc, char **argv) {
qsort(ib_blackarray, ib_blacklist_size,
sizeof(ib_arrayelement), ib_cmpfunc);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CgojZGVmaW5lIEJMQUNLTElTVF9TSVpFIDUxMgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgLyogSVBWNCBhZGRyZXNzIGFzIDMyLWJpdCBpbnRlZ2VyICovCiAgdW5zaWduZWQgbG9uZyBpYl9ibGFja2FkZHI7CiAgICAvKiBDSURSIG1hc2sgYXMgMzItYml0IGludGVnZXIgKi8KICB1bnNpZ25lZCBsb25nIGliX2JsYWNrbWFzazsKfSAgaWJfYXJyYXllbGVtZW50OwoKICAvKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYmxhY2tsaXN0IHRhYmxlICovCmludCBpYl9ibGFja2xpc3Rfc2l6ZTsKCiAgLyogSVB2NCBhZGRyZXNzIC0gQ0lEUiBtYXNrIGJsYWNrbGlzdCAqLwppYl9hcnJheWVsZW1lbnQgaWJfYmxhY2thcnJheVtCTEFDS0xJU1RfU0laRV07CgpzdGF0aWMgaW50IGliX2NtcGZ1bmMgKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpIHsKICBjb25zdCBpYl9hcnJheWVsZW1lbnQqIGFhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpYl9hcnJheWVsZW1lbnQqPihhKTsKICBjb25zdCBpYl9hcnJheWVsZW1lbnQqIGJiID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpYl9hcnJheWVsZW1lbnQqPihiKTsKICBpZiAoIGFhLT5pYl9ibGFja2FkZHIgLSBiYi0+aWJfYmxhY2thZGRyID4gMCkgcmV0dXJuIDE7CiAgaWYgKCBhYS0+aWJfYmxhY2thZGRyIC0gYmItPmliX2JsYWNrYWRkciA8IDApIHJldHVybiAtMTsKICByZXR1cm4gMDsKfQoKaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikgewoKICBxc29ydChpYl9ibGFja2FycmF5LCBpYl9ibGFja2xpc3Rfc2l6ZSwKICAgICAgICBzaXplb2YoaWJfYXJyYXllbGVtZW50KSwgaWJfY21wZnVuYyk7CgogIHJldHVybiAwOwp9