)]}'
{
  "log": [
    {
      "commit": "337125ce8d24ed66d7f4c7e6eef50458f3e7d154",
      "tree": "287b3310183b93bd30e1f25c4d61a7854464c460",
      "parents": [
        "4eb54a811bef43da2be9cc84009567e5d6ca9741"
      ],
      "author": {
        "name": "Robert Karbowski",
        "email": "rkarbowski2@gmail.com",
        "time": "Sun May 19 12:40:03 2024 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Mon May 20 17:07:47 2024 +0200"
      },
      "message": "teamd: lw: arp_ping: bitmask VID in VLAN BPF filter\n\nBPF filter arp_vlan_rpl_flt fails if in the ARP response the VLAN tag has,\nin addition to VID, also PCP (priority code point).\nThis patch is masking the last 12 bits from SKF_AD_VLAN_TAG field\nto extract VID only.\n\nSigned-off-by: Robert Karbowski \u003crobert_karbowski@hotmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "4eb54a811bef43da2be9cc84009567e5d6ca9741",
      "tree": "b42d4203e32632450c71403ebb8b6a094331cee2",
      "parents": [
        "8b843e93cee1dab61fb79b01791201cdad45e1d1"
      ],
      "author": {
        "name": "Khem Raj",
        "email": "raj.khem@gmail.com",
        "time": "Sat May 11 23:15:59 2024 -0700"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Mon May 20 17:07:47 2024 +0200"
      },
      "message": "teamd: Pass correct parameter type to accept API\n\naccept() expects sockaddr as second parameter\n\nint accept (int, struct sockaddr *__restrict, socklen_t *__restrict);\n\nFixes build with gcc-16 on musl systems\n| ../../git/teamd/teamd_usock.c: In function \u0027callback_usock\u0027:\n| ../../git/teamd/teamd_usock.c:280:40: error: passing argument 2 of \u0027accept\u0027 from incompatible pointer type [-Wincompatible-pointer-types]\n|   280 |         sock \u003d accept(ctx-\u003eusock.sock, \u0026addr, \u0026alen);\n|       |                                        ^~~~~\n|       |                                        |\n|       |                                        struct sockaddr_un *\n\nSigned-off-by: Khem Raj \u003craj.khem@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "8b843e93cee1dab61fb79b01791201cdad45e1d1",
      "tree": "eefabe9ee66316df9440740d1a05ae0e4efd1b35",
      "parents": [
        "7cb5de8b01be132bd4150eff460bfd83296414b6"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Tue Sep 05 16:29:17 2023 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Tue Sep 05 16:29:17 2023 +0200"
      },
      "message": "1.32 release\n\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "7cb5de8b01be132bd4150eff460bfd83296414b6",
      "tree": "2544216b4b4a97bc64fcea5778d09dfbc58882e0",
      "parents": [
        "61e27812c1074a865d7e1a778c0ce442837c28d7"
      ],
      "author": {
        "name": "Otto Hollmann",
        "email": "otto.hollmann@suse.com",
        "time": "Tue May 02 17:36:15 2023 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Thu Jun 22 14:01:40 2023 +0200"
      },
      "message": "teamd: Add option to change evaluation logic of multiple link-watchers\n\nNow, if multiple link watchers are used, link is up if any of the\nlink-watchers reports the link up.\n\nIntroduce new option \"link_watch_policy\" to change this behaviour.\nPossible values are \"any\" and \"all\". If nothing specified, default value\n\"any\" will be used and there will be no change in current behaviour. If\nvalue \"all\" will be set, link will be up only if ALL the link-watchers\nreport the link up.\n\nSigned-off-by: Otto Hollmann \u003cotto.hollmann@suse.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "61e27812c1074a865d7e1a778c0ce442837c28d7",
      "tree": "65566a77b12ee4506c5dc0422249736fe04bff45",
      "parents": [
        "23ab49c4df0c06eb629ce2e3bb4c4dd7c527975a"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Thu Feb 02 17:47:26 2023 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Thu Feb 02 17:47:26 2023 +0100"
      },
      "message": "Revert: teamd: lacp: make sure that lacp_port_agg_update() works with correct unselectable state\n\nActually, the patch was wrong, revert it.\n\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "23ab49c4df0c06eb629ce2e3bb4c4dd7c527975a",
      "tree": "b627a69a699e9c9487ebb4adca44fa35a919a35e",
      "parents": [
        "fd26b370d85d63cca0736d7e666736bb15c395aa"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Thu Feb 02 17:00:51 2023 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Thu Feb 02 17:08:05 2023 +0100"
      },
      "message": "teamd: lacp: don\u0027t move the port state from disabled when admin state is down\n\nWhen the team admin state is down, the port should stay in disabled\nstate, no matter what\u0027s happening. So check the admin state and bail out\nin that case.\n\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "fd26b370d85d63cca0736d7e666736bb15c395aa",
      "tree": "13321e171ff54c0876c945e3a0254a3d2e6b8894",
      "parents": [
        "5409fb58b0e9909b44a2ff89cf4c49e35ce53ea6"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Wed Dec 07 10:44:35 2022 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Wed Dec 07 13:47:22 2022 +0100"
      },
      "message": "teamd: lacp: set port to disabled state during removal\n\nCurrently, the disabled state is set only after port is removed from\nteam master in kernel. Team driver puts the port netdevice down right\naway. In some cases, there is nice to send LACPDU to the partner with\nflags set accordingly for the disabled port.\n\nIntroduce \"port_removing\" op and call it right before kernel\nis asked to remove the port. Implement the op in LACP runner\nto disable the port which leads to proper LACPDU send.\n\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "5409fb58b0e9909b44a2ff89cf4c49e35ce53ea6",
      "tree": "21ed26faca78436149a3791f2e16af945ad35531",
      "parents": [
        "4a43cd854b4b6bbc1ff3dbe99df74eae1efe2b34"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Wed Dec 07 13:26:44 2022 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Wed Dec 07 13:35:23 2022 +0100"
      },
      "message": "teamd: lacp: make sure that lacp_port_agg_update() works with correct unselectable state\n\nIn case of checking unselectable port state, lacp_port_agg_update()\nis checking the new one during port state change. This is wrong as it\nshould check the old one. Move the state setting into\nlacp_port_agg_update() and rename the function accordingly.\n\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "4a43cd854b4b6bbc1ff3dbe99df74eae1efe2b34",
      "tree": "bf29debb9e3c52154b100bb0c0f89fef7895cffc",
      "parents": [
        "5147be02262dbd18cb7283ff660a8169eaa88b8a"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Thu Dec 01 13:40:42 2022 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Thu Dec 01 13:40:42 2022 +0100"
      },
      "message": "libteam: clear changed bits in case of TEAM_IFINFO_CHANGE\n\nThe change bits are cleared per-ifinfo before the event is propagated.\nThat means that event for any netdev would trigger ifinfo changed\npropagation. Fix this by clearing changed bits in case of\nTEAM_IFINFO_CHANGE.\n\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "5147be02262dbd18cb7283ff660a8169eaa88b8a",
      "tree": "6fe24db7c93d64c5a8d6fe5533dcef0835e51fa0",
      "parents": [
        "ffc6a52bd285a476b547312012078af69220574b"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Thu Nov 24 15:49:19 2022 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Thu Nov 24 15:50:27 2022 +0100"
      },
      "message": "misc: fix possible strncpy truncation bug\n\nSpotted by compiler warning:\n../include/private/misc.h:93:9: warning: ‘strncpy’ output may be truncated copying 15 bytes from a string of length 15 [-Wstringop-truncation]\n   93 |         strncpy(ifr.ifr_name, ifname, IFNAMSIZ - 1);\n      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nUse IFNAMSIZ size to fix this.\n\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "ffc6a52bd285a476b547312012078af69220574b",
      "tree": "c63cd1600cfcb70866b65ac6b844fbdbc7f2e217",
      "parents": [
        "dbb2cfca35d2cd15125eb84e8f3940f8cc3ea860"
      ],
      "author": {
        "name": "Lubomir Rintel",
        "email": "lkundrak@v3.sk",
        "time": "Mon Oct 10 18:37:31 2022 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Thu Nov 24 15:44:12 2022 +0100"
      },
      "message": "teamd: stop iterating callbacks when a loop restart is requested\n\nA crash was observed:\n\n  Added loop callback: dbus_watch, 0x560d279e4530\n  Added loop callback: dbus_watch, 0x560d279e4580\n  ...\n  Removed loop callback: dbus_watch, 0x560d279e4580\n  Removed loop callback: dbus_watch, 0x560d279e4530\n  Aug 31 11:54:11 holaprdel kernel: traps: teamd[557] general protection fault ip:560d26469a55 sp:7ffd43ca9650 error:0 in teamd[560d26463000+16000]\n\nTraceback (from a different run than above):\n\n  Core was generated by `/usr/bin/teamd -o -n -U -D -N -t team0 -gg\u0027.\n  Program terminated with signal SIGSEGV, Segmentation fault.\n  #0  0x00005600ac090a55 in teamd_run_loop_do_callbacks (ctx\u003d0x5600ad9bac70, fds\u003d0x7fff40861250, lcb_list\u003d0x5600ad9bad58) at /usr/src/debug/libteam-1.31-14.el9.x86_64/teamd/teamd.c:321\n  321\t\tlist_for_each_node_entry_safe(lcb, tmp, lcb_list, list) {\n  (gdb) bt\n  #0  0x00005600ac090a55 in teamd_run_loop_do_callbacks (ctx\u003d0x5600ad9bac70, fds\u003d0x7fff40861250, lcb_list\u003d0x5600ad9bad58) at /usr/src/debug/libteam-1.31-14.el9.x86_64/teamd/teamd.c:321\n  #1  teamd_run_loop_run (ctx\u003d0x5600ad9bac70) at /usr/src/debug/libteam-1.31-14.el9.x86_64/teamd/teamd.c:415\n  #2  0x00005600ac08d8cb in teamd_start (p_ret\u003d\u003csynthetic pointer\u003e, ctx\u003d\u003coptimized out\u003e) at /usr/src/debug/libteam-1.31-14.el9.x86_64/teamd/teamd.c:1557\n  #3  main (argc\u003d\u003coptimized out\u003e, argv\u003d\u003coptimized out\u003e) at /usr/src/debug/libteam-1.31-14.el9.x86_64/teamd/teamd.c:1876\n  (gdb) print *lcb\n  Cannot access memory at address 0x9dd29944fb7e97fc\n  (gdb) print *tmp\n  Cannot access memory at address 0x9dd29944fb7e9804\n  (gdb)\n\nWhat has happened is that libdbus called the remove_watch callback twice\nin a single go, causing two callbacks being destroyed in one iteration\nof teamd_run_loop_do_callbacks()\u0027s list_for_each_node_entry_safe().\n\nThis basically turns the _safe() variant of the macro unhelpful, as tmp\npoints to stale data anyway.\n\nLet\u0027s use the unsafe variant then, and terminate the loop once\nteamd_loop_callback_del() asks for main loop\u0027s attention via\nteamd_run_loop_restart(). If there are other callbacks pending an action,\nthey will get their turn in the next main loop iteration.\n\nSigned-off-by: Lubomir Rintel \u003clkundrak@v3.sk\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "dbb2cfca35d2cd15125eb84e8f3940f8cc3ea860",
      "tree": "5086ece594a64da9cca83ad43ea28f7e8f2cee09",
      "parents": [
        "c32369829b2b1881e25fab85d74aa0b3ad017dcb"
      ],
      "author": {
        "name": "Lubomir Rintel",
        "email": "lkundrak@v3.sk",
        "time": "Mon Oct 10 18:33:53 2022 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Thu Nov 24 15:44:12 2022 +0100"
      },
      "message": "teamd: do no remove the ports on shutdown with -N\n\nWith -N, teamd currently leaves the team device in place on shutdown,\nas it\u0027s supposed to, but it removes all the ports. This severely limits\nusefullness of the option, because it\u0027s still impossible to replace\nthe daemon with another one without disrupting connectivity.\n\nOne use case where this is important is the handover from initrd to real\nroot, when a team device was used to provide connectivity to a network\nroot filesystem:\n\nSystemd\u0027s isolation of switch-root.target stops NetworkManager.service and\nthen terminates its kids, including teamd.  The real NetworkManager.service\nwould eventually catch up and restart it, but there\u0027s a short period when\nteam ports are removed which is not great if we\u0027re booting off that device.\nAlso, it may be that ports come up in different order, causing team to get\na different MAC address, which will invalidate the DHCP lease we got\nbeforehands and screwing up L3 addressing.\n\nLet\u0027s not flush the ports when -N is used.\n\nSuggested-by: Jiri Pirko \u003cjiri@resnulli.us\u003e\nSigned-off-by: Lubomir Rintel \u003clkundrak@v3.sk\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "c32369829b2b1881e25fab85d74aa0b3ad017dcb",
      "tree": "abde7b21fb10043b0e1673a2e66836cb765fc6d7",
      "parents": [
        "42a235b5e8e4befe5c35ec60bb34ffffbedddbf3"
      ],
      "author": {
        "name": "Paul D.Smith",
        "email": "pauldsmith@microsoft.com",
        "time": "Wed Sep 28 10:00:18 2022 +0000"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Thu Sep 29 14:17:28 2022 +0200"
      },
      "message": "binding/python: ifindex 0 is invalid so do not process it\n\nOn some platforms, libraries underpinning libteam assert that an ifindex\npassed to them is not zero so an ifindex of zero cannot be passed down.\nThis patch alters libteam processing order to ensure that this is the\ncase.\n\nSigned-off-by: Paul D.Smith \u003cpauldsmith@microsoft.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "42a235b5e8e4befe5c35ec60bb34ffffbedddbf3",
      "tree": "dbfc8f53551a4adcf38640bb0a637d314520735e",
      "parents": [
        "3bbce8a171deab6cd3d7d57d128bc2dbaea451f0"
      ],
      "author": {
        "name": "Khem Raj",
        "email": "raj.khem@gmail.com",
        "time": "Mon Sep 26 18:20:18 2022 -0700"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Tue Sep 27 10:45:54 2022 +0200"
      },
      "message": "teamd: Include missing headers for strrchr and memcmp\n\nCompiler does not see the prototype for these functions otherwise and\nbuild fails e.g.\n\n| ../../git/teamd/teamd_phys_port_check.c:52:10: error: call to undeclared library function \u0027strrchr\u0027 with type \u0027char *(const char *, int)\u0027; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]\n|         start \u003d strrchr(link, \u0027/\u0027);\n|                 ^\n\nSigned-off-by: Khem Raj \u003craj.khem@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "3bbce8a171deab6cd3d7d57d128bc2dbaea451f0",
      "tree": "d73046ec255831dad92429417321fd1c18f9f291",
      "parents": [
        "1569cf8ac96294083ed0031ef5b4174489cd9472"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Fri Apr 15 11:41:39 2022 -0400"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Mon Jun 27 17:49:46 2022 +0200"
      },
      "message": "libteamdctl: validate the bus name before using it\n\nUsing bus name without validating it will cause core dump generated,\nand it can be reproduced by:\n\n  # ip link add dummy0.1 type dummy\n  # teamdctl dummy0.1 state dump\n\n  This is normally a bug in some application using the D-Bus library.\n\n    D-Bus not built with -rdynamic so unable to print a backtrace\n  Aborted (core dumped)\n\nDoing this many times can even create too many core files, customers\nmay complain about it.\n\nThis is triggered when calling cli_method_call(\"ConfigDump\") in\ncli_init(), so fix it by returning err in cli-\u003einit/cli_dbus_init()\nif the bus name fails to validate.\n\nNote this is safe, as with dbus, we can\u0027t use invalid dbus name to\ncreate the team dev either.\n\nFixes: d8163e34c25c (\"libteamdctl: do test method call instead or Introspect call\")\nReported-by: Uday Patel \u003cupatel@redhat.com\u003e\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "1569cf8ac96294083ed0031ef5b4174489cd9472",
      "tree": "0d4683a66eed6e9ad5aa1a8b179c93db62b02f12",
      "parents": [
        "69a7494bb77dc10bb27076add07b380dbd778592"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Wed Nov 24 12:04:54 2021 -0500"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Mon Jun 27 17:49:46 2022 +0200"
      },
      "message": "options: move option temporary check after the err check\n\noption is set only if err returned from update_option() is 0, so\ncheck err first before checking option-\u003etemporary. Otherwise, it\nmay results in a dereference of an undefined pointer value.\n\nFixes: 8180763d6f82 (\"libteam: always add newly created option to option list\")\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "69a7494bb77dc10bb27076add07b380dbd778592",
      "tree": "69659fd00c4336477878459ffd4467ab050a9fd1",
      "parents": [
        "267f24839536234ca621d4fd0466d3b57cb6dccd"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Mon Feb 22 08:37:42 2021 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Mon Feb 22 08:38:24 2021 +0100"
      },
      "message": "teamd: lacp: increase \"min_ports\" upper limit to 1024\n\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "267f24839536234ca621d4fd0466d3b57cb6dccd",
      "tree": "f9faf9f4aa02c2990399956af718eab8149b7357",
      "parents": [
        "6875e6c8efb0fe86766b3d4f1d0db390af6998b7"
      ],
      "author": {
        "name": "Pavel Šimerda",
        "email": "code@simerda.eu",
        "time": "Tue Jan 12 04:41:56 2021 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Mon Jan 18 14:12:04 2021 +0100"
      },
      "message": "fix build on OpenWRT/musl-libc\n\nSigned-off-by: Pavel Šimerda \u003ccode@simerda.eu\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "6875e6c8efb0fe86766b3d4f1d0db390af6998b7",
      "tree": "2eeaf428e637643c9aad0d72817390ea305ce93e",
      "parents": [
        "61efd6de2fbb8ee077863ee5a355ac3dfd9365b9"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Tue Dec 15 19:33:17 2020 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Mon Jan 18 14:11:58 2021 +0100"
      },
      "message": "teamd: increase the waitting time for daemon killing\n\nIn the current code, we wait for at most 5s when kill the daemon pid.\nBut in some environment, it may need more time. Then the teamd -k will\nfailed and return error \"Failed to kill daemon: Timer expired\".\n\nLet\u0027s increase the value to have enough time. Here is the reuslt with\nthis patch:\n\n$ time libteam/teamd/teamd -k -t team0\n\nreal    0m10.442s\nuser    0m0.017s\nsys     0m0.016s\n\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "61efd6de2fbb8ee077863ee5a355ac3dfd9365b9",
      "tree": "b1c3fc65b411892faa447664d978523ea1b6bbdc",
      "parents": [
        "3ee12c6d569977cf1cd30d0da77807a07aa77158"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Tue Sep 01 13:59:27 2020 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@nvidia.com",
        "time": "Wed Sep 02 10:13:35 2020 +0200"
      },
      "message": "Revert \"teamd: Disregard current state when considering port enablement\"\n\nThis reverts commit deadb5b715227429a1879b187f5906b39151eca9.\n\nAs Patrick noticed, with that commit, teamd_port_check_enable()\nwould set the team port to the new state unconditionally, which\ntriggers another change message from kernel to userspace, then\nteamd_port_check_enable() is called again to set the team port\nto the new state.\n\nThis would go around and around to update the team port state,\nand even cause teamd to consume 100% cpu.\n\nAs the issue caused by that commit is serious, it has to be\nreverted. As for the issued fixed by that commit, I would\npropose a new fix later.\n\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n"
    },
    {
      "commit": "3ee12c6d569977cf1cd30d0da77807a07aa77158",
      "tree": "2528b049e08f6dc8dd7ac95558bd6dd9de527a63",
      "parents": [
        "2e3313561394662b3a379594aa2c6b546419230f"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Sun Jul 26 11:58:14 2020 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Sun Jul 26 11:58:14 2020 +0200"
      },
      "message": "1.31 release\n\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "2e3313561394662b3a379594aa2c6b546419230f",
      "tree": "b94077fa75dad6476b0c348018e7f59ccd694c88",
      "parents": [
        "7000b5bcb22e8192bbc6d9ceddba740541c68484"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Mon Jul 20 16:53:21 2020 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon Jul 20 12:00:11 2020 +0200"
      },
      "message": "utils/bond2team: remove TYPE in ifcfg file\n\nWhen convert Bond config to Team, TYPE is used for Bond and DEVICETYPE\nis used for Team. So we should remove TYPE keyword in ifcfg file.\n\nBefore the fix:\n$ ls bonding/\nifcfg-bond0  ifcfg-bond0-eth1  ifcfg-bond0-eth2\n$ bond2team --configdir bonding/ --master bond0 --rename team0 --stdout | grep TYPE\nTYPE\u003dBond\nDEVICETYPE\u003d\"Team\"\nTYPE\u003dEthernet\nDEVICETYPE\u003d\"TeamPort\"\nTYPE\u003dEthernet\nDEVICETYPE\u003d\"TeamPort\"\n\nAfther the fix:\n$ bond2team --configdir bonding/ --master bond0 --rename team0 --stdout | grep TYPE\nDEVICETYPE\u003d\"Team\"\nDEVICETYPE\u003d\"TeamPort\"\nDEVICETYPE\u003d\"TeamPort\"\n\nFixes: d5a1c8ee9e36 (\"utils: add bond2team conversion tool\")\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "7000b5bcb22e8192bbc6d9ceddba740541c68484",
      "tree": "ba711ba5e7f444df39941339c16fda547b925f45",
      "parents": [
        "5dc1566f446660b5cf4050b81a1ecffbd9d718dc"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Mon Jul 20 16:52:56 2020 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon Jul 20 12:00:11 2020 +0200"
      },
      "message": "utils/bond2team: keep delivering config to file if stdout not supplied\n\nWhen --stdout not supplied, we should keep on delivering the config file\ninstead of return.\n\nBefore the fix:\n$ bond2team --configdir ./bonding/ --master bond0 --rename team0\n$ bond2team --configdir bonding/ --outputdir teaming/ --master bond0 --rename team0\n$ ls teaming/\n\nAfter the fix:\n$ bond2team --configdir ./bonding/ --master bond0 --rename team0\nResulted files:\n/tmp/bond2team.nV4eX3/ifcfg-team0\n/tmp/bond2team.nV4eX3/ifcfg-eth1\n/tmp/bond2team.nV4eX3/ifcfg-eth2\n\n$ bond2team --configdir bonding/ --outputdir teaming/ --master bond0 --rename team0\n$ ls teaming/\nifcfg-eth1  ifcfg-eth2  ifcfg-team0\n\nFixes: d5a1c8ee9e36 (\"utils: add bond2team conversion tool\")\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "5dc1566f446660b5cf4050b81a1ecffbd9d718dc",
      "tree": "32e204c85ab5b909a488d2525516a167a4990592",
      "parents": [
        "bbffa4223299c18e9886e423f80909b560713e5e"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Tue May 26 18:59:33 2020 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu Jun 11 14:23:52 2020 +0200"
      },
      "message": "teamd/lacp: silence ignore none LACP frames\n\nAccording to 802.3, Annex 43B, section 4, aside from LACP, the Slow\nProtocol linktype is also to be used by other protocols, like 0x02 for\nLAMP, 0x03 for OAM. So let\u0027s only check LACP frames. For none LACP\nprotocols, just silence ignore.\n\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "bbffa4223299c18e9886e423f80909b560713e5e",
      "tree": "fc31bb675c72a528e1126f0ef3b89eb70830b979",
      "parents": [
        "5ba661e5b1378297f60c5567ab0c9b499aa773f0"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Thu May 21 19:45:22 2020 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri May 22 17:01:28 2020 +0200"
      },
      "message": "teamd: fix ctx-\u003ehwaddr value assignment\n\nWe should use memcpy to copy the data to ctx-\u003ehwaddr.\nUse ctx-\u003ehwaddr \u003d hwaddr will change the ctx-\u003ehwaddr to\na wrong address and cause the team hwaddr unable to be updated.\n\nReported-by: Li Liang \u003cliali@redhat.com\u003e\nSuggested-by: Xin Long \u003clucien.xin@gmail.com\u003e\nFixes: 9ca6bf9 (\"teamd: update ctx-\u003ehwaddr after setting team dev to new hwaddr\")\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "5ba661e5b1378297f60c5567ab0c9b499aa773f0",
      "tree": "ad05b0e298d296c32f351580a65fd04c411155ee",
      "parents": [
        "95037b14e011f236d8b0fbb72e6bf5a88efae101"
      ],
      "author": {
        "name": "Pavel Shirshov",
        "email": "pavel.contrib@gmail.com",
        "time": "Mon May 11 13:06:50 2020 -0700"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri May 15 12:44:03 2020 +0200"
      },
      "message": "Send LACP PDU right after the Actor state has been changed\n\nAccording to the LACP standard \"LACP daemon must send LACP PDU\npackets with updates when the Actor\u0027s state changes or when it is\napparent from the Partner\u0027s LACPDUs that the Partner does not know\nthe Actor\u0027s current state.\"\n\nThe current libteam implementation sends periodic updates only, so\nin LACP slow rate mode the update will be transmitted within 30 seconds\nwhich doesn\u0027t follow the LACP standard.\n\nTo fix the issue:\n1. Revert the patch:\nb2de61b39696 (\"Fix sending duplicate LACP frames at the start of establishing a logical channel.\")\n2. Recalculate LACP actor state before the comparison what the LACP\nPartner thinks about the LACP Actor state.\n\nSigned-off-by: Pavel Shirshov \u003cpavel.contrib@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "95037b14e011f236d8b0fbb72e6bf5a88efae101",
      "tree": "39501038315922391bf135d595c87b73ad394149",
      "parents": [
        "808f4509f9e16e744984939677caa270dce7fa8f"
      ],
      "author": {
        "name": "Pavel Shirshov",
        "email": "pavel.contrib@gmail.com",
        "time": "Mon May 04 12:58:13 2020 -0700"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon May 11 07:36:07 2020 +0200"
      },
      "message": "Skip setting the same hwaddr to a lag port if not needed\n\nAvoid setting the same mac address to a LAG port,\nif the LAG port already has the right one.\n\nBenefits:\n1. Make libteam avoid changing settings of a link,\nwhich prevents the kernel from sending multiply Netlink\nmessages. Netlink message listeners don\u0027t need to react\nto the Netlink messages.\n\n2. Libteam works faster. It doesn\u0027t need to use any\nsyscalls and go deep into libteam functions in the case\nwhen nothing is changed. A straightforward check and\nlibteam avoid much work.\n\nIn the case, when libteam user has hundreds of ports,\nand up to a hundred LAGs, this patch saves them significant\nCPU time.\n\nSigned-off-by: Pavel Shirshov \u003cpavel.contrib@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "808f4509f9e16e744984939677caa270dce7fa8f",
      "tree": "f2b0dc6515b1ebaf31cde80d71c6c25124cb170e",
      "parents": [
        "1119cac6e24d243ca03006da927b765132aa20b2"
      ],
      "author": {
        "name": "Pavel Shirshov",
        "email": "pavel.contrib@gmail.com",
        "time": "Fri Apr 17 11:32:35 2020 -0700"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Sat Apr 25 08:05:38 2020 +0200"
      },
      "message": "Make all netlink socket RCVBUF sizes configurable\n\nlibteam often losses netlink messages on linux devices\nwith multiple network ports.\n\nRead custom RCVBUF size from environment variable\nTEAM_EVENT_BUFSIZE for all netlink sockets used by\nlibteam.\n\nSigned-off-by: Pavel Shirshov \u003cpavel.contrib@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "1119cac6e24d243ca03006da927b765132aa20b2",
      "tree": "c5664e9c291682b2b5873c43e02d3db330b32e5f",
      "parents": [
        "526e59760c34c3e98073b8e93ceb25226a8360d4"
      ],
      "author": {
        "name": "Pavel Shirshov",
        "email": "pavel.contrib@gmail.com",
        "time": "Thu Mar 12 15:54:17 2020 -0700"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri Apr 03 09:40:45 2020 +0200"
      },
      "message": "Don\u0027t return an error when timerfd socket return 0\n\nIt is possible to read 0 bytes from timerfd descriptor\ndespite the fact that descriptor notified poll() that\nit has data.\n\nIt is possible to see such behaviour on some hardware\nplatforms.\n\nSolve this by treating such situation as normal.\n\nSigned-off-by: Pavel Shirshov \u003cpavel.contrib@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "526e59760c34c3e98073b8e93ceb25226a8360d4",
      "tree": "944792406523bb690589696dde7eb6cad4ad1ac4",
      "parents": [
        "c7237377dead39ae4a711297203bacf7edb9fa41"
      ],
      "author": {
        "name": "Pavel Shirshov",
        "email": "pavel.contrib@gmail.com",
        "time": "Thu Apr 02 17:24:05 2020 -0700"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri Apr 03 09:40:45 2020 +0200"
      },
      "message": "Fix ifinfo_link_with_port race condition with newlink\n\nWhen a member port is enslaved into a port channel\nimmediately after the port channel was created,\nit is possible to get member port ifinfo structure\nnot initialized for the member port because of a race\ncondition.\n\nThe race condition here occurs because order of\nfollowing events is not strict:\n - adding the member port to the port channel;\n - creating ifinfo structure for the member port.\n\nThe error message \"Failed to link port with ifinfo\" is\nthrown when a member port is tried to be added to the\nteam handler\u0027s port list before ifinfo structure was\ninitialized.\n\nTo fix this situation ifinfo_find_create() is used\nto search member ports ifinfo structure in\nifinfo_link_with_port().\n\nSigned-off-by: Shuotian Cheng \u003cshuche@microsoft.com\u003e\nSigned-off-by: Pavel Shirshov \u003cpavel.contrib@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "c7237377dead39ae4a711297203bacf7edb9fa41",
      "tree": "e299024241cefe54bb588c75f95f705ab22efd6c",
      "parents": [
        "471fb50d206e5a3f2eef9e4247329b51edc5c493"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri Jan 31 09:59:00 2020 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Tue Feb 04 18:16:04 2020 +0100"
      },
      "message": "teamd: fix possible race in master ifname callback\n\nIn teamd the messages from kernel are processed in order:\noptions\nifinfo\nports\n\nHowever, kernel sends the messages in a different order. See:\nteam_upper_dev_link() which generates ifinfo notification\n__team_port_change_port_added() which generates ports notification\n__team_options_change_check() which generates options notification\n\nSo there is a chance that the teamd processed only the port without\noptions and right after that it processes ifinfo.\n\nFix this by introducing teamd_port_enabled_check() which does not log\nerror and ignore the port in case this call fails. This is safe\nas this is going to be handled by future\nlink_watch_enabled_option_changed() call.\n\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\nFixes: 5f351666409f (\"teamd: add port_master_ifindex_changed for link_watch_port_watch_ops\")\nTested-by: Stepan Blyshchak \u003cstepanb@mellanox.com\u003e\nReviewed-by: Xin Long \u003clucien.xin@gmail.com\u003e\n"
    },
    {
      "commit": "471fb50d206e5a3f2eef9e4247329b51edc5c493",
      "tree": "f6056f5894615c48f2c9d7aef454af022e0a2dad",
      "parents": [
        "4990a8cea7e9111cffe3842058942099a009ed62"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu Jan 09 15:29:17 2020 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu Jan 09 15:29:17 2020 +0100"
      },
      "message": "1.30 release\n\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "4990a8cea7e9111cffe3842058942099a009ed62",
      "tree": "eb139ae9fe48a7f6dcec158af56285bd63c7dfa4",
      "parents": [
        "575edc0dbc7ae3dfa34e30c1496c3504eacbf56e"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Fri Dec 13 22:17:14 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu Jan 09 15:25:54 2020 +0100"
      },
      "message": "teamd/lacp: fix segfault due to NULL pointer dereference\n\nIf we set a team0 link down with lacp mode, we will call like\n\n  - lacp_port_agg_unselect()\n    - lacp_switch_agg_lead()\n      - teamd_log_dbg()\n\nwhile the new_agg_lead in lacp_switch_agg_lead() may be NULL, then we\nwill got NULL pointer dereference as we called new_agg_lead-\u003ectx in\nnew teamd_log_dbg().\n\nFix it by using agg_lead-\u003ectx, which is safe as we referenced it in function\nlacp_switch_agg_lead().\n\nFixes: f32310b9a5cc (\"libteam: wapper teamd_log_dbg with teamd_log_dbgx\")\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "575edc0dbc7ae3dfa34e30c1496c3504eacbf56e",
      "tree": "0ca28661191d9f7780b7602b467e2c23cdde97a6",
      "parents": [
        "9ca6bf9bad49d1e3f7fa01c719c075f79c184336"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Thu Dec 12 14:22:21 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu Jan 09 15:25:54 2020 +0100"
      },
      "message": "teamd: fix build error in expansion of macro teamd_log_dbgx\n\nWith gcc 8.3 I got the following build error:\n\nIn file included from teamd_dbus.c:33:\nteamd_dbus.c: In function \u0027teamd_dbus_init\u0027:\nteamd.h:54:2: error: expected expression before \u0027if\u0027\n  if (val \u003c\u003d ctx-\u003edebug)   \\\n  ^~\nteamd.h:57:37: note: in expansion of macro \u0027teamd_log_dbgx\u0027\n #define teamd_log_dbg(ctx, args...) teamd_log_dbgx(ctx, 1, ##args)\n                                     ^~~~~~~~~~~~~~\nteamd_dbus.c:507:2: note: in expansion of macro \u0027teamd_log_dbg\u0027\n  teamd_log_dbg(ctx, \"dbus: connected to %s with name %s\", id,\n  ^~~~~~~~~~~~~\n\nFix it by adding parentheses and braces around the content.\n\nFixes: f32310b9a5cc (\"libteam: wapper teamd_log_dbg with teamd_log_dbgx\")\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "9ca6bf9bad49d1e3f7fa01c719c075f79c184336",
      "tree": "989b22cab988feb2291f9735463b82a747bf2528",
      "parents": [
        "f32310b9a5cc0322d8f5c85d94e3866326bc68ce"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Wed Dec 04 15:17:11 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Wed Dec 11 11:43:57 2019 +0100"
      },
      "message": "teamd: update ctx-\u003ehwaddr after setting team dev to new hwaddr\n\nWhen adding the first slave to team dev, the team dev\u0027s hwaddr will\nbe updated to this slave\u0027s hwaddr in function:\n  teamd_event_watch_port_added()\n    - teamd_hwaddr_check_change(),\nBut we didn\u0027t update the ctx-\u003ehwaddr, which is still the team\u0027s init hwaddr.\n\nLater in the following functions:\n  lacp_port_set_mac()\n  lb_event_watch_port_added()\n  ab_hwaddr_policy_same_all_port_added()\nthey will set the first slave\u0027s hwaddr to team\u0027s init hwaddr(ctx-\u003ehwaddr).\n\nThis will cause that the first slave(most likely the active slave)\u0027s hwaddr\nchanges to team dev\u0027s original hwaddr, and later back to its old hwaddr\nagain, which would make the LACPDUs have different Actor System IDs.\n\nFix it by updating ctx-\u003ehwaddr when set ctx-\u003eifindex to new hwaddr.\n\nNote that teamd_set_hwaddr() doesn\u0027t need this fix as it will set\nctx-\u003ehwaddr_explicit \u003d true.\n\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "f32310b9a5cc0322d8f5c85d94e3866326bc68ce",
      "tree": "5f4681e9f4630d40d6a3f09ad1794e999172e5b0",
      "parents": [
        "deadb5b715227429a1879b187f5906b39151eca9"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Mon Dec 02 16:28:17 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Wed Dec 11 11:43:53 2019 +0100"
      },
      "message": "libteam: wapper teamd_log_dbg with teamd_log_dbgx\n\nRecently some users reported that they start to see debug messages in their\nsyslogs even with daemon_verbosity_level \u003d LOG_INFO and without -g option.\n\nActually this issue is there at the begining, the user would see the debug\nmessages if they run teamd with -d option. The reason that most users did\nnot notice this is because they are using libteam via NetworkManager, and\nNetworkManager run libteam in frontend.\n\nBut after commit e47d5db53873 (\"teamd: add an option to force log\noutput to stdout, stderr or syslog\"), NetworkManager will set\nTEAM_LOG_OUTPUT\u003dsyslog in the environment. At the same time libdaemon\ndoes not filter log levels if we use syslog(see function daemon_logv in\nlibdaemon). Then all the users would see the debug messages suddenly and\nfeels annoying.\n\nAnd here is the quote for daemon_set_verbosity() from libdaemon/dlog.h\n\"\"\"\nAllows to decide which messages to output on standard output/error\nstreams. All messages are logged to syslog and this setting does\nnot influence that.\n\"\"\"\n\nSince we should not limit how our user(NM) used libteam. And libdaemon\nis intend to not filter logs if use syslog. We\u0027d better filter the\ndebug message ourselves, like via -g option. So I would prefer to\nmove all teamd_log_dbg to teamd_log_dbgx. After that, the user could\ndecide whether to enable debug or not by themselves with -g option.\n\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "deadb5b715227429a1879b187f5906b39151eca9",
      "tree": "201e404a7c670f8fcedcc7f07e1b168dcb34f2d5",
      "parents": [
        "337bae54278a112bab9d99e05ee7ec825b12c646"
      ],
      "author": {
        "name": "Petr Machata",
        "email": "petrm@mellanox.com",
        "time": "Wed Nov 13 13:26:47 2019 +0000"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu Nov 28 17:35:07 2019 +0100"
      },
      "message": "teamd: Disregard current state when considering port enablement\n\nOn systems where carrier is gained very quickly, there is a race between\nteamd and the kernel that sometimes leads to all team slaves being stuck in\nenabled\u003dfalse state.\n\nWhen a port is enslaved to a team device, the kernel sends a netlink\nmessage marking the port as enabled. teamd\u0027s lb_event_watch_port_added()\ncalls team_set_port_enabled(false), because link is down at that point. The\nkernel responds with a message marking the port as disabled. At this point,\nthere are two outstanding messages: the initial one marking port as\nenabled, and the second one marking it as disabled. teamd has not processed\neither of these.\n\nNext teamd gets the netlink message that sets enabled\u003dtrue, and updates its\ninternal cache accordingly. If at this point ethtool link-watch wakes up,\nteamd considers (in teamd_port_check_enable()) enabling the port. After\nconsulting the cache, it concludes the port is already up, and neglects to\ndo so. Only then does teamd get the netlink message informing it of setting\nenabled\u003dfalse.\n\nThe problem is that the teamd cache is not synchronous with respect to the\nkernel state. If the carrier takes a while to come up (as is normally the\ncase), this is not a problem, because teamd caches up quickly enough. But\nthis may not always be the case, and particularly on a simulated system,\nthe carrier is gained almost immediately.\n\nFix this by not suppressing the enablement message.\n\nSigned-off-by: Petr Machata \u003cpetrm@mellanox.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "337bae54278a112bab9d99e05ee7ec825b12c646",
      "tree": "bc7c9004cd14b8f7fd3f669f78f2a48cc1d5f9fa",
      "parents": [
        "e897f02bf2403d4859a99e090e34ea768b4c0540"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Wed Jul 24 17:02:21 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Tue Jul 30 11:04:29 2019 +0200"
      },
      "message": "man teamd.conf: update some parameter default values\n\nUpdate default runner.name to roundrobin, default runner.tx_hash array\nto [\"eth\", \"ipv4\", \"ipv6\"], default runner.fast_rate to false.\n\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "e897f02bf2403d4859a99e090e34ea768b4c0540",
      "tree": "93f9249db3bd932e23d9c6721ae6026549846cc0",
      "parents": [
        "8c7614abf5993d92e332a800f244bdebd7c9a2c8"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Tue Jul 02 15:41:59 2019 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Tue Jul 02 15:41:59 2019 +0200"
      },
      "message": "1.29 release\n\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "8c7614abf5993d92e332a800f244bdebd7c9a2c8",
      "tree": "91067f2105da2f24639ed602660adebac6731af5",
      "parents": [
        "2bf8652cce4303d3ae79dff8bdef10dfae27439b"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Tue Jul 02 19:33:56 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Tue Jul 02 15:15:25 2019 +0200"
      },
      "message": "teamd: improve the error output for non-integer port prio\n\nThis patch is to improve the error log when users pass\na non-integer value to set port\u0027s prio. After that, we\ncan remove the error output for teamd_config_port_set\nfailure from teamd_config_port_update.\n\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "2bf8652cce4303d3ae79dff8bdef10dfae27439b",
      "tree": "e869719f35bcd35e0b92d2622750628122dc4594",
      "parents": [
        "5f351666409ffe05f40012e5bf135807d4d0260c"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Tue Jul 02 19:30:43 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Tue Jul 02 15:15:25 2019 +0200"
      },
      "message": "teamd: return 0 if tdport doesn\u0027t exist in teamd_config_port_set\n\nThis issue can be reproduced by doing:\n\n  # ip link add dummy1 type dummy\n  # teamd -t team0 -c \u0027{\"runner\": {\"name\": \"activebackup\"}}\u0027 -d\n  # teamdctl team0 port config update dummy1 \u0027{\"prio\": -10}\u0027\n  # ip link set dummy0 master team0\n\nand the error shows:\n\n  libteamdctl: usock: Error message received: \"ConfigUpdateFail\"\n  libteamdctl: usock: Error message content: \"Failed to update config.\"\n  command call failed (Invalid argument)\n\nIt\u0027s a regression caused by Commit c8b356a3cd36 (\"teamd: config: update\nlocal prio to kernel\") where it requires the tdport has to exist when\na tdport config is being updated. However teamd supports for the port\nconfig going first before the port being enslaved.\n\nThis issue breaks how NM-team starts a team device. Here to fix it by\nreturning 0 even if the tdport doesn\u0027t exist in teamd_config_port_set.\n\nReported-by: Radek Vykydal \u003crvykydal@redhat.com\u003e\nFixes: c8b356a3cd36 (\"teamd: config: update local prio to kernel\")\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "5f351666409ffe05f40012e5bf135807d4d0260c",
      "tree": "456dfdc98e365e63dd803ce3610d474e1c34c932",
      "parents": [
        "a5b10a5de336fca8346f806964956e8f21f9f3e0"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Mon Jul 01 15:39:54 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Tue Jul 02 12:09:40 2019 +0200"
      },
      "message": "teamd: add port_master_ifindex_changed for link_watch_port_watch_ops\n\nThis is a follow up of Commit b6f63db7f3c8 (\"teamd: add\nport_master_ifindex_changed for teamd_event_watch_ops\")\nto fix the same issue in it.\n\nThe issue is a race between option change event and ifinfo\n(master_ifindex) change event, so wherever a option change\nfunction tries to iterate tdport by teamd_for_each_tdport,\nthe same thing should be done in its master_ifindex change\nfunction, including link_watch_port_watch_ops.\n\nThe fix has been verified in one customer\u0027s env where it\nappeared no arp requests coming out on the only state-up\ntdport prior to this patch.\n\nReported-by: Michal Tesar \u003cmtesar@redhat.com\u003e\nFixes: b6f63db7f3c8 (\"teamd: add port_master_ifindex_changed for teamd_event_watch_ops\")\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "a5b10a5de336fca8346f806964956e8f21f9f3e0",
      "tree": "ddb2172eae83810572102fbed60d96c619d184e8",
      "parents": [
        "7ce7dea3a7a668bc3c375a97cef3dc9e8a570dab"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Fri Jun 14 11:16:32 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Tue Jul 02 12:03:34 2019 +0200"
      },
      "message": "initscripts: fix if/fi align\n\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "7ce7dea3a7a668bc3c375a97cef3dc9e8a570dab",
      "tree": "78af8baf3d026205815193a4e293e05213a88bd6",
      "parents": [
        "5c5e498bff93acec9bdc3b2e3ab5759a97096c50"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Thu Jun 06 19:17:39 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Tue Jul 02 12:01:28 2019 +0200"
      },
      "message": "teamd: fix a json object memleak in get_port_obj()\n\nThe issue can be noticed simply by doing:\n\n  # ip link add aeth0 type dummy\n  # teamd -d -t ateam0 -c \u0027{\"link_watch\" : {\"name\" : \"ethtool\"}}\u0027\n  # teamdctl ateam0 port add aeth0\n\n  # while true; do\n  #     teamdctl ateam0 config dump actual \u003e /dev/null\n  #     date \"+%Y-%m-%dT%H:%M:%S $(ps -auwwx | grep teamd |grep -v grep)\"\n  # done\n\nAfter 30 mins:\n                      USER       PID %CPU %MEM    VSZ  ... COMMAND\n  2019-06-06T06:25:55 root     26574  0.0  0.0  66572  ... teamd ...\n  ...\n  2019-06-06T06:55:55 root     26574  1.2  0.6  89012  ... teamd ...\n\nMEM used by team grew from 0.0% to 0.6%, VSZ from 66572 to 89012.\n\nget_port_obj() calld in teamd_config_actual_dump() should not have used\njson_object_set(), which can json_incref the child object causing later\njson_decref(parent object) not to be able to free it.\n\nSo change to use json_object_set_new(), a function for setting newly\ncreated objects, and it won\u0027t json_incref the child object that will\nbe freed when its parent object gets freed later.\n\nFixes: c6eba4866e18 (\"teamd: add possibility to add/change port config\")\nReported-by: Michael Colombo \u003cmcolombo@redhat.com\u003e\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "5c5e498bff93acec9bdc3b2e3ab5759a97096c50",
      "tree": "bbb80945861ca824ad1062f8e894cd89ca8da132",
      "parents": [
        "21bdbb95a70e182dc7d3d8cafc04c52090c34ce3"
      ],
      "author": {
        "name": "Beniamino Galvani",
        "email": "bgalvani@redhat.com",
        "time": "Tue May 28 10:02:45 2019 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Tue May 28 14:36:18 2019 +0200"
      },
      "message": "libteam: set netlink event socket as non-blocking\n\nIn some situations it was observed that recvmsg() blocks even if\nepoll_wait() reports the netlink socket as ready:\n\n select(15, [3 9 10 14], [], [], NULL)   \u003d 1 (in [9])\n epoll_wait(9, [{EPOLLIN, {u32\u003d8, u64\u003d8}}], 2, -1) \u003d 1\n recvmsg(8,                                  ### blocked\n\n(9 is the epoll fd, 8 the nl_cli event socket).\n\nProbably this is caused by a bug in kernel, however it seems more\nrobust anyway to set the socket as non-blocking to avoid problems like\nthis.\n\nSigned-off-by: Beniamino Galvani \u003cbgalvani@redhat.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "21bdbb95a70e182dc7d3d8cafc04c52090c34ce3",
      "tree": "77c0acb9f8c06919a287347b80b7481c0bda1572",
      "parents": [
        "3adfafe8cec5254c7be9e08b83a4db140855ccb5"
      ],
      "author": {
        "name": "Jon Maxwell",
        "email": "jmaxwell37@gmail.com",
        "time": "Tue Apr 23 09:42:13 2019 +1000"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu May 02 08:42:05 2019 +0200"
      },
      "message": "libteam: double NETLINK_RCVBUF to fix -ENOMEM error\n\nv1: Change 96k to 192k in the comments\n\nWe are seeing the following errors on some systems configured for LACP:\n\neth0: Failed to set \"priority\".\nLoop callback failed with: Cannot allocate memory\nFailed loop callback: libteam_events, 0x\n\nThe slave is then rejected and does not become part of the team. We debugged\nthis down to -ENOMEM netlink error getting returned by nl_recvmsgs()called\nby send_and_recv(). Doubling the buffer size fixed the problem.\n\nSigned-off-by: Jon Maxwell \u003cjmaxwell37@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "3adfafe8cec5254c7be9e08b83a4db140855ccb5",
      "tree": "55d2c61731d22c2970b543aaa168125f4d2e00cd",
      "parents": [
        "90e5279ce0241838d5687739b3bc795235b7d53b"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Wed Apr 17 18:52:22 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu May 02 08:42:05 2019 +0200"
      },
      "message": "teamd: add a default value 1000 for link_watch.interval\n\nAs we don\u0027t have a default value for link_watch.interval. If a user\nforgets to set this parameter, teamd will fail to init ports\u0027 priv\nand exit in the end.\n\ne.g.\n  teamd -g -c \u0027{\"runner\":{\"name\":\"activebackup\"},\n    \"link_watch\":{\"name\":\"arp_ping\",\"target_host\":\"198.51.100.1\"}}\u0027\n  teamdctl team0 port add p5p1\n  teamdctl team0 port add p5p2\n\nteamd debug log shows:\n  p5p2: Got link watch from global config.\n  p5p2: Using sticky \"0\".\n  Failed to get \"interval\" link-watch option.\n  Failed to load options.\n  Failed to init port priv.\n  Callback named \"lw_periodic\" not found.\n  Callback named \"lw_socket\" not found.\n  Loop callback failed with: Invalid argument\n  Failed loop callback: libteam_events, 0x5624c28b9410\n  select() failed.\n  Exiting...\n  Removed loop callback: usock_acc_conn, 0x5624c28bab60\n  Removed loop callback: usock, 0x5624c28b9410\n  Removed loop callback: workq, 0x5624c28b9410\n  Removed loop callback: libteam_events, 0x5624c28b9410\n  Removed loop callback: daemon, 0x5624c28b9410\n  Failed: Bad file descriptor\n\nFix it by adding a default value for link_watch.interval.\n\nv2: update default value to 1000, as Jamie Bainbridge suggested.\nv3: fix the changelog to pass checkpatch.pl.\n\nReported-by: LiLiang \u003cliali@redhat.com\u003e\nReviewed-by: Jamie Bainbridge \u003cjamie.bainbridge@gmail.com\u003e\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "90e5279ce0241838d5687739b3bc795235b7d53b",
      "tree": "51343c62ef066d33d099877519b71428593e4466",
      "parents": [
        "4dc3a7a042c88193f0371a33f1043919843e6447"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Mon Apr 15 16:56:35 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Wed Apr 17 09:38:12 2019 +0200"
      },
      "message": "teamd: use enabled option_changed to sync enabled to link_up for lb runner\n\nLiLiang found an issue that after adding two ports into a team device with\nlb mode their enabled option sometimes is false.\n\nIt was caused by the unexpected events order:\n\n  0. team_port_add() in kernel.\n  1. port_change   event A1 sent to userspace.\n  2. option_change event B1 sent to userspace.\n  3. port_change   event A2 sent to userspace IF port is up now.\n  4. process port_change event A1 and set port\u0027s enabled option \u0027false\u0027.\n  5. option_change event B2 sent to userspace.\n  6. process option_change event B1 and sync enabled option (value \u003d 1).\n  7. process port_change event A2 and do nothing as enabled option is 1.\n  8. process option_change event B2 and sync enabled option (value \u003d 0).\n\nIn kernel, when the port is still down after dev_open(), which happens more\noften since it changed to use netif_oper_up() to check the state instead of\nnetif_carrier_ok(), the event A2 in Step 3 can be sent at any moment. When\nit\u0027s ahead of Step 4, Step 7 won\u0027t set enabled option to 1 as Step 8 comes\nlate.\n\nAs the port up event can be triggered by dev_watchdog at anytime in kernel,\nthe port_change and option_change events order can not be controlled. What\ncan only be done here is to correct it at Step 8, to sync enabled option to\nlink_up.\n\nSo this patch is to add enabled option_changed for lb mode to do this sync.\n\nReported-by: LiLiang \u003cliali@redhat.com\u003e\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "4dc3a7a042c88193f0371a33f1043919843e6447",
      "tree": "b27ece0f00a0ee072ef66d178ee7879b0cc73756",
      "parents": [
        "0f1b2fac03361c5d2bac34e4b19922c60c5c06c6"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Mon Apr 01 16:15:24 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Wed Apr 17 09:38:12 2019 +0200"
      },
      "message": "teamd: tdport has to exist if item-\u003eper_port is set in __find_by_item_path\n\nThe issue can be reproduced by:\n\n  # teamd -c \u0027{\"device\":\"team0\", \"runner\":{\"name\":\"lacp\"}}\u0027 \u0026\n  # teamdctl team0 state item set runner.aggregator.selected true\n\nteamd process will abort in lacp_port_state_aggregator_selected_set()\nas gsc-\u003einfo.tdport was set to NULL in teamd_state_item_value_set()\n\nThe item \u0027runner.aggregator.selected\u0027 is of per_port \u003d true, and it\nshouldn\u0027t allow to call its setter/getter().\n\nThis patch is to add the check for it in __find_by_item_path() called\nby teamd_state_item_value_get/set().\n\nFixes: 6c00aaf02553 (\"teamd: add support for state item write operation\")\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "0f1b2fac03361c5d2bac34e4b19922c60c5c06c6",
      "tree": "eee85edb8acafe6e8e452e33340dcf92f394d555",
      "parents": [
        "54f137c10579bf97800c61ebb13e732aa1d843e6"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Wed Mar 13 15:04:29 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Wed Apr 17 09:33:18 2019 +0200"
      },
      "message": "teamd: remove port if adding fails\n\nWhen we add a port to team via teamdctl, some drivers do not support\nchanging mac address after dev opened, which would lead to the failure\nof port_obj_create(). The call path looks like below for LACP mode:\n\n- port_obj_create()\n  - port_priv_init_all()\n    - lacp_port_added()\n      - lacp_port_set_mac()\n\nCurrently, we only destroy the port object if adding port fails. But the\nport is still enslaved to team in kernel. IP link command shows the port\nis a team_slave, but teamdctl state shows nothing. This may make users\nconfused.\n\nFix it by removing the port if adding fails.\n\nv2: also calls teamd_port_remove in port_obj_remove()\n\nReported-by: Vladimir Benes \u003cvbenes@redhat.com\u003e\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "54f137c10579bf97800c61ebb13e732aa1d843e6",
      "tree": "584a307cda40ba3b3365070ef823222a6965ebb5",
      "parents": [
        "f36c191da3d65a4744582b2eb09fa297dd85f9ae"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Fri Mar 08 19:28:55 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri Mar 08 13:00:19 2019 +0100"
      },
      "message": "teamd: lacp: update port state according to partner\u0027s sync bit\n\nAccording to 6.4.15 of IEEE 802.1AX-2014, Figure 6-22, the state that the\nport is selected moves MUX state from DETACHED to ATTACHED.\n\nBut ATTACHED state does not mean that the port can send and receive user\nframes. COLLECTING_DISTRIBUTION state is the state that the port can send\nand receive user frames. To move MUX state from ATTACHED to\nCOLLECTING_DISTRIBUTION, the partner state should be sync as well as the\nport selected.\n\nIn function lacp_port_actor_update(), only INFO_STATE_SYNCHRONIZATION\nshould be set to the actor.state when the port is selected.\nINFO_STATE_COLLECTING and INFO_STATE_DISTRIBUTING should be set to false\nwith ATTACHED mode and set to true when INFO_STATE_SYNCHRONIZATION of\npartner.state is set.\n\nIn function lacp_port_should_be_{enabled, disabled}(), we also need to\ncheck the INFO_STATE_SYNCHRONIZATION bit of partner.state.\n\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "f36c191da3d65a4744582b2eb09fa297dd85f9ae",
      "tree": "48f14e9fc452160c29652944c8d639b71d5ee73d",
      "parents": [
        "6bf0e87387878654186bcf7287e0eda59b1c2f2c"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Fri Feb 22 16:27:46 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri Mar 08 09:39:16 2019 +0100"
      },
      "message": "man: fix runner.min_ports default value\n\nIt should be 1 instead of 0.\n\nReported-by: LiLiang \u003cliali@redhat.com\u003e\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "6bf0e87387878654186bcf7287e0eda59b1c2f2c",
      "tree": "1bc12e3bf2102930239cf40911a64756b26c04a2",
      "parents": [
        "5f355301b7cafbb51b036ad1e5af38e79d4330d6"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Thu Feb 21 17:37:46 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri Mar 08 09:39:16 2019 +0100"
      },
      "message": "teamd: lw: nsna_ping: only send ns on enabled port\n\nWe forget to check forced_send when using nsna_ping link_watch.\nNs is sent from all ports, which cause switch mac flapping. Some\nreply packets are delivered to disabled port and dropped directly.\n\nFix it by checking forced_send and only send ns on enabled port.\n\nReported-by: LiLiang \u003cliali@redhat.com\u003e\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "5f355301b7cafbb51b036ad1e5af38e79d4330d6",
      "tree": "7d11a1d5ec4eacd97dfc59b836f43c4f362f16ab",
      "parents": [
        "c8b356a3cd363af10d71e21a4fb7dc26cf90b5bc"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Fri Jan 11 09:57:10 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon Jan 14 19:07:41 2019 +0100"
      },
      "message": "teamd: lw: arp_ping: only check arp reply message\n\nCurrently we check both arp request and reply message for arp_ping link\nwatch. But if we enabled validate_active and validate_inactive at the\nsame time, we will receive the other slave\u0027s arp request as the switch\nbroadcasts arp request message. i.e. slave1 receives arp request from\nslave2 and vice versa.\n\nThen the arp check will pass even the target is unreachable. Fix it by\nonly check arp reply message.\n\nReported-by: LiLiang \u003cliali@redhat.com\u003e\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "c8b356a3cd363af10d71e21a4fb7dc26cf90b5bc",
      "tree": "d096e6f6a689e21cabe96ace85860afd8536acfe",
      "parents": [
        "6e67aa89a746ff98d4b4f4fa3c778aa31d4d2c7f"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Mon Jan 07 15:58:49 2019 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon Jan 14 19:07:41 2019 +0100"
      },
      "message": "teamd: config: update local prio to kernel\n\nTeam port\u0027s priority will affect the active port selection. Update the\nlocal config is not enough. We also need to update kernel configs.\n\nReported-by: Liang Li \u003cliali@redhat.com\u003e\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "6e67aa89a746ff98d4b4f4fa3c778aa31d4d2c7f",
      "tree": "b32e42349b81f5148d5449eda8e0ec424e6fdf9d",
      "parents": [
        "903950c7fcf28c32f4b62d9d1c07c0234e8378a2"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Mon Dec 17 16:58:34 2018 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon Jan 14 19:07:41 2019 +0100"
      },
      "message": "teamnl: update help message\n\nUpdate help message so people could know we support port name directly.\n\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "903950c7fcf28c32f4b62d9d1c07c0234e8378a2",
      "tree": "1c8a53f97579e631583ac73426c2aac52315146f",
      "parents": [
        "cc3d79f6c665eb7a9c14d9a3a453aee4ad23da4c"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Sun Dec 09 09:46:26 2018 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Sun Dec 09 09:46:26 2018 +0100"
      },
      "message": "1.28 release\n\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "cc3d79f6c665eb7a9c14d9a3a453aee4ad23da4c",
      "tree": "1cce7d23918908bd2a84cc839684905710713f6a",
      "parents": [
        "42257eb7f2db4d86e6af6cdf467848d518149c2c"
      ],
      "author": {
        "name": "Meng Koon Lim",
        "email": "mengkoon@live.com",
        "time": "Wed Nov 07 23:09:17 2018 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Wed Nov 07 16:21:52 2018 +0100"
      },
      "message": "teamd: lacp: send LACPDU when port state transitions from DEFAULT to CURRENT\n\nCurrently, when local port state become DEFAULTED, its Partner_State\nfield is set to 0x00\n\nBit 1 in Actor_State and Partner_State field is for LACP_Timeout. When\nset, it means LACP fast is used.\n\nIf teamd_runner_lacp receives an LACPDU with Actor_State field bit 1\nset, it transitions local port to CURRENT, and transmits LACPDU\n\nIf teamd_runner_lacp receives an LACPDU without Actor_State field bit 1\nset, it transitions local port to CURRENT, but does not transmit LACPDU\n\nThe second scenario results in teamd starting data transmission when\npartner port remains in either Defaulted or Expired state, causing\npackets to be dropped by partner\n\nFix this by setting Partner_State field to 0x02 on the local port\nwhen local port state transitions to DEFAULTED\n\nSigned-off-by: Meng Koon Lim \u003cmengkoon@live.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "42257eb7f2db4d86e6af6cdf467848d518149c2c",
      "tree": "54a3f7dbdd375872cbbee560bc03137a990538e7",
      "parents": [
        "04e328303a8c125157459df5ca17b624fb0b5495"
      ],
      "author": {
        "name": "Patrick Talbert",
        "email": "ptalbert@redhat.com",
        "time": "Thu Nov 01 14:59:20 2018 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon Nov 05 17:15:36 2018 +0100"
      },
      "message": "man teamd.conf: Document ARP Ping link_watch.vlanid option\n\nSigned-off-by: Patrick Talbert \u003cptalbert@redhat.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "04e328303a8c125157459df5ca17b624fb0b5495",
      "tree": "4054b61bdb421e31513e7005b10f54802e8205f6",
      "parents": [
        "c35bece57a4990368a633c88a4c4edb8397c7d16"
      ],
      "author": {
        "name": "Patrick Talbert",
        "email": "ptalbert@redhat.com",
        "time": "Thu Nov 01 14:59:02 2018 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon Nov 05 17:15:36 2018 +0100"
      },
      "message": "man teamd.conf: fix indentation of link_watch.send_always\n\nSigned-off-by: Patrick Talbert \u003cptalbert@redhat.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "c35bece57a4990368a633c88a4c4edb8397c7d16",
      "tree": "b63e2293a00a419317e2bfabba1ed1e02bab9c95",
      "parents": [
        "e47d5db538736c74473842b57110b71d3844d7e6"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Mon Oct 29 14:34:29 2018 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon Nov 05 17:13:05 2018 +0100"
      },
      "message": "libteam/options: fix s32/u32 data storage on big endian\n\nWhen put signed/unsigned int data to long on big endian(PPC64) and read it as\nsinged/unsigned int, we will read from high bytes and get wrong number, e.g.\nwrong active port index and priority values.\n\nFix it by using signed/unsigned int directly when store s32/u32 values.\n\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "e47d5db538736c74473842b57110b71d3844d7e6",
      "tree": "721248dcbd0140211e62bf57ea3894119629dd33",
      "parents": [
        "b6f63db7f3c8eb3119c9449abe9ac6535965e14d"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Fri Sep 21 12:41:02 2018 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon Nov 05 17:07:05 2018 +0100"
      },
      "message": "teamd: add an option to force log output to stdout, stderr or syslog\n\nBy default, libdaemon prints the logs to stderr, and switches to syslog\nif the precess daemonizes.\n\nWhen some users, e.g. NetworkManager, run teamd foreground, the logs printed\nin syslog will as coming from NetworkManager, with mixed NetworkManager\u0027s\nown debug logs, which makes people feel a mess and hard to debug.\n\nAdd option -l to support force teamd log output to stdout, stderr or\nsyslog. Also add a global env TEAM_LOG_OUTPUT, which could be used for\nold version compatibility.\n\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "b6f63db7f3c8eb3119c9449abe9ac6535965e14d",
      "tree": "e7bc38823e706071593ebdc8daec051f5aea4747",
      "parents": [
        "eb3b18e87be7aab31bdfa51a882210b24596dc9d"
      ],
      "author": {
        "name": "Hangbin Liu",
        "email": "liuhangbin@gmail.com",
        "time": "Wed Aug 08 16:56:52 2018 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Wed Aug 08 11:16:59 2018 +0200"
      },
      "message": "teamd: add port_master_ifindex_changed for teamd_event_watch_ops\n\nWhen we add port to new active-backup teams with multi threads. After\nthe port is set to link up and trigger function obj_input_newlink(),\nit\u0027s possible that there is no master index in rtnl link info. So the\nteam slave\u0027s master_ifindex is not updated.\n\nOn the other hand, the port is up and trigger functions like\n- teamd_link_watch_check_link_up()\n  - teamd_event_port_link_changed()\n    - ab_event_watch_port_link_changed()\n      - ab_link_watch_handler()\n        - teamd_for_each_tdport()\n\t  - teamd_get_next_tdport()\n\t    - teamd_port_present()\n\nHere the teamd_port_present() failed as the port master ifindex is not\nupdate to team ifindex yet. Finally we get nothing and no active port\nis set.\n\nHere is the reproducer:\n\n\\#bin/bash\nif [ -z $1 ] || [ -z $2 ]; then\n\techo \"Usage: $0 iface1 iface2\"\n\texit 1\nelse\n\tiface1\u003d$1\n\tiface2\u003d$2\nfi\n\nWAIT\u003d2\nCOUNT\u003d0\n\nstart_team()\n{\n\tlocal num\u003d$1\n\tlocal iface\u003d$2\n\tteamd -o -n -U -d -t team$num -c \u0027{\"runner\": {\"name\": \"activebackup\"},\"link_watch\": {\"name\": \"ethtool\"}}\u0027 -gg\n\tteamdctl team$num port add $iface\n}\n\nwhile :; do\n\techo \"-----------------------------------------------------------\"\n\tlet \"COUNT++\"\n\techo \"Loop $COUNT\"\n\n\tteamd -k -t team1\n\tteamd -k -t team2\n\tsleep \"$WAIT\"\n\tstart_team 1 $iface1 \u0026\n\tstart_team 2 $iface2 \u0026\n\tsleep \"$WAIT\"\n\n\tif teamdctl team1 state | grep -q \"active port: $iface1\" \u0026\u0026 \\\n\t\tteamdctl team2 state | grep -q \"active port: $iface2\"; then\n\t\techo \"Pass\"\n        else\n\t\techo \"FAIL\"\n\t\texit 1\n        fi\ndone\n\nFailure as follows:\n\n]# teamdctl teamX state dump\n    \"runner\": {\n        \"active_port\": \"\"\n    },\n\nCurrently we only reproduced this with active-backup mode(I could reproduce it\nin VM easily, but hard to reproduce it on physical machines).\n\nFix it by adding a new teamd_event_watch_ops port_master_ifindex_changed for\nactive-backup mode.\n\nV2: update commit description from Jamie Bainbridge\u0027s reply.\nv3: update description and reproducer.\n\nSigned-off-by: Hangbin Liu \u003cliuhangbin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "eb3b18e87be7aab31bdfa51a882210b24596dc9d",
      "tree": "80d6ab4a3ab3046607f7822ee0e7a5e686e03e91",
      "parents": [
        "d9769b270608654aa7f07ce48a36f084843daf01"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Fri Jul 27 17:07:47 2018 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Tue Jul 31 12:15:46 2018 +0200"
      },
      "message": "utils: check to_stdout return correctly in bond2team\n\nto_stdout is a function, not a string, so fix the check on\nits return in bond2team.\n\nv1-\u003ev2:\n  improve the coding style as Flavio suggested.\n\nFixes: d5a1c8ee9e36 (\"utils: add bond2team conversion tool\")\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nAcked-by: Flavio Leitner \u003cfbl@sysclose.org\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "d9769b270608654aa7f07ce48a36f084843daf01",
      "tree": "8814ffffdfbb1a6b17c332ddbaa7ffc02b0f8eaf",
      "parents": [
        "a383b64082265dbe379a260292caa4b748366cdf"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Wed Jul 25 16:43:22 2018 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Tue Jul 31 12:15:41 2018 +0200"
      },
      "message": "binding/python: use SWIG_FromCharPtrAndSize for Python3 support\n\nPyString_FromStringAndSize is replaced with PyUnicode_FromStringAndSize\nin Python3, and SWIG_FromCharPtrAndSize will choose the right one with\nthe check \"#if PY_VERSION_HEX \u003e\u003d 0x0300000\".\n\nFixes: 4cb7829debd7 (\"add support for hw address manipulation\")\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "a383b64082265dbe379a260292caa4b748366cdf",
      "tree": "52b917604656e2419a0116ab22f27339a8081d92",
      "parents": [
        "05a7a9598fc9e616a1acf19096aeb93f7288bb35"
      ],
      "author": {
        "name": "Francesco Giudici",
        "email": "fgiudici@redhat.com",
        "time": "Fri Jun 15 15:57:25 2018 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Sun Jun 24 11:29:00 2018 +0200"
      },
      "message": "man: add \u0027random\u0027 to the list of available runners\n\nThe \u0027random\u0027 value is just missing from the documentation.\n\nSigned-off-by: Francesco Giudici \u003cfgiudici@redhat.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "05a7a9598fc9e616a1acf19096aeb93f7288bb35",
      "tree": "2539c119c701dd5376df5b9de8cf10ff36c682a0",
      "parents": [
        "87662455fc6eae38de70fd7b6f758c22ec7a443a"
      ],
      "author": {
        "name": "Antti Tiainen",
        "email": "atiainen@forcepoint.com",
        "time": "Thu May 03 20:13:35 2018 +0300"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu May 10 20:41:39 2018 +0200"
      },
      "message": "libteam: don\u0027t crash when trying to print unregistered device name\n\nteam_port_str() will crash when trying to print port name that was\njust unregistered, if dellink event is handled before port removal\nevent.\n\nThis is regression from Commit 046fb6ba0aec (\"libteam: resynchronize\nifinfo after lost RTNLGRP_LINK notifications\"), which made it free\nall removed interfaces after ifinfo handlers are called.\n\nPut the ifinfo_destroy_removed() back to dellink/newlink handlers as\nit was before that commit. Clean up the ifinfo list after change handlers\nonly if it refreshed the entire ifinfo list after lost events.\n\nThere\u0027s still a rare possibility that dellink event is missed due to\nfull socket receive buffer, which would cause ifinfo refresh and clearing\nremoved interfaces. For this, add NULL check to team_port_str() so it\ndoesn\u0027t try to print port device name in this situation.\n\nSigned-off-by: Antti Tiainen \u003catiainen@forcepoint.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "87662455fc6eae38de70fd7b6f758c22ec7a443a",
      "tree": "0f12b86500a775df54e57a0a507a0525f68332a6",
      "parents": [
        "789591c7318a0423984037b6a8ba3f3925f4eaa7"
      ],
      "author": {
        "name": "Timothy Redaelli",
        "email": "tredaelli@redhat.com",
        "time": "Tue Apr 10 15:54:02 2018 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu Apr 19 16:33:43 2018 +0200"
      },
      "message": "configure.ac: Empty LDFLAGS before checking for libnl3\n\nCurrently since CFLAGS are dropped if you have LDFLAGS\u003d-pie (default on RHEL)\nthe rtnl_link_get_phys_port_id, rtnl_link_set_carrier and rtnl_link_get_carrier\ntests always fails:\n\n/usr/bin/ld: /tmp/ccv5GdFD.o: relocation R_X86_64_PC32 against undefined symbol\n`rtnl_link_get_carrier@@libnl_3\u0027 can not be used when making a shared object;\nrecompile with -fPIC\n\nThis commits empty LDFLAGS before launching the 3 tests and restores it\nafter the tests.\n\nSigned-off-by: Timothy Redaelli \u003ctredaelli@redhat.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "789591c7318a0423984037b6a8ba3f3925f4eaa7",
      "tree": "dd23d0195a29e5a0b38a5745237b4ab8becf3bde",
      "parents": [
        "3ede1b278000dd04125f6cdaa833c6524e07d2fb"
      ],
      "author": {
        "name": "Francesco Giudici",
        "email": "fgiudici@redhat.com",
        "time": "Thu Jan 18 18:21:52 2018 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri Feb 02 11:30:38 2018 +0100"
      },
      "message": "man: fix runner.sys_prio default\n\nrunner.sys_prio default is 65535, not 255.\n255 is actually the default value of ports.PORTIFNAME.lacp_prio.\n\nSigned-off-by: Francesco Giudici \u003cfgiudici@redhat.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "3ede1b278000dd04125f6cdaa833c6524e07d2fb",
      "tree": "1ad055a2dc042abcdcd0645066c40c21ed907c17",
      "parents": [
        "c42cc9955a93bc4bed65adf9a506f92b8df290d7"
      ],
      "author": {
        "name": "Marcelo Leitner",
        "email": "mleitner@redhat.com",
        "time": "Mon Dec 18 10:43:44 2017 -0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon Dec 18 16:27:56 2017 +0100"
      },
      "message": "examples: fix duplex comparison against best port\n\nSigned-off-by: Marcelo Ricardo Leitner \u003cmleitner@redhat.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "c42cc9955a93bc4bed65adf9a506f92b8df290d7",
      "tree": "b944822bab80365230fb995eaa4699fe9df38a33",
      "parents": [
        "0164b6a460728b3a1fd3feee9e2901f1b810cf24"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Tue Nov 07 12:33:36 2017 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Tue Nov 07 07:28:43 2017 +0100"
      },
      "message": "teamd: add port_hwaddr_changed for lacp runner\n\nTo fix the same issue fixed in commit efaa6ae709bb (\"teamd: add\nport_hwaddr_changed for ab runner\") for lacp runner, this patch\nis to add .port_hwaddr_changed for lacp runner as well.\n\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "0164b6a460728b3a1fd3feee9e2901f1b810cf24",
      "tree": "b214af79525d6677fa98106364988ddea37d7b01",
      "parents": [
        "efaa6ae709bb4b59efacb0bb7301be2242b058bc"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Tue Nov 07 12:33:11 2017 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Tue Nov 07 07:28:43 2017 +0100"
      },
      "message": "teamd: add port_hwaddr_changed for lb runner\n\nTo fix the same issue fixed in commit efaa6ae709bb (\"teamd: add\nport_hwaddr_changed for ab runner\") for lb runner, this patch is\nto add .port_hwaddr_changed for lb runner as well.\n\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "efaa6ae709bb4b59efacb0bb7301be2242b058bc",
      "tree": "4b8a3b5651679bca82575872f4540185fab1c57f",
      "parents": [
        "45912ded9cb5166d8286a6a4fb53bfe9fffcd8a9"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Fri Oct 20 12:35:07 2017 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Tue Oct 31 11:08:53 2017 +0100"
      },
      "message": "teamd: add port_hwaddr_changed for ab runner\n\nThis patch to fix an events processing race issue when adding two ports\ninto one team dev with ab mode with same_all hwaddr policy:\n\nteam0 original hwaddr: 00:00:00:00:00:0a\nport1 original hwaddr: 00:00:00:00:00:01\nport2 original hwaddr: 00:00:00:00:00:02\n\nThere are two sockets in teamd: nl_cli.sock_event for ifinfo updates\nand nl_sock_event for ports/options changes. During adding two ports,\nthe events on these two sockets could be:\n\nnl_sock_event:\n  [1] -- [2] --\n\n[1]: port1 added event (added by enslaving port1)\n[2]: port2 added event (added by enslaving port2)\n\nnl_cli.sock_event:\n  [a1] -- [b0] -- [c1] -- [d2] -- [e2] -- [f1] --\n\n[a1]: port1 ifinfo event (added by setting port1\u0027s master)\n[b0]: team0 ifinfo event (added by setting team0\u0027s hwaddr)\n[c1]: port1 ifinfo event (added by set port1\u0027s hwaddr)\n[d2]: port2 ifinfo event (added by set port2\u0027s master)\n[e2]: port2 ifinfo event (added by set port2\u0027s hwaddr)\n[f1]: port1 ifinfo event (added by set port1\u0027s hwaddr)\n\nteamd can make sure the order for their processing is as above on the\nsame socket, but not between two sockets. So if these events processing\norder is (monitoring team/ports\u0027 ifinfo, hwaddr, master):\n\n[ 1]: team0-\u003eifinfo \u003d 00:00:00:00:00:0a\n      team0-\u003ehwaddr \u003d 00:00:00:00:00:01\n      port1-\u003ehwaddr \u003d 00:00:00:00:00:0a\n[a1]: port1-\u003eifinfo \u003d 00:00:00:00:00:01\n      port1-\u003emaster \u003d team0\n[ 2]: port2-\u003eifinfo \u003d 00:00:00:00:00:02\n      port2-\u003ehwaddr \u003d 00:00:00:00:00:0a\n     (team0-\u003eifinfo is not updated, it\u0027s still 00:00:00:00:00:0a)\n[b0]: team0-\u003eifinfo \u003d 00:00:00:00:00:01\n      port1-\u003ehwaddr \u003d 00:00:00:00:00:01\n     (port2-\u003emaster is not yet set, port2-\u003ehwaddr couldn\u0027t be updated)\n[c1]: no changes\n[d2]: port2-\u003eifinfo \u003d 00:00:00:00:00:0a\n      port2-\u003emaster \u003d team0\n     (too late !!!)\n[e2]: no changes\n[f1]: no changes\n\nThen:\nteam0 final hwaddr: 00:00:00:00:00:01\nport1 final hwaddr: 00:00:00:00:00:01\nport2 final hwaddr: 00:00:00:00:00:0a \u003c----- issue\n\nThis patch is to add port_hwaddr_changed for ab runner, in [e2] where\nwe set it\u0027s hwaddr with team0 (port2-\u003ehwaddr \u003d 00:00:00:00:00:01) IF\nport2-\u003ehwaddr !\u003d team0-\u003eifinfo.\n\nI think the same issue also exists in lacp and lb mode for which I will\nfix them in another patches.\n\nv1 -\u003e v2:\n  fix some typos in changelog and couple of style problems in codes\n\nReported-by: Jon Nikolakakis \u003cjnikolak@redhat.com\u003e\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "45912ded9cb5166d8286a6a4fb53bfe9fffcd8a9",
      "tree": "2234752ecce998f459ba914abb4616fcabf670f7",
      "parents": [
        "91a928a56a501daac5ce8b3c16bd9943661f1d16"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Wed Oct 11 14:17:38 2017 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu Oct 19 17:18:26 2017 +0200"
      },
      "message": "teamd: do not process lacpdu before the port ifinfo is set\n\nNow the port ifinfo will be set in obj_input_newlink when a RTM_NEWLINK\nevent is received.\n\nBut when a port is being added, if a lacpdu gets received on this port\nbefore the RTM_NEWLINK event, lacpdu_recv will process the packet with\nincorrect port ifinfo.\n\nIn Patrick\u0027s case, as ifinfo-\u003emaster_ifindex was 0, it would skip this\nport in teamd_for_each_tdport, which caused lacp_port-\u003eagg_lead not to\nbe updated in lacp_switch_agg_lead. Later the lacp_port actor would go\nto a unexpected state.\n\nThis patch is to avoid it by checking teamd_port_present in lacpdu_recv\nso that it would not process lacpdu before the port ifinfo is set.\n\nReported-by: Patrick Talbert \u003cptalbert@redhat.com\u003e\nTested-by: Patrick Talbert \u003cptalbert@redhat.com\u003e\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nReviewed-by: Marcelo Ricardo Leitner \u003cmarcelo.leitner@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "91a928a56a501daac5ce8b3c16bd9943661f1d16",
      "tree": "5f0d31a85a5ff44117ec1e39ea3147d369f60a29",
      "parents": [
        "49c1de9b67a5a26f120294743d206f3a9286a314"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon Jun 05 11:34:25 2017 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon Jun 05 11:34:25 2017 +0200"
      },
      "message": "1.27 release\n\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "49c1de9b67a5a26f120294743d206f3a9286a314",
      "tree": "f699a7affb09decab6206b13c150759c9a0e61e4",
      "parents": [
        "9a9fbff3e75f78cbff76e9dbd1cfa0a05fd1f120"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Mon May 08 15:04:05 2017 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon May 08 09:55:37 2017 +0200"
      },
      "message": "teamd: check target host with nap.nah.nd_na_target\n\nNow in lw_nsnap_receive, it compares ip6h.ip6_src with nsnap_ppriv-\u003edst\nto check target host.\n\nBut when target_host is set with a global addr, the na packet from some\nswitch may use it\u0027s link/local addr as the ip6_src addr, instead of the\nglobal addr. It will cause to fail to validate the ipv6 na packet, and\nnsna_ping couldn\u0027t work.\n\nSince nap.nah.nd_na_target is always set with target_host, this patch is\nto fix it by using nap.nah.nd_na_target to compare with nsnap_ppriv-\u003edst\nto check target host instead.\n\nReported-by: Amit Supugade \u003casupugad@redhat.com\u003e\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "9a9fbff3e75f78cbff76e9dbd1cfa0a05fd1f120",
      "tree": "e16089cb49b5d30deed0f86834f5d0869ac244c4",
      "parents": [
        "3d1e9efa37976fce3546e343a948a582da1dd203"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Mon May 08 15:04:04 2017 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon May 08 09:55:37 2017 +0200"
      },
      "message": "teamd: check ipv6 packet only with the 4 bits version\n\nNow in lw_nsnap_receive, it checks if the packet is ipv6 or not by\nip6h.ip6_vfc !\u003d 0x60. But ip6_vfc in ipv6 header is 4 bits version\nand top 4 bits tclass.\n\nThe na packet from some switch may set this top 4 bits tclass. It\nwill cause to fail to validate the ipv6 na packet, and nsna_ping\ncouldn\u0027t work.\n\nThis patch is to fix it by only using the 4 bits version to check\nipv6 packet.\n\nReported-by: Amit Supugade \u003casupugad@redhat.com\u003e\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "3d1e9efa37976fce3546e343a948a582da1dd203",
      "tree": "bf5d6c4938b49e97e10cf873e358c478b91e60b1",
      "parents": [
        "ee01c00ecaac7e41a9b06dc917f2c1aac9b853e4"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Thu Apr 27 01:44:41 2017 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon May 08 09:55:37 2017 +0200"
      },
      "message": "teamd: set correct bits for standby ports\n\nPatrick reported an issue that Collecting \u0026 Distributing \u0026 Synchronization\nbits shouldn\u0027t be set in LACPDUs for the ports associated with standby agg.\nIt would also cause team to work differently from bonding.\n\nJamie and Patrick concluded from section 5.6.1 of IEEE 802.1AX-2008:\n  - Standby ports MAY set Collecting and Distributing bits\n  - Standby ports MUST NOT set Synchronization bit\n\nThis patch is to fix it by setting these three sits only when the selected\nports associated with a selected agg.\n\nReported-by: Patrick Talbert \u003cptalbert@redhat.com\u003e\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "ee01c00ecaac7e41a9b06dc917f2c1aac9b853e4",
      "tree": "12186104f9dc3350793d41fbfb51c72c5a7e5b18",
      "parents": [
        "e91c31e4aa379cc269dc654c3193e78ee9ac10db"
      ],
      "author": {
        "name": "Shuotian Cheng",
        "email": "stcheng_89@hotmail.com",
        "time": "Mon Apr 10 22:54:35 2017 +0000"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Tue Apr 11 08:40:23 2017 +0200"
      },
      "message": "libteam: Add team_get_port_enabled function\n\nThis function corresponds to team_set_port_enabled.\nWith this function, it is able to get the enabled state for port\nidentified by port_ifindex.\n\nSigned-off-by: Shuotian Cheng \u003cstcheng_89@hotmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "e91c31e4aa379cc269dc654c3193e78ee9ac10db",
      "tree": "050f6496d222e523d60211de840a476f94f3ab5c",
      "parents": [
        "046fb6ba0aec8246075b18d787daec43201566fa"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Sun Feb 26 23:17:12 2017 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri Mar 17 19:04:54 2017 +0100"
      },
      "message": "teamd: check port link_up when a port is added with loadbalance runner\n\nIn loadbalance runner, when a port with no carrier is added, the port\u0027s\n\u0027enabled\u0027 option should have been set false, so that it can change to\nother ports to send the packet.\n\nThis patch is to fix it by checking it in lb\u0027s watch_ops .port_added().\n\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "046fb6ba0aec8246075b18d787daec43201566fa",
      "tree": "5f160a477b41f58ec3c08c5ae63bfafc339142ec",
      "parents": [
        "b3f99674cb60236b8b5afc4c3c644139c827f68e"
      ],
      "author": {
        "name": "Antti Tiainen",
        "email": "atiainen@forcepoint.com",
        "time": "Mon Feb 06 15:41:05 2017 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon Feb 06 14:47:40 2017 +0100"
      },
      "message": "libteam: resynchronize ifinfo after lost RTNLGRP_LINK notifications\n\nWhen there\u0027s a large number of interfaces (e.g. vlans), teamd loses\nlink notifications as it cannot read them as fast as kernel is\nbroadcasting them. This often prevents teamd starting properly if\nstarted concurrently when other links are being set up. It can also\nfail when it\u0027s up and running, especially in the cases where the team\ndevice itself has a lot of vlans under it.\n\nThis can easily be reproduces by simple example (in SMP system) by\nmanually adding team device with a bunch of vlans, putting it up,\nand starting teamd with --take-over option:\n\n  root@debian:~# ip link add name team0 type team\n  root@debian:~# for i in `seq 100 150` ; do\n  \u003e ip link add link team0 name team0.$i type vlan id $i ; done\n  root@debian:~# ip link set team0 up\n  root@debian:~# cat teamd.conf\n  {\n    \"device\": \"team0\",\n    \"runner\": {\n      \"name\": \"activebackup\"\n     },\n    \"ports\": {\n      \"eth1\": {},\n      \"eth2\": {}\n    }\n  }\n  root@debian:~# teamd -o -N -f teamd.conf\n\nAt this point, teamd will not give any error messages or other\nindication that something is wrong. But state will not look healthy:\n\n  root@debian:~# teamdctl team0 state\n  setup:\n    runner: activebackup\n  ports:\n    eth1\n      link watches:\n        link summary: up\n        instance[link_watch_0]:\n          name: ethtool\n          link: up\n          down count: 0\n  Failed to parse JSON port dump.\n  command call failed (Invalid argument)\n\nIf checking state dump, it will show that port eth2 is missing info.\nRunning strace to teamd will reveal that there\u0027s one recvmsgs() that\nreturned -1 with errno ENOBUFS. What happened in this example was\nthat when teamd started, all vlans got carrier up, and kernel flooded\nnotifications faster than teamd could read them. It then lost events\nrelated to port eth2 getting enslaved and up.\n\nThe socket that joins RTNLGRP_LINK notifications uses default libnl\n32k buffer size. Netlink messages are large (over 1k), and this buffer\ngets easily full. Kernel neither knows nor cares were notification\nbroadcasts delivered. This cannot be fixed by simply increasing the\nbuffer size, as there\u0027s no size that is guaranteed to work in every\nuse case, and this can require several megabytes of buffer (a way over\nnormal rmem_max limit) if there are hunderds of vlans.\n\nOnly way to recover from this is to refresh all ifinfo list, as it\u0027s\ninvalidated at this point. It cannot easily work around of this by\njust refreshing team device and its ports, because library side might\nnot have ports linked due to events missed, and it doesn\u0027t know about\nteamd configuration.\n\nChecks now return value of nl_recvmsgs_default() for event socket. In\ncase of ENOBUFS (which libnl nicely changes to ENOMEM), refreshes\nall ifinfo list. get_ifinfo_list() also checks now for removed interfaces\nin case of missed dellink event. Currently all TEAM_IFINFO_CHANGE\nhandlers processed events one by one, so it had to be changed to support\nmultiple ifinfo changes. For this, ifinfo changed flags are cleared\nand removed entries destroyed only after all handlers have been called.\n\nAlso, increased nl_cli.sock_event receive buffers to 96k like all other\nsockets. Added possibility to change this via environment variable.\n\nSigned-off-by: Antti Tiainen \u003catiainen@forcepoint.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "b3f99674cb60236b8b5afc4c3c644139c827f68e",
      "tree": "797163123e9d31334865cb80b675c4d92f835e5e",
      "parents": [
        "40177cf3f20fa120e3349d6325f68a6a93313523"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu Feb 02 17:51:57 2017 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu Feb 02 17:51:57 2017 +0100"
      },
      "message": "SubmittingPatches: add checkpatch note\n\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "40177cf3f20fa120e3349d6325f68a6a93313523",
      "tree": "cc6a6817c23b371babe81330e1af5e623627e549",
      "parents": [
        "b30381795c691be9256c49616105d022a2884d1c"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Sun Jan 22 12:12:23 2017 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Sun Jan 22 12:12:23 2017 +0100"
      },
      "message": "README: add note regarding pull requests\n\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "b30381795c691be9256c49616105d022a2884d1c",
      "tree": "b1c6724d85aa215e45ca3af521ed877384aff732",
      "parents": [
        "8c1cea00a21950089058e4e33ea1f7bf4deaddeb"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Wed Dec 21 12:16:54 2016 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon Dec 26 13:37:41 2016 +0100"
      },
      "message": "teamd: escape some sensitive characters in ifname with double quotation marks\n\nNow teamd uses dot symbol to split path string into different nodes\nin __teamd_json_path_lite_va() when dumping teamd state. But team\nport ifname is a part of path string, if ifname has dot character\ninside, it would be parsed as two nodes incorrectly.\n\nLike, if users uses eth1.1 as a port ifname\nteamdctl team0 state dump would be:\n    \"ports\": {\n        \"eth1\": {\n            \"1\": {\n                \"ifinfo\": {\n                ...\n\nand teamdctl team0 state view even crashs as:\n    ...\n    ports:\n    Failed to parse JSON port dump.\n    command call failed (Invalid argument)\n\nActually it\u0027s common for users to use dot in ifname, especially for\nvlan device.\n\nThis patch is to escape dot inside ifname by quoting ifname with double\nquotation marks, which can also escape any other characters, like \u0027[\u0027\nand \u0027\\\"\u0027 in ifname.\n\nNote that this patch can also fix the issue that users set/get state\nlike team0 has two ports eth1.1 and eth2\\\" :\n  teamdctl team0 state item get \u0027ports.\"eth1.1\".link_watches.up\u0027\n  teamdctl team0 state item get \u0027ports.\"eth2\"\".link_watches.up\u0027\n\nNo matter what character is inside ifname, users just need to quoting\nit with double quotation marks if necessary.\n\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "8c1cea00a21950089058e4e33ea1f7bf4deaddeb",
      "tree": "4272e744e8e657be09613a14d1a6795e9a1b1cc2",
      "parents": [
        "334a963eec664105d83751ce0e624e14731fe52e"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri Aug 26 10:30:25 2016 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri Aug 26 10:30:25 2016 +0200"
      },
      "message": "1.26 release\n\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "334a963eec664105d83751ce0e624e14731fe52e",
      "tree": "b1b56b433b376cd6611f68864ab6a582fa86257d",
      "parents": [
        "95f375ed303fa288640883ee95249448c628d916"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu Aug 25 18:26:04 2016 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri Aug 26 10:24:24 2016 +0200"
      },
      "message": "teamd: lacp: Do not unselect port if it changes state to \"expired\"\n\nThis fixes a long standing issue in select/unselect logic. We need to\nleave port selected in case it changes state to \"expired\".\n\nReported-by: Ido Schimmel \u003cidosch@mellanox.com\u003e\nFixes: 68861ff780df (\"teamd: lacp: rewrite lacp port selecting/unselecting logic\")\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "95f375ed303fa288640883ee95249448c628d916",
      "tree": "b9bb3868c5ca98ccff85b8e4ec2141459a2119b0",
      "parents": [
        "4a9e1fac5d69e6abae0451c579b02f16d960e694"
      ],
      "author": {
        "name": "Mariusz Mazur",
        "email": "mmazur@axeos.com",
        "time": "Mon Aug 22 14:18:47 2016 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu Aug 25 17:50:31 2016 +0200"
      },
      "message": "man: in lacp it\u0027s \u0027port_config\u0027, not \u0027port_options\u0027\n\nMake man page for teamd.conf reflect the actual agg_select_policy config\noptions.\n\nSigned-off-by: Mariusz Mazur \u003cmmazur@axeos.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "4a9e1fac5d69e6abae0451c579b02f16d960e694",
      "tree": "0bd3a55f22889e998f9865439bbdb0451dbb2f62",
      "parents": [
        "0641375d10d692e3dacaeec95e36f2525b95881d"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Thu Aug 11 15:11:38 2016 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Sun Aug 14 10:16:22 2016 +0200"
      },
      "message": "teamd: fix the issue that network blocks when systemctl stop teamd\n\nCommit 0641375d10d6 (\"teamd: change to Before\u003dnetwork-pre.target in\nsystemd service file\") tried to make teamd be stopped after network\nservice is stopped when systemd shutdown.\n\nBut network service also kills teamd service with \"systemctl stop\" in\nifdown-Team. It means network service try to kill one service that is\ndependent on network itself, which leads to a block.\n\nThis patch is to use \"systemctl stop --ignore-dependencies\" to avoid\nthis block without any side effects. Already verified it on the env\nwhere we can reproduce this issue.\n\nFixes: 0641375d10d6 (\"teamd: change to Before\u003dnetwork-pre.target in systemd service file\")\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "0641375d10d692e3dacaeec95e36f2525b95881d",
      "tree": "d0a794fda29bb464f1a586968b218f3924c37bc8",
      "parents": [
        "c637c59244624757dee08c0469ef7d762c06a260"
      ],
      "author": {
        "name": "Xin Long",
        "email": "lucien.xin@gmail.com",
        "time": "Sat Jul 16 18:02:39 2016 +0800"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu Jul 21 17:47:16 2016 +0200"
      },
      "message": "teamd: change to Before\u003dnetwork-pre.target in systemd service file\n\nCommit 2d240e58e073 (\"teamd: add Before\u003dnetwork.target to systemd\nservice file\") wants teamd to be stopped after network service is\nstopped when system shutdown.\n\nBut \u0027Before\u003dnetwork-pre.target\u0027 doesn\u0027t actually work on that case.\n\u0027network-pre.target\u0027 is introduced in systemd to make it possible\nto explicitly order things before networking is started (or stop\nafter networking has been stopped).\n\nSo this patch changes it to Before\u003dnetwork-pre.target.\n\nFixes: 2d240e58e073 (\"teamd: add Before\u003dnetwork.target to systemd service file\")\nSigned-off-by: Xin Long \u003clucien.xin@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "c637c59244624757dee08c0469ef7d762c06a260",
      "tree": "7f2b8b642730efef1c6ab7b792ae59e462b48326",
      "parents": [
        "003266c7c3063cff52f94a0c82d8bfb8891e9385"
      ],
      "author": {
        "name": "Lubomir Rintel",
        "email": "lkundrak@v3.sk",
        "time": "Fri Jul 08 20:38:17 2016 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Sat Jul 09 09:23:08 2016 +0200"
      },
      "message": "man teamd.conf: fix indentation\n\nSigned-off-by: Lubomir Rintel \u003clkundrak@v3.sk\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "003266c7c3063cff52f94a0c82d8bfb8891e9385",
      "tree": "6a9b097f2b191c6129aec6c8e447d62721364352",
      "parents": [
        "14684953b1e50a9359d2cc38c5e35d5c36796ac8"
      ],
      "author": {
        "name": "Lubomir Rintel",
        "email": "lkundrak@v3.sk",
        "time": "Thu Jul 07 17:09:01 2016 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Thu Jul 07 17:18:07 2016 +0200"
      },
      "message": "misc: fix an out-of-bound write with zero-length hardware address\n\nIn case a device without a MAC address (such as tun) is enslaved, the team\nmaster looses its MAC address too. Don\u0027t let that confuse teamd state\ndump.\n\n  \u003d\u003d32459\u003d\u003d Invalid write of size 1\n  \u003d\u003d32459\u003d\u003d    at 0x409C32: hwaddr_str (misc.h:62)\n  \u003d\u003d32459\u003d\u003d    by 0x409C32: a_hwaddr_str (misc.h:77)\n  \u003d\u003d32459\u003d\u003d    by 0x409C32: ifinfo_state_dev_addr_get (teamd_state.c:518)\n  \u003d\u003d32459\u003d\u003d    by 0x409A16: teamd_state_val_dump (teamd_state.c:237)\n  \u003d\u003d32459\u003d\u003d    by 0x40A53A: teamd_state_vals_dump (teamd_state.c:280)\n  \u003d\u003d32459\u003d\u003d    by 0x40A53A: teamd_state_dump (teamd_state.c:459)\n  \u003d\u003d32459\u003d\u003d    by 0x40E1D5: teamd_ctl_method_state_dump (teamd_ctl.c:186)\n  \u003d\u003d32459\u003d\u003d    by 0x40F35F: process_rcv_msg (teamd_usock.c:197)\n  \u003d\u003d32459\u003d\u003d    by 0x40F35F: callback_usock_acc_conn (teamd_usock.c:219)\n  \u003d\u003d32459\u003d\u003d    by 0x40550F: teamd_run_loop_do_callbacks (teamd.c:325)\n  \u003d\u003d32459\u003d\u003d    by 0x40550F: teamd_run_loop_run (teamd.c:405)\n  \u003d\u003d32459\u003d\u003d    by 0x4070A9: teamd_start (teamd.c:1528)\n  \u003d\u003d32459\u003d\u003d    by 0x4070A9: main (teamd.c:1847)\n  \u003d\u003d32459\u003d\u003d  Address 0x851a2bf is 1 bytes before a block of size 1 alloc\u0027d\n  \u003d\u003d32459\u003d\u003d    at 0x4C2BBAD: malloc (vg_replace_malloc.c:299)\n  \u003d\u003d32459\u003d\u003d    by 0x409BF4: a_hwaddr_str (misc.h:74)\n  \u003d\u003d32459\u003d\u003d    by 0x409BF4: ifinfo_state_dev_addr_get (teamd_state.c:518)\n  \u003d\u003d32459\u003d\u003d    by 0x409A16: teamd_state_val_dump (teamd_state.c:237)\n  \u003d\u003d32459\u003d\u003d    by 0x40A53A: teamd_state_vals_dump (teamd_state.c:280)\n  \u003d\u003d32459\u003d\u003d    by 0x40A53A: teamd_state_dump (teamd_state.c:459)\n  \u003d\u003d32459\u003d\u003d    by 0x40E1D5: teamd_ctl_method_state_dump (teamd_ctl.c:186)\n  \u003d\u003d32459\u003d\u003d    by 0x40F35F: process_rcv_msg (teamd_usock.c:197)\n  \u003d\u003d32459\u003d\u003d    by 0x40F35F: callback_usock_acc_conn (teamd_usock.c:219)\n  \u003d\u003d32459\u003d\u003d    by 0x40550F: teamd_run_loop_do_callbacks (teamd.c:325)\n  \u003d\u003d32459\u003d\u003d    by 0x40550F: teamd_run_loop_run (teamd.c:405)\n  \u003d\u003d32459\u003d\u003d    by 0x4070A9: teamd_start (teamd.c:1528)\n  \u003d\u003d32459\u003d\u003d    by 0x4070A9: main (teamd.c:1847)\n\nSigned-off-by: Lubomir Rintel \u003clkundrak@v3.sk\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "14684953b1e50a9359d2cc38c5e35d5c36796ac8",
      "tree": "2a758d97592eebd1b898fb95f33dc4d8a5546684",
      "parents": [
        "291d581ab503c673a37041645a0d8ba1a4f72ac4"
      ],
      "author": {
        "name": "Jamie Bainbridge",
        "email": "jamie.bainbridge@gmail.com",
        "time": "Sat Jun 18 08:59:59 2016 +1000"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Sun Jun 19 12:59:38 2016 +0200"
      },
      "message": "teamd: LACP runner does not set Agg bit on first slave\n\nteamd\u0027s LACP runner does not set the INFO_STATE_AGGREGATION bit when\nthere is only one slave in a team. This results in LACPDUs not being\nsent with this flag set, and the team never negotiates. A Cisco Nexus\n5500 switch will report the switchport in \"(s)uspended\" state.\n\nThis can be reproduced on some systems by booting with a LACP team with\nmore than one port, or by slowly adding ports to a new team on the\ncommandline.\n\nChange the check from \"more than 1 port\" to \"more than zero ports\" so\nthat all LACP runner slaves have this bit set.\n\nResolves https://github.com/jpirko/libteam/issues/15\n\nTested-by: Customer\nSigned-off-by: Jamie Bainbridge \u003cjamie.bainbridge@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "291d581ab503c673a37041645a0d8ba1a4f72ac4",
      "tree": "7b44946944663cab0276688eb7662f3c96ee9a3c",
      "parents": [
        "08f37b238cb0b796986c253e563b6b2c12836176"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri May 20 10:57:59 2016 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri May 20 10:57:59 2016 +0200"
      },
      "message": "1.25 release\n\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "08f37b238cb0b796986c253e563b6b2c12836176",
      "tree": "054b8a960312491e235c814f2c88151ed18c3732",
      "parents": [
        "2df53681c954b555cb33a2cb9aacb90afb1e272e"
      ],
      "author": {
        "name": "Govindarajulu Varadarajan",
        "email": "_govind@gmx.com",
        "time": "Mon May 09 10:06:29 2016 +0530"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri May 20 10:53:08 2016 +0200"
      },
      "message": "teamd: handle vlan 0 packets\n\narp_novlan_rpl_flt[] checks if skb-\u003evlan_tci is present and returns 0 if it is\npresent. This breaks with some of the hardwares/switches which strips of vlan\ntag but retains 802.1p priority bits (vlan_id in header will be 0).\n\nPackets with vlan_id 0 should be treated as non-vlan tagged packet.\n\nteamd should process arp reply of non-vlan packets and packets with vlan_id 0.\n\nThis patch programs filter such that it checks if vlan_id is 0 if vlan tag is\npresent.\n\nSigned-off-by: Govindarajulu Varadarajan \u003c_govind@gmx.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "2df53681c954b555cb33a2cb9aacb90afb1e272e",
      "tree": "2cecbb0b4bc4d601e7f54dd27262127ebad404bb",
      "parents": [
        "3fcdb6ba736fe2f9ea44895135808074e93472ce"
      ],
      "author": {
        "name": "Greger Wrang",
        "email": "gregermw@gmail.com",
        "time": "Fri May 06 10:23:49 2016 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri May 06 10:30:05 2016 +0200"
      },
      "message": "libteam: fix TEAM_OPTION_TYPE_BOOL type for big endian architectures\n\nThe TEAM_OPTION_TYPE_BOOL is handled as a bool in the kernel and as a long in\nuserspace. On a little endian architecture this is not a problem, but on a big\nendian architecture the result will not be correct.\n\nSigned-off-by: Greger Wrang \u003cgregermw@gmail.com\u003e\nSigned-off-by: Jonas Johansson \u003cjonasj76@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "3fcdb6ba736fe2f9ea44895135808074e93472ce",
      "tree": "968e70b7c49ebd03c79e351dd8aff64a3a0fe350",
      "parents": [
        "c18a6349a7bd0a2d41d0193128b95a520479591f"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri Apr 15 16:41:54 2016 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri Apr 15 16:41:54 2016 +0200"
      },
      "message": "1.24 release\n\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "c18a6349a7bd0a2d41d0193128b95a520479591f",
      "tree": "48ea4e2652245697daf96ac419315adcde354457",
      "parents": [
        "6d54ab1b218a1253a3fb760766d43fc20ae35cbe"
      ],
      "author": {
        "name": "Eric Kinzie",
        "email": "ehkinzie@gmail.com",
        "time": "Thu Apr 14 16:14:04 2016 -0700"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Fri Apr 15 16:39:44 2016 +0200"
      },
      "message": "teamd: lacp: use original hwaddr as source address in lacpdus\n\nThe team lacp runner sets the mac addresses of all member interfaces\nto be the same value.  However, LACPDUs should carry an interface\u0027s\noriginal (individual) MAC address.\n\nThe Addressing section (5.2.10 in 802.1ax) explains this:\n        Protocol entities sourcing frames from within the Link Aggregation\n        sublayer (e.g., LACP and the Marker protocol) use the MAC address\n        of the MAC within an underlying port as the source address in\n        frames transmitted through that port.  The MAC Client sees only\n        the Aggregator and not the underlying MACs, and therefore uses\n        the Aggregator\u0027s MAC address as the source address in transmitted\n        frames.\n\nSigned-off-by: Eric Kinzie \u003cehkinzie@gmail.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "6d54ab1b218a1253a3fb760766d43fc20ae35cbe",
      "tree": "e82b01d92e59a7f606c738459d2ab8124ebcf69b",
      "parents": [
        "e81fa0cae0bbcfa9bb06ba7e1dc2a814cdb10f5d"
      ],
      "author": {
        "name": "Antti Tiainen",
        "email": "atiainen@forcepoint.com",
        "time": "Fri Feb 26 14:52:38 2016 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Wed Mar 02 18:02:28 2016 +0100"
      },
      "message": "teamd: do correct l3/l4 tx hashing with vlans\n\nbpf_create_code() is not creating correct hashing code with vlan tagged\npackets. L3/l4 headers are not included to hash even when configured.\nThere were three problems:\n\n- VLAN_HEADER_SIZE is wrong. But this doesn\u0027t really matter because...\n- if vlan tagging is offloaded, generated code will find skb-\u003evlan_tci\nand incorrectly skip non-existent vlan header, failing to find l3 protocol\n- if vlan tagging is not offloaded, skb-\u003evlan_tci is zeroed in kernel\nafter call to __vlan_put_tag(). Hashing code will not skip VLAN header,\nfailing again to find l3 protocol\n\nbpf code must look first for VLAN proto (0x8100) and read the vlan tag\nfrom header instead of skb-\u003evlan_tci, and in this case use the correct\noffset (4) for vlan shift. If VLAN header is not present in packet,\nskb-\u003evlan_tci must still be checked in case of offloaded vlan header.\n\nSigned-off-by: Antti Tiainen \u003catiainen@forcepoint.com\u003e\nAcked-by: Flavio Leitner \u003cfbl@sysclose.org\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "e81fa0cae0bbcfa9bb06ba7e1dc2a814cdb10f5d",
      "tree": "0e403ed80a22e4314decb86b70f7bdc9d83b1fd2",
      "parents": [
        "e844bdf7b8da3ffeda8d426150bf44372ab9a462"
      ],
      "author": {
        "name": "Ido Schimmel",
        "email": "idosch@mellanox.com",
        "time": "Mon Feb 22 17:37:13 2016 +0200"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@mellanox.com",
        "time": "Mon Feb 22 16:51:32 2016 +0100"
      },
      "message": "libteam: Fix broken links\n\nSigned-off-by: Ido Schimmel \u003cidosch@mellanox.com\u003e\nSigned-off-by: Jiri Pirko \u003cjiri@mellanox.com\u003e\n"
    },
    {
      "commit": "e844bdf7b8da3ffeda8d426150bf44372ab9a462",
      "tree": "417946cc90b0007dc7a46c0c0ddd8e67cd7540e6",
      "parents": [
        "ee66585d0aeb2b8aafca9ab0cf428a09201690ff"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jiri@resnulli.us",
        "time": "Thu Dec 17 17:41:35 2015 +0100"
      },
      "committer": {
        "name": "Jiri Pirko",
        "email": "jiri@resnulli.us",
        "time": "Thu Dec 17 17:41:35 2015 +0100"
      },
      "message": "1.23 release\n\nSigned-off-by: Jiri Pirko \u003cjiri@resnulli.us\u003e\n"
    }
  ],
  "next": "ee66585d0aeb2b8aafca9ab0cf428a09201690ff"
}
