)]}'
{
  "commit": "b397cf4f0fc484c5ebfc8a680090055c8e6cbe32",
  "tree": "b1fe14811932e92ac87f7ddcad8660061b15cd51",
  "parents": [
    "1520e4748129c4eb97ac3090bcc97149a1900611"
  ],
  "author": {
    "name": "Lu Feng",
    "email": "lu.feng@6wind.com",
    "time": "Fri Jul 18 06:13:18 2014 +0000"
  },
  "committer": {
    "name": "David Lamparter",
    "email": "equinox@opensourcerouting.org",
    "time": "Mon Sep 15 18:36:54 2014 +0200"
  },
  "message": "ripd: add ECMP support\n\n* Each node in the routing table is changed into a list, holding\n  the multiple equal-cost paths.\n\n* If one of the multiple entries gets less-preferred (greater\n  metric or greater distance), it will be directly deleted instead\n  of starting a garbage-collection timer for it.\n  The garbage-collection timer is started only when the last entry\n  in the list gets INFINITY.\n\n* Some new functions are used to maintain the ECMP list. And hence\n  rip_rte_process(), rip_redistribute_add() and rip_timeout() are\n  significantly simplified.\n\n* rip_zebra_ipv4_add() and rip_zebra_ipv4_delete() now can share\n  the common code. The common part is moved to rip_zebra_ipv4_send().\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "22cef4540d7d918e8f9d19be2dfe5a963a276e0c",
      "old_mode": 33188,
      "old_path": "ripd/rip_interface.c",
      "new_id": "bdd319e17ef361cd6cfedcbbc35ffbd4631f5894",
      "new_mode": 33188,
      "new_path": "ripd/rip_interface.c"
    },
    {
      "type": "modify",
      "old_id": "1f6ef612065bae08bf7db23c6b1b6cc54e8a3385",
      "old_mode": 33188,
      "old_path": "ripd/rip_zebra.c",
      "new_id": "8b1c64d6e4396611498c52ca9c466822ebc17270",
      "new_mode": 33188,
      "new_path": "ripd/rip_zebra.c"
    },
    {
      "type": "modify",
      "old_id": "8a7fef875b198b8c37e14bf34b0565ffb73006f2",
      "old_mode": 33188,
      "old_path": "ripd/ripd.c",
      "new_id": "b00241c9b031e269abd78d1d3cf4df3a99bbab70",
      "new_mode": 33188,
      "new_path": "ripd/ripd.c"
    },
    {
      "type": "modify",
      "old_id": "0fc2fd37562ff33ce2ffdd73374e40ef6ae80533",
      "old_mode": 33188,
      "old_path": "ripd/ripd.h",
      "new_id": "0f0e2160ba85de1c2cbfad374b5f392cbcc73295",
      "new_mode": 33188,
      "new_path": "ripd/ripd.h"
    }
  ]
}
