)]}'
{
  "log": [
    {
      "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "6099b3b56956322567323c11fd698b2328c6826b",
      "tree": "fa537bd0eaa9f7d824f39445eabc928db59050ca",
      "parents": [
        "ae5e24d8678f1e3a60dde58d3382c5ba73d6bb27"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Nov 20 02:06:59 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Nov 20 02:06:59 2004 +0000"
      },
      "message": "2004-11-19 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* global: Replace strerror with safe_strerror.  And vtysh/vtysh.c\n\t  needs to include \"log.h\" to pick up the declaration.\n"
    },
    {
      "commit": "cced60dd5bf297d16ec61fad75a122deaeca9e20",
      "tree": "3d514670fdf50b589327f1c78119b2654430dd74",
      "parents": [
        "b77971317724a97b72a8566b3a54d36ef7c76a07"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Tue Jul 13 16:45:54 2004 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Tue Jul 13 16:45:54 2004 +0000"
      },
      "message": "004-07-13  David Wiggins \u003cdwiggins@bbn.com\n\n\t* kernel_socket.c (rtm_flag_dump): terminate buffer with \u0027\\0\u0027, not \u00270\u0027.\n\n\nThis is arguably not a security problem, since strlcat is used to copy\nto the buffer -gdt.\n"
    },
    {
      "commit": "c50ae8baf610d3d041fdedb78df205c999be57a9",
      "tree": "ceced067b2a3209b708c90787b4f870f43fec180",
      "parents": [
        "48a46fa0c35f8f46e482ed1fef8b4bf63e413e0a"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue May 11 11:31:07 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue May 11 11:31:07 2004 +0000"
      },
      "message": "2004-05-11 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * ioctl.h: Add if_ioctl_ipv6 prototype and AF_IOCTL for SOLARIS_IPV6\n        * kernel_socket.c: Fix SAROUNDUP, compiler doesnt like do..while\n          RHS in assignments :)\n        * redistribute.c: (zebra_interface_delete_update) only used\n          if RTM_IFANNOUNCE and NETLINK is available.\n"
    },
    {
      "commit": "b27900b7c0c9b4105c8188e277b698b8e64c54cc",
      "tree": "cfce195dc0de508f263a6ad9b34359815d2c55d6",
      "parents": [
        "9ccabd1cdb47cc932b6a43c9e28b6aac9f2a4a0c"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Thu Jan 08 15:44:29 2004 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Thu Jan 08 15:44:29 2004 +0000"
      },
      "message": "2004-01-08  Greg Troxel  \u003cgdt@fnord.ir.bbn.com\u003e\n\n        * kernel_socket.c (kernel_read): Use sockaddr_storage in buffer\n        for reading kernel messages to ensure enough space (necessary on\n        Solaris due to sockaddr_dl being large).  Thanks to Sowmini\n        Varadhan for help with this change.\n"
    },
    {
      "commit": "4bfbea8cc369ef7bb4157efa4324e4ebf3b7374b",
      "tree": "3540e32a1e50f2da3032bf8620b6ff520713754e",
      "parents": [
        "dbee01fe8b0dc1fd0a5de7e9edcbf319f55a4c92"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Tue Jan 06 01:13:05 2004 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Tue Jan 06 01:13:05 2004 +0000"
      },
      "message": "2004-01-05  Greg Troxel  \u003cgdt@fnord.ir.bbn.com\u003e\n        * kernel_socket.c (ifm_read): Major cleanup.  Use Sowmini\u0027s code\n        to find the sockaddr_dl in all cases, narrowing the Solaris ifdef\n        to just the accomodation of broken kernels.  Check sockaddr_dl\n        carefully up front, and later assume any non-NULL sdl pointer is\n        valid.  Clean up types and variable declarations, and rename\n        WRAPUP to SAROUNDUP to make the name fit the behavior.\n"
    },
    {
      "commit": "dbee01fe8b0dc1fd0a5de7e9edcbf319f55a4c92",
      "tree": "ee27918586ee3e775cba4e0b6cb1270270056036",
      "parents": [
        "2934f28ef196ffeb414c9fb8667742d053bc8b40"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Tue Jan 06 00:36:51 2004 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Tue Jan 06 00:36:51 2004 +0000"
      },
      "message": "increase buffer size for kernel reads\n"
    },
    {
      "commit": "cb42c035cc75a9e0cddc08e1c92e3ddfad9cb916",
      "tree": "0fc66518936102093980f51b33607ba9688f803f",
      "parents": [
        "da26e3b6549e5e8a460b62ac02ed854685f6200d"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Mon Jan 05 17:55:46 2004 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Mon Jan 05 17:55:46 2004 +0000"
      },
      "message": "Fix incorrect test in previous commit; thanks to Sowmini Varadhan for\ncatching this.\n"
    },
    {
      "commit": "da26e3b6549e5e8a460b62ac02ed854685f6200d",
      "tree": "4a76896e4c4c0ef25f50c1cf16520a26eaa38d10",
      "parents": [
        "ddf1c26ca3cfd31ed11a40909bdadc6b823f0697"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Mon Jan 05 17:20:59 2004 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Mon Jan 05 17:20:59 2004 +0000"
      },
      "message": "2004-01-05  Greg Troxel  \u003cgdt@ahi.ir.bbn.com\u003e\n\n        * kernel_socket.c (kernel_read): Look up interfaces by index\n        first, so that state changes which do not include a sockaddr_dl\n        now work.  Add many sanity checks.  In\n        particular, do not assume that a sockaddr_dl follows a message\n        without checking the ifm_addrs flags, and do not trust the length\n        in a sockaddr_dl.  Add/clarify many comments.\n"
    },
    {
      "commit": "30be80287aeb91e97159aacd48ee90603a9dfef5",
      "tree": "78a98045aab8b9a92688f10ff8e3cca9c8535f31",
      "parents": [
        "1ac09d3e435a0a430cc3d218aa82015aa5741ed9"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Oct 22 02:51:38 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Oct 22 02:51:38 2003 +0000"
      },
      "message": "2003-10-22 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * zebra/kernel_socket.c: HAVE_IPV6 conditional for WRAPUP when\n          HAVE_SA_LEN is not defined. bcopy -\u003e memcpy, bcopy is not\n          portable.\n"
    },
    {
      "commit": "3e95a0741feb6f8b103577d0019a5db562d8315d",
      "tree": "2641536c822c2823a89d3edfbdb3bdba42cc1165",
      "parents": [
        "9491975ef91a97d98a9b2af72da3da0fa761b160"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Sep 24 00:05:45 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Sep 24 00:05:45 2003 +0000"
      },
      "message": "2003-09-24 sowmini.varadhan@sun.com\n\n        * zebra/kernel_socket.c: Fix up WRAPUP macro to deal with multiple\n          address families in the absence of sa_len element in struct\n          sockaddr.\n          (ifm_read): Handle solaris 9 if_msghdr_t.\n          Deal with interfaces which are incomplete, lookup on name rather\n          than the placeholder interface index of -1.\n"
    },
    {
      "commit": "106d2fd572c18bebe3dc44031c6d5e56e7b9030f",
      "tree": "df226870be1178b347947aecbe7d468022b47a91",
      "parents": [
        "12ab19f1863e80134353244967a87805b12fe722"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Aug 01 00:24:13 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Aug 01 00:24:13 2003 +0000"
      },
      "message": "2003-08-01 Cougar \u003ccougar@random.ee\u003e\n\n\t* lib/if.c: (if_cmp_func) new function, compare interface names in\n\talphabetical order.\n\t(if_create) Take name as argument and add interface in sorted order.\n\t(if_get_by_name),(interface_cmd) fixup calls to if_create - see\n\tabove.\n\t(if_init) register list comparison function.\n\t* lib/if.h: Add comparison function, modify if_create prototype.\n\t* lib/zclient.c: Modify call to if_create.\n\t* ospfd/ospf_interface.c: (ospf_vl_new) modify call to if_create.\n\tchange sprintf to snprintf.\n\t* zebra/kernel_socket.c: (ifm_read) modify call to if_create.\n"
    },
    {
      "commit": "9bcdb638923e3254b64744d02ceab62b8f2941a1",
      "tree": "2262989f3d4105cd0b539ece52628666ff3b580c",
      "parents": [
        "0c14ad88aab5df610acfe035385a7323e1683035"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jul 08 08:09:45 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jul 08 08:09:45 2003 +0000"
      },
      "message": "2003-07-8 Chris Andrews \u003cchris@nodnol.org\u003e\n\n\t* zebra/kernel_socket.c: Update for new zebrad global struct\n\t* zebra/ipforward_solaris.c: Add missing privs.h include. Uncomment\n          /dev/ip define.\n\t* lib/zebra.h: Add typedefs for SunOS.\n"
    },
    {
      "commit": "592c8148981d196a7bda2f1b85a63943fd0cfdf2",
      "tree": "273fd4151921ffbb91cc42535083ff7e1bf04bdb",
      "parents": [
        "bf9392c6e932080156e70c0436977fd5dbcdb0cd"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 06 23:24:55 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 06 23:24:55 2003 +0000"
      },
      "message": "2003-06-07 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* Revert Cougar\u0027s sort interface names patch, causes problems with\n\tenabling of interfaces for OSPF in ospfd.\n"
    },
    {
      "commit": "a939514c59fe1a56a820e82bc59d82c721076c03",
      "tree": "85a2d3d1d3e0a4f35d0865778c7522b8569b40f8",
      "parents": [
        "41908818b8f446befc3654fa5bbc98c6c0af92a3"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Jun 05 17:50:01 2003 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Jun 05 17:50:01 2003 +0000"
      },
      "message": "Patch from Cougar - sort iflist by name.\n"
    },
    {
      "commit": "edd7c245d3a77012abf801da00d5664ebaa5f749",
      "tree": "d4fada229d7980fb751f28c9a979aa88de1a0af0",
      "parents": [
        "a159ed935b580ed99111a185734ddd9c973e7691"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jun 04 13:59:38 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jun 04 13:59:38 2003 +0000"
      },
      "message": "2003-06-04 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* Merge of zebra privileges\n"
    },
    {
      "commit": "726f9b2bbdd5a607f7b0a10a64547739b807e361",
      "tree": "9c46a6ce71cf4ea96553a85a231e38b462b3dee0",
      "parents": [
        "71c0fb50fe75928f8fbe1bbff1995d9d91b3702b"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun May 25 21:04:54 2003 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun May 25 21:04:54 2003 +0000"
      },
      "message": "Last fixes from 6Wind patch.\n"
    },
    {
      "commit": "81dfcaa2e27d53f4eb61c549e03065dcb1b8eec3",
      "tree": "2aed449138a4833fe343052cdfa505be74332cb4",
      "parents": [
        "15291357d130b804dcdcfd81bdb1b86a84567fd0"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun May 25 19:21:25 2003 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun May 25 19:21:25 2003 +0000"
      },
      "message": "Route (reject|blackhole) support from 6Wind patch.\n"
    },
    {
      "commit": "718e3744195351130f4ce7dbe0613f4b3e23df93",
      "tree": "bac2ad39971cd43f31241ef123bd4e470f695ac9",
      "parents": [],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "message": "Initial revision\n"
    }
  ]
}
