)]}'
{
  "log": [
    {
      "commit": "74ecdc9e74eb96829e342a03531ba6647ce6bb3c",
      "tree": "f40b1ba761f9ad9271c1951510bbd63eeaa57961",
      "parents": [
        "630c97ce0f87a719f678a24bd84945d4f145fdc5"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 18:10:47 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 18:10:47 2006 +0000"
      },
      "message": "[zebra] Fix forgetfulness wrt configured address on FreeBSD\n\n2006-06-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) The key fixes are actually Andrew Schorr\u0027s.\n\t* interface.c: (ip_address_uninstall) Unset the configured flag.\n\t* connected.c: (connected_same) new helper, check whether\n\t  two connected are same.\n\t  (connected_implicit_withdraw) new helper, consolidation of\n\t  existing code in connected_add_ipv{4,6}.\n\t  Try filter out unneeded Zserv address delete/adds when\n\t  address is exact same.\n\t  Where old address is implicitely removed, be sure to preserve\n\t  the IFC_CONFIGURED flag if set, fixes bug where configured\n\t  addresses were being lost on FreeBSD.\n"
    },
    {
      "commit": "630c97ce0f87a719f678a24bd84945d4f145fdc5",
      "tree": "1b87b2247617af51556f24a45b6735674d7f948d",
      "parents": [
        "c024fd0c76bc305cd6b6bab0989226bd9ec5e763"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:48:17 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:48:17 2006 +0000"
      },
      "message": "[zebra] remove internal if_flag_dump, use libzebras version.\n\n2006-06-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* lib/if.c: (if_flag_dump) remove the whitespace indentation, callers\n\t  should provide.\n\t* zebra/interface.c: (if_flag_dump_vty) redundant code, remove.\n\t  (if_dump_vty) use libzebra if_flag_dump.\n"
    },
    {
      "commit": "9c37851eac4e75cda515761cae7c63309add30ea",
      "tree": "3fcf98573c83f117f1e0219fcab8e160af70e56a",
      "parents": [
        "0f38dc4d4729b562551f8f53e7343f5a53b2dbf5"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Sun May 21 04:04:49 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Sun May 21 04:04:49 2006 +0000"
      },
      "message": "[interface configuration] Try to avoid losing address info after shutdown.\n2006-05-21 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* if.h: (struct connected) Document the meaning of the\n\t  ZEBRA_IFC_REAL and ZEBRA_IFC_CONFIGURED flags.\n\t* connected.c: (connected_withdraw) Do not delete the connected\n\t  address if the ZEBRA_IFC_CONFIGURED flag is set.\n\t  (connected_add_ipv4,connected_add_ipv6) Before calling\n\t  connected_withdraw, unset the ZEBRA_IFC_CONFIGURED flag\n\t  on the superseded connected structure.\n"
    },
    {
      "commit": "0f38dc4d4729b562551f8f53e7343f5a53b2dbf5",
      "tree": "e6d4f73e30c3d6e0859f3bc4e4867fb2323284bf",
      "parents": [
        "55196042ac8def6f0057039017eb6a400d7f73fb"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri May 19 13:53:23 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri May 19 13:53:23 2006 +0000"
      },
      "message": "[interface configuration] Preserve flag indicating address was set by quagga.\n2006-05-19 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* connected.c: (connected_add_ipv4,connected_add_ipv6) If the\n\t  new struct connected matches an already existing one\n\t  (that will consequently be removed by connected_withdraw),\n\t  then be sure to preserve the ZEBRA_IFC_CONFIGURED flag.\n"
    },
    {
      "commit": "55196042ac8def6f0057039017eb6a400d7f73fb",
      "tree": "1953ee9c087c73040591d4e7b5290abdf08fcabf",
      "parents": [
        "6685978081f24f154f058bff48d54396c91271e1"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Wed May 17 15:04:59 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Wed May 17 15:04:59 2006 +0000"
      },
      "message": "[debug] Improve zebra kernel socket debug message to include IP addresses.\n2006-05-17 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* kernel_socket.c: (ifam_read_mesg) Improve debug message\n\t  to show the IP address.\n"
    },
    {
      "commit": "6685978081f24f154f058bff48d54396c91271e1",
      "tree": "7dcb1c84984902c941a72274a6bfb758a96db4de",
      "parents": [
        "d6d672aaf930661f502a623d18d7a4abb4f184f2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon May 15 17:00:37 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon May 15 17:00:37 2006 +0000"
      },
      "message": "[zebra] Remove private command string table\n\n2006-05-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zserv.c: (general) Remove the private zebra_command_str\n\t  in favour of newly added libzebra zserv_command_string.\n"
    },
    {
      "commit": "beb5633607919d10ba8852ad51fe0b1dc7ecc812",
      "tree": "cf63d68186ec7e2b594e6fa6f95ad6f8aa7b7338",
      "parents": [
        "995b96515b7075fec77ab51dfe8be7788abd838d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 11 13:28:05 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 11 13:28:05 2006 +0000"
      },
      "message": "[zebra] CID #31, guard against potential NULL return of route_node_lookup\n\n2006-05-11 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* interface.c: (if_delete_update) route_node_lookup may return\n\t  NULL, should fix Coverity CID #31.\n"
    },
    {
      "commit": "e6d7d054d9b787c597319ec528ea8f64a7f949f6",
      "tree": "b03a71897e0baa854dd8db04841ba70143bd6f01",
      "parents": [
        "924f9d32d9c42d6861f19bae795c48b48c83af23"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 13:32:09 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 13:32:09 2006 +0000"
      },
      "message": "[zebra] arrange structs in padding-efficient manner and remove unused field\n\n2006-02-09 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* rib.h: (struct {rib,nexthop}) Rearrange fields to avoid\n\t  needless padding.\n\t  (struct rib) Remove the indirect pointer, not used anywhere!\n"
    },
    {
      "commit": "3a570c8b7b56b5a3042fbc035a01c753440b927c",
      "tree": "89ee2d6845bf23c83e659f5aac43a6496e77ddf1",
      "parents": [
        "b1fc9acbbea5ed5846d46aa60f9cf49b6105763a"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Feb 02 17:27:13 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Feb 02 17:27:13 2006 +0000"
      },
      "message": "[zebra] Display flags on their line in \u0027show interface\u0027.\n\n2006-02-02 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* interface.c: (if_dump_vty) move flags to their line, neater.\n"
    },
    {
      "commit": "a1038a15658d2fd4ab3314a9036bbd63f8f471c1",
      "tree": "5cef40b1e66fd105d0d0d6e4ecf52089ed15e803",
      "parents": [
        "a8d9c1f9caae29410b74f138f81d9b07645c47ce"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 30 14:08:51 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 30 14:08:51 2006 +0000"
      },
      "message": "[zebra] Fix pauls zebra_rib/rib_process commit mistakes, again.\n\n2006-01-30 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zebra_rib.c: (rib_process) Fourth time lucky on this jinxed\n\t  commit, last commit had a hole that could allow connected\n\t  route selection to escape beyond the connected route logic.\n\t  This time I cross-checked with Gunnar first. ;)\n"
    },
    {
      "commit": "a8d9c1f9caae29410b74f138f81d9b07645c47ce",
      "tree": "ee5285e9e8932ebf89b16bb051c1af78755ade08",
      "parents": [
        "5c78b3d006e6926f938796cffa08e8e14fb8e7af"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 25 06:31:04 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 25 06:31:04 2006 +0000"
      },
      "message": "[zebra] Fix incorrect changes made in RIB metric selection patch\n\n2006-01-25 Gunnar Stigen \u003cgunnar.stigen@axxessit.no\u003e\n\n\t* zebra_rib.c: (rib_process) Application of Gunnar\u0027s earlier\n\t  metric selection RIB change included incorrect tidy-ups made\n\t  by commiter. Fix. (NB: any errors here are again due to paul).\n"
    },
    {
      "commit": "5c78b3d006e6926f938796cffa08e8e14fb8e7af",
      "tree": "19f8f80511cba84e0d70ac22667321a4a7df0d60",
      "parents": [
        "590188b67db4021b9d1552238ef49482dd5f0123"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 25 04:31:40 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 25 04:31:40 2006 +0000"
      },
      "message": "[zebra/solaris] Interface state fixups for Solaris.\n\n2006-01-25 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) More solaris PF_ROUTE hacks. The IFF_UP mangling\n\t  for solaris was incomplete on the PF_ROUTE side. fix it.\n\t  This changeset generally uglifies things. For some future\n\t  work I\u0027d like to see the state changes seperated out from\n\t  the details of the code. Differences between systems might\n\t  then be slightly easier to implement without convoluted\n\t  hacks.\n\t  Changes should be specific to Solaris mostly, however\n\t  also tested on FreeBSD 6.\n\t* if_ioctl_solaris.c: (interface_list_ioctl) ignore ~IFF_UP\n\t  interfaces, we\u0027ll hear about them when/if interface goes up\n\t  through NEWADDR.\n\t  Update flags explicitely at end of it to kick mangling.\n\t* ioctl_solaris.c: (if_mangle_up) removed to interface.c, in\n\t  kind.\n\t  (lifreq_set_name) more convenient to take the string, than\n\t  the ifp.\n\t  (if_get_flags_direct) new convenience function, returns\n\t  the actual flags. Used during bootstrap in if_ioctl_solaris.c\n\t  to peek at flags of logical interfaces to see whether or\n\t  not to ignore them.\n\t  (if_get_flags) ENXIO means it\u0027s gone, poke out IFF_UP and\n\t  kick flags update.\n\t  (if_{un,}set_flags) flags argument should be 64bit.\n\t* ioctl.{c,h}: flags argument should be 64bit.\n\t* interface.h: Add a \u0027primary_state\u0027 flag to struct zebra_if on\n\t  SUNOS_5.\n\t  Export if_flags_update.\n\t* interface.c: (if_flags_mangle) moved over in kind from\n\t  ioctl_solaris.c. Nasty kludge to try get IFF_UP right, as\n\t  much as is possible. Also keep track of the actual IFF_UP\n\t  value for the primary interface, so we can know when the ifp\n\t  must be deleted.\n\t  (if_flags_update) Take a new interface flags value, apply it\n\t  to the interface, and take whatever actions are required due\n\t  to flag transitions.\n\t  (if_refresh) flag state change logic is moved out to\n\t  previous. Just call if_get_flags, which will end up using\n\t  previous to effect the update of flags.\n\t  (if_flag_dump_vty) IFF_IPV{4,6} aren\u0027t interesting, VIRTUAL\n\t  and NOXMIT are though.\n\t* kernel_socket.c: (ifm_read) Down-\u003eDown transitions shouldn\u0027t\n\t  create ifp, for non-IFANNOUNCE systems.\n\t  Use if_flags_update to update flags.\n\t  flag transition logic is now handled automatically through\n\t  if_flags_update.\n\t  (ifam_read) Better to call if_refresh *after* adding\n \t  connected addresses, as connected count affects IFF_UP on\n \t  IFF_UP-mangled systems.\n \t  On Solaris, Up-\u003eDown due to DELADDR means we need to delete\n\t  the ifp - the IFINFO might already have been and gone.\n\t* rt.h: include other dependent headers.\n"
    },
    {
      "commit": "e8e1946edf6ba87ef53832cdceccc39d7f0c3f26",
      "tree": "fcdaf92bf4129a8a58825bd21ae841a6b3b2bda8",
      "parents": [
        "779adb0147cfff1a831b08853976342ad2110fcd"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Jan 19 20:16:55 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Jan 19 20:16:55 2006 +0000"
      },
      "message": "[compiler] miscellaneous trivial compiler warning fixes\n\n2006-01-19 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n        * (general) various miscellaneous compiler warning fixes.\n          Remove redundant break statements from switch clauses\n          which return.\n          return from main, not exit, cause it annoys SOS.\n          Remove stray semi-colons which cause empty-statement\n          warnings.\n\t* zebra/main.c: (sighup) remove private declaration of external\n\t  function.\n"
    },
    {
      "commit": "af887b5111ada0e8cd961e9479aa9d39796a80c8",
      "tree": "0bc5674824e5cebe0c0bd17ef34eac99f7b68a48",
      "parents": [
        "eac314c7c49f6c0ec502be08e244f91bfc778739"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 18 14:52:52 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 18 14:52:52 2006 +0000"
      },
      "message": "2006-01-18 Gunnar Stigen \u003cgunnar.stigen@axxessit.no\u003e\n\n\t* zebra_rib.c: Take interface metric into account.\n"
    },
    {
      "commit": "d34b8991b4c156ff3281558dd8252d3787ae8d8b",
      "tree": "f198a545a4363d91c40b6303a03d2c7e323cc5be",
      "parents": [
        "61f42aed5e1cee1a853f92110d794a286995d203"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 17 18:03:04 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 17 18:03:04 2006 +0000"
      },
      "message": "[zebra] Record NEWADDR metric on PF_ROUTE, print CACHEINFO debug on netlink\n\n2006-01-17 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* kernel_socket.c: (ifam_read) Read metric from RTM_NEWADDR.\n\t  If interface is an alias, pass the alias as a label for\n\t  connected_add_ipv{4,6}.\n\t* rt_netlink.c: (netlink_interface_addr) print out\n\t  IFA_CACHEINFO info, if present, when debugging kernel\n\t  messages.\n"
    },
    {
      "commit": "61f42aed5e1cee1a853f92110d794a286995d203",
      "tree": "e9eededc78bd39443ebf03565ad113c16f3ab49d",
      "parents": [
        "c713300ab429c8779be98ec3c8dc888821405d55"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 17 17:59:11 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 17 17:59:11 2006 +0000"
      },
      "message": "[zebra] Defensive if_getaddrs bug fix.\n\n2006-01-17 Gunnar Stigen \u003cgunnar.stigen@axxessit.no\u003e\n\n\t* if_ioctl.c: (if_getaddrs) Be defensive about assuming\n\t  that struct ifaddrs will have ifa_addr filled in.\n"
    },
    {
      "commit": "c713300ab429c8779be98ec3c8dc888821405d55",
      "tree": "f1b6562d5583d2cb155a6076c9f52400bd993885",
      "parents": [
        "c6371718f39dedd2a03010a9dc26a18d96abbe7f"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 17 17:56:18 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 17 17:56:18 2006 +0000"
      },
      "message": "[zebra] Include metric on connected routes.\n\n2006-01-17 Gunnar Stigen \u003cgunnar.stigen@axxessit.no\u003e\n\n\t* connected.c: (connected_up_ipv{4,6}) Include interface metric on\n\t  connected routes.\n"
    },
    {
      "commit": "c1b9800a60f073c7d57f6232f9af7ae39bc3353a",
      "tree": "94fc0006fcf73d4ab4733bef23689cb8f36772ee",
      "parents": [
        "c77d4546619f9d3e0ccfac5acbc0ebb42658a61f"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 16 01:54:02 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 16 01:54:02 2006 +0000"
      },
      "message": "[zserv] Extend Zserv header with version information and marker field\n\n2006-01-16 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* lib/zclient.h: Update the Zserv protocol header with a version\n\t  field.  Define the old command field to be a \u0027marker\u0027, to\n\t  allow old Zserv and updated Zserv to be differentiated.\n\t  Future updates will bump the version field obviously. New\n\t  command field is made wider.  Try to stop using the\n\t  \u0027zebra_size_t\u0027 typedef in the callbacks.\n\t* lib/zclient.c: Update to read/write new format header.\n\t* zebra/zserv.c: Ditto\n"
    },
    {
      "commit": "c77d4546619f9d3e0ccfac5acbc0ebb42658a61f",
      "tree": "007f6c4e2c85e4df115c39011aa7ad3fb379f434",
      "parents": [
        "44316fef4d93b3d94cf45663ce35797d32acce71"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 11 01:59:04 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 11 01:59:04 2006 +0000"
      },
      "message": "[zserv] Update interface flags to 8 bytes wide.\n\n2006-01-11 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* if.h: (struct interface) expand flags to 8 bytes.\n\t* zclient.c: (zebra_interface_{add,state}_read) stream read of\n\t  interface flags now need to use stream_getq.\n\t  (zebra_interface_if_set_value) ditto\n\n2006-01-11 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zserv.c: (zsend_interface_{add,delete,update}) if flags are\n\t  8 bytes now, update to write out with stream_putq.\n"
    },
    {
      "commit": "e14b7fca6279fe9dc41c8aa9816b5685952c4b19",
      "tree": "07a64009dee808041bb4ffb5605f085ae412064a",
      "parents": [
        "f80a016fbd5ba51dc08412d7fd0794b51223c978"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Thu Dec 29 16:04:53 2005 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Thu Dec 29 16:04:53 2005 +0000"
      },
      "message": "remove dead code (from David Young)\n"
    },
    {
      "commit": "6083e1f82ce3a33d9929dea8c64cbc5ffe486000",
      "tree": "48872266c1f9f0741ea27513560248420a1632f7",
      "parents": [
        "a3214b79aceed58ae638afe62d9db149f3bc81c7"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Thu Dec 29 15:59:57 2005 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Thu Dec 29 15:59:57 2005 +0000"
      },
      "message": "2005-12-29  Greg Troxel  \u003cgdt@fnord.ir.bbn.com\u003e\n\n        * rt_socket.c (kernel_rtm_ipv4): Use AF_INET rather than AF_UNSPEC\n        for mask.  From David Young.\n"
    },
    {
      "commit": "89368d9f8b70fef5c196db9055bd6a7e7aaa4f36",
      "tree": "e3756712745f8e6556fa35105bea3023647b9233",
      "parents": [
        "6a4b883229eb5590ee59cbe24ea0005df03be675"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Nov 26 09:14:07 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Nov 26 09:14:07 2005 +0000"
      },
      "message": "[zebra] fix connected_add_ipv6 declarations, label should be const.\n\n2005-11-26 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* connected.{c,h}: (connected_add_ipv6) label should have\n\t  const qualifier, fix declarations.\n"
    },
    {
      "commit": "ec1a428343cad343969d569c56acbe6b02ab8f4f",
      "tree": "ed693dcea011eccbef34113da3e340ec1290e7b3",
      "parents": [
        "b6026073584b855d47a8e2033d2aa3413a3394e9"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 24 15:15:17 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 24 15:15:17 2005 +0000"
      },
      "message": "[zebra] Fix mistake in previous commit and further compile warnings/errors.\n\n2005-11-24 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* kernel_socket.h: New header for functions exported to sysctl\n\t  methods.\n\t* kernel_socket.c: include previous.\n\t  Remove static qualifier from couple of functions which are\n\t  used by sysctl methods, incorrectly added in previous commit.\n\t  Add a workaround for a bogus gcc warning to the RTA_ macros.\n\t* Makefile.am: Add kernel_socket.h to noinst_HEADERS\n\t* if_sysctl.c: include rt.h and kernel_socket.h and remove\n\t  redundant prototypes.\n\t* rtread_sysctl.c: ditto.\n\t  (route_read) fix mismatch of return values.\n\t* {rt,zserv,rib}.h: Include lib headers depended on.\n"
    },
    {
      "commit": "6621ca868c935a82468e07ea2e5a165f40750658",
      "tree": "01db8cd66509c8afd2057558b048fc134c1371b8",
      "parents": [
        "5906476bea21153f5d757e364b8e4c604b72cef1"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Nov 23 13:02:08 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Nov 23 13:02:08 2005 +0000"
      },
      "message": "[zebra] fix some small compile errors, mark several functions static\n\n2005-11-23 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) fix some small compile errors, and mark several\n          functions as static.\n        * kernel_socket.c: (ifan_read) should be static.\n          fix missing brackets.\n          (ifm_read,ifam_read,rtm_read_mesg,kernel_read) Make static\n          (ifam_read_mesg) make static. fix incorrect variable name.\n          (rtm_read) make static. Fix call to rib_delete_ipv4 which\n          should be rib_delete_ipv6.\n          (routing_socket,kernel_init) should be static. Void argument\n          should be specified as such, not left incomplete.\n        * rt_netlink.c: rt.h should be included, contains prototypes of\n          exported functions.\n          (kernel_delete_ipv6_old) fix sign of index argument.\n        * rt_socket.c: Exact same as previous. Also, make various\n          functions static.\n        * rtread_getmsg.c: Include zserv.h, which prototypes\n          route_read. Make static.\n        * rtread_sysctl.c: zserv.h and rt.h should be included.\n          fix definition of route_read.\n"
    },
    {
      "commit": "0fb58d5d7993b638fc46085944d17d3a54d66046",
      "tree": "9b1195ad505d2c14fdf09036db4f324ff3ec7f18",
      "parents": [
        "76367ea9753aa9cef7cf5d3c954f55b5725f31da"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 14:31:49 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 14:31:49 2005 +0000"
      },
      "message": "2005-11-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zebra_rib.c: (rib_process) convert to new workqueue specs and\n\t  shut up gcc, which complains about cast from void via\n\t  function parameters, for some dumb reason. Do the cast\n\t  inside the function instead.\n\t  (rib_queue_qnode_del) ditto.\n\t  (rib_queue_init) no need for the casts anymore.\n"
    },
    {
      "commit": "6fe70d1b35c189cb1e488b2c26551ba7baac6148",
      "tree": "c2fc75ff90d6ad2d8a05f1f8a6414a913be53a8d",
      "parents": [
        "db29ae5fcaee1d2de371415e351afe6c3df19874"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Nov 12 22:55:10 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Nov 12 22:55:10 2005 +0000"
      },
      "message": "[solaris] Extra debug and cross-checks for kernel_socket, two Sol9 fixes.\n\n2005-11-12 Alexander Gall \u003cgall@switch.ch\u003e\n\n\t* See [quagga-dev 1815]\n\t* kernel_socket.c: (rtm_write) Use SAROUNDUP when HAVE_SIN_LEN\n\t  is not available.\n\t* rt_socket.c: (kernel_rtm_ipv6(_multipath)) set family to\n\t  AF_INET6 on ipv6 routes.\n\n2005-11-12 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* kernel_socket.c: Add RTA_NAME_GET macro to extract name from\n\t  sockaddr_dl. Add some more RTF_ flags.\n\t* (ifan_read) Add some debug messages.\n\t* (ifm_read) Add more debug messages. More robust cross-checks\n\t  of index against name.\n\t  Fall back to by-name lookup if the index lookup fails, future\n\t  proofing more than anything else.\n\t  (ifam_read_mesg) Read RTA_IFP. Add debug messages.\n\t  (ifam_read) More debug. If there\u0027s an RTA_IFP and it isn\u0027t\n\t  the name of the interface, save it as the label.\n\t  (rtm_read_mesg) Read RTA_IFP.\n\t  (rtm_read) allow name to be retrieved.\n\t  (rtmsg_debug) expand on the debug message.\n"
    },
    {
      "commit": "0994c3a59c114e4e2427f2c02cb2f12881854e36",
      "tree": "8f2230655273a995a554ffa51e2daad325c08df3",
      "parents": [
        "ca6383ba74cca26d8e33184a1c2abc69a1149ef9"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Nov 11 09:52:40 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Nov 11 09:52:40 2005 +0000"
      },
      "message": "[zebra] Fix warning and small connected-label changes merge error.\n\n2005-11-11 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* kernel_socket.c: (ifm_read) arithmetic on void pointer\n\t  warning.\n\t  (ifam_read) Fix error from connected-with-label merge,\n\t  something crept in from the pending Solaris kernel_socket.c\n          patch which shouldn\u0027t have.\n"
    },
    {
      "commit": "0752ef0b2e9bbf6c7ab20ed0fe87840b3bd1b7f4",
      "tree": "d580aa8f809edf9a75968f7416e8415ffa72784c",
      "parents": [
        "6d45276f0c8aeec1ce53f77039ec02ec0f940ca1"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 03 12:35:21 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 03 12:35:21 2005 +0000"
      },
      "message": "2005-11-03 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* connected.{c,h}: Include memory.h\n\t  (connected_add_ipv4) Use MTYPE for ifc label.\n\t  (connected_add_ipv6) Also should accept label. Store it in ifp.\n\t  (connected_del_ipv4) Taking label as argument is pointless.\n\t* rt_netlink.c: (netlink_interface_addr) update label usage\n\t  for connected_{add,delete} functions.\n\t* if_ioctl.c: (if_getaddrs) NULL label for connected_add_ipv6.\n\t* if_ioctl_solaris.c: (interface_list_ioctl) Pass LIFC_NOXMIT\n\t  so we also find out about NOXMIT interfaces like VNI.\n\t  Bit of hackery to turn interface names into the primary\n\t  interface name, later with routing socket messages we only\n\t  will about primary interfaces anyway, so we must normalise\n\t  the name.\n\t  (if_get_addr) take label as argument, so it can\n\t  be passed to connected_add.\n\t  If label is provided, then it is interface name to issue the\n\t  ioctl for address information on, not the ifp name.\n\t  (interface_list) List AF_UNSPEC too, just in case.\n\t* if_proc.c: (ifaddr_proc_ipv6) label for connected_add_ipv6.\n\t* interface.c: (if_addr_wakeup) Some very bogus code - sets\n\t  IFF_RUNNING - add comment.\n\t  (if_refresh)\n\t  (ip_address_install) Use MTYPE for ifc label.\n\t* ioctl_solaris.c: (if_mangle_up) New function. Hackery to make\n\t  IFF_UP reflect whether any addresses are left on the\n\t  interface, as we get signalled for IFF_UP flags change on the\n\t  primary interface only. Logical interfaces dont generate\n\t  IFINFO, but we do get an RTM_DELADDR.\n\t  (if_get_flags) Call if_mangle_up before return.\n\t* kernel_socket.c: (ifam_read) Fixup calls to\n\t  connected_{add,delete} to match above changes. Rename gate\n\t  variable to brd, less confusing.\n\t  Pass the interface name as a label, if it is not same name\n\t  as ifp-\u003ename.\n"
    },
    {
      "commit": "d06b2a64b7093f998e7b0f33454efc23190123ac",
      "tree": "00117184e0d6ea2084d02abf31b4564182a03fc1",
      "parents": [
        "84771ee0deadae6d83b939a2d3f8f83cc420a829"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Oct 11 03:53:54 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Oct 11 03:53:54 2005 +0000"
      },
      "message": "2005-10-11 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* connected.{c,h}: (connected_{add,delete}_ipv4) label should\n\t  be const qualified.\n"
    },
    {
      "commit": "f52d13cb2e8e7197934d5f241f88647f9b9d78b8",
      "tree": "b0aa01befc07f57ed47e83ac7dfb383284c49d26",
      "parents": [
        "c05612b9a702d0f49c379c92deb6daab55372aea"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Oct 01 17:38:06 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Oct 01 17:38:06 2005 +0000"
      },
      "message": "2005-10-01 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: Declare new functions zebra_route_string() and\n\t  zebra_route_char().\n\t* log.c: (zroute_lookup,zebra_route_string,zebra_route_char) New\n\t  functions to map zebra route numbers to strings.\n\t* zebra_vty.c: (route_type_str) Remove obsolete function: use new\n\t  library function zebra_route_string() instead.  Note that there\n\t  are a few differences: for IPv6 routes, we now get \"ripng\" and\n\t  \"ospf6\" instead of the old behavior (\"rip\" and \"ospf\").\n\t  (route_type_char) Remove obsolete function: ues new library function\n\t  zebra_route_char() instead.  Note that there is one difference:\n\t  the old function returned \u0027S\u0027 for a ZEBRA_ROUTE_SYSTEM route,\n\t  whereas the new one returns \u0027X\u0027.\n\t  (vty_show_ip_route_detail,vty_show_ipv6_route_detail) Replace\n\t  route_type_str() with zebra_route_string().\n\t  (vty_show_ip_route,vty_show_ipv6_route) Replace route_type_char()\n\t  with zebra_route_char().\n\t* bgp_vty.c: (bgp_config_write_redistribute) Use new library function\n\t  zebra_route_string instead of a local hard-coded table.\n\t* ospf6_asbr.c: Remove local hard-coded tables zroute_name and\n\t  zroute_abname. Change the ZROUTE_NAME macro to use new library\n\t  function zebra_route_string().  Remove the ZROUTE_ABNAME macro.\n\t  (ospf6_asbr_external_route_show): Replace ZROUTE_ABNAME() with\n\t  a call to zebra_route_char(), and be sure to fix the format string,\n\t  since we now have a char instead of a char *.\n\t* ospf6_zebra.c: Remove local hard-coded tables zebra_route_name and\n\t  zebra_route_abname.  Note that the zebra_route_name[] table\n\t  contained mixed-case strings, whereas the zebra_route_string()\n\t  function returns lower-case strings.\n\t  (ospf6_zebra_read_ipv6): Change debug message to use new library\n\t  function zebra_route_string() instead of zebra_route_name[].\n\t  (show_zebra): Use new library function zebra_route_string() instead\n\t  of zebra_route_name[].\n\t* ospf_dump.c: Remove local hard-coded table ospf_redistributed_proto.\n\t  (ospf_redist_string) New function implemented using new library\n\t  function zebra_route_string().  Note that there are a few differences\n\t  in the output that will result: the new function returns strings\n\t  that are lower-case, whereas the old table was mixed case.  Also,\n\t  the old table mapped ZEBRA_ROUTE_OSPF6 to \"OSPFv3\", whereas the\n\t  new function returns \"ospf6\".\n\t* ospfd.h: Remove extern struct message ospf_redistributed_proto[],\n\t  and add extern const char *ospf_redist_string(u_int route_type)\n\t  instead.\n\t* ospf_asbr.c: (ospf_external_info_add) In two messages, use\n\t  ospf_redist_string instead of LOOKUP(ospf_redistributed_proto).\n\t* ospf_vty.c: Remove local hard-coded table distribute_str.\n\t  (config_write_ospf_redistribute,config_write_ospf_distribute): Use\n\t  new library function zebra_route_string() instead of distribute_str[].\n\t* ospf_zebra.c: (ospf_redistribute_set,ospf_redistribute_unset,\n\t  ospf_redistribute_default_set,ospf_redistribute_check)\n\t  In debug messages, use ospf_redist_string() instead of\n\t  LOOKUP(ospf_redistributed_proto).\n\t* rip_zebra.c: (config_write_rip_redistribute): Remove local hard-coded\n\t  table str[]. Replace str[] with calls to new library function\n\t  zebra_route_string().\n\t* ripd.c: Remove local hard-coded table route_info[].\n\t  (show_ip_rip) Replace uses of str[] with calls to new library\n\t  functions zebra_route_char and zebra_route_string.\n\t* ripng_zebra.c: (ripng_redistribute_write) Remove local hard-coded\n\t  table str[].  Replace str[i] with new library function\n\t  zebra_route_string(i).\n\t* ripngd.c: Remove local hard-coded table route_info[].\n\t  (show_ipv6_ripng) Use new library function zebra_route_char() instead\n\t  of table route_info[].\n"
    },
    {
      "commit": "c05612b9a702d0f49c379c92deb6daab55372aea",
      "tree": "3e99659456e05f2d3d428c430c883f49ad7fdd28",
      "parents": [
        "13fb40ac99823c405137a42d7666785fd7ac641a"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Oct 01 16:36:54 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Oct 01 16:36:54 2005 +0000"
      },
      "message": "2005-10-01 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* rt_netlink.c: (netlink_request) Use memset to clear structure\n\t  before calling sendto (eliminates a valgrind error message about\n\t  uninitialized data).\n"
    },
    {
      "commit": "fbf5d033041e406ecefd27c2deebf5a4953d1155",
      "tree": "e9173ab5e05fc86e95f325d2cb2a7a123eb33327",
      "parents": [
        "3fdb2dd9dd8b4ab3517896092dd1b677d191adf9"
      ],
      "author": {
        "name": "vincent",
        "email": "vincent",
        "time": "Thu Sep 29 11:25:50 2005 +0000"
      },
      "committer": {
        "name": "vincent",
        "email": "vincent",
        "time": "Thu Sep 29 11:25:50 2005 +0000"
      },
      "message": "2005-09-29 Alain Ritoux \u003calain.ritoux@6wind.com\u003e\n\n    * lib/filer.c: show protocol name in filter_show()\n    * lib/plist.c: show protocol name in vty_show_prefix_entry()\n    * routemap.c: show protocol name in vty_show_route_map_entry()\n    * lib/vty.c: in vty_command(), show protocol name if command unknown\n\n    * zebra/zserv.c: Always provide distance fo route add\n\n    * ripd/rip_snmp.c: rip2IfConfReceive() sends values in conformance\n      with RFC. Also PeerDomain is now set to a STRING type.\n    * ripd/ripd.h: rip_redistribute_add() API includes metric and distance\n    * ripd/ripd.c: rip_redistribute_add() API i.e. stores metric and distance\n      Now allows a RIP-route to overcome a redistributed route coming\n      from a protocol with worse (higher) administrative distance\n      Metrics from redistribution are shown in show ip rip\n    * ripd/rip_zebra.c: adapt to the rip_redistribute_add() API, i.e.\n      provide distance and metric\n    * ripd/rip_interface.c: adapt to the rip_redistribute_add() API\n    * ripd/rip_routemap.c: no RMAP_COMPILE_ERROR on (metric \u003e 16) usage\n      rather a CMD_WARNING, because set metric ius shared with other\n      protocols using larger values (such as OSPF)\n      The match metric action takes first external metric if present\n      (from redistribution) then RIP metric.\n"
    },
    {
      "commit": "aa2e32be264710ef208516dfe1661b8148c3eede",
      "tree": "c990a1ce60bfbfd4847099ef8c013db0638b794d",
      "parents": [
        "fac1f7cc8eaa750fa46985977a97e05e493228a2"
      ],
      "author": {
        "name": "vincent",
        "email": "vincent",
        "time": "Wed Sep 28 13:42:11 2005 +0000"
      },
      "committer": {
        "name": "vincent",
        "email": "vincent",
        "time": "Wed Sep 28 13:42:11 2005 +0000"
      },
      "message": "    * connected.c: flag connected_up_ipv6() and connected_down_ipv6()\n      usage with HAVE_IPV6\n"
    },
    {
      "commit": "d24af186ea5a964300d93bb6fb4384911153d9d6",
      "tree": "7b8e57758edca8e12e5004192d6e14bd1cbb43c6",
      "parents": [
        "3d54927678139c580fd3029c17e7d8a94b3a60f7"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Sep 24 14:00:26 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Sep 24 14:00:26 2005 +0000"
      },
      "message": "\t* rib.h: Add note about behaviour of rib_add_ipv[46]* functions -\n\t  add is treated as implicit withdraw.\n"
    },
    {
      "commit": "ebf1ead0326bf18293c24ee151d22071e8bebc10",
      "tree": "a39df91000789222ca622fec1325f4acaf2d564e",
      "parents": [
        "75b2dd025af1d839279a21ee4b3035085d17331c"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Sep 21 14:58:20 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Sep 21 14:58:20 2005 +0000"
      },
      "message": "\t* zebra_rib.c: Reduce the height of some staircases. Fix\n\t  rib_delete_ipv6() to match routes in the RIB by their gateway as\n\t  well as by destination.\n"
    },
    {
      "commit": "319572cc52267bfd55cca5eaab405df4db27ddaf",
      "tree": "576a148fe8515caf60bde98505a41845068c1d4d",
      "parents": [
        "5339cfdb7c3f6187452982173aa55ff525d1f6fe"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Sep 21 12:30:08 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Sep 21 12:30:08 2005 +0000"
      },
      "message": "2005-09-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zebra_rib.c: (static_uninstall_ipv{4,6}) Fix regression wrt\n\t  removal of static routes with multiple-hops introduced with\n\t  the workqueue conversion. We should free the relevant\n\t  nexthop and then get rib_process to run, otherwise we just\n\t  get same static route back again (with no way to unconfigure\n          it, because its already deleted from configuration).\n"
    },
    {
      "commit": "ca16218df74a43491e34a577db5023c89a7e79c8",
      "tree": "5aaee14da68863f7d7eb80fad46c83bebfc4fb8c",
      "parents": [
        "1f377b0202dfc4653f7717de964b628a369a9526"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Sep 12 16:58:52 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Sep 12 16:58:52 2005 +0000"
      },
      "message": "2005-09-12 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) RTM_CHANGE and implicit withdraw on RTM_NEWADDR\n\t  support.\n\t* connected.c: (connected_withdraw) new function. withdraw a\n\t  connected subnet address set from zebra, and pass information\n\t  along to clients.\n\t  (connected_announce) similar, but to announce a new connected\n\t  subnet address set.\n\t  (connected_check_ipv4) renamed to connected_check, as its\n\t  AFI independent.\n\t  (connected_add_ipv{4,6}) Remove the connected address announce\n\t  stuff, use connected_announce instead.\n\t  If connected_check indicates address is already present,\n\t  treat it as an implicit withdraw of the existing address, ie\n\t  remove the old address details and replace with the new\n\t  details.\n\t  (connected_delete_ipv{4,6}) Use connected_withdraw.\n\t  (connected_check_ipv6) deleted in favour of connected_check.\n\t* connected.h: Rename connected_check_ipv4 to connected_check.\n\t  delete connected_check_ipv6.\n\t* interface.c: Use connected_check rather than the AFI specific\n\t  symbols.\n\t* kernel_socket.c: (rtm_read) RTM_CHANGE support. Create a\n\t  rib delete event for the existing route, before adding route\n\t  again.\n\t  (kernel_read) we can handle RTM_CHANGE now.\n"
    },
    {
      "commit": "be61c4eb59b8df1aab496176d87bb2e1763f185e",
      "tree": "063e8baa7cd4a863e72d246d7c14f14842cbb604",
      "parents": [
        "b7395791a31f7b734094d032998ab632136f36f1"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Aug 27 06:05:47 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Aug 27 06:05:47 2005 +0000"
      },
      "message": "\t* zebra_rib.c, rib.h: Add distance and metric arguments to the\n\t  rib_add_ipv6() function so that IPv6 routes in RIB can have correct\n\t  metric. No IPv6 routing daemon uses distance yet though.\n\t* zserv.c, connected.c, kernel_socket.c, rt_netlink.c,\n\t  rtread_proc.c,zserv.c: Pass metric and distance info to the\n\t  rib_add_ipv6().\n\n\tForwardport from stable branch.\n"
    },
    {
      "commit": "6eb8827d669b06d7b38357860d23fa33e0c0078e",
      "tree": "bab69ac40c857fd6a6e7b447166df7e9ae08989d",
      "parents": [
        "7907c6c9d34a4f19dd7d4d8d81c3c8ae5000ee07"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jul 29 14:36:00 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jul 29 14:36:00 2005 +0000"
      },
      "message": "2005-07-29 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* interface.c: (if_delete_update) should always be available, not\n\t  just on RTM_IFANNOUNCE/NETLINK systems.\n\t* kernel_socket.c: (ifan_read) only call if_delete_update when\n\t  interface departs, dont if_delete, because we wish to retain\n\t  interface configuration state even when interfaces are removed.\n\t  (ifm_read) If we dont have RTM_IFANNOUNCE, then transitioning\n\t  to down state is only chance we have to clean up interface in case\n\t  it is deleted (eg Solaris down -\u003e unplumb -\u003e plumb up).\n\t* redistribute.c: (zebra_interface_delete_update) should always be\n\t  available, we /will/ call it now on all systems, via\n\t  if_delete_update.\n\t* zserv.c: (zsend_interface_delete) ditto\n\t  (zsend_interface_address) Update the call-flow diagramme, to\n\t  reflect that if_delete_update /is/ now called on all systems,\n\t  potentially.\n\t* zserv.h: (zsend_interface_delete) unconditionally exported, as\n\t  above.\n"
    },
    {
      "commit": "ea6f82b979c21e67a8aeff17d2afaf9fda00ff9f",
      "tree": "c5b59c7d3095ef72880024faa837e3e433c4f84b",
      "parents": [
        "a1ac18c4d5b4f8f4f279efb2ae12b46258f22282"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jun 28 17:20:26 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jun 28 17:20:26 2005 +0000"
      },
      "message": "2005-06-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* kernel_socket.c: (RTA_{ADDR,ATTR}_GET) fix mistake, NULL check\n\t  should be on DEST argument\n"
    },
    {
      "commit": "a1ac18c4d5b4f8f4f279efb2ae12b46258f22282",
      "tree": "e37732ef4b00ae98d1be693e721b01cc2566ba39",
      "parents": [
        "94f2b3923e9663d0355a829f22e4e31cf68ee7b8"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jun 28 17:17:12 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jun 28 17:17:12 2005 +0000"
      },
      "message": "2005-06-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (global) Extern and static\u0027ification, with related fixups\n\t  of declarations, ensuring files include their own headers, etc.\n\t  if_ioctl.c: (interface_info_ioctl) fix obvious arg mis-order in\n\t  list loop\n"
    },
    {
      "commit": "62debbbe836d4c96402756ccfead01b09d903428",
      "tree": "fefc2be88f05b7679f383e89bd93fdf6838bfa31",
      "parents": [
        "7461d4594aad716f24690c68c5f82bd865cf9c25"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jun 14 14:07:07 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jun 14 14:07:07 2005 +0000"
      },
      "message": "2005-06-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* kernel_socket.c: consolidate the IFAM{ADDR,MASK}GET and\n\t  RTM{ADDR,MASK}GET macros into generic rta_addrs macros,\n\t  RTA_{ADDR,ATTR}_GET.\n\t  (af_check) could use \u0027inline\u0027 attribute\n\t  (ifam_read_mesg) remove IFAM{ADDR,MASK}GET macro, change to\n\t  generic macro.\n\t  (rtm_read_mesg) similar\n"
    },
    {
      "commit": "1ada81981da3e6422a59d3052d32696fc93cdea1",
      "tree": "d207d2b0d92a7386bb05647ab9810db699de6e5b",
      "parents": [
        "1ddd729e6f20b93a635caece8c34ee1b7021fe26"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Jun 12 11:28:18 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Jun 12 11:28:18 2005 +0000"
      },
      "message": "\t* rt_netlink.c: Remove unused netlink-addr socket declaration.\n\t* rt_netlink.c (netlink_parse_info): Fix debug messages - nlmsg_pid is\n\t  unsigned and one zlog call had swapped arguments.\n\t* rt_netlink.c (netlink_route_multipath): Fix compile with disabled\n\t  IPv6 support.\n\n\t[backport candidate] - with stuff commited to rt_netlink.c before to\n\tfix logging in netlink_route_multipath().\n"
    },
    {
      "commit": "1dcb51729b4a8bd7ed21126c7e5e61bc096f8674",
      "tree": "751f35fe2742a037d9f5b4651cd3a8c53a9453d1",
      "parents": [
        "0cb8a01c38284a5a3f4ee4b017b69cd5f3e39f9a"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue May 31 08:38:50 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue May 31 08:38:50 2005 +0000"
      },
      "message": "2005-05-31 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zserv.c: (zsend_route_multipath) Fix bug if route is sent\n\t  with no NEXTHOP_FLAG_FIB nexthops. As ZAPI_MESSAGE_IFINDEX\n\t  and ZAPI_MESSAGE_NEXTHOP are always set, clients would try\n\t  read non-existent nexthop information and hit stream assert.\n\t  Zserv is still broken for multi-nexthop messages, but it always was.\n"
    },
    {
      "commit": "69e10adaf28d4e116c38db2648786557fe131828",
      "tree": "4e00214ef16ba68f9d9b6a3fa8ff5c66a1a54d93",
      "parents": [
        "8cc4198f9fabe5f10f5a773de1503d82f33a01fb"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri May 06 21:27:33 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri May 06 21:27:33 2005 +0000"
      },
      "message": "2005-05-06 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zserv.h: Remove ZEBRA_PORT definition, its in lib/zebra.h now\n"
    },
    {
      "commit": "4d38fdb421ee04430ac2f4d4e8ef4a4e27c1020b",
      "tree": "a7bdb41cd18be9f612c54531efef5a5ccaab36f1",
      "parents": [
        "8b70d0b04f6bba2f30827d71084dd74fd00808b3"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Apr 28 17:35:14 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Apr 28 17:35:14 2005 +0000"
      },
      "message": "2005-04-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* rib.h: (struct rib) Add lock field for refcounting.\n\t* zserv.h: (struct zebra_t) Add a ribq workqueue to the zebra\n\t  \u0027master\u0027 struct.\n\t* zserv.c: (zread_ipv4_add) XMALLOC then memset should be XCALLOC.\n\t* zebra_rib.c: Clean up refcounting of route_node, make struct rib\n\t  refcounted and convert rib_process to work-queue. In general,\n\t  rib\u0027s should be rib_addnode\u0027d and delnode\u0027d to route_nodes, and\n\t  these symmetrical functions will manage the locking of referenced\n\t  route_node and freeing of struct rib - rather than having users\n\t  manage each seperately - with much scope for bugs..\n\t  (newrib_free) removed and replaced with rib_lock\n\t  (rib_lock) new function, check state of lock and increment.\n\t  (rib_unlock) new function, check lock state and decrement. Free\n\t  struct rib if refcount hits 0, freeing struct nexthop\u0027s, as\n\t  newrib_free did.\n\t  (rib_addnode) Add RIB to route_node, locking both.\n\t  (rib_delnode) Delete RIB from route_node, unlocking each.\n\t  (rib_process) Converted to a work-queue work function.\n\t  Functional changes are minimal, just arguments, comments and\n\t  whitespace.\n\t  (rib_queue_add_qnode) Helper function to setup a ribq item.\n\t  (rib_queue_add) Helper function, same arguments as old\n\t  rib_process, to replace in callers of rib_process.\n\t  (rib_queue_qnode_del) ribq deconstructor.\n\t  (rib_queue_init) Create the ribq.\n\t  (rib_init) call rib_queue_init.\n\t  (remainder) Sanitise refcounting of route_node\u0027s. Convert to\n\t  rib_queue_add, rib_addnode and rib_delnode. Change XMALLOC/memset\n\t  to XCALLOC. Remove calls to nexthop_delete and nexthop_free.\n"
    },
    {
      "commit": "cf460ef9478de57fae490ff1bd8cb58ccbe40b40",
      "tree": "42695453236602efbfcb2203b3d2241a38a1a42b",
      "parents": [
        "c7959916ffe11daf57490da854b069f4fe529153"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Apr 10 16:54:26 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Apr 10 16:54:26 2005 +0000"
      },
      "message": "2005-04-10 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* if_ioctl_solaris.c: (if_lookup_linklocal) fix order of args\n\t  in ALL_LIST_ELEMENTS_RO macro.\n"
    },
    {
      "commit": "57a1477bc7138649a51277cd52616eb05d438187",
      "tree": "e40385dcce50ab85c6e12e36d3b5d17cac4570d9",
      "parents": [
        "fa59980fc8a5d06f590d16288b82361ece9c5652"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sun Apr 10 15:01:56 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sun Apr 10 15:01:56 2005 +0000"
      },
      "message": "2005-04-10 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zserv.c (zebra_client_read): Fix bug: first read attempt should\n\t  read ZEBRA_HEADER_SIZE minus the number of bytes already read.\n\t  Improve efficiency by maintaining a calculation of the number\n\t  of bytes read instead of calling stream_get_endp multiple times.\n\t  If message length is too small, issue a warning message (not debug)\n\t  before closing the connection.  And also check that message length\n\t  is not too big.\n"
    },
    {
      "commit": "fa59980fc8a5d06f590d16288b82361ece9c5652",
      "tree": "39f751985a3728b371744022d9df82514f1d0cb5",
      "parents": [
        "206d8055fc67af4e5dc955f0fdd0bf52b58260ce"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Apr 09 16:59:28 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Apr 09 16:59:28 2005 +0000"
      },
      "message": "\t* rt_netlink.c: One tiny missing comma caused pointless debug messages\n\t  about IPv6 nexthops.\n"
    },
    {
      "commit": "206d8055fc67af4e5dc955f0fdd0bf52b58260ce",
      "tree": "bf616cb70b0426055226fa0551241df9f5dbfd4e",
      "parents": [
        "5bb4c1981a518315bf7f4fc81a85baf2061e32fa"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Apr 09 16:38:51 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Apr 09 16:38:51 2005 +0000"
      },
      "message": "\t* rt_netlink.c (netlink_parse_info): Fix warning. It\u0027s safe to cast\n\t  status to unsigned here, because we already checked that it isn\u0027t\n\t  negative or 0.\n\t* rt_netlink.c (netlink_interface_addr): Prefix length belongs to the\n\t  address, not to the interface.\n\t* rt_netlink.c (netlink_route_multipath): Fix debug. No useless info\n\t  is printed out now and IPv6 info is handeled.\n"
    },
    {
      "commit": "3d1dc85765816a92f06e0b11f52411dac0f8abae",
      "tree": "d20333a4ddbc271e11998834a4fdbc0e3acd719d",
      "parents": [
        "5b0875287206a0ac1ebe1dca1f6235b8f3df1764"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Apr 05 00:45:23 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Apr 05 00:45:23 2005 +0000"
      },
      "message": "2004-04-05 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* lib/vty.c: Improve logging of failures to open vty socket(s).\n\t  See bugid #163.\n\t* zebra/zserv.c: print more helpful errors when we fail to successfully\n\t  bind and listen on zserv socket. Closes bugzilla #163.\n"
    },
    {
      "commit": "08dbfb691d8e03c7200138d55447fc29916e0362",
      "tree": "54d8718c7bdb035197cebcedef7d3de4f0038d55",
      "parents": [
        "e4319de388b748ba66551f33fecdf7446e754b80"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sun Apr 03 03:40:52 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sun Apr 03 03:40:52 2005 +0000"
      },
      "message": "2005-04-02 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* if_ioctl.c: (interface_list_ioctl) Use if_get_by_name_len.\n\t* if_proc.c: (ifaddr_proc_ipv6) Increase size of ifname buffer to\n\t  avoid overflow.\n\t* kernel_socket.c: (ifan_read) Use if_get_by_name_len.\n\t* if.h: Fix comments to reflect that if_lookup_by_name and\n\t  if_get_by_name now require the argument strings to be NUL-terminated.\n\t* if.c: (if_lookup_by_name) Compare using strcmp.\n\t  (if_get_by_name) Pass strlen(ifname) as 2nd arg to if_create.\n"
    },
    {
      "commit": "a349198fd3e4e5692cdc91223f8153cb53c086ce",
      "tree": "e5b366a8ab7ab9ed1c9670faf1f18eef26877ade",
      "parents": [
        "f695b01ff8e9aebc46bdf41f104ad4abbb0ef59e"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 22:50:38 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 22:50:38 2005 +0000"
      },
      "message": "2005-04-02 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* if.h: (if_lookup_by_name_len, if_get_by_name_len) New functions.\n\t* if.c: (if_lookup_by_name_len, if_get_by_name_len) New functions.\n\t  (if_get_by_name) Tighten up code.\n\t  (interface) Use new function if_get_by_name_len.\n\t* zclient.c: (zebra_interface_add_read) Use new if_get_by_name_len\n\t  function.\n\t  (zebra_interface_state_read) Use new if_lookup_by_name_len function.\n\t* kernel_socket.c: (ifm_read) Use new if_lookup_by_name_len function\n\t  to save a memcpy.\n\t* if_ioctl_solaris.c: (interface_list_ioctl) Fix subtle bug with new\n\t  if_get_by_name_len function.\n\t* ospf_interface.c: (ospf_vl_new) Use strnlen to fix call to if_create.\n"
    },
    {
      "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"
    },
    {
      "commit": "b7ed1ec7d62f6db50de882d1be08e1e32acc7909",
      "tree": "db4f4d21a5c2d1ad6065458ec8cc48a16c628dfa",
      "parents": [
        "aca72fda8f251c866f88becd5bec4c215104b102"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Mar 31 20:13:49 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Mar 31 20:13:49 2005 +0000"
      },
      "message": "\t* rt_netlink.c (netlink_talk_filter): Show always warning message,\n\t  it\u0027s not for debug.\n\t* rt_netlink.c (netlink_talk): Don\u0027t assume we use netlink_cmd\n\t  although we do now actually.\n\t* rt_netlink.c (netlink_route, netlink_route_multipath): Always use\n\t  netlink_cmd to send messages to the kernel.\n\n\t[backport candidate]\n"
    },
    {
      "commit": "2da40f4919f6268d4935c42a358739ffdf3a48dc",
      "tree": "aa40f9570647e8631ed5d74371f9c11bec25a98f",
      "parents": [
        "a608bbf27b48b7bd5e63f1c46380a1c5288ba48a"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Mar 30 16:33:13 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Mar 30 16:33:13 2005 +0000"
      },
      "message": "2005-03-30 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* irdp.h: Add prototype for irdp_sock_init, and fix protos for\n\t  other irdp_* functions.\n\t* irdp_interface.c: (irdp_if_start) If irdp_sock is negative,\n\t  call irdp_sock_init to create the IRDP socket.\n\t  (irdp_if_init) Rename to irdp_init().\n\t  (get_iflist_ifp) Remove function that is a duplicate of\n\t  if_lookup_by_index.\n\t  (*) Make many functions static.  And remove superfluous \"\\n\" from\n\t  several zlog messages.\n\t* irdp_main.c: (irdp_init) Remove function that used to call\n\t  irdp_if_init() and irdp_sock_init(), since we will now create\n\t  the socket only upon first use.\n\t  (irdp_sock_init) Do not update global irdp_sock variable, just\n\t  return the fd and assume that the caller will do so.  If setsockopt\n\t  calls fail, close the socket before returning -1.\n\t  (*) Make many functions static.\n\t* irdp_packet.c: Initialize irdp_sock to -1.\n\t  (irdp_read_raw) Call standard library function if_lookup_by_index\n\t  instead of get_iflist_ifp.\n\t  (irdp_recvmsg) Should be static, not global.\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": "7cee1bb15089e4e994958651bd45a6f81c4215aa",
      "tree": "2f7d9b8a24411d06c80dbeb023069c1e3a2f4c2e",
      "parents": [
        "29c4c9bd11aaf36a0b3ed2414c816cdb8d4178bd"
      ],
      "author": {
        "name": "vincent",
        "email": "vincent",
        "time": "Fri Mar 25 13:08:53 2005 +0000"
      },
      "committer": {
        "name": "vincent",
        "email": "vincent",
        "time": "Fri Mar 25 13:08:53 2005 +0000"
      },
      "message": "2005-03-25 Jean-Mickael Guerin \u003cjean-mickael.guerin@6wind.com\u003e\n\t* interface.c, interface.h, rtadv.c, rtadv.h: extensions to Neighbor\n\t  discovery for Mobile IPv6.\n"
    },
    {
      "commit": "ed9bb6d524301cb7d1902ed94753ffa3c6dabf1e",
      "tree": "8ef411ef124f5bd6ae9689a5461474066821836a",
      "parents": [
        "afd8a129fe140efdb6f743df0ca43d8c150c25bb"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Mar 13 19:17:21 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Mar 13 19:17:21 2005 +0000"
      },
      "message": "\t* zebra/interaface.c: \"show interface description\" command\n\t  implemented.\n"
    },
    {
      "commit": "c1f01f358d28f2375b1caf239581105c6f1e3537",
      "tree": "b40136dc6bedb76199f40102d0977b4f1005bdef",
      "parents": [
        "4275b1de3a54650a81f82999c296b756ee5b5679"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Mar 12 06:33:14 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Mar 12 06:33:14 2005 +0000"
      },
      "message": "2005-03-12 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* rt_netlink.c: (netlink_route_multipath) dont set equalise flag.\n\t  No stock Linux kernel has ever supported it, and even if it had\n"
    },
    {
      "commit": "42a66d7c484f95615e0364c4aa109ce5d095776a",
      "tree": "614d2db868d903907a7257a9a1493325eb68cba0",
      "parents": [
        "3452d4752490516c3228da3700c93e2089e30083"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Mon Mar 07 08:19:44 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Mon Mar 07 08:19:44 2005 +0000"
      },
      "message": "\t * if_proc.c, ipforward_proc.c, rtread_proc.c: Fix fd leaks.\n\n\t [backport candidate]\n"
    },
    {
      "commit": "3452d4752490516c3228da3700c93e2089e30083",
      "tree": "46ba333a050deaef1cf933afab28b7eca9310fad",
      "parents": [
        "c1ba9e8a8ac0447e6f33d50b4b9e7a1e68307bf1"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Mar 06 13:42:05 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Mar 06 13:42:05 2005 +0000"
      },
      "message": "\t* interface.c: Fix CRC and frame errors statistics in Linux.\n"
    },
    {
      "commit": "719e97414a7ca1a4d49d72816b9e1bd2155d157d",
      "tree": "6c3d4456e89d1a837322566eee065e492b325e6c",
      "parents": [
        "27da3988c30c333cd75cffc5565682366bb99513"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Mon Feb 28 20:52:15 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Mon Feb 28 20:52:15 2005 +0000"
      },
      "message": "2005-02-28 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zserv.c: Must include network.h and buffer.h for non-blocking I/O.\n\t  Remove global message_queue and t_write (need separate buffering for\n\t  each client).\n\t  (zebra_server_dequeue,zebra_server_enqueue) Remove functions\n\t  related to old buggy buffering code.\n\t  (zserv_delayed_close) New thread callback function to delete a client.\n\t  (zserv_flush_data) New thread callback function to flush buffered\n\t  data to client.\n\t  (zebra_server_send_message) Rewritten to use buffer_write (so\n\t  buffering of writes and non-blocking I/O work properly).\n\t  (zsend_interface_add,zsend_interface_delete,zsend_interface_address,\n\t  zsend_interface_update) Return 0 instead of -1 if !client-\u003eifinfo\n\t  (this is not really an error).  Return value from\n\t  zebra_server_send_message.\n\t  (zsend_route_multipath,zsend_ipv4_nexthop_lookup,\n\t  zsend_ipv4_import_lookup) Return value from zebra_server_send_message.\n\t  (zsend_ipv6_nexthop_lookup) Fix scope to static, and return value\n\t  from zebra_server_send_message.\n\t  (zsend_router_id_update) Must use zebra_server_send_message instead\n\t  of deprecated writen function.  Return 0 instead of -1 if this client\n\t  is not subscribed to router-id updates (since this is not really\n\t  an error).\n\t  (zread_interface_add) Change type to static int.  If\n\t  zsend_interface_add fails or zsend_interface_address fails, return -1\n\t  immediately (since the client has had an I/O error).\n\t  (zread_interface_delete,zread_ipv4_add,zread_ipv4_delete,\n\t  zread_ipv6_add,zread_ipv6_delete,zread_router_id_delete) Return 0\n\t  to indicate success.\n\t  (zread_ipv4_nexthop_lookup) Return value from\n\t  zsend_ipv4_nexthop_lookup.\n\t  (zread_ipv4_import_lookup) Return value from zsend_ipv4_import_lookup.\n\t  (zebra_read_ipv6) Remove unused function.\n\t  (zread_ipv6_nexthop_lookup) Return value from\n\t  zsend_ipv6_nexthop_lookup.\n\t  (zread_router_id_add) Return value from zsend_router_id_update.\n\t  (zebra_client_close) Call buffer_free(client-\u003ewb) and\n\t  thread_cancel(client-\u003et_suicide).\n\t  (zebra_client_create) Allocate client-\u003ewb using buffer_new.\n\t  (zebra_client_read) Support non-blocking I/O by using stream_read_try.\n\t  Use ZEBRA_HEADER_SIZE instead of 3.\n\t  (zebra_accept) Fix bug: reset accept thread at top.  Make client\n\t  socket non-blocking using the set_nonblocking function.\n\t  (config_write_forwarding) Fix scope to static.\n\t  (zebra_init) Remove initialization code for old buggy write buffering.\n\t* zserv.h: Add 2 new fields to struct zserv: struct buffer *wb\n\t  (to enable buffered writes with non-blocking I/), and\n\t  struct thread *t_suicide to support delayed close on I/O\n\t  errors.\n\t* router-id.h: Remove prototypes for zread_router_id_add and\n\t  zread_router_id_delete (their scope should be static to zserv.c).\n"
    },
    {
      "commit": "27da3988c30c333cd75cffc5565682366bb99513",
      "tree": "cbe0458dcab6e47a733c86c3fc8676c88236d136",
      "parents": [
        "81fb32404c942432d2bea1e50a4d53bf75fd0f70"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Feb 24 16:06:33 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Feb 24 16:06:33 2005 +0000"
      },
      "message": "2005-02-24 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* redistribute.c: (zebra_check_addr,is_default,\n\t  zebra_redistribute_default,zebra_redistribute) Fix scope to be static.\n"
    },
    {
      "commit": "e8274dcde1bd0f0339393714d57c019e57a5b798",
      "tree": "24109f0de306036dcf7f8baf3f8d4252db81603c",
      "parents": [
        "306541b31624a344db085bfee45e5d9343fc8dca"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Feb 20 19:09:23 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Feb 20 19:09:23 2005 +0000"
      },
      "message": "\t* rt_netlink.c: Don\u0027t show messages \"ignoring message type 0x001[89]\"\n\t  if we are not debugging.\n"
    },
    {
      "commit": "e31f22999430d37acbb7706d8fb5dd613ee51150",
      "tree": "00abec1a505874a93ade18847a48f3bd9e9c1847",
      "parents": [
        "fa81b713e785d4884d5f45f3acd21dc460110862"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Feb 19 02:00:26 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Feb 19 02:00:26 2005 +0000"
      },
      "message": "2005-02-19 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* zserv.c: (zebra_read_ipv6) replace the char * arithmetic with\n\t  STREAM_READABLE.\n"
    },
    {
      "commit": "1e19315262b1eb1228af31f43aee7c9c3e9eefc6",
      "tree": "d7aedd6d94d06ddef166f62014369c845ee3defa",
      "parents": [
        "1dd13d41d09487c3d595b13a087b2ec87b7f4ce8"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Feb 14 23:53:05 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Feb 14 23:53:05 2005 +0000"
      },
      "message": "2005-02-14 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* Not all Linux netlink systems have IFLA_WIRELESS\n"
    },
    {
      "commit": "6a52d0d155fc8b892e30cdb5e3fbe4c2779bd4cd",
      "tree": "d4bfab8286e497e30c5ebfed099c317a9397c623",
      "parents": [
        "656b4eeec1fb30402ad2001976c05c6f44fafb34"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sun Jan 30 18:49:28 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sun Jan 30 18:49:28 2005 +0000"
      },
      "message": "2005-01-30 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* daemon.c: (daemon) Replace perror with zlog_err.\n\t* vty.c: (vty_serv_un) Replace perror with zlog_err.\n\t* ripd.c: (rip_create_socket) Replace perror with zlog_err.\n\t* ioctl.c: (if_ioctl,if_ioctl_ipv6,if_get_flags) Replace perror with\n\t  zlog_err.\n\t* ioctl_solaris.c: (if_ioctl,if_ioctl_ipv6) Replace perror with\n\t  zlog_err.\n"
    },
    {
      "commit": "4460e7a4cf3dadcd9f06e4b519ba7be2cc936c0a",
      "tree": "5755c13aeffb151d56a886868e623d186ca9a0a0",
      "parents": [
        "4be019d5530e21c9e54e41e46a57ab071b9b11ae"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Jan 29 17:07:40 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Jan 29 17:07:40 2005 +0000"
      },
      "message": "2005-01-29 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* if_ioctl_solaris.c: (interface_list_ioctl) Save errno before calling\n\t  zserv_privs.change.\n\t* ioctl{,_solaris}.c: (if_ioctl,if_ioctl_ipv6) Save errno before calling\n\t  zserv_privs.change.\n\t* ipforward_solaris.c: (solaris_nd) Save errno before calling\n\t  zserv_privs.change.\n\t* irdp_main.c: (irdp_sock_init) Save errno before calling\n\t  zserv_privs.change.\n\n\t[backport candidate]\n"
    },
    {
      "commit": "4be019d5530e21c9e54e41e46a57ab071b9b11ae",
      "tree": "4a7b579d0fd9467b097e3190b2d7204dcd9a0f2b",
      "parents": [
        "c3eab8714368569d25f6dc87f6620528e0d7a118"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Jan 29 16:12:41 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Jan 29 16:12:41 2005 +0000"
      },
      "message": "2005-01-29 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* rt_netlink.c: (netlink_socket,netlink_request,netlink_parse_info,\n\t  netlink_talk) Save errno before calling zserv_privs.change.\n\n\t  [backport candidate]\n"
    },
    {
      "commit": "c15cb24241277db9fb4102ddc712dc3297f16d1f",
      "tree": "b7e9eb47f5b8953c82b55732a9428813a238c5df",
      "parents": [
        "13bfca7a1059a73a836f4813170f296a82266211"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 24 09:05:27 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 24 09:05:27 2005 +0000"
      },
      "message": "2005-01-24 Martin Pot \u003cmpot at martybugs.net\u003e\n\n\t* zebra/rt_netlink.c: ignore wireless newlink netlink messages.\n"
    },
    {
      "commit": "6f2c27af2189794187e4c30ee70fcb9cc6cb1a3b",
      "tree": "43e2830ca4d832b3d68bb9f5ddaa6cf9328c0a14",
      "parents": [
        "239c26fdeae4dbccb43da359f9ea034041440831"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Jan 18 13:44:35 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Jan 18 13:44:35 2005 +0000"
      },
      "message": "\t* interface.c: Better statistics output in \"show interface\" command in\n\t  case of /proc being used. I don\u0027t have others to test with at the\n\t  moment.\n"
    },
    {
      "commit": "583d800c11922018af02420a758f974be691065f",
      "tree": "57c494d56a6316cdb3ca0770e23168845336749d",
      "parents": [
        "87d683b071dc7abfb30b666960ec480e64e19ce4"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Jan 16 23:34:02 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Jan 16 23:34:02 2005 +0000"
      },
      "message": "\t* main.c: With --nl-bufsize argument is required.\n\n\t[pullup candidate]\n"
    },
    {
      "commit": "865b852cbf82f2da6cd3908e76176ceb6ad33d26",
      "tree": "d34f9664feb19e614e3e64609e1c3a9329e8f2f8",
      "parents": [
        "a24a7e1b9e145d4c855d0aa4d919a79f598c645b"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 05 08:30:35 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 05 08:30:35 2005 +0000"
      },
      "message": "2005-01-05 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* zserv.c: (zebra_accept) Comment out setting of socket to NONBLOCK\n          for now, as we dont actually deal with with resending.... See\n          bugzilla #122, fix from wawa@yandex-team.ru (Vladimir Ivanov).\n\t* kernel_socket.c: (routing_socket) ditto.\n"
    },
    {
      "commit": "b99760ab51abf8c4c9a1f89dab0c1630a6768ff7",
      "tree": "daaf8cabb567c5ff1a01368fa1382d8257b56854",
      "parents": [
        "73a7dea305b146febb8e57176295689d6a900f1d"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Jan 04 16:24:43 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Jan 04 16:24:43 2005 +0000"
      },
      "message": "2005-01-04 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* configure.ac: Added test for broken CMSG_FIRSTHDR macro\n\t  (relevant for Solaris 8 and unpatched Solaris 9, don\u0027t know\n\t  whether other platforms are affected).\n\t* zebra.h: Define ZCMSG_FIRSTHDR appropriately based on whether\n\t  config.h indicates HAVE_BROKEN_CMSG_FIRSTHDR (as determined\n\t  by the configure test program).\n\t* sockopt.c: (getsockopt_cmsg_data) Use ZCMSG_FIRSTHDR instead\n\t  of CMSG_FIRSTHDR.\n\t* rtadv.c: (rtadv_recv_packet,rtadv_send_packet) Use ZCMSG_FIRSTHDR\n\t  instead of CMSG_FIRSTHDR.\n\t* ripd.c: (rip_recvmsg) Use ZCMSG_FIRSTHDR instead of CMSG_FIRSTHDR.\n\t* ripngd.c: (ripng_recv_packet) Use ZCMSG_FIRSTHDR instead of\n\t  CMSG_FIRSTHDR.\n"
    },
    {
      "commit": "341a8f1ac9d584ca9dd44bd1b5f90588f475e769",
      "tree": "6145d76a12a8232ce349b97447f9676ef8a700bc",
      "parents": [
        "afc44c29bc65fa574b9cfc0b2b6b5c499e18a4e5"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Dec 22 16:32:16 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Dec 22 16:32:16 2004 +0000"
      },
      "message": "2004-12-22 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* connected.c: (connected_add_ipv4) Limit warning about /32 addresses\n\t  with no peer specified to PtP interfaces only.\n"
    },
    {
      "commit": "b8adec1f98b155c6bf5e54067c8e31ae1de3c133",
      "tree": "fc3114960ddcc24a3dfc120b7152b35cff7c42b9",
      "parents": [
        "ee3e115747e5ef48c5580072f680a0f96512b7c0"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Dec 18 16:03:28 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Dec 18 16:03:28 2004 +0000"
      },
      "message": "Fix \"show ipv6 route \u003cproto\u003e\" command.\n"
    },
    {
      "commit": "6a250b099fe25627e32e5ca58f5677ba5227f816",
      "tree": "998ee0b7b54991d5914350848466ab038e8fc4bf",
      "parents": [
        "1686f93fcad703c3cb5b8d4aa5be3c62b5e966bb"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Thu Dec 09 14:48:12 2004 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Thu Dec 09 14:48:12 2004 +0000"
      },
      "message": "Add const to char * to quiet warnings.\n\nNote two warnings in comments.  The serious one is that struct\ninterface-\u003eifindex probably needs to be signed, ssince we store and\ncompare to -1.\n"
    },
    {
      "commit": "b6178002270192fe3ab2403dafac12e5babe11e6",
      "tree": "6b9c352d814185e16a353d17752059eb995019e0",
      "parents": [
        "8ddca7040da413cd283a4beba4634744f4e61ac8"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 21:12:56 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 21:12:56 2004 +0000"
      },
      "message": "2004-12-07 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* *.c: Change level of debug messages to LOG_DEBUG.\n"
    },
    {
      "commit": "274a4a4447b13f89f8237156a887d05a24a73cc6",
      "tree": "d5c2c6ee94bb77ef4346bcc07834808a75210bfd",
      "parents": [
        "5e76477456ce8bc4a1eeaccb5c5e1d3d99ab1300"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 15:39:31 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 15:39:31 2004 +0000"
      },
      "message": "2004-12-07 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* bgp_main.c: (main) The 2nd argument to openzlog has been removed.\n\t* isis_main.c: (main) The 2nd argument to openzlog has been removed.\n\t* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.\n\t  Note that stdout logging will no longer be enabled by default when\n\t  not running as a daemon.\n\t* ospf_main.c: (main) The 2nd argument to openzlog has been removed.\n\t* rip_main.c: (main) The 2nd argument to openzlog has been removed.\n\t* ripng_main.c: (main) The 2nd argument to openzlog has been removed.\n\t* main.c: (main) The 2nd argument to openzlog has been removed.\n\t  So stdout logging will no longer be enabled by default.\n\t* irdp_main.c: (irdp_finish) Reduce severity of shutdown message\n\t  from LOG_WARNING to LOG_INFO.\n\t* vtysh.c: Make several functions static instead of global.\n\t  Added several commands to support destination-specific logging levels.\n\t  (vtysh_completion) This function is unused, so comment it out.\n\t* basic.texi: Document new logging features.  Separate basic config\n\t  commands from basic VTY commands.\n\t* log.h: Replace struct zlog flags and maskpri fields with maxlvl\n\t  array to support individual logging levels for each destination.\n\t  Remove the 2nd argument to openzlog since the default logging config\n\t  should be standardized inside the library.  Replaced the\n\t  zlog_set_flag and zlog_reset_flag functions with zlog_set_level.\n\t  And zlog_set_file now requires an additional log_level argument.\n\t  Declare zlog_proto_names for use inside command.c in the\n\t  \"show logging\" command.  Added defines useful for command\n\t  construction.\n\t* log.c: (vzlog) Decide where to send the message based on the\n\t  individual logging levels configured for each destination.\n\t  Remove support for ZLOG_STDERR since it was never actually used.\n\t  Support record-priority for terminal monitors.\n\t  (zlog_signal,zlog_backtrace_sigsafe) Support destination-specific\n\t  logging levels.  Remove stderr support (was never used).  Added\n\t  support for terminal monitor logging.\n\t  (_zlog_assert_failed) Increase message severity to LOG_EMERG.\n\t  (openzlog) Remove 2nd argument since default config should be\n\t  standardized in library.  By default, terminal monitoring\n\t  is set to debug, and all other logging is disabled.\n\t  (zlog_set_flag,zlog_reset_flag) Removed.\n\t  (zlog_set_level) New function to replace zlog_set_flag and\n\t  zlog_reset_flag.  Supports destination-specific logging levels.\n\t  (zlog_set_file,zlog_reset_file) Support file-specific logging level.\n\t  (zlog_rotate) Log an error message if fopen fails, and support\n\t  new file-specific logging level.\n\t* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that\n\t  command functions will be static instead of global.  Remove\n\t  declarations for config_exit and config_help.  Define new macros\n\t  DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can\n\t  have deprecated commands in vtysh.  Similarly, for completeness,\n\t  define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.\n\t  Also, fix bug in ALIAS_ATTR macro (didn\u0027t matter because it\n\t  was never used).\n\t* command.c: Make many functions static instead of global.\n\t  (facility_name,facility_match,level_match) New functions\n\t  to support enhanced destination-specific logging levels.\n\t  (config_write_host) Support new destination-specific logging levels.\n\t  (config_logmsg) Added new \"logmsg\" command to help test logging\n\t  system.\n\t  (show_logging) Added \"show logging\" command to show the current\n\t  configuration of the logging system.\n\t  (config_log_stdout_level) Support explicit stdout logging level.\n\t  (no_config_log_stdout) Now takes optional LEVEL arg.\n\t  (config_log_monitor,config_log_monitor_level,no_config_log_monitor)\n\t  New commands creating new \"log monitor\" commands to set terminal\n\t  monitoring log level.\n\t  (config_log_file_level) Support explicit file logging level.\n\t  (config_log_syslog_level) Support explicit syslog logging level.\n\t  (config_log_facility,no_config_log_facility) Implement new\n\t  \"log facility\" command.\n\t  (cmd_init) Add hooks for new commands: \"show logging\", \"logmsg\",\n\t  \"log stdout \u003clevel\u003e\", \"log monitor\", \"log monitor \u003clevel\u003e\",\n\t  \"no log monitor\", \"log file \u003cfilename\u003e \u003clevel\u003e\",\n\t  \"no log file \u003cfilename\u003e \u003clevel\u003e\", \"log syslog \u003clevel\u003e\",\n\t  \"log facility\", and \"no log facility\".\n\t* vty.h: Added a \"level\" argument to vty_log so it can support\n\t  \"log record-priority\".  Declare new function vty_log_fixed for\n\t  use in signal handlers.\n\t* vty.c: (vty_log,vty_log_out) Added a \"level\" argument to support\n\t  \"log record-priority\" for vty terminal monitors.\n\t  (vty_down_level) Use config_exit_cmd.func instead of calling\n\t  config_exit directly (since command functions will now be static\n\t  instead of global).\n\t  (vty_log_fixed) New function to send terminal monitor messages\n\t  from inside a signal handler.\n"
    },
    {
      "commit": "887c44a4f3d8219dc5b1c52b5dcde1f31d52b73d",
      "tree": "5c0ef5fe1d3948c56e6abf2ffd3c9811e92f0f2e",
      "parents": [
        "bec595ada58ebfa98ad49220f29ab28b58549094"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 03 16:36:46 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 03 16:36:46 2004 +0000"
      },
      "message": "2004-12-03 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* bgp_main.c: (sigint) Use zlog_notice for termination message.\n\t  (main) Use zlog_notice for startup announcement.\n\t* isis_main.c: (sigint,sigterm) Use zlog_notice for termination message.\n\t  (terminate) This function should be static, not global.\n\t  (main) Use zlog_notice for startup announcement, and remove\n\t  ifdef ZEBRA_VERSION.\n\t* version.h.in: Remove declaration for pid_output_lock, this function\n\t  is now static, not global.\n\t* pid_output.c: (pid_output_lock) This function should be static, not\n\t  global.  And remove \"old umask\" error message, since it was really\n\t  an unimportant debug message, not an error.\n\t  (pid_output) Need to declare static function pid_output_lock.\n\t* ospf6_main.c: (sigint,sigterm) Use zlog_notice for termination\n\t  message.\n\t  (main) Remove commented-out call to pid_output_lock (which should\n\t  never be called other than from inside pid_output).  And use\n\t  zlog_notice to print the startup message, which now includes\n\t  the vty port.\n\t* ospf_main.c: (sigint) Use zlog_notice for termination message.\n\t  (main) Issue a startup announcement using zlog_notice.\n\t* rip_main.c: (sigint) Use zlog_notice for termination message.\n\t  (main) Add a startup announcement using zlog_notice.\n\t* ripng_main.c: (sighup) Remove spurious terminating message.\n\t  (sigint) Use zlog_notice for termination message.\n\t  (main) Issue a startup announcement using zlog_notice.\n\t* main.c: (sigint) Use zlog_notice for termination message.\n\t  (main) Add a startup announcement using zlog_notice.\n"
    },
    {
      "commit": "c065230a4c617a1cdf8813dd25384bcc9591f61a",
      "tree": "42285fe5604e43ada3b53ac9a77ba1e3c4464b52",
      "parents": [
        "accb156b9b1c3f4b46ab01f8850200f450fc40d8"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Nov 25 19:33:48 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Nov 25 19:33:48 2004 +0000"
      },
      "message": "Make group to run daemon as configurable. Fixes #2 from Bugzilla #64.\n"
    },
    {
      "commit": "accb156b9b1c3f4b46ab01f8850200f450fc40d8",
      "tree": "464c4c08badb058f2cbc3c715087f9bb2dcba4f5",
      "parents": [
        "4cf0d0df23f7a35a3c1570c94ba08fa96d47bfc1"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Nov 25 19:21:07 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Nov 25 19:21:07 2004 +0000"
      },
      "message": "Unbreak vtysh - don\u0027t add comments inside of DEFUN, it breaks extract.pl.\n"
    },
    {
      "commit": "6bd7c6aec24957ccf9583d17320205786b5dcc7b",
      "tree": "07b42ba33a414ab076f91292e9f2f01884cbb0fa",
      "parents": [
        "8dceb820def41f3bfa2754932d46157e86c5a362"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Oct 28 17:32:27 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Oct 28 17:32:27 2004 +0000"
      },
      "message": "Remove dead \"ip tunnel\" command.\n"
    },
    {
      "commit": "06f953f7abd1ac10e059fc756878ac135bb76c58",
      "tree": "c18b23bb5b309ca9940c00f173028b4be85abd88",
      "parents": [
        "4927cf0bf0828f2c4a9bda30f3c890d1835c7370"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Oct 22 17:00:38 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Oct 22 17:00:38 2004 +0000"
      },
      "message": "2004-10-22 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* ospfd/ospf_packet.c: setsockopt_pktinfo -\u003e setsockopt_ifindex\n\t* zebra/irdp_main.c: ditto\n"
    },
    {
      "commit": "3fb9cd6ef456959b6eff939d5c316f6785c2dda4",
      "tree": "e350cb3ef7b20b8bbccfb1aa9309152311e845bd",
      "parents": [
        "5ae35f45f1292dce3a01f241accafeb2e59b10cc"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Oct 19 19:44:43 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Oct 19 19:44:43 2004 +0000"
      },
      "message": "OK. Here it is - PtP patch from Andrew J. Schorr. No problems with ospfd,\nripd might need some more testing though.\n"
    },
    {
      "commit": "c1eaa442cfdcebbe7c8002ec9b2a0ae5afea5812",
      "tree": "b67e1b778e9f9b6a1853854c52aa9c99edb115aa",
      "parents": [
        "81bc8c7a4ed67f2add4d7a67250393376e7bc4e1"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Oct 19 06:26:01 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Oct 19 06:26:01 2004 +0000"
      },
      "message": "Fix regression. It seems to me that this code still works only by accident\nthough. Needs serious cleanup.\n"
    },
    {
      "commit": "b71f00f23b0b39e50161c9f3d672cf242dd8202e",
      "tree": "07f572971db0083f6f593a889cf06fd91211bcbc",
      "parents": [
        "c75105ab6e6eeac0b013eab186c97641984f68cc"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Oct 13 12:20:35 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Oct 13 12:20:35 2004 +0000"
      },
      "message": "* zserv.c: Remove useless warnings \"forwarding is already on\".\n"
    },
    {
      "commit": "c75105ab6e6eeac0b013eab186c97641984f68cc",
      "tree": "ea221df06e957de7e83f379c9b45f578762736e7",
      "parents": [
        "d68614db1dc36a6814fee33f584417b1441a83e4"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Oct 13 10:33:26 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Oct 13 10:33:26 2004 +0000"
      },
      "message": "Make initializing smux connection configurable - \"smux peer OID\" command\ninitializes connection, and \"no smux peer\" command terminates it. Fixes\nbugzilla #47 and #112.\n"
    },
    {
      "commit": "39db97e4e02eae08a1e18528367b6e9b07eb6a93",
      "tree": "2fb3a0269f4f2fe235ef722e3ad9cc8e6005bb6c",
      "parents": [
        "39ff11dc92d004b59d1ec786fd54b27111fee0b5"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Oct 12 20:50:58 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Oct 12 20:50:58 2004 +0000"
      },
      "message": "Some compiler warnings fixes and fix for bugzilla #119.\n"
    },
    {
      "commit": "39ff11dc92d004b59d1ec786fd54b27111fee0b5",
      "tree": "00ec9f9ee2a8b94d05faf049715d766e0fd74bff",
      "parents": [
        "f4d58ce5aa0da64fd136c5747ff371d46736490a"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Oct 12 15:55:19 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Oct 12 15:55:19 2004 +0000"
      },
      "message": "Unbreak \"show ip route\" command.\n"
    },
    {
      "commit": "fce954f8de1456dd62d26b52902a4a352ef17a93",
      "tree": "3dee77fa141697940a9ff3203ea453e454e88d95",
      "parents": [
        "1cd80845dc5262ff7d3d38deb1921f0b8390f4df"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Oct 07 20:29:24 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Oct 07 20:29:24 2004 +0000"
      },
      "message": "Fix warnings. Didn\u0027t even look at files not compiled in Linux though.\n"
    },
    {
      "commit": "7216466aecd59e675a4f66d6e329e748f32ad690",
      "tree": "f1fdec0381383aef8b8491008c4337f89c5bc077",
      "parents": [
        "18b12c387e2bcd8a0e81a8d2635c1ef52c8a9a7d"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Oct 05 14:39:43 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Oct 05 14:39:43 2004 +0000"
      },
      "message": "2004-10-05 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* irdp_packet.c: (parse_irdp_packet) style issues.\n\t  Use sockopt_iphdrincl_swab_systoh.\n          Try unbork the code. Checksum the ICMP data and actually\n          compare it to received checksum. Check data length against\n          claimed length in header.\n\t  Always use ntoh.. when accessing addresses, even when the\n          comparison happens to be endian-safe.\n\t  (send_packet) minor style isues. Use\n          sockopt_iphdrincl_swab_htosys.\n\t  (irdp_iph_hton/ntoh) IP header to/from network/host order.\n"
    },
    {
      "commit": "eef1fe11b89c5ec3c035ff6e4a9acfbc5780b539",
      "tree": "82f80b9b898ede1b5293fc52adb2bee9b138e46c",
      "parents": [
        "18a6dce6f83dd20caf1f36c8e840868ff0bf6dbd"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Oct 03 18:46:08 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Oct 03 18:46:08 2004 +0000"
      },
      "message": "New way to handle secondary addresses from Gilad Arnold.\n"
    },
    {
      "commit": "18a6dce6f83dd20caf1f36c8e840868ff0bf6dbd",
      "tree": "ff832cbf6fe2b239bde06268820587bec671ae6d",
      "parents": [
        "a49c0ff6771975eeb1bd7da923a9dc830200cf65"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Oct 03 18:18:34 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Oct 03 18:18:34 2004 +0000"
      },
      "message": "Common router id.\n"
    },
    {
      "commit": "c9e52be3f4d98943b67fbbe5d9a7ccd823b88326",
      "tree": "d4045a946af3be8bbdc303162778e8c44057e2f9",
      "parents": [
        "e473b032b860444b9656cee1654b0120f77b52b1"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Sep 26 16:09:34 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Sep 26 16:09:34 2004 +0000"
      },
      "message": "Compiler warnings fixes.\n"
    },
    {
      "commit": "26f7a244d0f7e6a658cc48b88613b6919a6f5fbe",
      "tree": "29b0ec7c79f2a93909d5c632f86c629db2e5465b",
      "parents": [
        "0c0f9112e1530e8e7497cbb75853b9e4da93ea95"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Sep 24 08:45:10 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Sep 24 08:45:10 2004 +0000"
      },
      "message": "2004-09-24 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * irdp_interface.c: (no_ip_irdp_address_preference_cmd)\n          add missing listnode declaration.\n"
    },
    {
      "commit": "0c0f9112e1530e8e7497cbb75853b9e4da93ea95",
      "tree": "3cbc10ed3495b7813a6921fa417f4987514d3d90",
      "parents": [
        "1603c06ba3ad07b8f9380209a137569abe3700e1"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Sep 24 08:24:42 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Sep 24 08:24:42 2004 +0000"
      },
      "message": "2004-09-24 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * irdp_{interface,main}.c: lists typedef removal cleanup.\n          update some list loops to LIST_LOOP. some miscellaneous style\n          and indent fixups.\n          (no_ip_irdp_address_preference_cmd) Fix delete of referenced node\n          in loop.\n        * irdp_packet.c: (irdp_recvmsg) Fix buggy assignment of integer\n          to pointer.\n        * if_ioctl{,_solaris}.c: lists typedef removal cleanup.\n          update some list loops to LIST_LOOP.\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": "44983cf8a9c587dfbcad294b9dfe4dccbb68ba98",
      "tree": "ed73660eff1e0a1a6a66d63892b7145892ba9190",
      "parents": [
        "b89e60c7abd457f97df8351db5610fc9c15178b2"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Sep 22 13:15:58 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Sep 22 13:15:58 2004 +0000"
      },
      "message": "2004-09-22 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zserv.c: (zsend_route_multipath) fix nasty bad memset of struct\n          in_addr to sizeof(struct in6_addr), causing odd and hard to debug\n          crash.\n"
    }
  ],
  "next": "c34b6b577ef58e7609de1e088e7923c4c056cfeb"
}
