)]}'
{
  "commit": "d2fc88962a9a494ecb34167871bb9e7273a25d33",
  "tree": "304a1c1a744972bc10b1f677a134907c404b361d",
  "parents": [
    "386e61502d391adb985ac1487825349ec85e6a8c"
  ],
  "author": {
    "name": "ajs",
    "email": "ajs",
    "time": "Sat Apr 02 18:38:43 2005 +0000"
  },
  "committer": {
    "name": "ajs",
    "email": "ajs",
    "time": "Sat Apr 02 18:38:43 2005 +0000"
  },
  "message": "2005-04-02 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\tFix problems when netlink interfaces are renamed (same ifindex used\n\tfor a new interface).  Start cleaning up some problems with the way\n\tinterface names are handled.\n\t* interface.c: (if_new_intern_ifindex) Remove obsolete function.\n\t  (if_delete_update) After distributing the interface deletion message,\n\t  set ifp-\u003eifindex to IFINDEX_INTERNAL.\n\t  (if_dump_vty) Detect pseudo interface by checking if ifp-\u003eifindex is\n\t  IFINDEX_INTERNAL.\n\t  (zebra_interface) Check return code from interface_cmd.func.\n\t  Do not set internal ifindex values to if_new_intern_ifindex(),\n\t  since we now use IFINDEX_INTERNAL for all pseudo interfaces.\n\t* kernel_socket.c: (ifm_read) Fix code and comments to reflect that\n\t  all internal interfaces now have ifp-\u003eifindex set to IFINDEX_INTERNAL.\n        * rt_netlink.c: (set_ifindex) New function used to update ifp-\u003eifindex.\n\t  Detects interface rename events by checking if that ifindex is already\n\t  being used.  If it is, delete the old interface before assigning\n\t  the ifindex to the new interface.\n\t  (netlink_interface, netlink_link_change) Call set_ifindex to update\n\t  the ifindex.\n\t* if.h: Remove define for IFINDEX_INTERNBASE and add define\n\t  IFINDEX_INTERNAL 0, since all internal (i.e. non-kernel) pseudo-\n\t  interfaces should have ifindex set to 0.\n\t  (if_new) Remove function.\n\t  (if_delete_retain) New function to delete an interface without\n\t  removing from iflist and freeing the structure.\n\t  (ifname2ifindex) New function.\n\t* if.c: (if_new) Remove function (absorb into if_create).\n\t  (if_create) Replace function if_new with call to calloc.\n\t  Set ifp-\u003eifindex to IFINDEX_INTERNAL.  Fix off-by-one error\n\t  in assert to check length of interface name.  Add error message\n\t  if interface with this name already exists.\n\t  (if_delete_retain) New function to delete an interface without\n\t  removing from iflist and freeing the structure.\n\t  (if_delete) Implement with help of if_delete_retain.\n\t  (ifindex2ifname) Reimplement using if_lookup_by_index.\n\t  (ifname2ifindex) New function to complement ifindex2ifname.\n\t  (interface) The interface command should check the name length\n\t  and fail with a warning message if it is too long.\n\t  (no_interface) Fix spelling in warning message.\n\t  (if_nametoindex) Reimplement using if_lookup_by_name.\n\t  (if_indextoname, ifaddr_ipv4_lookup) Reimplement using\n\t  if_lookup_by_index.\n\t* bgp_zebra.c: (bgp_interface_delete) After deleting, set ifp-\u003eifindex\n\t  to IFINDEX_INTERNAL.\n\t* isis_zebra.c: (isis_zebra_if_del) Call if_delete_retain instead\n\t  of if_delete, since it is generally not safe to remove interface\n\t  structures.  After deleting, set ifp-\u003eifindex to IFINDEX_INTERNAL.\n\t  (zebra_interface_if_lookup) Tighten up code.\n\t* ospf6_zebra.c: (ospf6_zebra_if_del) Previously, this whole function\n\t  was commented out.  But this is not safe: we should at least update\n\t  the ifindex when the interface is deleted.  So the new version\n\t  updates the interface status and sets ifp-\u003eifindex to\n\t  IFINDEX_INTERNAL.\n\t  (ospf6_zebra_route_update) Use if_indextoname properly.\n\t* ospf_vty.c: (show_ip_ospf_interface_sub) Show ifindex and interface\n\t  flags to help with debugging.\n\t* ospf_zebra.c: (ospf_interface_delete) After deleting, set ifp-\u003eifindex\n\t  to IFINDEX_INTERNAL.\n\t  (zebra_interface_if_lookup) Make function static.  Tighten up code.\n\t* rip_interface.c: (rip_interface_delete) After deleting, set\n\t  ifp-\u003eifindex to IFINDEX_INTERNAL.\n\t* ripng_interface.c: (ripng_interface_delete) After deleting, set\n\t  ifp-\u003eifindex to IFINDEX_INTERNAL.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d107fa6eb34ecdc09640a954d085b709d5e1c4ab",
      "old_mode": 33188,
      "old_path": "bgpd/ChangeLog",
      "new_id": "4c18fc39327cfcb87e0a255b1c3c409b5096710f",
      "new_mode": 33188,
      "new_path": "bgpd/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "f54608a3762efa0139bd6bb884ce6be503cf9c9f",
      "old_mode": 33188,
      "old_path": "bgpd/bgp_zebra.c",
      "new_id": "176e447a376f11a1580101179b4f01225486c250",
      "new_mode": 33188,
      "new_path": "bgpd/bgp_zebra.c"
    },
    {
      "type": "modify",
      "old_id": "d7fadd0c93072147adbc09dbd87b05c182fc1a0b",
      "old_mode": 33188,
      "old_path": "isisd/ChangeLog",
      "new_id": "6f4f395883a631e3fd70eeb11404cb579481bcb2",
      "new_mode": 33188,
      "new_path": "isisd/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "40743b295c6a1222dbe83fe1fdab2cfebd133532",
      "old_mode": 33188,
      "old_path": "isisd/isis_zebra.c",
      "new_id": "0f8d1162371b2818c79dcb11e47a7cb5f06cd275",
      "new_mode": 33188,
      "new_path": "isisd/isis_zebra.c"
    },
    {
      "type": "modify",
      "old_id": "567f603a6159b541ee87cba1ef3e57a1a55905ce",
      "old_mode": 33188,
      "old_path": "lib/ChangeLog",
      "new_id": "8aaf382992cb7a5b675b1cf841d38cbbd47fa32d",
      "new_mode": 33188,
      "new_path": "lib/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "7385ff6e368af5a0d62d35c45e20b0adf617685a",
      "old_mode": 33188,
      "old_path": "lib/if.c",
      "new_id": "e35e3ed260e01e79e7e2d494e1ef6560304211ba",
      "new_mode": 33188,
      "new_path": "lib/if.c"
    },
    {
      "type": "modify",
      "old_id": "f5efda6e2cc7847c0e4a256dddbb5c7d77e7eac2",
      "old_mode": 33188,
      "old_path": "lib/if.h",
      "new_id": "df9ff6052bb7ddefd053173de280f1db776fec7a",
      "new_mode": 33188,
      "new_path": "lib/if.h"
    },
    {
      "type": "modify",
      "old_id": "e0a5775b0381c2ce50150e42cba247b36a3cfa47",
      "old_mode": 33188,
      "old_path": "ospf6d/ChangeLog",
      "new_id": "61a2e4631ebece9c354b61b0b77eeeaad5840908",
      "new_mode": 33188,
      "new_path": "ospf6d/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "bc15dff661f7e7ea6f20368ae372bf2969395508",
      "old_mode": 33188,
      "old_path": "ospf6d/ospf6_zebra.c",
      "new_id": "1ce362983fc127b9b59d04f8f86a5d4eb0d4880c",
      "new_mode": 33188,
      "new_path": "ospf6d/ospf6_zebra.c"
    },
    {
      "type": "modify",
      "old_id": "8facd560ccdfc674bfdcb5c4ecea6f8a6b84e65b",
      "old_mode": 33188,
      "old_path": "ospfd/ChangeLog",
      "new_id": "b1d6bbec5c269fdeafe3d8d3a8204a4ab9127813",
      "new_mode": 33188,
      "new_path": "ospfd/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "1d2550d3fd128c8ea87129caa987309dd3343b10",
      "old_mode": 33188,
      "old_path": "ospfd/ospf_vty.c",
      "new_id": "c0e1f6cea9951e4b6c7d429e82f8ffbf6991a9de",
      "new_mode": 33188,
      "new_path": "ospfd/ospf_vty.c"
    },
    {
      "type": "modify",
      "old_id": "300103e12c0191b7135e2b8cf7384bb67ffd5ae1",
      "old_mode": 33188,
      "old_path": "ospfd/ospf_zebra.c",
      "new_id": "74936df9c4fff26f8e16604381758bc494f90127",
      "new_mode": 33188,
      "new_path": "ospfd/ospf_zebra.c"
    },
    {
      "type": "modify",
      "old_id": "edb504aa9e3409988c0509eb60402f7b524179ba",
      "old_mode": 33188,
      "old_path": "ripd/ChangeLog",
      "new_id": "132fd43aeaea87f3fa461b958b5a128a31b284cf",
      "new_mode": 33188,
      "new_path": "ripd/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "0a01d8b5e3c0dd2722872fa1b93f61d6132fa02e",
      "old_mode": 33188,
      "old_path": "ripd/rip_interface.c",
      "new_id": "f58fb3371be015b2dc4fe936bc83a3e5e8b151cc",
      "new_mode": 33188,
      "new_path": "ripd/rip_interface.c"
    },
    {
      "type": "modify",
      "old_id": "f4b61132d5e46658c000b4244fc1967bf38b91af",
      "old_mode": 33188,
      "old_path": "ripngd/ChangeLog",
      "new_id": "7c6176c51c2665dd7dcc2bcd54caf54733881b5c",
      "new_mode": 33188,
      "new_path": "ripngd/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "5d317ee06151bcebc6e5207d9a054c2005a7ae58",
      "old_mode": 33188,
      "old_path": "ripngd/ripng_interface.c",
      "new_id": "477bfd7fdd23778c75ad4515a7046d09ccb5fbba",
      "new_mode": 33188,
      "new_path": "ripngd/ripng_interface.c"
    },
    {
      "type": "modify",
      "old_id": "150c08a38f2e8414f9c27f2246e0dae8e2782eda",
      "old_mode": 33188,
      "old_path": "zebra/ChangeLog",
      "new_id": "572d2687fd573bb81476faa474f45649dfb9c27e",
      "new_mode": 33188,
      "new_path": "zebra/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "55717545dcd86fec780e6395e50aa16378544a08",
      "old_mode": 33188,
      "old_path": "zebra/interface.c",
      "new_id": "0f294a56fb17068117c7337bcf6ad0517a81c86a",
      "new_mode": 33188,
      "new_path": "zebra/interface.c"
    },
    {
      "type": "modify",
      "old_id": "e6e74449d2b9285ecce8a8d2a0ee25d50cc362fe",
      "old_mode": 33188,
      "old_path": "zebra/kernel_socket.c",
      "new_id": "cdc6822c5a51a2ebc52707092b2526542d19f91d",
      "new_mode": 33188,
      "new_path": "zebra/kernel_socket.c"
    },
    {
      "type": "modify",
      "old_id": "042ee3314d8341308f132deef3b4719a8b4b04bd",
      "old_mode": 33188,
      "old_path": "zebra/rt_netlink.c",
      "new_id": "b3b2aab5d0c19cf0c509a1cd5a0f5eafdc41708d",
      "new_mode": 33188,
      "new_path": "zebra/rt_netlink.c"
    }
  ]
}
