)]}'
{
  "log": [
    {
      "commit": "c5926a92235874574b20e426a3752c1451a90ec7",
      "tree": "c8b8b66eee832e3db5e5d315e966b168918ef57e",
      "parents": [
        "bf986da797e7d2a0aaae313fea626ba433581f03"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Sat Aug 24 07:55:00 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Nov 07 18:15:42 2013 -0800"
      },
      "message": "ospf6d: add p2p interface support\n\nSigned-off-by: Dinesh G Dutt \u003cddutt at cumulusnetworks.com\u003e\nSigned-off-by: Ayan Banerjee \u003cayabaner at gmail.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma at cumulusnetworks.com\u003e\nReviewed-by: James Li \u003cjli at cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c81ee5c94f5b34375f3ef276fdb9bde9098e7ecb",
      "tree": "dad1ab0d81b72a7c7a869bc7dc051b703deec9be",
      "parents": [
        "7b92589c225ae46417fc3fa0714a1b6f53f19c51"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Sat Jul 07 17:06:11 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 25 18:07:30 2012 +0200"
      },
      "message": "ospfd: Optimize and improve SPF nexthop calculation\n\nMaintain router LSA positions in OSPF interface.\nFind the OSPF interface in nexthop_calculation using\nthe position in the router LSA. This is possible because\nthe only time nexthop_calculation needs to look up interfaces\nis when dealing with its own Router LSA.\n\nThis has the following advantages:\n - Multiple PtP interfaces with the same IP address between two routers.\n - Use Unnumbered PtP on just one end of the link.\n - Faster OI lookup for the OSPF interface and only\n   done once for PtoP links.\n\n*ospf_interface.h: (struct ospf_interface) Add storage for\n\t\t   storing router LSA position.\n\n*ospf_interface.c: (ospf_if_lookup_by_lsa_pos)\n\t\t   lookup OSPF I/F in an area using LSA position.\n\n*ospf_lsa.c: (router_lsa_link_set) record Router LSA position.\n\n*ospf_spf.c: (ospf_spf_next) Count and pass along lsa position.\n\t     (ospf_nexthop_calculation) Add lsa position argument.\n\t     call ospf_if_lookup_by_lsa_pos() for OSFP interface handle.\n\t     Clean up and remove all calls ospf_if_is_configured() the\n\t     rest. Adjust a few debug logs.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c363d3861b5384a31465a72ddc3b0f6ff007a95a",
      "tree": "3fcbfc071dc2a376979ca6a80d06599a5b574047",
      "parents": [
        "7eb5b47e54169ac0da40ed1a6760db5d5f915a4d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 24 22:42:13 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:13:19 2010 +0000"
      },
      "message": "ospfd: Unify router and network LSA refresh logic with general refresher\n\n* (general) Get rid of the router and network LSA specific refresh timers\n  and make the general refresher do this instead. Get rid of the twiddling\n  of timers for router/network LSA that was spread across the code.\n\n  This lays the foundations for future, general LSA refresh improvements,\n  such as making sequence rollover work, and having generic LSA delays.\n\n* ospfd.h: (struct ospf) Bye bye to the router-lsa update timer thread\n  pointer.\n  (struct ospf_area) and to the router-lsa refresh timer.\n* ospf_interface.h: Remove the network_lsa_self timer thread pointer\n* ospf_lsa.h: (struct ospf_lsa) oi field should always be there, for benefit\n  of type-2/network LSA processing.\n  (ospf_{router,network}_lsa_{update_timer,timer_add}) no timers for these\n  more\n  (ospf_{router,network}_lsa_update) more generic functions to indicate that some\n  router/network LSAs need updating\n  (ospf_router_lsa_update_area) update router lsa in a particular area alone.\n  (ospf_{summary,summary_asbr,network}_lsa_refresh) replaced by the general\n  ospf_lsa_refresh function.\n  (ospf_lsa_refresh) general LSA refresh function\n"
    },
    {
      "commit": "7eb5b47e54169ac0da40ed1a6760db5d5f915a4d",
      "tree": "8d70f87bea20b07f2bbc753a3661c9be9058e1ef",
      "parents": [
        "aa276fd783f5cdbeefe22bf54109fe523a465e07"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 13 16:13:13 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:13:14 2010 +0000"
      },
      "message": "ospfd: Remember network LSA sequence numbers across up/downs of an interface\n\n* ospf_interface.h: (struct ospf_if_params) add field for saved network LSA\n  seqnum\n* ospf_interfa.c: (ospf_new_if_params) init network_lsa_seqnum field to\n  initial seqnum - doesnt matter though.\n* ospf_lsa.c: (ospf_network_lsa_new) check for any saved sequence number,\n  and use if it exists.  Save the result back. This should help avoid needless\n  round of LSUpdate/LSRequests when a neighbour has to tell the originator\n  \"uhm, i have something newer than that already\".\n* ospf_vty.c: (show_ip_ospf_interface_sub) Show the saved network LSA seqnum\n"
    },
    {
      "commit": "05cf46badbad99b76c4e974c7306c14494d1000e",
      "tree": "dd1fd18afc3d7ef6f92281c1c6fb0bc8ebd6a58b",
      "parents": [
        "f0f63841582ed97362619a53fb711747f09d961b"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Jul 27 12:42:30 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 18:47:43 2009 +0100"
      },
      "message": "ospfd: Make ospf_if_lookup_recv_if() find the right unnumbered i/f\n\nThis function will return the interface for the first matching\nremote address for PtP i/f\u0027s. That won\u0027t work for multiple\nunnumbered i/f\u0027s as these may all have the same address.\n\nPass in the struct interface pointer, ifp, to find the\ncorrect set of oi\u0027s to search in. This also reduces the\nsize of the search list, making it faster.\n\n* ospfd/ospf_interface.c: Add struct interface * param to\n  ospf_if_lookup_recv_if() to select the right list to search in.\n* ospfd/ospf_interface.h: ditto.\n* ospfd/ospf_packet.c: Pass new ifp argument to ospf_if_lookup_recv_if()\n"
    },
    {
      "commit": "f0f63841582ed97362619a53fb711747f09d961b",
      "tree": "bb663103d3b25064143685a4f3f40cd008b3cc0f",
      "parents": [
        "2158ad2359a370dd349f4543a2d5d535bb5a8770"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Jul 27 12:42:29 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 18:40:47 2009 +0100"
      },
      "message": "ospfd: export ospf_if_table_lookup() and use it in ospf_network_run_interface()\n\nMakes it possible to run OSPF on multiple PtP interfaces\nwith the same remote address.\n\n* ospfd/ospf_interface.c: Export ospf_if_table_lookup().\n* ospfd/ospf_interface.h: ditto.\n* ospfd/ospfd.c: (ospf_network_run_interface) Use ospf_if_table_lookup() to\n  determine whether OSPF is already configured for a subnet and interface.\n\n"
    },
    {
      "commit": "7ffa8fa2322fb759cf1f93730cde2cee3d4ad8ee",
      "tree": "2e27d51d171609415026cbc8ce7f2ef7ea4df5e5",
      "parents": [
        "6f58544db526b4dfb09d45f8507926b0ae5fe12b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 22 20:07:53 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 22 20:07:53 2006 +0000"
      },
      "message": "[ospfd] Add passive-interface default support\n\n2006-10-22 Yar Tikhiy \u003cyar@comp.chem.msu.su\u003e\n\n\t* (general) Add support for passive-interface default (with\n\t  minor edits by Paul Jakma).\n\t* ospf_interface.h: Add OSPF_IF_PASSIVE_STATUS macro, looking\n\t  at configured value, or the global \u0027default\u0027 value, as\n\t  required.\n\t* ospf_interface.c: (ospf_if_new_hook) Leave passive\n\t  unconfigured per default, allowing global \u0027default\u0027 to\n\t  take effect for unconfigured interfaces.\n\t* ospf_packet.c: (various) use OSPF_IF_PASSIVE_STATUS\n\t* ospf_vty.c: (ospf_passive_interface_default) new function,\n\t  unset passive from all interfaces if default is enabled, as\n\t  the per-iface settings become redundant.\n\t  (ospf_passive_interface_update) new func, update passive\n\t  setting taking global default into account.\n\t  ({no,}ospf_passive_interface_addr_cmd) Add support for\n\t  \u0027default\u0027 variant of command.\n\t  (show_ip_ospf_interface_sub) Update to take global\n\t  default into account when printing passive status.\n\t  (ospf_config_write) ditto.\n\t* ospfd.c: (ospf_new) set global passive-interface default.\n\t* ospfd.h: (struct ospf) Add field for global\n          passive-interface.\n"
    },
    {
      "commit": "429ac78cc64e0e29bab7cbc00ee991abcdec3f81",
      "tree": "829302b483390d1484959e4f5b01da2e89d002ba",
      "parents": [
        "74ecdc9e74eb96829e342a03531ba6647ce6bb3c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 18:40:49 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 18:40:49 2006 +0000"
      },
      "message": "[ospfd] Fix multicast membership drop bug\n\n2006-06-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* Reported by Milan Koci\n\t* ospf_interface.h: (struct ospf_if_info) Add reference counts\n\t  for multicast group memberships. Add various macros to help\n\t  manipulate/check membership state.\n\t* ospf_interface.c: (ospf_if_set_multicast) Maintain the\n\t  ospf_if_info reference counts, and only actually drop\n\t  memberships if it hits 0, to avoid losing membership when\n\t  OSPF is disabled on an interface with multiple active OSPF\n\t  interfaces.\n\t* ospf_packet.c: (ospf_{hello,read}) Use the new macros to\n\t  check/set\n\t  multicast membership.\n\t* ospf_vty.c: (show_ip_ospf_interface_sub) ditto.\n"
    },
    {
      "commit": "9c27ef9b9c26db0af507869c2866c4a8463f4ae7",
      "tree": "72279949d2ac9f10f6e62a5a18e332a8b4e02dd5",
      "parents": [
        "b9d92881f5d45601c4268d99baec8835068b73c2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 04 07:32:57 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 04 07:32:57 2006 +0000"
      },
      "message": "[ospfd] Fix SPF of virtual-links\n\n2006-04-24 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) More Virtual-link fixes, again with much help in\n\t  testing / debug from Juergen Kammer. Primarily in SPF.\n\t* ospf_spf.h: Add guard. ospf_interface.h will include this\n\t  header.\n\t* ospf_interface.h: Modify ospf_vl_lookup definition to take\n\t  struct ospf as argument, so as to allow for NULL area\n\t  argument.\n\t  (struct ospf_vl_data) Remove out_oi, instead add a struct\n\t  vertex_nexthop, to use as initial nexthop for backbone paths\n\t  through a vlink.\n\t* ospf_interface.c: (ospf_vl_lookup) Modified to allow\n\t  NULL area to be passed to indicate \"any\" (first) area.\n\t  Add extra debug.\n\t  (ospf_vl_set_params) vl_oi -\u003e nexthop. Add extra debug.\n\t  (ospf_vl_up_check) Fix debug, inet_ntoa returns a static\n\t  buffer..\n\t* ospf_route.c: (ospf_intra_add_router) Vlinks dont go through\n\t  backbone, don\u0027t bother checking.\n\t* ospf_spf.c: (static struct list vertex_list) Record vertices\n\t  that will need to be freed.\n\t  (cmp) Order network before router vertices, as required,\n\t  wasn\u0027t implemented.\n\t  (vertex_nexthop_free) Mild additional robustness check.\n\t  (vertex_parent_free) Take void argument, as this function\n\t  is passed as list deconstructor for vertex parent list.\n\t  (ospf_vertex_new) More debug. Set deconstructor for parent\n\t  list. Track allocated vertices on the vertex_list.\n\t  (ospf_vertex_free) Get rid of the tricky recursive cleanup of\n\t  vertices. Now frees only the given vertex.\n\t  (ospf_vertex_add_parent) Fix assert.\n\t  (ospf_nexthop_calculation) Fix calculation of nexthop for\n\t  VLink vertices, lookup the vl_data and use its previously\n\t  recorded nexthop information.\n\t  (ospf_spf_calculate) Vertices are freed simply by deleting\n\t  vertex_list nodes and letting ospf_vertex_free as deconstructor\n\t  work per-node.\n\t  (ospf_spf_calculate_timer) Trivial optimisation, leave\n\t  backbone SPF calculation till last to reduce SPF churn on\n\t  VLink updates.\n\t* ospf_vty.c: (ospf_find_vl_data) update call to ospf_vl_lookup\n\t  (no_ospf_area_vlink_cmd) ditto.\n\t  (show_ip_ospf_interface_sub) For Vlinks, the peer address is\n\t  more interesting than the output interface.\n"
    },
    {
      "commit": "f9ad937f537df92bf3119686eee97db7b7176674",
      "tree": "8c203f4bffabbb2fd27ffeafd2e87e5fd704a0e2",
      "parents": [
        "24065a3d4a61a136a17996a48df02b0b180bc6f0"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Oct 21 00:45:17 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Oct 21 00:45:17 2005 +0000"
      },
      "message": "2005-10-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) OSPF fast, sub-second hello and 1s dead-interval\n\t  support. A warning fix. Millisec support for ospf_timer_dump.\n\t  Change auto-cost ref-bandwidth to add a comment to write out\n\t  of config, rather than printing annoying messages to vty on\n\t  startup.\n\t* ospf_dump.c: (ospf_timer_dump) Print out milliseconds too.\n\t  Callers typically specify a length of 9, so most see\n\t  millisecs unless they specify the additional length.\n\t* ospf_interface.h: (struct ospf_interface) new interface param,\n\t  fast_hello.\n\t* ospf_interface.c: (ospf_if_table_lookup) add brackets,\n\t  gcc warning fix.\n\t  (ospf_new_if_params) Initialise fast_hello param.\n\t  (ospf_free_if_params) Check whether fast_hello is configured.\n\t  (ospf_if_new_hook) set fast_hello to default.\n\t* ospf_ism.h: Wrap OSPF_ISM_TIMER_ON inside do {} while (0) to\n\t  prevent funny side-effects from its if statement when this\n\t  macro is used conditionally by other macros.\n\t  (OSPF_ISM_TIMER_MSEC_ON) new macro, set in milliseconds.\n\t  (OSPF_HELLO_TIMER_ON) new macro to set hello timer according\n\t  to whether fast_hello is set.\n\t* ospf_ism.c: Update all setting of the hello timer to use\n\t  either OSPF_ISM_TIMER_MSEC_ON or OSPF_HELLO_TIMER_ON. The\n\t  former is used when hello is to be sent immediately.\n\t* ospf_nsm.c: ditto\n\t* ospf_packet.c: (ospf_hello) hello-interval is not checked\n\t  for mismatch if fast_hello is set.\n\t  (ospf_read) Annoying nit, fix \"no ospf_interface\" to be debug\n\t  rather than a warning, as it can be perfectly normal to\n\t  receive packets when logical subnets are used.\n\t  (ospf_make_hello) Set hello-interval to 0 if fast-hellos are\n\t  configured.\n\t* ospf_vty.c: (ospf_auto_cost_reference_bandwidth) annoying\n\t  nit, don\u0027t vty_out if this command is given, it gets tired\n\t  quick.\n\t  (show_ip_ospf_interface_sub) Print the hello-interval\n\t  according to whether fast-hello is set or not.\n\t  Print the extra 5 millisec characters from (ospf_timer_dump)\n\t  if fast-hello is configured.\n\t  (ospf_vty_dead_interval_set) new function, common to all\n\t  forms of dead-interval command, to set dead-interval and\n\t  fast-hello correctly. If a dead-interval is given, unset\n\t  fast-hello, else if a hello-multiplier is set, set\n          dead-interval to 1 and fast-hello to given multiplier.\n\t  (ip_ospf_dead_interval_addr_cmd) use\n\t  ospf_vty_dead_interval_set().\n\t  (ip_ospf_dead_interval_minimal_addr_cmd) ditto.\n\t  (no_ip_ospf_dead_interval) Unset fast-hello.\n\t  (no_ip_ospf_hello_interval) Bug-fix, unset of hello-interval\n\t  should set it to OSPF_HELLO_INTERVAL_DEFAULT, not\n\t  OSPF_ROUTER_DEAD_INTERVAL_DEFAULT.\n\t  (config_write_interface) Write out fast-hello.\n\t  (ospf_config_write) Write a comment about\n\t  \"auto-cost reference-bandwidth\" having to be equal on all\n\t  routers. Hopefully just as noticeable as old practice of\n\t  writing to vty, but less annoying.\n\t  (ospf_vty_if_init) install the two new dead-interval\n\t  commands.\n\t* ospfd.h: Add defines for OSPF_ROUTER_DEAD_INTERVAL_MINIMAL\n\t  and OSPF_FAST_HELLO_DEFAULT.\n"
    },
    {
      "commit": "ba682537715c42ab3976790baea5cda86c5b1589",
      "tree": "791c998f0857bc4a53761e571427a6acdd11f4ae",
      "parents": [
        "fbf5d033041e406ecefd27c2deebf5a4953d1155"
      ],
      "author": {
        "name": "vincent",
        "email": "vincent",
        "time": "Thu Sep 29 13:52:57 2005 +0000"
      },
      "committer": {
        "name": "vincent",
        "email": "vincent",
        "time": "Thu Sep 29 13:52:57 2005 +0000"
      },
      "message": "2005-09-29 Alain Ritoux \u003calain.ritoux@6wind.com\u003e\n\n    * ospfd/ospf_vty.c: forece default route LSA to be re_issued whenever\n      cost is changed ( [no] ip ospf area XXX default-cost YYY)\n      Support ignore-mtu option\n    * ospfd/ospfd.h: define OSPF_MTU_IGNORE_DEFAULT\n    * ospfd/ospf_packet.c: support ignore-mtu option\n    * ospfd/ospf_interface.h: field added for skipping MTU check\n    * ospfd/ospf_interface.c: fix memory leak in ospf_crypt_key_delete()\n      Set mtu_ignore field to default value\n    * ospfd/ospf_abr.[ch]: export ospf_abr_announce_network_to_area()\n    * ospfd/ospf_ism.h: add MACRO to convert internal ISM status into SNMP\n      correct values\n    * ospfd/ospf_snmp.c: add sanity check on LSA type in lsdb_lookup_next()\n      convert OSPFIFSTATE internal status into SNMP values\n"
    },
    {
      "commit": "4dadc291e56195886fd047690ded9686f4e013fa",
      "tree": "ea7c0690912d2b7d0c487f6855960e768fff1b6e",
      "parents": [
        "69e10adaf28d4e116c38db2648786557fe131828"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri May 06 21:37:42 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri May 06 21:37:42 2005 +0000"
      },
      "message": "2005-05-06 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n        * (general) extern and static qualifiers added.\n          unspecified arguments in definitions fixed, typically they should\n          be \u0027void\u0027.\n          function casts added for callbacks.\n          Guards added to headers which lacked them.\n          Proper headers included rather than relying on incomplete\n          definitions.\n          gcc noreturn function attribute where appropriate.\n        * ospf_opaque.c: remove the private definition of ospf_lsa\u0027s\n          ospf_lsa_refresh_delay.\n        * ospf_lsa.h: export ospf_lsa_refresh_delay\n        * ospf_packet.c: (ospf_make_md5_digest) make *auth_key const,\n          correct thing to do - removes need for the casts later.\n        * ospf_vty.c: Use vty.h\u0027s VTY_GET_INTEGER rather than ospf_vty\u0027s\n          home-brewed versions, shuts up several warnings.\n        * ospf_vty.h: remove VTY_GET_UINT32. VTY_GET_IPV4_ADDRESS and\n          VTY_GET_IPV4_PREFIX moved to lib/vty.h.\n        * ospf_zebra.c: (ospf_distribute_list_update_timer) hacky\n          overloading of the THREAD_ARG pointer should at least use\n          uintptr_t.\n"
    },
    {
      "commit": "e4319de388b748ba66551f33fecdf7446e754b80",
      "tree": "d6ae690186b58ed048ed0a11911c6f1e2d71cd16",
      "parents": [
        "21fefa9843f6e8fc2263e8d85cf0d072b4b6c242"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 23:23:55 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 23:23:55 2005 +0000"
      },
      "message": "2005-04-02 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* ospf_interface.h: (ospf_if_lookup_by_name) Remove declaration of a\n\t  function that does not exist.\n\t* ospf6_interface.[ch]: (ospf6_interface_lookup_by_name) Remove unused\n\t  function.\n"
    },
    {
      "commit": "a608bbf27b48b7bd5e63f1c46380a1c5288ba48a",
      "tree": "5317bf773d9a90337fa9cef8ca24127f127dc2bc",
      "parents": [
        "5dcbdf82efdf65313a04ea45f2c8f7307c7ab671"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Mar 29 17:03:49 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Mar 29 17:03:49 2005 +0000"
      },
      "message": "2005-03-29 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* rt_netlink.c: (netlink_link_change) If the status of an\n\t  operative interface changes (e.g. MTU changes), the client\n\t  daemons should be notified by calling zebra_interface_up_update.\n\t  Previously, the information was being updated in zebra\u0027s\n\t  interface structure, but the clients were not notified of\n\t  changes to an operative interface.\n\t* ospf_zebra.c: (ospf_interface_state_up) If the MTU of an operative\n\t  interface changes, print a debug message and call ospf_if_reset()\n\t  to simulate down/up on the interface.\n\t* ospf_interface.h: Declare new function ospf_if_reset().\n\t* ospf_interface.c: (ospf_if_reset) New function to call ospf_if_down\n\t  and ospf_if_up for all ospf interfaces attached to an interface.\n"
    },
    {
      "commit": "8cfde37647b40640667ffb38c32b575da1476586",
      "tree": "c62e41ee92ce48b0887047f1028138953b480862",
      "parents": [
        "548e6f7d58a08e28132936431bba75428412857f"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Feb 08 15:59:16 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Feb 08 15:59:16 2005 +0000"
      },
      "message": "2005-02-08 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* ospf_interface.h: Reduce structure padding by putting new u_char\n\t  field multicast_memberships in a better spot (grouped with\n\t  other u_char fields type and state).\n"
    },
    {
      "commit": "ba6454ec1fd1ca7266b10eba07d016becb22db74",
      "tree": "1ee3f882924db44883e1023e5081741e10d86b3a",
      "parents": [
        "3a9eb091494f7afb8ce6bf82b8e1a20bb2a8f10f"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Feb 08 15:37:30 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Feb 08 15:37:30 2005 +0000"
      },
      "message": "2005-02-08 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* ospf_interface.h: Improve passive_interface comment.  Add new\n\t  multicast_memberships bitmask to struct ospf_interface to track\n\t  active multicast subscriptions.  Declare new function\n\t  ospf_if_set_multicast.\n\t* ospf_interface.c: (ospf_if_set_multicast) New function to configure\n\t  multicast memberships properly based on the current\n\t  multicast_memberships status and the current values of the\n\t  ospf_interface state, type, and passive_interface status.\n\t  (ospf_if_up) Remove call to ospf_if_add_allspfrouters (this is\n\t  now handled by ism_change_state\u0027s call to ospf_if_set_multicast).\n\t  (ospf_if_down) Remove call to ospf_if_drop_allspfrouters (now\n\t  handled by ism_change_state).\n\t* ospf_ism.c: (ospf_dr_election) Remove logic to join or leave\n\t  the DRouters multicast group (now handled by ism_change_state\u0027s call\n\t  to ospf_if_set_multicast).\n\t  (ism_change_state) Add call to ospf_if_set_multicast to change\n\t  multicast memberships as necessary to reflect the new interface state.\n\t* ospf_packet.c: (ospf_hello) When a Hello packet is received on a\n\t  passive interface: 1. Increase the severity of the error message\n\t  from LOG_INFO to LOG_WARNING; 2. Add more information to the error\n\t  message (packet destination address and interface address);\n\t  and 3. If the packet was sent to ospf-all-routers, then try\n\t  to fix the multicast group memberships.\n\t  (ospf_read) When a packet is received on an interface whose state\n\t  is ISM_Down, enhance the warning message to show the packet\n\t  destination address, and try to update/fix the multicast group\n\t  memberships if the packet was sent to a multicast address.\n\t  When a packet is received for ospf-designated-routers, but the\n\t  current interface state is not DR or BDR, then increase the\n\t  severity level of the error message from LOG_INFO to LOG_WARNING,\n\t  and try to fix the multicast group memberships.\n\t* ospf_vty.c: (ospf_passive_interface) Call ospf_if_set_multicast for\n\t  any ospf interface that may have changed from active to passive.\n\t  (no_ospf_passive_interface) Call ospf_if_set_multicast for\n\t  any ospf interface that may have changed from passive to active.\n\t  (show_ip_ospf_interface_sub) Show multicast group memberships.\n"
    },
    {
      "commit": "bc18d616ad7d1d580e1e04c28eab2cd9afb67fad",
      "tree": "2177945097bf719604b066c35724b55606ad7eae",
      "parents": [
        "766a0ca3dcb824fc9283be89bb57e47132b26826"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Dec 15 15:07:19 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Dec 15 15:07:19 2004 +0000"
      },
      "message": "2004-12-15 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* ospf_interface.h: Declare new function ospf_default_iftype.\n\t* ospf_interface.c: (ospf_default_iftype) New function to centralize\n\t  this logic in one place.\n\t* ospf_zebra.c: (ospf_interface_add) Use new function\n\t  ospf_default_iftype.\n\t* ospf_vty.c: (no_ip_ospf_network,config_write_interface) Fix logic\n\t  by using new function ospf_default_iftype.\n"
    },
    {
      "commit": "6c83567192ada1a66822c3f35580ce6a85f51ac9",
      "tree": "39ef09859fae79b7c7e234a671bf2e04f8e9264a",
      "parents": [
        "6b33361187feeb8c9c257ec149b4f75238af6c48"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Oct 11 11:00:30 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Oct 11 11:00:30 2004 +0000"
      },
      "message": "2004-10-11 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* (global) Const char update and signed/unsigned fixes.\n\t* (various headers) size defines should be unsigned.\n\t* ospf_interface.h: remove duplicated defines, include the\n\t  authoritative header - though, these defines should probably\n          be moved to a dedicated header, or ospfd.h.\n\t* ospf_lsa.h: (struct lsa) ls_seqnum should be unsigned.\n\t* ospf_packet.c: (ospf_write) cast result of shift to unsigned.\n"
    },
    {
      "commit": "87d6f87aec1920ca785de465282a772f9e459af8",
      "tree": "005eeed9ca8a62226a12392d28b1ab60a7cac9d4",
      "parents": [
        "52dc7ee65f8d887b0730abc0a5d44d27fc6ecafd"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Sep 24 08:01:38 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Sep 24 08:01:38 2004 +0000"
      },
      "message": "2004-09-24 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * ospf_apiserver.{c,h}: lists typedef removal cleanup.\n          update some list loops to LIST_LOOP. some miscellaneous indent\n          fixups.\n          (ospf_apiserver_unregister_opaque_type) fix listnode_delete of\n          referenced node in loop.\n        * ospf_interface.h: lists typedef removal cleanup.\n        * ospf_opaque.{c,h}: lists typedef removal cleanup. update some list\n          loops to LIST_LOOP. miscellaneous style and indent fixups.\n        * ospf_te.{c,h}: ditto\n\t* ospf_packet.c: lists typedef removal cleanup.\n"
    },
    {
      "commit": "52dc7ee65f8d887b0730abc0a5d44d27fc6ecafd",
      "tree": "a557339540c56dd3953c29a50ca0e48c1911efc8",
      "parents": [
        "44983cf8a9c587dfbcad294b9dfe4dccbb68ba98"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Sep 23 19:18:23 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Sep 23 19:18:23 2004 +0000"
      },
      "message": "Remove usage of evil list and listnode typedefs.\n"
    },
    {
      "commit": "2db3d05da3ac6b1ff9452a5f291bfc39a719d1c6",
      "tree": "41cceb234a9b0cfb6410574689cd800671456b55",
      "parents": [
        "cb05eb285f28524ada2df62c5522dcf47acb841b"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 11 21:52:13 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 11 21:52:13 2004 +0000"
      },
      "message": "Don\u0027t crash when attempting to read path-\u003eoi-\u003eifp if oi doesn\u0027t exist any\nmore. I\u0027m not sure if this read should be attempted at all, but I\u0027m trying\nto keep code safe AND stable.\n"
    },
    {
      "commit": "718e3744195351130f4ce7dbe0613f4b3e23df93",
      "tree": "bac2ad39971cd43f31241ef123bd4e470f695ac9",
      "parents": [],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "message": "Initial revision\n"
    }
  ]
}
