)]}'
{
  "commit": "9fd92e3c4bdcc78e0f0d94d53a2d4c7b0e893fcb",
  "tree": "a3adf090e5ef776b8c6dc6223890a2640217a95b",
  "parents": [
    "5aebb9c77fc2257c9d9df72db66668fabb24fc52"
  ],
  "author": {
    "name": "Avneesh Sachdev",
    "email": "avneesh@opensourcerouting.org",
    "time": "Tue Nov 13 22:48:53 2012 +0000"
  },
  "committer": {
    "name": "David Lamparter",
    "email": "equinox@opensourcerouting.org",
    "time": "Fri Nov 30 21:41:16 2012 +0100"
  },
  "message": "zebra: add structure to hold per-prefix state in RIB\n\nAdd the rib_dest_t structure to hold per-prefix state in the routing\ninformation base. This gives us an appropriate place to maintain the\nqueueing state of a route_node. Queuing state was previously being\nstored on the first rib in the list of ribs hanging off the\nroute_node.\n\n  * zebra/rib.h\n\n    - Add new structure rib_dest_t.\n\n    - Remove the rn_status field from \u0027struct rib\u0027, it is no longer\n      required.\n\n    - Add macros (RNODE_FOREACH_RIB, RNODE_FOREACH_RIB_SAFE) for\n      walking all \u0027struct ribs\u0027 corresponding to a route_node. These\n      hide the fact that there is an intermediate rib_dest_t\n      structure.\n\n    - Add a few utility inlines to go between a rib_dest_t and\n      associated structures.\n\n  * zebra/zebra_rib.c\n\n    - rib_link()/rib_unlink()\n\n      Tweak for new behavior, where the \u0027info\u0027 pointer of a route_node\n      points to a rib_dest_t. The list of ribs for a prefix now hangs\n      off of the dest.\n\n      Change the way we ref count route_nodes. We now hold a single\n      ref count on a route_node if there is a corresponding\n      rib_dest_t.\n\n    - Maintain the queuing state of a route_node on the flags field of\n      the rib_dest_t.\n\n    - Add the rib_gc_dest() function, which deletes a rib_dest_t if it\n      is no longer required. A rib_dest_t can be deleted iff there are\n      no struct ribs hanging off of it.\n\n    - Call rib_gc_dest() any time we unlink a rib from the\n      rib_dest_t. Currently we only need to call it once, just before\n      we return from rib_process().\n\n  * zebra/{redistribute,zebra_rib,zebra_snmp,zebra_vty}.c\n\n    Use new macros to walk over route_node ribs.\n\n  * lib/memtypes.c\n\n    Add memory type for rib_dest_t.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bbf96929f45f4c9f7fb3f2f9ef54d1cc9f2d327f",
      "old_mode": 33188,
      "old_path": "lib/memtypes.c",
      "new_id": "76dece298f8ed33fa5c9a69cb7d9a067dcb43bd5",
      "new_mode": 33188,
      "new_path": "lib/memtypes.c"
    },
    {
      "type": "modify",
      "old_id": "4276f1d04ffaff6282509f073ce6dad0db24ca92",
      "old_mode": 33188,
      "old_path": "zebra/redistribute.c",
      "new_id": "47658248565323d51400a4fc77be608230c21d58",
      "new_mode": 33188,
      "new_path": "zebra/redistribute.c"
    },
    {
      "type": "modify",
      "old_id": "1b85c81ed1fbd6b7dd188e57c6d3bcf0a60bbf83",
      "old_mode": 33188,
      "old_path": "zebra/rib.h",
      "new_id": "084f35166293f1ce73ca3867875823228dd966b5",
      "new_mode": 33188,
      "new_path": "zebra/rib.h"
    },
    {
      "type": "modify",
      "old_id": "0e29e616a054a73b93f16a0aaa4eabc610a40c0d",
      "old_mode": 33188,
      "old_path": "zebra/zebra_rib.c",
      "new_id": "f0d5c9d9318ba6fac588ac23380bf570a9b96172",
      "new_mode": 33188,
      "new_path": "zebra/zebra_rib.c"
    },
    {
      "type": "modify",
      "old_id": "f52bbcb8dbed6866e3653f205bd69ef75085b23f",
      "old_mode": 33188,
      "old_path": "zebra/zebra_snmp.c",
      "new_id": "e06e1443d43f61272ec982a7ac501e8861043822",
      "new_mode": 33188,
      "new_path": "zebra/zebra_snmp.c"
    },
    {
      "type": "modify",
      "old_id": "743c13fe7471364e2ffb834104cdb376be362a8e",
      "old_mode": 33188,
      "old_path": "zebra/zebra_vty.c",
      "new_id": "d07b09c8e04831e0fe5368099d1e0c6f4aecae32",
      "new_mode": 33188,
      "new_path": "zebra/zebra_vty.c"
    }
  ]
}
