)]}'
{
  "commit": "96450faf3385a6ed9f4dd5c2c58776c4a664a8da",
  "tree": "26c56a71548686a7d6797b79377ccc5e25730186",
  "parents": [
    "42ea68512fc4d04b500def45e8f899321f4081e7"
  ],
  "author": {
    "name": "Josh Bailey",
    "email": "joshb@google.com",
    "time": "Wed Jul 20 20:45:12 2011 -0700"
  },
  "committer": {
    "name": "Josh Bailey",
    "email": "joshb@google.com",
    "time": "Wed Jul 20 20:45:12 2011 -0700"
  },
  "message": "bgpd: Adds equal-paths check to path comparison. Paths that are\nequal to the best path are accumulated onto an ordered list (mp_list)\nif maximum-paths is configured. A future commit will add the\nmultipath markup to the BGP rib table based on the mp_list. Add\nunit test for the added mp_list functions.\n\nDeterministic MED is not supported in this commit, it will be\nadded later.\n\n* bgpd/bgp_aspath.c\n  * Make aspath_cmp() an external symbol so it can be used in\n    equivalent paths check\n* bgpd/bgp_aspath.h\n  * Add extern declaration of aspath_cmp()\n* bgpd/bgp_mpath.c\n  * bgp_info_nexthop_cmp(): Compares nexthops of two paths\n  * bgp_info_mpath_cmp(): Compare function to order multipaths by\n    nexthop and then by peer address\n  * bgp_mp_list_init(): Initialize a list with the multipath order function\n  * bgp_mp_list_clear(): Clear out the mp_list\n  * bgp_mp_list_add(): Add a multipath to mp_list\n* bgpd/bgp_mpath.h\n  * External declarations for above added functions in bgp_mpath.c\n* bgpd/bgp_route.c\n  * bgp_info_cmp(): Add equivalent paths result (paths_eq). If eBGP\n    paths are equal down to IGP metric check, flag as equal if peer AS\n    matches. Similarly for iBGP paths but compare full AS_PATH.\n  * bgp_best_selection(): If multipath is enabled, accumulate equivalent paths\n    in mp_list. Add debug bgp event output to see result (will be filtered\n    later to display only when change occurs)\n  * bgp_process_rsclient(): Pass multipath config to bgp_best_selection()\n  * bgp_process_main(): Pass multipath config to bgp_best_selection()\n* tests/bgp_mpath_test.c\n  * Add unit test case for bgp_mp_list functions\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "cf930427094ac06a2fe893267a44575e5c7ee93e",
      "old_mode": 33188,
      "old_path": "bgpd/bgp_aspath.c",
      "new_id": "de0d6876c46ea68a268412cb12586e4696f4a6d6",
      "new_mode": 33188,
      "new_path": "bgpd/bgp_aspath.c"
    },
    {
      "type": "modify",
      "old_id": "d63b914c18ff864045d0e9f44c0b608390e809cc",
      "old_mode": 33188,
      "old_path": "bgpd/bgp_aspath.h",
      "new_id": "b881b65448e372b4485e19c3bdbe5380db1a5095",
      "new_mode": 33188,
      "new_path": "bgpd/bgp_aspath.h"
    },
    {
      "type": "modify",
      "old_id": "56c703f6d1ce0e91d59e5f93489213dda2aa39ef",
      "old_mode": 33188,
      "old_path": "bgpd/bgp_mpath.c",
      "new_id": "09b4695166b25554a47cee85804d99257f916714",
      "new_mode": 33188,
      "new_path": "bgpd/bgp_mpath.c"
    },
    {
      "type": "modify",
      "old_id": "f0ac83679d8d349076340a86ac8bb6c60b2464b0",
      "old_mode": 33188,
      "old_path": "bgpd/bgp_mpath.h",
      "new_id": "de6461fda19e942973a294b7fecd1e85c8520542",
      "new_mode": 33188,
      "new_path": "bgpd/bgp_mpath.h"
    },
    {
      "type": "modify",
      "old_id": "5c516f02441ce9388da0f48fe3421151981bf739",
      "old_mode": 33188,
      "old_path": "bgpd/bgp_route.c",
      "new_id": "718e25fff6d99357bb13479eb459229e241e056b",
      "new_mode": 33188,
      "new_path": "bgpd/bgp_route.c"
    },
    {
      "type": "modify",
      "old_id": "37e977369baede7833bfd1f21421f37e4dc24100",
      "old_mode": 33188,
      "old_path": "tests/bgp_mpath_test.c",
      "new_id": "4d51ddb880786fa9ae140ca5dab139dd71e145ab",
      "new_mode": 33188,
      "new_path": "tests/bgp_mpath_test.c"
    }
  ]
}
