)]}'
{
  "log": [
    {
      "commit": "89e9f82e0b717c0e39bbffa104f9d9f817c19b46",
      "tree": "93bf15e1698b686741ee6574f65a3e7a5155dc2c",
      "parents": [
        "07bb964ef11d34235570427cd9bc4111956e31b7"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Sun Dec 11 18:48:47 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 17:27:19 2012 +0400"
      },
      "message": "zebra: ZEBRA_HELLO and mopping up routes (BZ#448)\n\nZEBRA_HELLO message is used by routing daemons to inform zebra\nwhat type of routes daemon will be announcing to zebra. Also\nzebra uses route_type_oaths array to track which daemon announces\nwhich protocol. Zebra mops up routes if daemon didn\u0027t for some\nreason.\n"
    },
    {
      "commit": "07bb964ef11d34235570427cd9bc4111956e31b7",
      "tree": "decf3cbdd503891aeab2deb3a0ff086e48a487db",
      "parents": [
        "94e7cd90feb6af51b7e21d5289dc0edc1ba94a99"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Dec 07 01:29:49 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 17:27:13 2012 +0400"
      },
      "message": "lib: fix compile warnings from set-never-used\n\nThe if_dump code had empty loop, that caused set-never-used warning.\n"
    },
    {
      "commit": "94e7cd90feb6af51b7e21d5289dc0edc1ba94a99",
      "tree": "5bb3b96f954826535d5c32376684844523284b49",
      "parents": [
        "4f5e717413b6627310a245d16f945660c9d60736"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Dec 07 01:35:11 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 17:27:05 2012 +0400"
      },
      "message": "Revert \"lib: address -Wunused-but-set-variable\"\n\nStephen Hemminger\u0027s commits contain all the changes and\nseveral other warning fixes.\n\nThis reverts commit 6947dbebdc91b6272f8107a6e0dd211457438606.\n"
    },
    {
      "commit": "4f5e717413b6627310a245d16f945660c9d60736",
      "tree": "b5ad40f737c27f99b973d7fd3c55b6bd766605bc",
      "parents": [
        "7e7a2d38b2d5d5edd3be7d6754d67c3231ee215e"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Dec 07 00:55:15 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 17:16:07 2012 +0400"
      },
      "message": "lib: fix SMUX compiler warnings\n\nMake progname a string, and cast when calling asn1.\nRemove variable set but never used.\n"
    },
    {
      "commit": "c17fbd6b1eb38e71aba65c593fa41f2e54f0b896",
      "tree": "f7c7a582f1e7cc2c6e6afb0ed77936867d59001c",
      "parents": [
        "ed269db39a167251f9b7e8e261c7f53902c094f9"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Dec 06 14:09:18 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 17:14:33 2012 +0400"
      },
      "message": "lib: fix memory leak on connect() failure\n\nChange sockunion_log() to not use strdup(). This fixes a small memory\nleak that occurs on every failed connect(), and is simpler/cleaner.\n"
    },
    {
      "commit": "ed269db39a167251f9b7e8e261c7f53902c094f9",
      "tree": "9b5de1634c4434f87d7ee67f28483a1379915a90",
      "parents": [
        "ce77002e908e8c9eeff780a6a34143af6758a17f"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Dec 06 14:04:12 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 17:14:17 2012 +0400"
      },
      "message": "lib: call filter delete hook before freeing access list\n\nThe delete_hook was being run after calling access list delete function.\nThis would cause ospf to dereference a NULL, in ospf_filter_update\nbecause \u0027access-\u003ename\u0027 was already freed.\n\nSee also:\n    https://bugzilla.vyatta.com/show_bug.cgi?id\u003d7654\n"
    },
    {
      "commit": "ce77002e908e8c9eeff780a6a34143af6758a17f",
      "tree": "76fed1f3dd8861625469f1ec9bba7c00e0cac894",
      "parents": [
        "e1fabbb86c2558b336b83de443a4fde4b2a8db90"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Dec 16 16:25:02 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 17:10:55 2012 +0400"
      },
      "message": "lib: fix type-punning in ip_masklen()\n\nip_masklen() was likely to return incorrect results after being compiled\nwith -fstrict-aliasing (-O2, -O3, -Os)\n"
    },
    {
      "commit": "e1fabbb86c2558b336b83de443a4fde4b2a8db90",
      "tree": "901bc9ebd8070f59f9ebdd6075e857c346f50fec",
      "parents": [
        "bf19277c341e6c1b94046c628c0e6d0f0b20d536"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Dec 04 23:21:55 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 17:10:42 2012 +0400"
      },
      "message": "lib: optimize ip_masklen()\n\nThe new implementation makes use of a 64KB mapping table, which makes it\npossible to compute masklen faster and with constant execution time. The\nmap also allows for additional version of the function, which can detect\nerrors in input argument.\n\nThe previous implementation had a variable cost of execution, which\ndepended on masklen in a non-linear manner, and at its worst (/31) was\n4 times slower, than the new implementation. The only case of old\nfunction just slightly outperforming the new one is /0, which is of\nlittle practical interest.\n"
    },
    {
      "commit": "bf19277c341e6c1b94046c628c0e6d0f0b20d536",
      "tree": "d25071a4826b9966bfca1e13c29e1c913ba18723",
      "parents": [
        "7b0d1c6d31d50fbf74f84cb60daaedd904b35171"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Jan 01 16:33:12 2012 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Jan 01 16:37:39 2012 +0400"
      },
      "message": "Revert \"lib: optimize apply_mask_ipv6()\"\n\nExperience with IPv4 counterpart of this function suggests, that\nthis way of type-punning is likely to cause errors.\n"
    },
    {
      "commit": "1b960ed436a5515747ff4f4d15b1389e43f3b63c",
      "tree": "d771ad8efa2fcf060e674e94c157655238fbc0d5",
      "parents": [
        "42140fb1b1f88310565c6b1d36645aa15c58424d"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Dec 03 17:45:17 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 14:20:54 2011 +0400"
      },
      "message": "build: delete .cvsignore files\n"
    },
    {
      "commit": "d5cd9a9758932dc644eb8b3f0eff3d2e17a7d677",
      "tree": "c95a1d4d56ae734e231710f94b958cca82c75d9a",
      "parents": [
        "271ee735ed3a42a1fe52f6401ddf72bd5d3e4f10"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Wed Nov 30 21:03:44 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 14:15:48 2011 +0400"
      },
      "message": "lib: clearing zclient.c for some cases of building\n\nlib/zclient.c: using of HAVE_TCP_ZEBRA in zclient_socket_*\ndefinitions extended by else clause.\n"
    },
    {
      "commit": "271ee735ed3a42a1fe52f6401ddf72bd5d3e4f10",
      "tree": "6e8995fe61efdf88513c697e1d84d4108fabbf3a",
      "parents": [
        "844ee4a8acf1a7b34e6a4a0bdf701496302a7416"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Fri Nov 25 18:51:48 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 14:13:06 2011 +0400"
      },
      "message": "quagga: option \"-z\" (\"--socket \u003cpath\u003e\") added\n\nAll daemons modified to support custom path to zserv\nsocket.\n\nlib: generalize a zclient connection\n\nzclient_socket_connect added. zclient_socket and\nzclient_socket_un were hidden under static expression.\n\"zclient_serv_path_set\" modified.\n"
    },
    {
      "commit": "d3962ba7c75db6aeb926bf909e643cef12a843ef",
      "tree": "fe21f90214fd88489723a14f5703e6756243697f",
      "parents": [
        "f6247bf278861c41a5cb61639176d5ed1301e81e"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 24 18:45:05 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Nov 21 18:35:18 2011 +0400"
      },
      "message": "lib: use prefix bit length macros\n"
    },
    {
      "commit": "c6cb2d9151fc14f9c2b1b7618695874cc8d97286",
      "tree": "1b515d8887ae4680f1463d60fd7d116da173660c",
      "parents": [
        "ed7a62efea6d957b0c5f60ec52644bba062f6c29"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Oct 18 22:02:52 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Nov 21 18:32:33 2011 +0400"
      },
      "message": "lib: optimize apply_mask_ipv6()\n"
    },
    {
      "commit": "ed7a62efea6d957b0c5f60ec52644bba062f6c29",
      "tree": "d1f026cfc0fd2c609eaa1cab40b668c031c3ed96",
      "parents": [
        "3062d2dab6e8bea9003d67a05d1e018a927d6f1d"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Oct 18 18:33:53 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Nov 21 18:32:23 2011 +0400"
      },
      "message": "lib: optimize apply_mask_ipv4()\n"
    },
    {
      "commit": "49ff274c29eaa45ae85766e62dab32faea7f32b8",
      "tree": "36b2e399ad9dbec4e525d134ba5891aa117a8c66",
      "parents": [
        "ba1a944aa7adffd9194ef0ad61649fe3e02b0f38"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 17 21:11:10 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Nov 21 18:26:04 2011 +0400"
      },
      "message": "lib: make masklen2ip6() safer and faster\n"
    },
    {
      "commit": "ba1a944aa7adffd9194ef0ad61649fe3e02b0f38",
      "tree": "ca44b50d602bb6b5a9722b7ac07ca5b97555232b",
      "parents": [
        "ed72156c9d4512217f5c80b8e20e4de024246502"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Dec 10 17:19:09 2009 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Nov 21 18:25:52 2011 +0400"
      },
      "message": "vty_serv_sock_family unused\n\nIf the vty_serv_sock_addrinfo is being used, then vty_serv_sock_family\nis unsed. Fix by adjusting ifdef/else/endif\n"
    },
    {
      "commit": "8fee927850e9011b3bf46f2a8a0d54521d00a807",
      "tree": "a436d5eb3b7e8566f4f6801daededb4a82cbfaec",
      "parents": [
        "bb6ef3e270f9ae53ac46461962500cf94ecdff08"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Oct 14 20:59:43 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Nov 21 18:25:31 2011 +0400"
      },
      "message": "lib: address -Wunused-but-set-variable\n\n* if.c\n  * if_dump(): \u0027node\u0027, \u0027c\u0027\n* distribute.c\n  * distribute_list_all(): \u0027dist\u0027\n  * distribute_list(): \u0027dist\u0027\n  * districute_list_prefix_all(): \u0027dist\u0027\n* if_rmap.c\n  * if_rmap(): \u0027if_rmap\u0027\n* vty.c\n  * vty_accept(): \u0027vty\u0027\n"
    },
    {
      "commit": "bb6ef3e270f9ae53ac46461962500cf94ecdff08",
      "tree": "1174cfd679a1351ca361e79e45f8aa86b69b60a8",
      "parents": [
        "7d3d2de4657a080275a705fbf3bd21a484cb3e4b"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Oct 14 20:56:19 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Nov 21 18:25:17 2011 +0400"
      },
      "message": "lib: spelling\n"
    },
    {
      "commit": "7d3d2de4657a080275a705fbf3bd21a484cb3e4b",
      "tree": "2ba84d4f69310037ce27f7c3df199dab5cf0f47a",
      "parents": [
        "daca2cf463496e5844812ea13a4fafefafe4853f"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Sun Oct 04 16:21:49 2009 +0200"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Nov 21 18:25:01 2011 +0400"
      },
      "message": "lib: add sockopt helper for setting IPV6_V6ONLY and use it\n\ngetaddrinfo returns a list of socket parameters for listening. it\nwill contain both IPv4 and IPv6 listening sockets. unless we use\nIPV6_V6ONLY on the IPv6 ones, only the socket listed first will\nwork. if the IPv4 one came first, the IPv6 one would get an\n\"Address in use\" error.\n\nthis functionality was already present for bgpd and its listening\nsockets. as it is needed for vtys as well, make it a common helper.\n"
    },
    {
      "commit": "daca2cf463496e5844812ea13a4fafefafe4853f",
      "tree": "fa15ebaba782e946197a18d4739b2539f4c9a1a9",
      "parents": [
        "6864a990771c66384a66cd6e7db443529460b0a6"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed Sep 16 01:52:42 2009 +0200"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Nov 21 18:24:50 2011 +0400"
      },
      "message": "lib: put route_types.txt to real use\n\nthis replaces most occurences of routing protocol lists by preprocessor\ndefines from route_types.h. the latter is autogenerated from\nroute_types.txt by a perl script (previously awk). adding a routing\nprotocol now is mostly a matter of changing route_types.txt and log.c.\n\nConflicts:\n\n\tlib/route_types.awk\n"
    },
    {
      "commit": "188506f4c618626e3da2c1e657100315f49664ee",
      "tree": "faf3e43e2b941b21105760d8fd6a84f179f95810",
      "parents": [
        "8b1eb59bb954af49455a97dbabf65321001d0225"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue Feb 02 20:16:35 2010 +0100"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Nov 21 18:23:10 2011 +0400"
      },
      "message": "lib: prefix2sockunion, prefix_common_bits helper functions\n\nprefix2sockunion converts a struct prefix* to a union sockunion *;\nprefix_common_bits counts the number of common bits in the prefix\u0027s\naddress part.\n"
    },
    {
      "commit": "89a7fd150d2408e4c6fe853a3461aa23a16d9111",
      "tree": "e15551e7019e15f75ec119c248f9cbe10b652583",
      "parents": [
        "cc6647f230a55f1f4fd765a2012561047d9ae6d1"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Oct 11 15:17:45 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 17 18:47:44 2011 +0400"
      },
      "message": "lib: fix endianness of masklen2ip()\n"
    },
    {
      "commit": "cc6647f230a55f1f4fd765a2012561047d9ae6d1",
      "tree": "3031ae0a96698fa3cc183bcec5256686ddeceb79",
      "parents": [
        "484af2c2e0efe660e00e27647a19f1837a7fa437"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Oct 08 18:15:21 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 17 18:47:38 2011 +0400"
      },
      "message": "lib: make masklen2ip() safer and faster\n"
    },
    {
      "commit": "d14a71d7209dc642f83929e48b525631a1bb09cb",
      "tree": "f2211d5587c753f7fa89ac6d19187e1467139c67",
      "parents": [
        "d1e2faa40e17fe8f3db591021994d2f5e8b11335"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Oct 12 15:07:34 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 17 18:13:40 2011 +0400"
      },
      "message": "lib: compile even without IPV6_TCLASS\n"
    },
    {
      "commit": "d1e2faa40e17fe8f3db591021994d2f5e8b11335",
      "tree": "4ca879fbf8ba3b7932c7b180f22d477dd9e3536a",
      "parents": [
        "792b6fa2c40f820df07caa80fbc6ed9c4191ef9b"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Sep 28 14:23:35 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 17 18:13:28 2011 +0400"
      },
      "message": "IPv6 transport class suppport\n\nIPv6 supports the same concept of differentiated service for routing\nprotocols as IPv4, but like too many things, the standards committee\ndecided that having two names for the same thing wasn\u0027t good enough and\nintroduced a third more generic term transport class.\n\nThe socket option to set transport class works the same as IPv4, but the\narguments are different.\n\n* lib/sockopt.[ch]\n  * setsockopt_ipv6_tclass(): new function\n* bgpd/bgp_network.c\n  * bgp_connect(): set socket option\n  * bgp_listener(): set socket option\n* ospf6d/ospf6_network.c\n  * ospf6_set_transport_class(): new function\n  * ospf6_serv_sock(): set socket option\n* ripngd/ripngd.c\n  * ripng_make_socket(): set socket option\n"
    },
    {
      "commit": "3eca6f099d5a3aac0b66dfbf98fd8be84ea426b7",
      "tree": "40bf575b7d85ba8869f022a07e3313708a8093bf",
      "parents": [
        "c347846e4f917339fd7b4c122a343f93ef621c40"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Sep 22 12:48:14 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Sep 25 18:18:25 2011 +0400"
      },
      "message": "bgpd: improve NEXT_HOP attribute checks (BZ#680)\n\n* lib/prefix.h\n  * IPV4_CLASS_DE(): new helper macro\n* bgp_attr.c\n  * bgp_attr_nexthop(): add check for \"partial\" bit, refresh flag error\n    reporting, explain meaning of RFC4271 section 6.3 and implement it\n"
    },
    {
      "commit": "614da2bf57d7df965d41869d1aa8321210d6560e",
      "tree": "c0d70c117af2681a7c56baaeb2001d20aeda5982",
      "parents": [
        "ca22cc4cc397dac8f3bf57eca516360085d44214"
      ],
      "author": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Wed Sep 21 17:41:41 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Sep 25 18:17:39 2011 +0400"
      },
      "message": "lib: provide more information in case of failed LOOKUP.\n\n* log.[ch]\n  * mes_lookup: add a parameter with the name of the message list, print\n    the name in case of failure.\n  * LOOKUP macro: pass the name of the message list.\n"
    },
    {
      "commit": "3f0d3a1f9c7b7f751473d9293ba2272a28e2a8f2",
      "tree": "f4433dac67dcaeeaf8a3cc3689c146413fef08f7",
      "parents": [
        "b38639ca49e2d0348bdc774f987a8f2f9d2ede74"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Sep 13 17:15:51 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Sep 25 18:14:23 2011 +0400"
      },
      "message": "configure: dismiss libutil.h\n\nRecent versions of libc on Linux (Debian Testing) create lots of\ncompile warnings about direct usage of libutil.h\n"
    },
    {
      "commit": "d6af701250915fdc7449500d9191f4eb2e6cfa4d",
      "tree": "315538b5d6d7a9e3351dcf80c23bc0ab12e2cf77",
      "parents": [
        "96a0a39261b5a848228f096a1a1836fa12ed3e69"
      ],
      "author": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Mon Aug 22 11:39:35 2011 +0400"
      },
      "committer": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Mon Aug 22 11:39:35 2011 +0400"
      },
      "message": "lib: use \"protocol-independed API\" from RFC3678, if that is available\n\n(This commit is based on the patch from BZ#420, and should fix that bug.)\n\n* configure.ac: detect availability of that API\n* sockopt.c (setsockopt_ipv4_multicast): use it for join/leave IPv4\n  multicast groups\n"
    },
    {
      "commit": "96a0a39261b5a848228f096a1a1836fa12ed3e69",
      "tree": "45080b3a9b31271c27bbcf0801371a822a7f2831",
      "parents": [
        "b62987450e4d4e0dd18a2766aff220d42174042b"
      ],
      "author": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Fri Aug 19 23:00:30 2011 +0400"
      },
      "committer": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Mon Aug 22 11:28:19 2011 +0400"
      },
      "message": "lib: futher simplification of setsockopt_ipv4_multicast()\n\n* sockopt.c (setsockopt_ipv4_multicast): check for wrong optname with\n  assert(), rather than return an error.\n"
    },
    {
      "commit": "87d29037b3f390cfb9d4e9e2aef4f0b49f98d557",
      "tree": "0123fe8371a8428f0c56e6bb7c76dc8faa038a0d",
      "parents": [
        "9504a6ea39a68523733a8abb147da62deae061a9"
      ],
      "author": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Fri Aug 19 22:25:23 2011 +0400"
      },
      "committer": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Fri Aug 19 22:40:08 2011 +0400"
      },
      "message": "lib: fix omission in the previous commit to lib/sockopt.c\n\n* sockopt.c (setsockopt_ipv4_multicast_if): fix missed line in\n  the previous commit.\n"
    },
    {
      "commit": "bf510e9bc06b55ae9d9c1d6ed67152b94e80977e",
      "tree": "4466103c8ad05307cbd88c7509c8ff03976f260f",
      "parents": [
        "9fa6be78ecbbda17be20b8d2bc4fdde915e33d7e"
      ],
      "author": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Thu Aug 18 20:22:17 2011 +0400"
      },
      "committer": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Fri Aug 19 22:02:17 2011 +0400"
      },
      "message": "lib: simplify interface of setsockopt_multicast_ipv4().\n\n* sockopt.[ch] (setsockopt_ipv4_multicast): ifindex is now mandatory (all\n  non-ancient OSes can use it anyway), and if_addr parameter (the address\n  of the interface) is now gone. (setsockopt_ipv4_multicast_if):\n  IP_MULTICAST_IF processing moved to this new function\n\n* ospf_network.c (ospf_if_add_allspfrouters, ospf_if_drop_allspfrouters,\n  ospf_if_add_alldrouters, ospf_if_drop_alldrouters, ospf_if_ipmulticast),\n  rip_interface.c (ipv4_multicast_join, ipv4_multicast_leave,\n  rip_interface_new): adapt to the new interface\n"
    },
    {
      "commit": "aad356a49d6b00590b21751ea560c54f321c73c9",
      "tree": "a39044ea48fadba476a8b55b96b03799ed161b30",
      "parents": [
        "1740f9e5906a7cb264e7741dd57a91654cb05dd0"
      ],
      "author": {
        "name": "Christian Hammers",
        "email": "ch@debian.org",
        "time": "Wed Mar 23 13:07:55 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Aug 03 13:09:51 2011 +0400"
      },
      "message": "lib: fix more format warnings (#637)\n\nThe following patch was also neccessary to compile.\n\n* command.c: (config_logmsg_cmd) use \"%s\" format spec\n* if.c: (connected_log) ditto\n"
    },
    {
      "commit": "c69f91be67896e7e68adb7da4b5b9c5f6013f1a2",
      "tree": "00016eca2ba088f3472149381fdea6b3199750ce",
      "parents": [
        "cbfbf2f07bd90f48e268907a597652af6d2e019d"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Aug 01 21:59:04 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Aug 01 21:59:04 2011 +0400"
      },
      "message": "lib: remove unused variable\n\n* sockopt.c (getsockopt_ifindex): \"ifindex\" was never used\n"
    },
    {
      "commit": "cbfbf2f07bd90f48e268907a597652af6d2e019d",
      "tree": "c53d3caa5e038ec24cb7dd7dbcb91af2bc76f38d",
      "parents": [
        "0e8257d21e814c46aca485d58bcfa73e06354cad"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Aug 01 16:52:03 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Aug 01 16:52:03 2011 +0400"
      },
      "message": "delete CVS keywords\n"
    },
    {
      "commit": "cd3355b83202bc109045ba1e90b6725610aa256d",
      "tree": "66d0dc78f55508bbf7b5a6603e91ff8f03260ab9",
      "parents": [
        "f4ac0fee73100c6268365df31096a64443bfb93b"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:01:17 2010 -0800"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Aug 01 15:39:26 2011 +0400"
      },
      "message": "lib: zlog should clean up its memory\n\n* log.c: (closezlog) Also free the dynamically allocated filename when\n    a log is closed.\n"
    },
    {
      "commit": "e9e42170c63efcdb14b9389f481f2fa8fcb4092a",
      "tree": "200a24e16e20ecdf6e1b614d8d62436e52bcc6f5",
      "parents": [
        "a8b79422aadf5dc821af6699e468379002cc61f9"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 24 21:41:02 2010 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Aug 01 15:28:24 2011 +0400"
      },
      "message": "lib: prefix.c nano-optimisation\n\n* lib/prefix.c: (prefix_match) nano-optimisation, let it return early\n  without copying pointers.\n"
    },
    {
      "commit": "fdc38db248a220dcb80ec0ba1f1981087213651d",
      "tree": "8b75aacb6638bdef8c18a75de85904056194d8fd",
      "parents": [
        "4a1342a56c6fdb90d9af3109afa9442ff0b850d6"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Jul 17 19:33:21 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Jul 17 19:33:21 2011 +0400"
      },
      "message": "bgpd: rename SAFI 3 according to RFC4760\n\n- SAFI value 3 is reserved.  It was assigned by RFC 2858 for a use\n  that was never fully implemented, so it is deprecated by this\n  document.\n\n* zebra.h: rename macro\n* bgp_fsm.c: (bgp_graceful_restart_timer_expire,\n  bgp_graceful_stale_timer_expire, bgp_stop, bgp_establish): update\n* bgpd.c: (peer_nsf_stop): update\n* bgp_open.c: (bgp_capability_vty_out): SAFI 3 isn\u0027t a recognized case\n  any more\n"
    },
    {
      "commit": "08a7a91646a1ee317c402b421e3a7036a640bcf4",
      "tree": "59dc48ed11f69a61cd282783ffab25f30073f334",
      "parents": [
        "4c9641ba4df276080c670e03f65b1d442660a50f"
      ],
      "author": {
        "name": "Dmitry Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Mon Oct 18 19:05:39 2010 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 18 19:05:39 2010 +0400"
      },
      "message": "zclient: fix router-id calculation for IPv6 (#595)\n\nIf router-id is not specified in ospf6d.conf, ospf6d will get it from\nthe zebra daemon. But ospf6d originates Link LSAs before the router-id\nis returned by zebra, thus this router\u0027s Link LSAs will be flooded\nwith AdvRouter set to 0.\n\n* zclient.c: zclient_start(): send ZEBRA_INTERFACE_ADD message after\n  ZEBRA_ROUTER_ID_ADD, not before\n"
    },
    {
      "commit": "4c9641ba4df276080c670e03f65b1d442660a50f",
      "tree": "15085df8068d8a3864224937eaa407c0484ff57f",
      "parents": [
        "11d3fe9b9a327b3218a76b2b9001ace50c08de8c"
      ],
      "author": {
        "name": "Michael Lambert",
        "email": "lambert@psc.edu",
        "time": "Thu Jul 22 13:20:55 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Oct 06 12:33:05 2010 -0400"
      },
      "message": "bgpd, lib: adopt afi_t and safi_t in several places\n\n* bgpd/bgp_attr.c, bgpd/bgp_open.h, bgpd/bgp_route.c, lib/prefix.c,\n  lib/prefix.h: Various integer types were being used where, if we\n  had strict type checking, afi_t and safi_t would be required.\n\nSigned-off-by: G.Balaji \u003cbalajig81@gmail.com\u003e\n(cherry picked from commit c8af35ffa2dc79ff7d7ff00b1b61f1f50a100ab6)\n"
    },
    {
      "commit": "b830c89a4532819a78c251c559566767b89ee5ac",
      "tree": "ee399053b3d043cdbb8d14f18da6472fe77649f2",
      "parents": [
        "b16793870794919ecc34138bdc51703cc3f409ca"
      ],
      "author": {
        "name": "Nico Golde",
        "email": "nion@debian.org",
        "time": "Sun Aug 01 15:24:35 2010 +0200"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Fri Sep 17 13:36:44 2010 -0400"
      },
      "message": "lib/vty.c: add missing format string when printing out motd message\n\nSigned-off-by: G.Balaji \u003cbalajig81@gmail.com\u003e\n"
    },
    {
      "commit": "b16793870794919ecc34138bdc51703cc3f409ca",
      "tree": "e1faa3f7cb5705fa2f9c954f88681e365b3fb680",
      "parents": [
        "cbc64b07c40f35c4ae5f2c0cfbf92ac5b375bc83"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Fri Sep 17 12:19:13 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Fri Sep 17 12:19:13 2010 -0400"
      },
      "message": "Document rules for zalloc and friends.\n\nlib/memory.c:z{a,c,re}alloc, zfree, zdup: add requires/effects\ncomments.\n"
    },
    {
      "commit": "dca6c883ea6219460efbe3dadde4b8b9cb12c845",
      "tree": "71352e214bd59277a50a43779bb2cbafbace6cc3",
      "parents": [
        "3f3dc2bd5f8cbde24cb581ed0aed0e372bfd556c"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Jan 27 12:38:16 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Jan 27 12:38:16 2010 +0300"
      },
      "message": "lib: undo the last PIE commit\n\nStephen:\nA recent change breaks build Quagga on Debian Lenny with amd64 (but not\ni386). Not sure whether this is cause by ld, gcc, or libtool; but\nwhatever it just won\u0027t work for a large number of users.\n\nMathias:\nI would guess it\u0027s a problem of libtool because it adds \"-fPIC -DPIC\" to\nthe compiler flags but doesn\u0027t remove -fPIE. That wouldn\u0027t be a problem\nif the compiler would ignore the -fPIE in favor to the latter -fPIC, but\nobviously it does not. [...] Those objects were actually compiled with\n-fPIC but also -fPIE which seems to confuse gcc.\n"
    },
    {
      "commit": "3f3dc2bd5f8cbde24cb581ed0aed0e372bfd556c",
      "tree": "7754c556419e6315fed189a4d7a88f33a3558852",
      "parents": [
        "65957886bfd0dd9d95360d8b015781fc82cc09be"
      ],
      "author": {
        "name": "Mathias Krause",
        "email": "Mathias.Krause@secunet.com",
        "time": "Wed Jan 20 17:39:13 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Jan 20 17:39:13 2010 +0300"
      },
      "message": "lib: fix PIE build flags\n\nBecause the final executables are built as position independent\nexecutables (PIE) -- when configure has detected compiler supported for\nPIE -- the objects in the library archive must be built in that way,\ntoo. Otherwise the runtime linker has to do unneccesary relocation for\neach start of the program. Even worse, the programs won\u0027t even be able\nto start on a (hardened) kernel that doesn\u0027t allow those relocations to\nhappen by preventing making the .text segment writable (PaX\u0027s MPROTECT\nfeature comes to mind). The attached patch fixes this issue by adding\nthe appropriate flags to the Makefile.am.\n"
    },
    {
      "commit": "0917f7e7c5920b70295c44bd8aad537bc3ee8581",
      "tree": "d55fa58af8937c2373d532223cf9a7c35df95c64",
      "parents": [
        "b6516829595ed4fc47af955de8bda9ef5be14ffd"
      ],
      "author": {
        "name": "David Ward",
        "email": "david.ward@ll.mit.edu",
        "time": "Wed Jan 13 20:10:56 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Jan 13 20:10:56 2010 +0300"
      },
      "message": "lib: fix memory logging\n\n* lib/memory.h\n  * mtype_zcalloc(): correct function prototype\n  * XFREE(): make both definitions consistent in setting\n    the pointer to NULL after freeing the memory\n\nThese changes will only have an effect if MEMORY_LOG is defined\n(it is not by default).\n"
    },
    {
      "commit": "2d362d1099f346202cb628665ff4ae563b2594f5",
      "tree": "5e8101d4ace5f4ef4e51c1cdc277c0f9652728d0",
      "parents": [
        "da88ea82acd70adf3bab641b2300ee24319da422"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Mon Dec 21 12:54:58 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Dec 21 13:03:51 2009 +0300"
      },
      "message": "lib: make some structures constant\n\n* isisd/isis_pdu.c\n  * maskbit: this pre-initialized array is not modified\n* lib/prefix.c\n  * maskbit: idem\n* lib/command.c\n  * facility_map: idem\n  * itoa64: idem\n  * default_motd: make local var static\n  * facility_name(): update local var accordingly\n  * facility_match(): idem\n"
    },
    {
      "commit": "813f6a0064e76fdc8d509ddfbd4d3870d7027850",
      "tree": "eed75fc5da5c0a4dd5dcd20bc8c7c2523b6fd32d",
      "parents": [
        "5eb9d11bf6bbe99ce47f929a14ac03351f21fe27"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Dec 10 16:13:09 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Dec 10 16:13:09 2009 +0300"
      },
      "message": "ospf6d: fix warnings from recent prefix bit commit\n\n* lib/prefix.h\n  * prefix6_bit(): add IPv6 wrapper for prefix_bit()\n* ospf6d/ospf6_lsdb.c\n  * ospf6_lsdb_type_router_head(): employ prefix6_bit()\n  * ospf6_lsdb_type_head(): idem\n"
    },
    {
      "commit": "1352ef32d70dcc102074814de63b5d08e591dd2d",
      "tree": "a0a4a40bf9a7726914f76cfa3a108529c7cc59df",
      "parents": [
        "3949a60c350fea947d2701e2fe709b174ae7af16"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Dec 09 14:43:17 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Dec 09 14:43:17 2009 +0300"
      },
      "message": "lib: move check_bit into prefix common code\n\nMake one version of check prefix bit, and put it inline\nwith proper prototype. This gets rid of some macro\u0027s and also some\nassert() that can never happen on a non-broken compiler.\n\n* bgpd/bgp_table.c\n  * CHECK_BIT(): sayonara\n  * check_bit(): sayonara\n  * SET_LINK(): sayonara\n  * set_link(): make use of prefix_bit() instead of check_bit()\n  * bgp_node_match(): idem\n  * bgp_node_lookup(): idem\n  * bgp_node_get(): idem\n* lib/prefix.h\n  * prefix_bit(): new inline version of check_bit()\n* lib/table.c\n  * CHECK_BIT(): sayonara\n  * check_bit(): sayonara\n  * SET_LINK(): sayonara\n  * set_link(): make use of prefix_bit() instead of check_bit()\n  * route_node_match(): idem\n  * route_node_lookup(): idem\n  * route_node_get(): idem\n* ospf6d/ospf6_lsdb.c\n  * CHECK_BIT(): sayonara\n  * ospf6_lsdb_lookup_next(): make use of prefix_bit() instead of\n    CHECK_BIT()\n  * ospf6_lsdb_type_router_head(): idem\n  * ospf6_lsdb_type_head(): idem\n* ospf6d/ospf6_route.c\n  * CHECK_BIT(): sayonara\n  * ospf6_route_match_head() make use of prefix_bit() instead of\n  * CHECK_BIT()\n"
    },
    {
      "commit": "3949a60c350fea947d2701e2fe709b174ae7af16",
      "tree": "f9df272afc80a1835c4d5ab10ac7460e8499566b",
      "parents": [
        "b0b709ab6656ba07f12fe0d256912dcabba19017"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Dec 09 14:13:27 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Dec 09 14:13:27 2009 +0300"
      },
      "message": "lib: fix warning on little endian\n\n* md5.c\n  * md5_calc(): If building on little endian then X\n    will be \u0027const uint32_t\u0027 which causes compiler\n    warning in code that never gets used. Just move\n    the endif to make sure code is not checked.\n"
    },
    {
      "commit": "38cc00cd823fe945c7748de18c3e8932d98dd8f8",
      "tree": "51f79a6ff37f8858b569f55f27480c4b47eb2aac",
      "parents": [
        "0d6388abc7a5da2a20a4854c400c8e176127e480"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Dec 08 12:00:50 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 08 12:00:50 2009 +0300"
      },
      "message": "lib: make match functions take const args\n\n* table.c: general type safety and compiler help:\n  * maskbit[]: become const\n  * route_node_match(): take const args\n  * route_node_match_ipv4(): idem\n  * route_node_match_ipv6(): idem\n  * check_bit(): idem, plus adjust local vars typing\n"
    },
    {
      "commit": "0d6388abc7a5da2a20a4854c400c8e176127e480",
      "tree": "effe14c7fc1e958b6082685026a1c3ad92b2451a",
      "parents": [
        "78e6cd98dd88393d0863388caf37dae45435db7a"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Dec 07 19:19:13 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Dec 07 19:19:13 2009 +0300"
      },
      "message": "lib: remove unused function: route_dump_node()\n"
    },
    {
      "commit": "78e6cd98dd88393d0863388caf37dae45435db7a",
      "tree": "3c1e57265ea8f54055eb67b3ceb147da90920e0d",
      "parents": [
        "64bf3ab7291cc5c39c5add0dc1a7de447914248b"
      ],
      "author": {
        "name": "heasley",
        "email": "heas@shrubbery.net",
        "time": "Mon Dec 07 16:41:14 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Dec 07 16:41:14 2009 +0300"
      },
      "message": "lib: log source of vty connections (bug #566)\n\nheasley: I\u0027ve used this for a while to track usage.\n"
    },
    {
      "commit": "c4cf095e95ae66c1a7b87bca95e61e50fec746ee",
      "tree": "368c8688e2bbe6cdffa46c28d4480c1496449f48",
      "parents": [
        "fab7f89dcfe77cf06806e7f8a33314d3b4857a69"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sat Aug 08 20:41:39 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 28 14:51:49 2009 +0100"
      },
      "message": "lib/trivial: str2prefix checks return of inet_pton in fragile way\n\n* prefix.c: (str2prefix_ipv6) inet_pton succesful return is presumed to be\n  1, rather than the \"not zero\" the man page describes - seemed fragile.\n"
    },
    {
      "commit": "3e4ee9591aa2d84f01ae478afd273ac55add0a1c",
      "tree": "dda1a647bc59031728ac28733feec89d8a38a8b2",
      "parents": [
        "27f5dc8120e1c6902e29d86cf0d77b82cf3848c0"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Aug 06 12:08:50 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 28 14:51:18 2009 +0100"
      },
      "message": "lib: if_lookup_by_name should be more robust to null argument\n\n* if.c: (if_lookup_by_name) shouldn\u0027t crash just cause we got a NULL name\n"
    },
    {
      "commit": "d023aec49f70156d2ed894a8fba65bcfa221ff02",
      "tree": "00ab5d69481c212b6ed2f350c5a5c7f430ef9208",
      "parents": [
        "03621955d8ab0ea30024bd8fc83afda8e48db712"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Jul 21 16:27:21 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 10:04:38 2009 +0100"
      },
      "message": "bgpd: start listener on first instance\n\nStart BGP listener only after first instance is started.  This helps the\nsecurity if BGP is not used but daemon is started.  It also addresses some\nissues like MD5 not working on listener unless IPV6 configured (because\nlistener was not in list); as well as compiler warnings.\n\n* bgp_network.c: (bgp_listener) listen socket creation consolidated here\n  (bgp_socket) Use bgp_listener\n* bgpd.c: (bgp_get) call bgp_socket on creation of first struct bgp.\n  (bgp_init) remove bgp_socket call.\n* memtypes.c: Add MTYPE_BGP_LISTENER\n"
    },
    {
      "commit": "228da42898c4f7bd72d9c1ee4135108e8d40d860",
      "tree": "a780ed018bfeb97c174958f188c770c74a48bad9",
      "parents": [
        "54a15182e05ca757db3bb90a4135e9f8fd3c84f2"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Sat Jul 18 05:44:03 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jul 19 18:28:08 2009 +0100"
      },
      "message": "[bgpd] Stability fixes including bugs 397, 492\n\nI\u0027ve spent the last several weeks working on stability fixes to bgpd.\nThese patches fix all of the numerous crashes, assertion failures, memory\nleaks and memory stomping I could find.  Valgrind was used extensively.\n\nAdded new function bgp_exit() to help catch problems.  If \"debug bgp\" is\nconfigured and bgpd exits with status of 0, statistics on remaining\nlib/memory.c allocations are printed to stderr.  It is my hope that other\ndevelopers will use this to stay on top of memory issues.\n\nExample questionable exit:\n\n  bgpd: memstats: Current memory utilization in module LIB:\n  bgpd: memstats:  Link List                     :          6\n  bgpd: memstats:  Link Node                     :          5\n  bgpd: memstats:  Hash                          :          8\n  bgpd: memstats:  Hash Bucket                   :          2\n  bgpd: memstats:  Hash Index                    :          8\n  bgpd: memstats:  Work queue                    :          3\n  bgpd: memstats:  Work queue item               :          2\n  bgpd: memstats:  Work queue name string        :          3\n  bgpd: memstats: Current memory utilization in module BGP:\n  bgpd: memstats:  BGP instance                  :          1\n  bgpd: memstats:  BGP peer                      :          1\n  bgpd: memstats:  BGP peer hostname             :          1\n  bgpd: memstats:  BGP attribute                 :          1\n  bgpd: memstats:  BGP extra attributes          :          1\n  bgpd: memstats:  BGP aspath                    :          1\n  bgpd: memstats:  BGP aspath str                :          1\n  bgpd: memstats:  BGP table                     :         24\n  bgpd: memstats:  BGP node                      :          1\n  bgpd: memstats:  BGP route                     :          1\n  bgpd: memstats:  BGP synchronise               :          8\n  bgpd: memstats:  BGP Process queue             :          1\n  bgpd: memstats:  BGP node clear queue          :          1\n  bgpd: memstats: NOTE: If configuration exists, utilization may be expected.\n\nExample clean exit:\n\n  bgpd: memstats: No remaining tracked memory utilization.\n\nThis patch fixes bug #397: \"Invalid free in bgp_announce_check()\".\n\nThis patch fixes bug #492: \"SIGBUS in bgpd/bgp_route.c:\nbgp_clear_route_node()\".\n\nMy apologies for not separating out these changes into individual patches.\nThe complexity of doing so boggled what is left of my brain.  I hope this\nis all still useful to the community.\n\nThis code has been production tested, in non-route-server-client mode, on\na linux 32-bit box and a 64-bit box.\n\nRelease/reset functions, used by bgp_exit(), added to:\n\n  bgpd/bgp_attr.c,h\n  bgpd/bgp_community.c,h\n  bgpd/bgp_dump.c,h\n  bgpd/bgp_ecommunity.c,h\n  bgpd/bgp_filter.c,h\n  bgpd/bgp_nexthop.c,h\n  bgpd/bgp_route.c,h\n  lib/routemap.c,h\n\nFile by file analysis:\n\n* bgpd/bgp_aspath.c: Prevent re-use of ashash after it is released.\n\n* bgpd/bgp_attr.c: #if removed uncalled cluster_dup().\n\n* bgpd/bgp_clist.c,h: Allow community_list_terminate() to be called from\n  bgp_exit().\n\n* bgpd/bgp_filter.c: Fix aslist-\u003ename use without allocation check, and\n  also fix memory leak.\n\n* bgpd/bgp_main.c: Created bgp_exit() exit routine.  This function frees\n  allocations made as part of bgpd initialization and, to some extent,\n  configuration.  If \"debug bgp\" is configured, memory stats are printed\n  as described above.\n\n* bgpd/bgp_nexthop.c: zclient_new() already allocates stream for\n  ibuf/obuf, so bgp_scan_init() shouldn\u0027t do it too.  Also, made it so\n  zlookup is global so bgp_exit() can use it.\n\n* bgpd/bgp_packet.c: bgp_capability_msg_parse() call to bgp_clear_route()\n  adjusted to use new BGP_CLEAR_ROUTE_NORMAL flag.\n\n* bgpd/bgp_route.h: Correct reference counter \"lock\" to be signed.\n  bgp_clear_route() now accepts a bgp_clear_route_type of either\n  BGP_CLEAR_ROUTE_NORMAL or BGP_CLEAR_ROUTE_MY_RSCLIENT.\n\n* bgpd/bgp_route.c:\n  - bgp_process_rsclient(): attr was being zero\u0027ed and then\n    bgp_attr_extra_free() was being called with it, even though it was\n    never filled with valid data.\n\n  - bgp_process_rsclient(): Make sure rsclient-\u003egroup is not NULL before\n    use.\n\n  - bgp_processq_del(): Add call to bgp_table_unlock().\n\n  - bgp_process(): Add call to bgp_table_lock().\n\n  - bgp_update_rsclient(): memset clearing of new_attr not needed since\n    declarationw with \"\u003d { 0 }\" does it.  memset was already commented\n    out.\n\n  - bgp_update_rsclient(): Fix screwed up misleading indentation.\n\n  - bgp_withdraw_rsclient(): Fix screwed up misleading indentation.\n\n  - bgp_clear_route_node(): Support BGP_CLEAR_ROUTE_MY_RSCLIENT.\n\n  - bgp_clear_node_queue_del(): Add call to bgp_table_unlock() and also\n    free struct bgp_clear_node_queue used for work item.\n\n  - bgp_clear_node_complete(): Do peer_unlock() after BGP_EVENT_ADD() in\n    case peer is released by peer_unlock() call.\n\n  - bgp_clear_route_table(): Support BGP_CLEAR_ROUTE_MY_RSCLIENT.  Use\n    struct bgp_clear_node_queue to supply data to worker.  Add call to\n    bgp_table_lock().\n\n  - bgp_clear_route(): Add support for BGP_CLEAR_ROUTE_NORMAL or\n    BGP_CLEAR_ROUTE_MY_RSCLIENT.\n\n  - bgp_clear_route_all(): Use BGP_CLEAR_ROUTE_NORMAL.\n\n  Bug 397 fixes:\n\n    - bgp_default_originate()\n    - bgp_announce_table()\n\n* bgpd/bgp_table.h:\n  - struct bgp_table: Added reference count.  Changed type of owner to be\n    \"struct peer *\" rather than \"void *\".\n\n  - struct bgp_node: Correct reference counter \"lock\" to be signed.\n\n* bgpd/bgp_table.c:\n  - Added bgp_table reference counting.\n\n  - bgp_table_free(): Fixed cleanup code.  Call peer_unlock() on owner if\n    set.\n\n  - bgp_unlock_node(): Added assertion.\n\n  - bgp_node_get(): Added call to bgp_lock_node() to code path that it was\n    missing from.\n\n* bgpd/bgp_vty.c:\n  - peer_rsclient_set_vty(): Call peer_lock() as part of peer assignment\n    to owner.  Handle failure gracefully.\n\n  - peer_rsclient_unset_vty(): Add call to bgp_clear_route() with\n    BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.\n\n* bgpd/bgp_zebra.c: Made it so zclient is global so bgp_exit() can use it.\n\n* bgpd/bgpd.c:\n  - peer_lock(): Allow to be called when status is \"Deleted\".\n\n  - peer_deactivate(): Supply BGP_CLEAR_ROUTE_NORMAL purpose to\n    bgp_clear_route() call.\n\n  - peer_delete(): Common variable listnode pn.  Fix bug in which rsclient\n    was only dealt with if not part of a peer group.  Call\n    bgp_clear_route() for rsclient, if appropriate, and do so with\n    BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.\n\n  - peer_group_get(): Use XSTRDUP() instead of strdup() for conf-\u003ehost.\n\n  - peer_group_bind(): Call bgp_clear_route() for rsclient, and do so with\n    BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.\n\n  - bgp_create(): Use XSTRDUP() instead of strdup() for peer_self-\u003ehost.\n\n  - bgp_delete(): Delete peers before groups, rather than after.  And then\n    rather than deleting rsclients, verify that there are none at this\n    point.\n\n  - bgp_unlock(): Add assertion.\n\n  - bgp_free(): Call bgp_table_finish() rather than doing XFREE() itself.\n\n* lib/command.c,h: Compiler warning fixes.  Add cmd_terminate().  Fixed\n  massive leak in install_element() in which cmd_make_descvec() was being\n  called more than once for the same cmd-\u003estrvec/string/doc.\n\n* lib/log.c: Make closezlog() check fp before calling fclose().\n\n* lib/memory.c: Catch when alloc count goes negative by using signed\n  counts.  Correct #endif comment.  Add log_memstats_stderr().\n\n* lib/memory.h: Add log_memstats_stderr().\n\n* lib/thread.c: thread-\u003efuncname was being accessed in thread_call() after\n  it had been freed.  Rearranged things so that thread_call() frees\n  funcname.  Also made it so thread_master_free() cleans up cpu_record.\n\n* lib/vty.c,h: Use global command_cr.  Add vty_terminate().\n\n* lib/zclient.c,h: Re-enable zclient_free().\n"
    },
    {
      "commit": "3fa3f957e70f594cc2c1cac03644ddf48554c178",
      "tree": "86e63fd609afab8fc297e557b03cd4993f981ab2",
      "parents": [
        "9b4ef258a9d9c5f1052afe0e19ebaef9f6740fa2"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Sat Jul 11 21:27:51 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jul 16 18:13:00 2009 +0100"
      },
      "message": "[lib] Fix IPv6 normalisation\n\n* lib/sockunion.c: (sockunion_normalise_mapped) The code to normalize\n  address was not copying port value - probably reason why IPV4 in IPV6\n  never worked right.\n"
    },
    {
      "commit": "41b2373cece77f0cc9a06fba076c99a7be653593",
      "tree": "bed11b842b7a33e78e8c5012bf624946aeaf1edc",
      "parents": [
        "bd2462425205a681d75e04c94a94bf4cea5da58b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 30 16:12:49 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 30 16:12:49 2009 +0100"
      },
      "message": "[lib/cleanup] Use a typedef for the thread type\n\n* lib/thread.{c,h}: As per subject. This will avoid head-scratching for next\n  person who adds a thread-type and gets strange breakage.\n"
    },
    {
      "commit": "2b35ae41c2c5d39801c943fa740c72fc15613141",
      "tree": "b72600ce7970f5a62a344fd7fed3f5e53779b7a2",
      "parents": [
        "b60668d092f1778395b6c10b406059b8cbf235b8"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Tue Jun 23 05:34:29 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 23 14:21:40 2009 +0100"
      },
      "message": "Fixes to RFC2385/MD5 BGP\n\n* bgpd/bgp_network.c: Fix MD5 listen in IPv4 version of bgp_socket() by\n  adding listen socket to listen_sockets list so that MD5 passwords can\n  get set.\n* lib/sockopt.c: (sockopt_tcp_signature) Fix bogus \"% Error while applying\n  TCP-Sig to session(s)\" / \"can\u0027t set TCP_MD5SIG option\" startup error\n  messages by not returning error when there isn\u0027t one.\n"
    },
    {
      "commit": "6511cab26728453d1b5e572bbbc3775f70c10c0e",
      "tree": "586184e1e02aedbf67d4ebca145980f8f402ae62",
      "parents": [
        "c4376c9d28f1282f502ed5279ee80ec5c4cb810d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 17:38:01 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:31 2009 +0100"
      },
      "message": "[configure] Refine CLOCK_MONOTONIC test\n\n* configure.ac: Check for the actual CLOCK_MONOTONIC symbol, as clock_gettime\n  need not imply that clock type is supported\n* lib/zebra.h: use the method given in autoconf docs for sys/time.h\n  inclusion\n"
    },
    {
      "commit": "8e4c09307d9eafbbbf7fbffb3d3483287cea169b",
      "tree": "c9b39213248d64fdaa28bc419e77ce1e3866a585",
      "parents": [
        "fc52f95373b1dc0bec5f5a474bafa362b02a63ae"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 09:47:34 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:29 2009 +0100"
      },
      "message": "[cleanup] Allow message tables to be constant\n\nAvoid bugs, and improve cache locality by allowing message lists\nto be read/only.\n"
    },
    {
      "commit": "65d3fbb4835e268b1683b88b12e101c6592b1948",
      "tree": "5eb12ca5e645fd6d4751367d6b2b2ea5ed18699e",
      "parents": [
        "9bddac4bd50034c713940ad77cebfbb7f3cd123a"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 09:59:03 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:29 2009 +0100"
      },
      "message": "[cleanup] Use const in smux interface\n\nsmux_trap and oid_copy should allow read-only source.\n"
    },
    {
      "commit": "94fc1dd41cd0267acb9c67dd3dcf1e64ef8713af",
      "tree": "95ade8cc41fe0d758b22d01d50b02b7b88499f38",
      "parents": [
        "e5862a2df2b5f65b0c050987c5f145836e0b75b3"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Mon Mar 09 16:09:50 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:27 2009 +0100"
      },
      "message": "[lib] Put symbolic backtrace on system log\n\nWhen BGP crashes, sometimes all we get to see is syslog.\n"
    },
    {
      "commit": "e5862a2df2b5f65b0c050987c5f145836e0b75b3",
      "tree": "20a10d219e87f9ac98d858cad263e9d1760d1ebb",
      "parents": [
        "66a11e76d4a8ee18c4e79c06d25814b9aa94e45d"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Thu Feb 19 23:01:41 2009 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:27 2009 +0100"
      },
      "message": "[lib] sockopt_tcp_signature: sin6 requires HAVE_IPV6\n\nAn external user was building on system without IPv6 and\nit wouldn\u0027t work.\n"
    },
    {
      "commit": "80c375e72d7c3b9fe41b1ffec461ec5e1b57caa7",
      "tree": "1b596a2dd78fe20757443543512669c641b00ade",
      "parents": [
        "7fc626de5f618133ad2a478d13defa3a110b89ea"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri Aug 08 15:15:23 2008 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:24 2009 +0100"
      },
      "message": "[gcc] Add gcc printf format checks\n"
    },
    {
      "commit": "7fc626de5f618133ad2a478d13defa3a110b89ea",
      "tree": "432ff0e4672eabc2ec6b0dcffc22dcc0aee532c8",
      "parents": [
        "66e5cd87194ae6fdd51061a91b4698bc0a652f6b"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Mon Dec 01 11:10:34 2008 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 17:10:29 2009 +0100"
      },
      "message": "[cleanup] Make command nodes static\n\nThe cmd_nodes used to configure vty, can mostly be static so\n(basic data hiding 101).\n"
    },
    {
      "commit": "66e5cd87194ae6fdd51061a91b4698bc0a652f6b",
      "tree": "659d31f9a7dfb8d9ad9a51f37ff0853054a45399",
      "parents": [
        "cedd7f2fa6823bca9ddcfb062f97ed83b11a80dd"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Mon Feb 09 10:14:16 2009 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 17:09:03 2009 +0100"
      },
      "message": "[cleanup] functions taking no args should be declared with void args\n\nUse Ansi-C prototypes rather than old K\u0026R method of declaring\nfunction without arguments\n"
    },
    {
      "commit": "cedd7f2fa6823bca9ddcfb062f97ed83b11a80dd",
      "tree": "4e6cc4d9ebf2bf861fb0278f8d49f8f3c030edc1",
      "parents": [
        "393deb9bd663361e6b110d579a8b1d4c22667068"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri Jun 12 16:58:49 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 17:08:26 2009 +0100"
      },
      "message": "[cleanup] add const attribute to lib/if.c::if_dump\n"
    },
    {
      "commit": "393deb9bd663361e6b110d579a8b1d4c22667068",
      "tree": "e93ebf2f57bf92ff7a9cd045764b3cdbb99a07e5",
      "parents": [
        "3453a7122c1d585ad789ed0f63deb90cc5e89fae"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Mon Aug 18 14:13:29 2008 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 17:07:49 2009 +0100"
      },
      "message": "[cleanup] Convert XMALLOC/memset to XCALLOC\n\nSimple conversion of XMALLOC/memset to XCALLOC\n"
    },
    {
      "commit": "3453a7122c1d585ad789ed0f63deb90cc5e89fae",
      "tree": "688446217623080afedffc7f074c8cba58b9b5aa",
      "parents": [
        "10819ecee3ced786162b68310cf172aacda18857"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 14:21:02 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 14:21:02 2009 +0100"
      },
      "message": "[bgpd] Add support for the old Linux 2.4, TCP_MD5_AUTH RFC2385 patch\n\n* configure.ac: Add a --enable-linux24-tcp-md5 argument, to compile in\n  support for the old TCP-MD5 patch for Linux 2.4 systems.  This overrides\n  auto-detection of TCP-MD5 supported by the target system.\n* lib/sockopt.c: (sockopt_tcp_signature) add in a variant for the old\n  Linux 2.4, TCP_MD5_AUTH variant of TCP-MD5 support, conditional\n  on the previous configure arg.\n"
    },
    {
      "commit": "0be8dfb2a95f41f100982085595b7c7505127018",
      "tree": "add7218b0c518ac0cd276c74fe700b5ed1f26762",
      "parents": [
        "42176e6b01c9ca2b2725952684b2d7792468e861"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Tue Jun 02 18:40:07 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 02 18:45:10 2009 +0100"
      },
      "message": "[snmp] Compiler warning fixes for when \"--enable-snmp\" is configured.\n\nCompiled on 32-bit and 64-bit linux gcc 4.1.2 platforms.\nNo run-time testing on 32-bit and limited run-time testing on 64-bit.\n"
    },
    {
      "commit": "42176e6b01c9ca2b2725952684b2d7792468e861",
      "tree": "2eb360778e96efe5ddc554a2b348e5e743030d61",
      "parents": [
        "04d23314ddf950fefb3ff18306c7564bf4573a12"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Tue Jun 02 18:37:11 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 02 18:38:24 2009 +0100"
      },
      "message": "[smux] 64-bit fix for lib/smux.h SNMP_INTEGER() macro\n\nMacro SNMP_INTEGER() prepares data which is eventually processed\nby asn_build_int().  SNMP_INTEGER() was using \"int32_t\" whereas\nasn_build_int() uses \"long\".  On 32-bit systems these are the\nsame, both 4 bytes, but on x86 64-bit systems \"long\" is 8 bytes.\n\nasn_build_int()\u0027s reaction to an improperly sized value is to return\na NULL pointer.  Quagga\u0027s smux.c would eventually get this NULL\npointer and use it in calculations to determine how much data to send\nover the smux connection, resulting in garbage being sent to the\nSNMP agent.\n\nCorrected SNMP_INTEGER() to use \"long\".\n\nTested on 32-bit and 64-bit x86 Linux 2.6.27.10 systems running\nQuagga 0.99.11 with bgpd smux.\n"
    },
    {
      "commit": "acde4b861333d799b50d6e8a53214abc0d17ede3",
      "tree": "e6fa104c7bfb45043aec82c9cab3941cb09459bd",
      "parents": [
        "5012bc3d217f4fff5759745ee689869fb5224b41"
      ],
      "author": {
        "name": "Steve Hill",
        "email": "quagga@cheesy.sackheads.org",
        "time": "Tue Jun 02 14:28:16 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 02 14:28:16 2009 +0100"
      },
      "message": "[bgp] Fix crash on SIGHUP, deref of freed workqueues\n\n* lib/workqueue.c: free-ing workqueues had never been tested obviously,\n  queue\u0027s thread was not being stopped\n* bgpd/bgpd.c: null out freed workqueues, to prevent acting on freed\n  workqueues\n"
    },
    {
      "commit": "b8192765a320f389e09bf7261e8902958ad21584",
      "tree": "dab031e7db5d0f844164b52391155af17a3c2a81",
      "parents": [
        "6e907dd4abdff9c52c809ea49c76d789b11c0e12"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Nov 10 09:33:30 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sat Nov 29 18:04:22 2008 +0000"
      },
      "message": "[lib] Fix timer precision.\n\nWhenever a thread adds an timer funcname_thread_add_timer_timeval() gets called\nto add the timer. Before adding the timer a quagga_gettimeofday() call\nis made to do some time house keeping. However quagga_gettimeofday() only\nupdates recent_time, not relative_time that is used to calculate\nthe alarm_time. Replace with quagga_get_relative (NULL)\n"
    },
    {
      "commit": "6e907dd4abdff9c52c809ea49c76d789b11c0e12",
      "tree": "fc63d6c0699cc626a316ae3662f045f7de8e90fe",
      "parents": [
        "4768061ad5d7c762f2272436a89e62d4e41676a2"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Nov 17 11:22:25 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sat Nov 29 18:04:11 2008 +0000"
      },
      "message": "[lib] Move type cast in Fletcher checksum\n\nThe int type cast should be on the whole expression\npassed to the mod operator. Otherwise it won\u0027t work\nwhen/if c0/c1 is unsigned.\nMaking c0/c1 unsigned makes it possible to use 5802\nas MODX value.\n"
    },
    {
      "commit": "84152ee6841d0d83bd46ed6f8f12cc5c08386c7f",
      "tree": "e832a6c1cb1f752dfd1f38fd3c4804038ec455f2",
      "parents": [
        "e0081f70ede76bc7a3db53eaab3e45ba657cc4d3"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Nov 24 22:25:16 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Nov 24 22:25:16 2008 +0000"
      },
      "message": "[lib] fix missing sockunion_normalise_mapped\n\n* lib/sockunion.c: (sockunion_accept) sockunion needs to be normalised here,\n  as it used to before this was moved to a dedicated function..\n"
    },
    {
      "commit": "5d4b8cf2faba9f5386810a7c70837e5b7fae3572",
      "tree": "ec89383f7bfd4684a0cde15648e5f00e8d2d8f7b",
      "parents": [
        "41dc3488cf127a1e23333459a0c316ded67f7ff3"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Nov 16 18:34:19 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Nov 16 18:47:02 2008 +0000"
      },
      "message": "[lib] Switch Fletcher checksum back to old ospfd version\n\n* lib/checksum.c: (fletcher_checksum) Switch the second phase of the checksum\n  back to the old ospfd logic.\n\n  The isisd-derived version:\n\n  a) is very hard to follow\n  b) had some kind of subtle bug that caused it be wrong when c0\u003d0 and c1\u003d254\n     (potentially fixable by doing the mods before adjusting x and y)\n\n  Additionally:\n\n  - explicitely cast expressions using non-internal variables to int, to ensure\n    the result is signed.\n  - defensively change the length argument to \u0027size_t\u0027, to ensure the code\n    works with that argument being unsigned..\n\n  Thanks to Joakim Tjernlund for the investigative work into this bug.\n\n* tests/test-checksum.c: new file to exercise the checksum code.\n"
    },
    {
      "commit": "1a7dcf42a244d758732464be389f5cdb1358b9e4",
      "tree": "2ffaad12282dda97d2f180e6c0c0a52d9e38d595",
      "parents": [
        "2b2fc5606f035eabd322b3a6aad4349efb9ab542"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Sep 09 21:17:04 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 09 21:17:04 2008 +0100"
      },
      "message": "[lib] re-enable conversion of v6mapped INET6 sockunions to regular INET\n\n* lib/sockunion.c: Re-enable conversion of v6mapped INET6 sockunions to\n  regular INET sockunions, which was disabled in 0df7c9, as it leads to\n  failures in sockunion_cmp.\n  (sockunion_normalise_mapped) consolidate here\n  (sockunion_accept) remove conversion code altogether here - no sockunion\n  is created\n  (sockunion_get{sockname,peername}) normalise newly created sockunion.\n"
    },
    {
      "commit": "ef16c8a2abd39b14fed45665eda5c293b93ee54b",
      "tree": "3e8a386296fcc36ec3ffef6ebbf38da36c7cfdcf",
      "parents": [
        "b3bc68e5a4eecd85138463ae5742c2ccaa1db4bb",
        "62687ff1cd3d4460cdbd4b0fbf1e3298fe277ad2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 04 13:52:38 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 04 13:52:38 2008 +0100"
      },
      "message": "Merge branch \u0027restricted-mode\u0027\n"
    },
    {
      "commit": "fb62a3cef5960885119f9e87c833520ddf2a9b49",
      "tree": "cf6c5cde38c91ad555021f44793b92fd34de8198",
      "parents": [
        "b38309a4ee831a440ef78f8a27db584f2f8e8276"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Tue May 13 20:03:32 2008 +0200"
      },
      "committer": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Aug 25 09:48:30 2008 +0200"
      },
      "message": "Make --enable-snmp cross compile and make libcrypto optional with --without-crypto\n\nAutoconfig work by me, the rest was done by\n\"Kirill K. Smirnov\" \u003clich@math.spbu.ru\u003e\n"
    },
    {
      "commit": "62687ff1cd3d4460cdbd4b0fbf1e3298fe277ad2",
      "tree": "6bea5c1cf07d9d702c95fabe356fcec418b91398",
      "parents": [
        "b38309a4ee831a440ef78f8a27db584f2f8e8276"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Aug 23 14:27:06 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sat Aug 23 14:27:06 2008 +0100"
      },
      "message": "[vty] Add support for a \u0027restricted mode\u0027 with anonymous vty connections\n\n\t* lib/command.h: Add a RESTRICTED_NODE, intended for use with\n\t  anonymous, \u0027no login\u0027 vtys, to provide a subset of \u0027view\u0027 mode\n\t  commands.\n\t* lib/command.c: Add RESTRICTED_NODE bits, nothing special, just\n\t  following VIEW_NODE.\n\t* lib/vty.c: (vty_auth) enable authentication should fall back to\n\t  restricted/view node as appropriate.\n\t  (vty_create) init vty\u0027s to restricted/view node as appropriate,\n\t  for the \u0027no login\u0027 case.\n\t  (vty_{no_,}restricted_mode_cmd) config commands to enable\n\t  \u0027anonymous restricted\u0027 in vty configuration.\n\t  (vty_config_write) \u0027anonymous restricted\u0027 config.\n\t  (vty_init) Install some commands to restricted mode, and the\n\t  \u0027anonymous restricted\u0027 config commands into VTY_NODE.\n\t* bgpd/*.c: Install some of the safe(r) BGP commands into\n\t  \u0027restricted mode\u0027, i.e. lookup commands of non-sensitive data.\n\t  Useful with looking-glass route-servers.\n"
    },
    {
      "commit": "d68cbf9261869e532dfdd14dbb4122b3f3feb0d4",
      "tree": "5cc873e6a38a3db9ad5fb4dfe579624ff7693c13",
      "parents": [
        "3998bfd76620a676fbd77f19c5c6ea80a4cc88d2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Oct 21 18:35:27 2006 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 20:00:46 2008 +0100"
      },
      "message": "[administrivia] Git should ignore backup files and .loT files\n"
    },
    {
      "commit": "3998bfd76620a676fbd77f19c5c6ea80a4cc88d2",
      "tree": "66bf93340e55bb06b25544ef04afec3749269391",
      "parents": [
        "e5248434c0d287668be956a2bd52399d67b16c39"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Aug 19 14:13:43 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:57:22 2008 +0100"
      },
      "message": "[trivia] Remove ChangeLog files, as this data is now maintained in SCM\n"
    },
    {
      "commit": "30a2231a4881f53deca61ef7a62b225a43dab4c5",
      "tree": "f26dff922a4f85d302fa67bbd9a120108db41c44",
      "parents": [
        "f5612dd382d9c0f4089b08ec164c25a8082d9f89"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Aug 15 14:05:22 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:59 2008 +0100"
      },
      "message": "[warnings] Fix various SOS warnings\n\n2008-08-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* */*: Fix various problems flagged by Sun Studio compiler.\n\t  - \u0027\u003cqualifier\u003e \u003cstorage\u003e\u0027 obsolescent in declarations\n\t  - empty statements (\u0027;\u0027 after ALIAS definitions)\n\t  - implicit declarations (e.g printstack in lib/log.c)\n\t  - \"\\%\" in printf string instead of \"%%\"\n\t  - loops that return on the first iteration (legitimately, but\n \t    compiler can\u0027t really know), e.g. bgp_routemap.c\n \t  - internal declarations which mask prototypes.\n"
    },
    {
      "commit": "f5612dd382d9c0f4089b08ec164c25a8082d9f89",
      "tree": "6766dccbdf57cc0b936d622c8172ae7a9f8cfc6e",
      "parents": [
        "6ac29a51075def99217a4ab1015635db3b3e83ed"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Aug 15 14:05:08 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:58 2008 +0100"
      },
      "message": "[lib] Fix mistake in tcp-md5sig commit which broke compile on BSD\n\n2008-08-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* lib/sockopt.c: (sockopt_tcp_signature) ifdef\u0027ing hid variable\n\t  declaration for HAVE_DECL_TCP_MD5SIG \u0026\u0026 !GNU_LINUX, breaking\n\t  compile - fix.\n"
    },
    {
      "commit": "1423c809cc4ddc2e013ba6264c49a11e5719c6f2",
      "tree": "db0389e7de020bbcb9fd78d45417b0842a6adb0b",
      "parents": [
        "89d9fa301e146193093ff876f96b3612dc390bbb"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Thu Aug 14 17:59:25 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:58 2008 +0100"
      },
      "message": "[lib] mes_lookup string lookup table argument should be marked const\n\n2008-08-14 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* lib/log.{c,h}: struct message argument should point to const\n\t* */*.c: adjust to suit,\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "ffe11cfb0a808ae514193438616dfabc512b4cf6",
      "tree": "94452dba2c1a49d6e6a0782c6513acb36823cefc",
      "parents": [
        "9fd4958a4eef88c536e4a5aeefce302e10ee8ee6"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Thu Aug 14 16:25:25 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:58 2008 +0100"
      },
      "message": "[lib] hash compare function arguments ought to be const qualified\n\n2008-08-14 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* lib/hash.h: (struct hash) Hash comparator callback really\n\t  ought to treat storage behind arguments as constant - a compare\n\t  function with side-effects would be evil.\n\t* */*.c: Adjust comparator functions similarly, thus fixing at least\n\t  a few compiler warnings about const qualifier being dropped.\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "efda3bb8e548fee84928ff23329c11de8e742ecd",
      "tree": "d49dd2cdcf1d995be81c9cf56ddda6a25d3aba22",
      "parents": [
        "40da22166ff29753a65b7947ed5fa7261fee1d80"
      ],
      "author": {
        "name": "Jingjing Duan",
        "email": "Jingjing.Duan@sun.com",
        "time": "Wed Aug 13 19:02:03 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:57 2008 +0100"
      },
      "message": "[lib] Add fletcher checksum implementation\n\n2008-08-13 Jingjing Duan \u003cJingjing.Duan@sun.com\u003e\n\n\t* lib/checksum.?: (fletcher_checksum) implementation of\n\t  Fletcher checksum, as per RFC1008.\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "7f794f2bb079c1a5bb0fdebb815921c168c00e90",
      "tree": "7107c63dc002db8b76fc1d6b6e3dea0ca25a035e",
      "parents": [
        "fe86b484e2303103107a6ec7fc02e4e0acaf31c7"
      ],
      "author": {
        "name": "Roy",
        "email": "quagga@de.vio.us",
        "time": "Wed Aug 13 17:27:38 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:57 2008 +0100"
      },
      "message": "[vty] Allow delete during password entry\n\n2008-08-13 roy \u003cquagga@de.vio.us\u003e\n\n\t* lib/vty.c: (vty_delete_char) move check for authentication\n\t  down a bit, so we do the delete, but still not re-write of line.\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "3c5a0a4f8fe3811affff6d5e123379eedb083571",
      "tree": "79e285e0bd04c6ef0dfcde9cf0ce8fda8abecbe1",
      "parents": [
        "750e814693050bc97391eec618aad9db798ee5e8"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Feb 19 17:30:10 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:49:33 2008 +0100"
      },
      "message": "[administrivia] Add .gitignore files, based on .cvsignores.\n"
    },
    {
      "commit": "0df7c91f048f2116610d6bdfce3ab6cad1981802",
      "tree": "18390aa845054b757fae86dde49b907ee7f14908",
      "parents": [
        "f04b0e6bb8c1339243717b156880d7e24c84c951"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Jul 21 21:02:49 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Jul 21 21:02:49 2008 +0000"
      },
      "message": "[bgpd] TCP-MD5: password vty configuration and initial Linux support\n\n2008-07-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_packet.c: (bgp_open_receive) fix warning in a zlog call\n\t* bgp_vty.c: (bgp_vty_return) add return code\n\t* bgpd.c: (bgp_master_init) setup the socket list.\n\t* bgp_network.c: Remove the dual IPv4/6 socket thing for now, which\n\t  was implemented by Michael, until such time as its clear its\n\t  required for Linux (see sockopt comments). IPv6 support, including\n\t  IPv4 sessions on AF_INET6 sockets, therefore is broken, and the\n\t  \u0027-l 0.0.0.0\u0027 arguments would need to be given to bgpd to make\n\t  things work here.\n\n2008-07-21 Michael H. Warfield \u003cmhw@wittsend.com\u003e\n           YOSHIFUJI Hideaki \u003cyoshfuji@linux-ipv6.org\u003e\n\t   Tomohiko Kusuda \u003ckusuda@inetcore.com\u003e\n           Leigh Brown \u003cleigh@solinno.co.uk\u003e\n\n\t* bgp_network.c: (bgp_md5_set_one) shim between libzebra tcp-md5\n\t  sockopt and bgpd.\n\t  (bgp_md5_set_socket) Helper for bgp_connect\n\t  (bgp_md5_set) setup TCP-MD5SIG for the given peer.\n\t  (bgp_connect) call out to bgp_md5_set_socket for the outgoing\n\t  connect socket.\n\t  (bgp_socket) save references to the listen sockets, needed if\n\t  TCP-MD5SIG is applied later or changed.\n\t* bgp_vty.c: (*neighbor_password_cmd) New \u0027neighbor ... password\u0027\n\t  commands.\n\t* bgpd.c: (peer_{new,delete) manage TCP-MD5 password\n\t  (peer_group2peer_config_copy) inherit TCP-MD5 password\n\t  (peer_password_{un,}set) orchestrate the whole add/remove of TCP-MD5\n\t  passwords: applying checks, stopping peers, and trying to return\n\t  errors to UI, etc.\n\t  (bgp_config_write_peer) save password.\n\t  Fix missing newline in writeout of neighbor ... port.\n\n2008-07-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* sockunion.c: ifdef out various places that converted\n\t  v4mapped sockets to pure v4. Doesn\u0027t seem necessary at all,\n\t  presumably a workaround for now historical inet_ntop bugs (?)\n\n2008-07-21 Michael H. Warfield \u003cmhw@wittsend.com\u003e\n           YOSHIFUJI Hideaki \u003cyoshfuji@linux-ipv6.org\u003e\n\n\t* sockopt.{c,h}: (sockopt_tcp_signature) Add TCP-MD5SIG support.\n"
    },
    {
      "commit": "3d52bb8085c32b54fa21d88588310716245291d4",
      "tree": "8d47a7c92cafb9df895ba32b705e19386e0944e9",
      "parents": [
        "032928091c558d3b0940be079049009f47652711"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Jun 07 20:42:07 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Jun 07 20:42:07 2008 +0000"
      },
      "message": "[lib] trivial: add const qualifier to stream_put/write\n\n2008-06-07 Paul Jakma \u003cpaul@jakma.org\u003e\n\n\t* stream.{c,h}: (stream_{put,write}) add const qualifier to source\n\t  argument. Change u_char to void *.\n"
    },
    {
      "commit": "e96f92034dad1a70c92ad4ad863a5259c122cecb",
      "tree": "c3b9bebef0fe2059182b31b43243289b5c7248e3",
      "parents": [
        "a15cfd16fcdec39588ce2f780671ba7c6de0b919"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Jun 02 12:03:22 2008 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Jun 02 12:03:22 2008 +0000"
      },
      "message": "+ initial edition of meta-queue for RIB updates processing (bug #431)\n"
    },
    {
      "commit": "768a27ea7ba25257c79689af83ab37945dc1cc3c",
      "tree": "d3d9b822a29090a8cfee41b4ae3f74248e5950fa",
      "parents": [
        "311064ddc5c52f6859cf1e6e8636c19a2e705147"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 29 18:23:08 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 29 18:23:08 2008 +0000"
      },
      "message": "[zebra/linux] Use BPF to filter out responses, to try avoid netlink overruns\n\n2008-05-29 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* rt_netlink.c: (netlink_install_filter) BPF filter to catch and\n\t  drop responses to zebra\u0027s own route messages.\n\t  (kernel_init) add BPF filter on the netlink socket.\n"
    },
    {
      "commit": "11486b5265b2e0e2cf8b140018c47bd9a35cba93",
      "tree": "ccc5dfb967b156d43cb6d8ffda1816224dcf118a",
      "parents": [
        "5f56808431778fe8878ea8ea94225cca08884b48"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Feb 28 23:26:02 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Feb 28 23:26:02 2008 +0000"
      },
      "message": "[lib] Fix the struct message LOOKUP function to be more robust\n\n2008-02-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* log.c: (mes_lookup) Sowmini Varadhan diagnosed a problem where\n\t  this function can cause a NULL dereference, on lookups for unknown\n\t  indices, or messages with NULL strings. Can occur, e.g., debug\n\t  logging code when processing received messages. Fixed to accept a\n\t  pointer to a default string to be used if there is no match.\n\t* log.h: LOOKUP adjusted to match\n"
    },
    {
      "commit": "5f56808431778fe8878ea8ea94225cca08884b48",
      "tree": "41027ecf7a18a787ea3109a76d5ec83ebf49a45e",
      "parents": [
        "20e5ff0a8893ffad6d31739d68d224931c4a7992"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Feb 28 00:09:04 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Feb 28 00:09:04 2008 +0000"
      },
      "message": "[lib/linklist] Enforce \"nodes must have data\" invariant more rigorously\n\n2008-02-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* linklist.c: This implementation expects that the data pointer not\n\t  be null, e.g. listgetdata() asserts this. The list add methods\n\t  don\u0027t apply the same sanity check.\n\n\t  Noted by Jim Carlson in bug #437.\n"
    },
    {
      "commit": "dea04441fb51f74dc25f6ab4bd756b4159d961b6",
      "tree": "95a4578d95f20dd0dc168d07a90ea9cf71d6047f",
      "parents": [
        "d38e8d63fdfc0aefb78d0a51ffdf06d8b47993fd"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Feb 26 09:16:09 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Feb 26 09:16:09 2008 +0000"
      },
      "message": "[c++] remove/rename some names in headers that clash with C++ reserved words\n\n2008-01-30 Peter Szilagyi \u003csp615@hszk.bme.hu\u003e\n\n\t* lib/stream.h: Remove named \u0027new\u0027 parameter in prototype\n\t  for c++ header compatibility.\n\t* ospfd/ospf_opaque.h: ditto\n\t* ospfd/ospfd.h: Renamed struct export to _export for c++\n\t  header compatibility.\n\t* ospf6d/ospf6_area.h: ditto\n"
    },
    {
      "commit": "55edb0d446a272907715b0825ff008557174d34a",
      "tree": "17d46ab705b0b229b8795d0d809fddd18e1d9078",
      "parents": [
        "c543a1737173fb438f1d8c06f650b2d0d479f45c"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jan 11 15:57:13 2008 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jan 11 15:57:13 2008 +0000"
      },
      "message": "[link-detect] Improve BSD support.\n2008-01-11 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* lib/zebra.h: Revert previous change, no need to include\n\t  \u003cnet/if_media.h\u003e here.\n\t* zebra/ioctl.c: If HAVE_BSD_LINK_DETECT is defined, include\n\t  \u003cnet/if_media.h\u003e\n\t  (if_get_flags) Remove debug messages about BSD link state.\n\t* zebra/kernel_socket.c: (bsd_linkdetect_translate) If link state\n\t  is unknown, we should set the IFF_RUNNING flag.\n"
    },
    {
      "commit": "c543a1737173fb438f1d8c06f650b2d0d479f45c",
      "tree": "ba940242e22f7e6798e6fd24b19864b5702474db",
      "parents": [
        "3f087670efa606021cde2f6a9615ac7e07aec2a5"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Thu Jan 10 15:24:32 2008 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Thu Jan 10 15:24:32 2008 +0000"
      },
      "message": "[link-detect] Try to get BSD link-detect to work properly.\n\n2008-01-10 Ingo Flaschberger \u003cif@xip.at\u003e\n\n\t* configure.ac: Define HAVE_BSD_LINK_DETECT if \u003cnet/if_media.h\u003e is\n\t  present.\n\t* lib/zebra.h: If HAVE_BSD_LINK_DETECT is defined,\n\t  include \u003cnet/if_media.h\u003e.\n\t* zebra/ioctl.c: (if_get_flags) If HAVE_BSD_LINK_DETECT, use the\n\t  SIOCGIFMEDIA ioctl to ascertain link state.\n\t* zebra/kernel_socket.c: (bsd_linkdetect_translate) New function to\n\t  map the ifm_data.ifi_link_state value into the IFF_RUNNING flag.\n\t  (ifm_read) Call bsd_linkdetect_translate to fix the IFF_RUNNING\n\t  flag before calling if_flags_update.\n"
    }
  ],
  "next": "912df1e8ab61962c29eb4faff17a7d75c4905b84"
}
