)]}'
{
  "commit": "fa713d9ee5ed30dedd0a290be9aaff780a2896be",
  "tree": "1d263cce70c341f3f2a73a47d4b1cd5a38b09129",
  "parents": [
    "bfac8dcd2fe7ed099a679b5c8245599c6d0312ed"
  ],
  "author": {
    "name": "Christian Franke",
    "email": "chris@opensourcerouting.org",
    "time": "Fri Jul 05 15:35:37 2013 +0000"
  },
  "committer": {
    "name": "David Lamparter",
    "email": "equinox@opensourcerouting.org",
    "time": "Thu Sep 19 18:04:40 2013 +0200"
  },
  "message": "zebra: rework recursive route resolution\n\nChange the datastructure for recursive routes. This brings the following\nbenefits:\n\nBy using struct nexthop also to store nexthops obtained by recursive\nresolution, we can get rid of quite a bit of code duplication in the fib\nmanagement. (rt_netlink, rt_socket, ...)\n\nWith the new datastructure we can make use of all available paths when\nrecursive routes are resolved with multipath routes.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "8baea0a87c0f0545b77c67ca9253bf8e9fa0f0eb",
      "old_mode": 33188,
      "old_path": "tests/.gitignore",
      "new_id": "31fb70a484d364baf98d57fa45b7ddc6e9f2b456",
      "new_mode": 33188,
      "new_path": "tests/.gitignore"
    },
    {
      "type": "modify",
      "old_id": "2ed0e1c59b97d03f6f2b20e2a105d9c7dce8c2be",
      "old_mode": 33188,
      "old_path": "tests/Makefile.am",
      "new_id": "e5c7fd79de017be67d28d305ac291fa42f87c485",
      "new_mode": 33188,
      "new_path": "tests/Makefile.am"
    },
    {
      "type": "modify",
      "old_id": "0d29e287c8a81631783280f5ce5d5d653935e7a9",
      "old_mode": 33188,
      "old_path": "tests/libzebra.tests/Makefile.am",
      "new_id": "14138a08ef92badbadb8ad9368774246d2f87a9a",
      "new_mode": 33188,
      "new_path": "tests/libzebra.tests/Makefile.am"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "be35a0a2b8637d8bb8c46f688ac08408fe0e719d",
      "new_mode": 33188,
      "new_path": "tests/libzebra.tests/testnexthopiter.exp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7b1b42821dca52ee206da9d703a124769f5cb328",
      "new_mode": 33188,
      "new_path": "tests/prng.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ed3649863889fa7a80eb23f405a3580a2588bfe5",
      "new_mode": 33188,
      "new_path": "tests/prng.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "250379329bc84900473d8baa46d59b232b908cf3",
      "new_mode": 33188,
      "new_path": "tests/test-nexthop-iter.c"
    },
    {
      "type": "modify",
      "old_id": "e16ce68a1f79dd56a2a86ef1e6ac67cd914e095f",
      "old_mode": 33188,
      "old_path": "zebra/rib.h",
      "new_id": "4d98e059568161608002e23f3ed09de8e33ae0ee",
      "new_mode": 33188,
      "new_path": "zebra/rib.h"
    },
    {
      "type": "modify",
      "old_id": "a5d588c7f915edbd450691a87c00157465b3fe07",
      "old_mode": 33188,
      "old_path": "zebra/rt_ioctl.c",
      "new_id": "404a7c696fa4560a4dc26c99d891a80a4333abeb",
      "new_mode": 33188,
      "new_path": "zebra/rt_ioctl.c"
    },
    {
      "type": "modify",
      "old_id": "86e02efb88fa9739cde51129a7c83133f897c008",
      "old_mode": 33188,
      "old_path": "zebra/rt_netlink.c",
      "new_id": "b0ade05884e765bc965852951f2983af82a20e7c",
      "new_mode": 33188,
      "new_path": "zebra/rt_netlink.c"
    },
    {
      "type": "modify",
      "old_id": "1b8ded7eefaa13955e6183edb8c902f7b6f7e948",
      "old_mode": 33188,
      "old_path": "zebra/rt_socket.c",
      "new_id": "5d175d849ba75805f7dc5a726d9ba2329da6ab08",
      "new_mode": 33188,
      "new_path": "zebra/rt_socket.c"
    },
    {
      "type": "modify",
      "old_id": "67bcf0a1577afdd4c6b5497fb8f677a4a44c3af8",
      "old_mode": 33188,
      "old_path": "zebra/zebra_fpm_netlink.c",
      "new_id": "b5f2b76076508eb1038ccd72c3d798b003ebcdb8",
      "new_mode": 33188,
      "new_path": "zebra/zebra_fpm_netlink.c"
    },
    {
      "type": "modify",
      "old_id": "4dd8551a2943b03eb1834bb3e0d7a8c013e4cc60",
      "old_mode": 33188,
      "old_path": "zebra/zebra_rib.c",
      "new_id": "e39976ee55e065c711f06f3f2d4e0bd815cda071",
      "new_mode": 33188,
      "new_path": "zebra/zebra_rib.c"
    },
    {
      "type": "modify",
      "old_id": "b3111b8e634be6c166b9b34b805c5c4ed8861cc1",
      "old_mode": 33188,
      "old_path": "zebra/zebra_routemap.c",
      "new_id": "39c7e1bffcc0473b96a5b30e44db433a888869ae",
      "new_mode": 33188,
      "new_path": "zebra/zebra_routemap.c"
    },
    {
      "type": "modify",
      "old_id": "a672d42224726a8aea941bbfa34b411e84a5167d",
      "old_mode": 33188,
      "old_path": "zebra/zebra_vty.c",
      "new_id": "e1da7df8376e25c52be5f07530f493f75c38c0b4",
      "new_mode": 33188,
      "new_path": "zebra/zebra_vty.c"
    },
    {
      "type": "modify",
      "old_id": "1182937800c1081520c96e9d687c59b85542bde4",
      "old_mode": 33188,
      "old_path": "zebra/zserv.c",
      "new_id": "5df521b0dd0333125754ef49b40d586e777f97fc",
      "new_mode": 33188,
      "new_path": "zebra/zserv.c"
    }
  ]
}
