)]}'
{
  "commit": "e4529636b77124285cca96a62799d0ff6a7addeb",
  "tree": "a8a50de7413833d5277ed7309248e03719e9efd3",
  "parents": [
    "43cd33a44e010f818633b7f144b5a0be352b41e7"
  ],
  "author": {
    "name": "Andrew J. Schorr",
    "email": "ajschorr@alumni.princeton.edu",
    "time": "Tue Dec 12 19:18:21 2006 +0000"
  },
  "committer": {
    "name": "Andrew J. Schorr",
    "email": "ajschorr@alumni.princeton.edu",
    "time": "Tue Dec 12 19:18:21 2006 +0000"
  },
  "message": "[PtP over ethernet] New peer flag allows much more addressing flexibility\n\n2006-12-12 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* if.h: (struct connected) Add new ZEBRA_IFA_PEER flag indicating\n\t  whether a peer address has been configured.  Comment now shows\n\t  the new interpretation of the destination addr: if ZEBRA_IFA_PEER\n\t  is set, then it must contain the destination address, otherwise\n\t  it may contain the broadcast address or be NULL.\n\t  (CONNECTED_DEST_HOST,CONNECTED_POINTOPOINT_HOST) Remove obsolete\n\t  macros that were specific to IPv4 and not fully general.\n\t  (CONNECTED_PEER) New macro to check ZEBRA_IFA_PEER flag.\n\t  (CONNECTED_PREFIX) New macro giving the prefix to insert into\n\t  the RIB: if CONNECTED_PEER, then use the destination (peer) address,\n\t  else use the address field.\n\t  (CONNECTED_ID) New macro to come up with an identifying address\n\t  for the struct connected.\n\t* if.c: (if_lookup_address, connected_lookup_address) Streamline\n\t  logic with new CONNECTED_PREFIX macro.\n\t* prefix.h: (PREFIX_COPY_IPV4, PREFIX_COPY_IPV6) New macros\n\t  for better performance than the general prefix_copy function.\n\t* zclient.c: (zebra_interface_address_read) For non-null destination\n\t  addresses, set prefixlen to equal the address prefixlen.  This\n\t  is needed to get the new CONNECTED_PREFIX macro to work properly.\n\t* connected.c: (connected_up_ipv4, connected_down_ipv4,\n\t  connected_up_ipv6, connected_down_ipv6) Simplify logic using the\n\t  new CONNECTED_PREFIX macro.\n\t  (connected_add_ipv4) Set prefixlen in destination addresses (required\n\t  by the CONNECTED_PREFIX macro).  Use CONNECTED_PEER macro instead\n\t  of testing for IFF_POINTOPOINT.  Delete invalid warning message.\n\t  Warn about cases where the ZEBRA_IFA_PEER is set but no\n\t  destination address has been supplied (and turn off the flag).\n\t  (connected_add_ipv6) Add new flags argument so callers may set\n\t  the ZEBRA_IFA_PEER flag.  If peer/broadcast address satisfies\n\t  IN6_IS_ADDR_UNSPECIFIED, then reject it with a warning.\n\t  Set prefixlen in destination address so CONNECTED_PREFIX will work.\n\t* connected.h: (connected_add_ipv6) Add new flags argument so\n\t  callers may set the ZEBRA_IFA_PEER flag.\n\t* interface.c: (connected_dump_vty) Use CONNECTED_PEER macro\n\t  to decide whether the destination address is a peer or broadcast\n\t  address (instead of checking IFF_BROADCAST and IFF_POINTOPOINT).\n\t* if_ioctl.c: (if_getaddrs) Instead of setting a peer address\n\t  only when the IFF_POINTOPOINT is set, we now accept a peer\n\t  address whenever it is available and not the same as the local\n\t  address.  Otherwise (no peer address assigned), we check\n\t  for a broadcast address (regardless of the IFF_BROADCAST flag).\n\t  And must now pass a flags value of ZEBRA_IFA_PEER to\n\t  connected_add_ipv4 when a peer address is assigned.\n\t  The same new logic is used with the IPv6 code as well (and we\n\t  pass the new flags argument to connected_add_ipv6).\n\t  (if_get_addr) Do not bother to check IFF_POINTOPOINT: just\n\t  issue the SIOCGIFDSTADDR ioctl and see if we get back\n\t  a peer address not matching the local address (and set\n\t  the ZEBRA_IFA_PEER in that case).  If there\u0027s no peer address,\n\t  try to grab SIOCGIFBRDADDR regardless of whether IFF_BROADCAST is set.\n\t* if_ioctl_solaris.c: (if_get_addr) Just try the SIOCGLIFDSTADDR ioctl\n\t  without bothering to check the IFF_POINTOPOINT flag.  And if\n\t  no peer address was found, just try the SIOCGLIFBRDADDR ioctl\n\t  without checking the IFF_BROADCAST flag.  Call connected_add_ipv4\n\t  and connected_add_ipv6 with appropriate flags.\n\t* if_proc.c: (ifaddr_proc_ipv6) Must pass new flags argument to\n\t  connected_add_ipv6.\n\t* kernel_socket.c: (ifam_read) Must pass new flags argument to\n\t  connected_add_ipv6.\n\t* rt_netlink.c: (netlink_interface_addr) Copy logic from iproute2\n\t  to determine local and possible peer address (so there\u0027s no longer\n\t  a test for IFF_POINTOPOINT).  Set ZEBRA_IFA_PEER flag appropriately.\n\t  Pass new flags argument to connected_add_ipv6.\n\t  (netlink_address) Test !CONNECTED_PEER instead of if_is_broadcast\n\t  to determine whether the connected destination address is a\n\t  broadcast address.\n\t* bgp_nexthop.c: (bgp_connected_add, bgp_connected_delete)\n\t  Simplify logic by using new CONNECTED_PREFIX macro.\n\t* ospf_interface.c: (ospf_if_is_configured, ospf_if_lookup_by_prefix,\n\t  ospf_if_lookup_recv_if) Simplify logic using new CONNECTED_PREFIX\n\t  macro.\n\t* ospf_lsa.c: (lsa_link_ptop_set) Using the new CONNECTED_PREFIX\n\t  macro, both options collapse into the same code.\n\t* ospf_snmp.c: (ospf_snmp_if_update) Simplify logic using new\n\t  CONNECTED_ID macro.\n\t  (ospf_snmp_is_if_have_addr) Simplify logic using new CONNECTED_PREFIX\n\t  macro.\n\t* ospf_vty.c: (show_ip_ospf_interface_sub) Use new CONNECTED_PEER macro\n\t  instead of testing the IFF_POINTOPOINT flag.\n\t* ospfd.c: (ospf_network_match_iface) Use new CONNECTED_PEER macro\n\t  instead of testing with if_is_pointopoint.  And add commented-out\n\t  code to implement alternative (in my opinion) more elegant behavior\n\t  that has no special-case treatment for PtP addresses.\n\t  (ospf_network_run) Use new CONNECTED_ID macro to simplify logic.\n\t* rip_interface.c: (rip_interface_multicast_set) Use new CONNECTED_ID\n\t  macro to simplify logic.\n\t  (rip_request_interface_send) Fix minor bug: ipv4_broadcast_addr does\n\t  not give a useful result if prefixlen is 32 (we require a peer\n\t  address in such cases).\n\t* ripd.c: (rip_update_interface) Fix same bug as above.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "97f78caa4fa88004f9241ba4667bcde9ae2f0af3",
      "old_mode": 33188,
      "old_path": "bgpd/ChangeLog",
      "new_id": "257b0eeb12f6c4a6d2be599377856f591e35409c",
      "new_mode": 33188,
      "new_path": "bgpd/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "bfc41a1842379cf7f5c198fad569a919ecd97419",
      "old_mode": 33188,
      "old_path": "bgpd/bgp_nexthop.c",
      "new_id": "50ae74e45582d263efda1e441eeff6ee9e3f46cc",
      "new_mode": 33188,
      "new_path": "bgpd/bgp_nexthop.c"
    },
    {
      "type": "modify",
      "old_id": "f076e2f09ccd04c256b26ae782718a0f624f395c",
      "old_mode": 33188,
      "old_path": "lib/ChangeLog",
      "new_id": "914cc5e82d637b332c64de22ff1309fe7533c030",
      "new_mode": 33188,
      "new_path": "lib/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "4493cc74b418aab41e1b5ee0fcc8d2d38d06baa7",
      "old_mode": 33188,
      "old_path": "lib/if.c",
      "new_id": "db590f56c27222502fc5ad9cba6360b692f810d5",
      "new_mode": 33188,
      "new_path": "lib/if.c"
    },
    {
      "type": "modify",
      "old_id": "0a4ff14dabd96e5b6e26ed779ede538527ec7b5d",
      "old_mode": 33188,
      "old_path": "lib/if.h",
      "new_id": "985b4d6853b181b594a10cb339372ab0e423066f",
      "new_mode": 33188,
      "new_path": "lib/if.h"
    },
    {
      "type": "modify",
      "old_id": "7afe7a1e416f1771758c42492f1330d4ffe4ad2c",
      "old_mode": 33188,
      "old_path": "lib/prefix.h",
      "new_id": "f2a2adfa77dad4fba18cb560ab4b5059cf15ef23",
      "new_mode": 33188,
      "new_path": "lib/prefix.h"
    },
    {
      "type": "modify",
      "old_id": "a253af6192380915c13e0afdb12e7ff8c47063a9",
      "old_mode": 33188,
      "old_path": "lib/zclient.c",
      "new_id": "09a7d25ee77f1740df179bce35a14683477822c5",
      "new_mode": 33188,
      "new_path": "lib/zclient.c"
    },
    {
      "type": "modify",
      "old_id": "0a2b9994e3a6f0b7f00d02c7b9c3baf6d7a9a76c",
      "old_mode": 33188,
      "old_path": "ospfd/ChangeLog",
      "new_id": "c80f3b623ec5b72e53768e60e8365fcfc8fd2ed6",
      "new_mode": 33188,
      "new_path": "ospfd/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "b6e347462b4eb690e43600ed8b0a5efd32d5571d",
      "old_mode": 33188,
      "old_path": "ospfd/ospf_interface.c",
      "new_id": "4b6b424dce87ebad209779db069e806314b6b76d",
      "new_mode": 33188,
      "new_path": "ospfd/ospf_interface.c"
    },
    {
      "type": "modify",
      "old_id": "05eed35ebeb6c3bf98ea47c8fdce480e86035f02",
      "old_mode": 33188,
      "old_path": "ospfd/ospf_lsa.c",
      "new_id": "b9a70a665862f0e1b569b7a46c977295637802a4",
      "new_mode": 33188,
      "new_path": "ospfd/ospf_lsa.c"
    },
    {
      "type": "modify",
      "old_id": "4a6cc1590bf3a24691049a830243aa5c5ad8276b",
      "old_mode": 33188,
      "old_path": "ospfd/ospf_snmp.c",
      "new_id": "bc594b3a9b9c4f75cf902289c8d54c8312e6ba0e",
      "new_mode": 33188,
      "new_path": "ospfd/ospf_snmp.c"
    },
    {
      "type": "modify",
      "old_id": "d6da11dc5ea285df8513d3c2ed8ea0d5f059a991",
      "old_mode": 33188,
      "old_path": "ospfd/ospf_vty.c",
      "new_id": "dd700b0ebe5111c815a86760086166a06447cefe",
      "new_mode": 33188,
      "new_path": "ospfd/ospf_vty.c"
    },
    {
      "type": "modify",
      "old_id": "dd5af5e9a405fb81103423b420cbaee8296149f4",
      "old_mode": 33188,
      "old_path": "ospfd/ospfd.c",
      "new_id": "f72295d1cf294e79f4ac0649625d048432e0be05",
      "new_mode": 33188,
      "new_path": "ospfd/ospfd.c"
    },
    {
      "type": "modify",
      "old_id": "68813f14af3ae6d4c770579f3d0da23e1c5b8dfa",
      "old_mode": 33188,
      "old_path": "ripd/ChangeLog",
      "new_id": "ba13a595d3bfd6c663579fc0704a81e468c69792",
      "new_mode": 33188,
      "new_path": "ripd/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "a5b12db6efb1c8bb825fb3a2ec0ded2c9d2b981d",
      "old_mode": 33188,
      "old_path": "ripd/rip_interface.c",
      "new_id": "c8a1a84f9b3e982297d5b6cf78d6aaf92350fbf2",
      "new_mode": 33188,
      "new_path": "ripd/rip_interface.c"
    },
    {
      "type": "modify",
      "old_id": "a1630f6ca6d28e5fb16cf2f725cf8e632bf94192",
      "old_mode": 33188,
      "old_path": "ripd/ripd.c",
      "new_id": "afa49fd6f867a242580acc055a28148b44de126a",
      "new_mode": 33188,
      "new_path": "ripd/ripd.c"
    },
    {
      "type": "modify",
      "old_id": "3ea4f57f31781746ebbf6f34b45ac97c9164068b",
      "old_mode": 33188,
      "old_path": "zebra/ChangeLog",
      "new_id": "6b50cf0f9e270e57a43483d868edbb1ce314d77a",
      "new_mode": 33188,
      "new_path": "zebra/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "44002e76d1b84b16baeef014a99efb814e0eb933",
      "old_mode": 33188,
      "old_path": "zebra/connected.c",
      "new_id": "3fe9717d4f31c7455081fb5862dde28f2a81774d",
      "new_mode": 33188,
      "new_path": "zebra/connected.c"
    },
    {
      "type": "modify",
      "old_id": "28387e93625bc395abd09242ee0ae09378f5a920",
      "old_mode": 33188,
      "old_path": "zebra/connected.h",
      "new_id": "9595ddb1bf61c7e911427db971023eb8c939d301",
      "new_mode": 33188,
      "new_path": "zebra/connected.h"
    },
    {
      "type": "modify",
      "old_id": "788184f8f47c739f3c7d0c38acbe84d7e8ef4415",
      "old_mode": 33188,
      "old_path": "zebra/if_ioctl.c",
      "new_id": "f357e15447c363ad3be6922654fb77952690542d",
      "new_mode": 33188,
      "new_path": "zebra/if_ioctl.c"
    },
    {
      "type": "modify",
      "old_id": "095bcab6394c80065d2b645ac8e8e0e6fa7f2e92",
      "old_mode": 33188,
      "old_path": "zebra/if_ioctl_solaris.c",
      "new_id": "4cb16c7f4c571fc1e3a4582fc69647a3f8cae0f2",
      "new_mode": 33188,
      "new_path": "zebra/if_ioctl_solaris.c"
    },
    {
      "type": "modify",
      "old_id": "367b0d6f10dd4caa22a6371dc642e324d7c62643",
      "old_mode": 33188,
      "old_path": "zebra/if_proc.c",
      "new_id": "3aec530bfa9f5716e72f93a75cce863380a3500e",
      "new_mode": 33188,
      "new_path": "zebra/if_proc.c"
    },
    {
      "type": "modify",
      "old_id": "69124b3de8996b9f28c7a1b740c8208df155156f",
      "old_mode": 33188,
      "old_path": "zebra/interface.c",
      "new_id": "ceee0e2b8dd05bc7df0d7364d1f9dab01f94917f",
      "new_mode": 33188,
      "new_path": "zebra/interface.c"
    },
    {
      "type": "modify",
      "old_id": "f384e979d431d9a1287adaf5481ed4ebcd2a0bf7",
      "old_mode": 33188,
      "old_path": "zebra/kernel_socket.c",
      "new_id": "ac06566a72d81db3083c3a7a18ce4376dfc4d37b",
      "new_mode": 33188,
      "new_path": "zebra/kernel_socket.c"
    },
    {
      "type": "modify",
      "old_id": "216625e93e850fd16a804044fccc502ad664337a",
      "old_mode": 33188,
      "old_path": "zebra/rt_netlink.c",
      "new_id": "e2f1f9d9336a5f416e3953b35ec9219a0ae96212",
      "new_mode": 33188,
      "new_path": "zebra/rt_netlink.c"
    }
  ]
}
