)]}'
{
  "commit": "2948d2ebbb98747b912ac6d0c864b4d02be8a6f5",
  "tree": "64e0eec6a3a2c91345d5eb7a00193e94782c2db9",
  "parents": [
    "0ff4d77bd9fe86ca1bc7f44839d79f8a349a62f0"
  ],
  "author": {
    "name": "Patrick McHardy",
    "email": "kaber@trash.net",
    "time": "Fri Jan 11 18:02:18 2008 -0800"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Fri Jan 11 18:02:18 2008 -0800"
  },
  "message": "[NETFILTER]: bridge: fix double POST_ROUTING invocation\n\nThe bridge code incorrectly causes two POST_ROUTING hook invocations\nfor DNATed packets that end up on the same bridge device. This\nhappens because packets with a changed destination address are passed\nto dst_output() to make them go through the neighbour output function\nagain to build a new destination MAC address, before they will continue\nthrough the IP hooks simulated by bridge netfilter.\n\nThe resulting hook order is:\n PREROUTING\t(bridge netfilter)\n POSTROUTING\t(dst_output -\u003e ip_output)\n FORWARD\t(bridge netfilter)\n POSTROUTING\t(bridge netfilter)\n\nThe deferred hooks used to abort the first POST_ROUTING invocation,\nbut since the only thing bridge netfilter actually really wants is\na new MAC address, we can avoid going through the IP stack completely\nby simply calling the neighbour output function directly.\n\nTested, reported and lots of data provided by: Damien Thebault \u003cdamien.thebault@gmail.com\u003e\n\nSigned-off-by: Patrick McHardy \u003ckaber@trash.net\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c1757c79dfbb3eaf7f857441f9a71966155b24a0",
      "old_mode": 33188,
      "old_path": "net/bridge/br_netfilter.c",
      "new_id": "5d8b939eded1937b8a2ced738a69add839b0c3d0",
      "new_mode": 33188,
      "new_path": "net/bridge/br_netfilter.c"
    }
  ]
}
