{"action":"created","comment":{"url":"https://api.github.com/repos/SnabbCo/snabbswitch/pulls/comments/57872728","id":57872728,"diff_hunk":"@@ -0,0 +1,201 @@\n+-- Use of this source code is governed by the Apache 2.0 license; see COPYING.\n+\n+module(..., package.seeall)\n+\n+local engine    = require(\"core.app\")\n+local config    = require(\"core.config\")\n+local timer     = require(\"core.timer\")\n+local pci       = require(\"lib.hardware.pci\")\n+local intel10g  = require(\"apps.intel.intel10g\")\n+local intel_app = require(\"apps.intel.intel_app\")\n+local main      = require(\"core.main\")\n+local S         = require(\"syscall\")\n+local Lwaftrgen = require(\"apps.test.lwaftr\").Lwaftrgen\n+local Tap       = require(\"apps.tap.tap\").Tap\n+local lib       = require(\"core.lib\")\n+local ffi       = require(\"ffi\")\n+local C         = ffi.C\n+\n+local usage = require(\"program.packetblaster.lwaftr.README_inc\")\n+\n+local long_opts = {\n+   pci          = \"p\",    -- PCI/tap address\n+   duration     = \"D\",    -- terminate after n seconds\n+   verbose      = \"V\",    -- verbose, display stats\n+   help         = \"h\",    -- display help text\n+   size         = \"S\",    -- packet size list (defaults to IMIX)\n+   src_mac      = \"s\",    -- source ethernet address\n+   dst_mac      = \"d\",    -- destination ethernet address\n+   b4           = \"b\",    -- B4 start IPv6_address,IPv4_address,port\n+   aftr         = \"a\",    -- fix AFTR public IPv6_address\n+   ipv4         = \"I\",    -- fix public IPv4 address\n+   count        = \"c\",    -- how many b4 clients to simulate\n+   rate         = \"r\",    -- rate in MPPS (0 => listen only)\n+   v4only       = \"P\",    -- generate only public IPv4 traffic\n+   v6only       = \"E\"     -- generate only public IPv6 encapsulated traffic\n+}\n+\n+local function dir_exists(path)\n+  local stat = S.stat(path)\n+  return stat and stat.isdir\n+end\n+\n+function run (args)\n+   local opt = {}\n+   local duration\n+   local c = config.new()\n+\n+   function opt.D (arg)\n+      duration = assert(tonumber(arg), \"duration is not a number!\")\n+   end\n+\n+   local verbose\n+   function opt.V (arg)\n+      verbose = true\n+   end\n+\n+   function opt.h (arg)\n+      print(usage)\n+      main.exit(1)\n+   end\n+\n+   local sizes = { 64, 64, 64, 64, 64, 64, 64, 594, 594, 594, 1500 }\n+   local sizes_ipv6 = { 104, 104, 104, 104, 104, 104, 104, 634, 634, 634, 1540 }\n+   function opt.S (arg)\n+     sizes = {}\n+     sizes_ipv6 = {}\n+     for size in string.gmatch(arg, \"%d+\") do\n+       local s = tonumber(size)\n+       if s < 28 then\n+         s = 28\n+         print(\"Warning: Increasing IPv4 packet size to 28\")\n+       end\n+       sizes[#sizes+1] = s\n+       sizes_ipv6[#sizes_ipv6+1] = s + 40\n+     end\n+   end\n+\n+   local src_mac = \"00:00:00:00:00:00\"\n+   function opt.s (arg) src_mac = arg end\n+\n+   local dst_mac = \"00:00:00:00:00:00\"\n+   function opt.d (arg) dst_mac = arg end\n+\n+   local b4_ipv6, b4_ipv4, b4_port = \"2001:db8::\", \"10.0.0.0\", 1024\n+   function opt.b (arg) \n+     for s in string.gmatch(arg, \"[%w.:]+\") do\n+        if string.find(s, \":\") then\n+          b4_ipv6 = s\n+        elseif string.find(s, '.',1,true) then\n+          b4_ipv4 = s\n+        else\n+          b4_port = assert(tonumber(s), string.format(\"UDP port %s is not a number!\", s))\n+        end\n+     end\n+   end\n+\n+   local public_ipv4 = \"8.8.8.8\"\n+   function opt.I (arg) public_ipv4 = arg end\n+\n+   local aftr_ipv6 = \"2001:db8:ffff::100\"\n+   function opt.a (arg) aftr_ipv6 = arg end\n+\n+   local count = 1\n+   function opt.c (arg) \n+     count = assert(tonumber(arg), \"count is not a number!\")\n+   end\n+\n+   local rate = 1\n+   function opt.r (arg) \n+     rate = assert(tonumber(arg), \"rate is not a number!\")\n+   end\n+\n+   local pciaddr\n+   function opt.p (arg) \n+     pciaddr = arg\n+   end\n+\n+   local ipv4_only = false\n+   function opt.P () ipv4_only = true end\n+\n+   local ipv6_only = false\n+   function opt.E () ipv6_only = true end\n+\n+   -- TODO how can I use digit options like -4? function opt.4 isn't valid in lua\n+   args = lib.dogetopt(args, opt, \"VD:hS:s:a:d:b:iI:c:r:PEp:\", long_opts)\n+\n+   if not pciaddr then\n+      print(usage)\n+      main.exit(1)\n+   end\n+\n+   print(string.format(\"packetblaster lwaftr: Sending %d clients at %.3f MPPS to %s\", count, rate, pciaddr))\n+   print()\n+\n+   if not ipv4_only then\n+    print(string.format(\"IPv6: %s > %s: %s:%d > %s:12345\", b4_ipv6, aftr_ipv6, b4_ipv4, b4_port, public_ipv4))\n+    print(\"      source IPv6 and source IPv4/Port adjusted per client\")\n+    print(\"IPv6 packet sizes: \" .. table.concat(sizes_ipv6,\",\"))\n+   end\n+\n+   if not ipv6_only then\n+    print()\n+    print(string.format(\"IPv4: %s:12345 > %s:%d\", public_ipv4, b4_ipv4, b4_port))\n+    print(\"      destination IPv4 and Port adjusted per client\")\n+    print(\"IPv4 packet sizes: \" .. table.concat(sizes,\",\"))\n+   end\n+\n+    print()","path":"src/program/packetblaster/lwaftr/lwaftr.lua","position":148,"original_position":148,"commit_id":"df8c732af6fbe7b6ba59492a9d5074fc906f9d61","original_commit_id":"ab7194cc41309e8cf482bc9577b09c55d80d9568","user":{"login":"mwiget","id":3111088,"avatar_url":"https://avatars.githubusercontent.com/u/3111088?v=3","gravatar_id":"","url":"https://api.github.com/users/mwiget","html_url":"https://github.com/mwiget","followers_url":"https://api.github.com/users/mwiget/followers","following_url":"https://api.github.com/users/mwiget/following{/other_user}","gists_url":"https://api.github.com/users/mwiget/gists{/gist_id}","starred_url":"https://api.github.com/users/mwiget/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mwiget/subscriptions","organizations_url":"https://api.github.com/users/mwiget/orgs","repos_url":"https://api.github.com/users/mwiget/repos","events_url":"https://api.github.com/users/mwiget/events{/privacy}","received_events_url":"https://api.github.com/users/mwiget/received_events","type":"User","site_admin":false},"body":"yes indeed. Fixed.","created_at":"2016-03-30T11:24:35Z","updated_at":"2016-03-30T11:24:35Z","html_url":"https://github.com/SnabbCo/snabbswitch/pull/847#discussion_r57872728","pull_request_url":"https://api.github.com/repos/SnabbCo/snabbswitch/pulls/847","_links":{"self":{"href":"https://api.github.com/repos/SnabbCo/snabbswitch/pulls/comments/57872728"},"html":{"href":"https://github.com/SnabbCo/snabbswitch/pull/847#discussion_r57872728"},"pull_request":{"href":"https://api.github.com/repos/SnabbCo/snabbswitch/pulls/847"}}},"pull_request":{"url":"https://api.github.com/repos/SnabbCo/snabbswitch/pulls/847","id":64265326,"html_url":"https://github.com/SnabbCo/snabbswitch/pull/847","diff_url":"https://github.com/SnabbCo/snabbswitch/pull/847.diff","patch_url":"https://github.com/SnabbCo/snabbswitch/pull/847.patch","issue_url":"https://api.github.com/repos/SnabbCo/snabbswitch/issues/847","number":847,"state":"open","locked":false,"title":"[wip] initial import of packetblaster lwaftr","user":{"login":"mwiget","id":3111088,"avatar_url":"https://avatars.githubusercontent.com/u/3111088?v=3","gravatar_id":"","url":"https://api.github.com/users/mwiget","html_url":"https://github.com/mwiget","followers_url":"https://api.github.com/users/mwiget/followers","following_url":"https://api.github.com/users/mwiget/following{/other_user}","gists_url":"https://api.github.com/users/mwiget/gists{/gist_id}","starred_url":"https://api.github.com/users/mwiget/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mwiget/subscriptions","organizations_url":"https://api.github.com/users/mwiget/orgs","repos_url":"https://api.github.com/users/mwiget/repos","events_url":"https://api.github.com/users/mwiget/events{/privacy}","received_events_url":"https://api.github.com/users/mwiget/received_events","type":"User","site_admin":false},"body":"This is a first working prototype of a lwaftr specific IPv4 and IPv6 traffic generator with the following features, for which I'm seeking feedback from the community in general and @kbara, @dpino and @wingo in particular.\r\n\r\n- Refactored packetblaster synth and replay into their own directories. \r\nSend IPv4 and IPv6 traffic concurrently to fully test and report on a LWAFTR \"on a stick design\"\r\n- Traffic sent either on a PCI port or Linux tap interface\r\n- Simulates any number of B4 clients\r\n- Rate limit generated traffic in MPPS (fractions are fine)\r\n- Report separately and combined on incoming IPv4 and IPv6 traffic in MPPS, Gbps and packet loss\r\n- Report on incoming packet loss by calculating the delta of the embedded packet counter, separately for IPv4 and IPv6 (allowing for separate sender and receiver applications).\r\n\r\nSee [https://github.com/mwiget/snabbswitch/tree/packetblaster-lw4o6/src/program/packetblaster/lwaftr]() for a detailed description.\r\n\r\nSome topics I'm not sure about yet:\r\n\r\n- Would it make sense to integrate this tighter with lwaftr, e.g. by importing lwutil.lua or leverage the protocol libraries for udp and datagram?\r\n- Performance seems suboptimal. It max's out at roughly 5 MPPS on receiving. Maybe its just a matter of triggering jit.flush() or there are some low hanging fruits to optimise. \r\n","created_at":"2016-03-27T13:17:17Z","updated_at":"2016-03-30T11:24:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":"974365bcd6e9460a1df9f40d1f0240531519de82","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/SnabbCo/snabbswitch/pulls/847/commits","review_comments_url":"https://api.github.com/repos/SnabbCo/snabbswitch/pulls/847/comments","review_comment_url":"https://api.github.com/repos/SnabbCo/snabbswitch/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SnabbCo/snabbswitch/issues/847/comments","statuses_url":"https://api.github.com/repos/SnabbCo/snabbswitch/statuses/df8c732af6fbe7b6ba59492a9d5074fc906f9d61","head":{"label":"mwiget:packetblaster-lw4o6","ref":"packetblaster-lw4o6","sha":"df8c732af6fbe7b6ba59492a9d5074fc906f9d61","user":{"login":"mwiget","id":3111088,"avatar_url":"https://avatars.githubusercontent.com/u/3111088?v=3","gravatar_id":"","url":"https://api.github.com/users/mwiget","html_url":"https://github.com/mwiget","followers_url":"https://api.github.com/users/mwiget/followers","following_url":"https://api.github.com/users/mwiget/following{/other_user}","gists_url":"https://api.github.com/users/mwiget/gists{/gist_id}","starred_url":"https://api.github.com/users/mwiget/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mwiget/subscriptions","organizations_url":"https://api.github.com/users/mwiget/orgs","repos_url":"https://api.github.com/users/mwiget/repos","events_url":"https://api.github.com/users/mwiget/events{/privacy}","received_events_url":"https://api.github.com/users/mwiget/received_events","type":"User","site_admin":false},"repo":{"id":45513958,"name":"snabbswitch","full_name":"mwiget/snabbswitch","owner":{"login":"mwiget","id":3111088,"avatar_url":"https://avatars.githubusercontent.com/u/3111088?v=3","gravatar_id":"","url":"https://api.github.com/users/mwiget","html_url":"https://github.com/mwiget","followers_url":"https://api.github.com/users/mwiget/followers","following_url":"https://api.github.com/users/mwiget/following{/other_user}","gists_url":"https://api.github.com/users/mwiget/gists{/gist_id}","starred_url":"https://api.github.com/users/mwiget/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mwiget/subscriptions","organizations_url":"https://api.github.com/users/mwiget/orgs","repos_url":"https://api.github.com/users/mwiget/repos","events_url":"https://api.github.com/users/mwiget/events{/privacy}","received_events_url":"https://api.github.com/users/mwiget/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mwiget/snabbswitch","description":"Snabb Switch: Simple and fast packet networking","fork":true,"url":"https://api.github.com/repos/mwiget/snabbswitch","forks_url":"https://api.github.com/repos/mwiget/snabbswitch/forks","keys_url":"https://api.github.com/repos/mwiget/snabbswitch/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mwiget/snabbswitch/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mwiget/snabbswitch/teams","hooks_url":"https://api.github.com/repos/mwiget/snabbswitch/hooks","issue_events_url":"https://api.github.com/repos/mwiget/snabbswitch/issues/events{/number}","events_url":"https://api.github.com/repos/mwiget/snabbswitch/events","assignees_url":"https://api.github.com/repos/mwiget/snabbswitch/assignees{/user}","branches_url":"https://api.github.com/repos/mwiget/snabbswitch/branches{/branch}","tags_url":"https://api.github.com/repos/mwiget/snabbswitch/tags","blobs_url":"https://api.github.com/repos/mwiget/snabbswitch/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mwiget/snabbswitch/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mwiget/snabbswitch/git/refs{/sha}","trees_url":"https://api.github.com/repos/mwiget/snabbswitch/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mwiget/snabbswitch/statuses/{sha}","languages_url":"https://api.github.com/repos/mwiget/snabbswitch/languages","stargazers_url":"https://api.github.com/repos/mwiget/snabbswitch/stargazers","contributors_url":"https://api.github.com/repos/mwiget/snabbswitch/contributors","subscribers_url":"https://api.github.com/repos/mwiget/snabbswitch/subscribers","subscription_url":"https://api.github.com/repos/mwiget/snabbswitch/subscription","commits_url":"https://api.github.com/repos/mwiget/snabbswitch/commits{/sha}","git_commits_url":"https://api.github.com/repos/mwiget/snabbswitch/git/commits{/sha}","comments_url":"https://api.github.com/repos/mwiget/snabbswitch/comments{/number}","issue_comment_url":"https://api.github.com/repos/mwiget/snabbswitch/issues/comments{/number}","contents_url":"https://api.github.com/repos/mwiget/snabbswitch/contents/{+path}","compare_url":"https://api.github.com/repos/mwiget/snabbswitch/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mwiget/snabbswitch/merges","archive_url":"https://api.github.com/repos/mwiget/snabbswitch/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mwiget/snabbswitch/downloads","issues_url":"https://api.github.com/repos/mwiget/snabbswitch/issues{/number}","pulls_url":"https://api.github.com/repos/mwiget/snabbswitch/pulls{/number}","milestones_url":"https://api.github.com/repos/mwiget/snabbswitch/milestones{/number}","notifications_url":"https://api.github.com/repos/mwiget/snabbswitch/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mwiget/snabbswitch/labels{/name}","releases_url":"https://api.github.com/repos/mwiget/snabbswitch/releases{/id}","deployments_url":"https://api.github.com/repos/mwiget/snabbswitch/deployments","created_at":"2015-11-04T03:53:01Z","updated_at":"2016-01-23T04:59:11Z","pushed_at":"2016-03-30T07:38:09Z","git_url":"git://github.com/mwiget/snabbswitch.git","ssh_url":"git@github.com:mwiget/snabbswitch.git","clone_url":"https://github.com/mwiget/snabbswitch.git","svn_url":"https://github.com/mwiget/snabbswitch","homepage":"","size":9508,"stargazers_count":0,"watchers_count":0,"language":"Lua","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"SnabbCo:master","ref":"master","sha":"ed346d593a991fb14e8284797cfc6d8b16f2c7ac","user":{"login":"SnabbCo","id":1913310,"avatar_url":"https://avatars.githubusercontent.com/u/1913310?v=3","gravatar_id":"","url":"https://api.github.com/users/SnabbCo","html_url":"https://github.com/SnabbCo","followers_url":"https://api.github.com/users/SnabbCo/followers","following_url":"https://api.github.com/users/SnabbCo/following{/other_user}","gists_url":"https://api.github.com/users/SnabbCo/gists{/gist_id}","starred_url":"https://api.github.com/users/SnabbCo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SnabbCo/subscriptions","organizations_url":"https://api.github.com/users/SnabbCo/orgs","repos_url":"https://api.github.com/users/SnabbCo/repos","events_url":"https://api.github.com/users/SnabbCo/events{/privacy}","received_events_url":"https://api.github.com/users/SnabbCo/received_events","type":"Organization","site_admin":false},"repo":{"id":4857740,"name":"snabbswitch","full_name":"SnabbCo/snabbswitch","owner":{"login":"SnabbCo","id":1913310,"avatar_url":"https://avatars.githubusercontent.com/u/1913310?v=3","gravatar_id":"","url":"https://api.github.com/users/SnabbCo","html_url":"https://github.com/SnabbCo","followers_url":"https://api.github.com/users/SnabbCo/followers","following_url":"https://api.github.com/users/SnabbCo/following{/other_user}","gists_url":"https://api.github.com/users/SnabbCo/gists{/gist_id}","starred_url":"https://api.github.com/users/SnabbCo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SnabbCo/subscriptions","organizations_url":"https://api.github.com/users/SnabbCo/orgs","repos_url":"https://api.github.com/users/SnabbCo/repos","events_url":"https://api.github.com/users/SnabbCo/events{/privacy}","received_events_url":"https://api.github.com/users/SnabbCo/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SnabbCo/snabbswitch","description":"Snabb Switch: Simple and fast packet networking","fork":false,"url":"https://api.github.com/repos/SnabbCo/snabbswitch","forks_url":"https://api.github.com/repos/SnabbCo/snabbswitch/forks","keys_url":"https://api.github.com/repos/SnabbCo/snabbswitch/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SnabbCo/snabbswitch/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SnabbCo/snabbswitch/teams","hooks_url":"https://api.github.com/repos/SnabbCo/snabbswitch/hooks","issue_events_url":"https://api.github.com/repos/SnabbCo/snabbswitch/issues/events{/number}","events_url":"https://api.github.com/repos/SnabbCo/snabbswitch/events","assignees_url":"https://api.github.com/repos/SnabbCo/snabbswitch/assignees{/user}","branches_url":"https://api.github.com/repos/SnabbCo/snabbswitch/branches{/branch}","tags_url":"https://api.github.com/repos/SnabbCo/snabbswitch/tags","blobs_url":"https://api.github.com/repos/SnabbCo/snabbswitch/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SnabbCo/snabbswitch/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SnabbCo/snabbswitch/git/refs{/sha}","trees_url":"https://api.github.com/repos/SnabbCo/snabbswitch/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SnabbCo/snabbswitch/statuses/{sha}","languages_url":"https://api.github.com/repos/SnabbCo/snabbswitch/languages","stargazers_url":"https://api.github.com/repos/SnabbCo/snabbswitch/stargazers","contributors_url":"https://api.github.com/repos/SnabbCo/snabbswitch/contributors","subscribers_url":"https://api.github.com/repos/SnabbCo/snabbswitch/subscribers","subscription_url":"https://api.github.com/repos/SnabbCo/snabbswitch/subscription","commits_url":"https://api.github.com/repos/SnabbCo/snabbswitch/commits{/sha}","git_commits_url":"https://api.github.com/repos/SnabbCo/snabbswitch/git/commits{/sha}","comments_url":"https://api.github.com/repos/SnabbCo/snabbswitch/comments{/number}","issue_comment_url":"https://api.github.com/repos/SnabbCo/snabbswitch/issues/comments{/number}","contents_url":"https://api.github.com/repos/SnabbCo/snabbswitch/contents/{+path}","compare_url":"https://api.github.com/repos/SnabbCo/snabbswitch/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SnabbCo/snabbswitch/merges","archive_url":"https://api.github.com/repos/SnabbCo/snabbswitch/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SnabbCo/snabbswitch/downloads","issues_url":"https://api.github.com/repos/SnabbCo/snabbswitch/issues{/number}","pulls_url":"https://api.github.com/repos/SnabbCo/snabbswitch/pulls{/number}","milestones_url":"https://api.github.com/repos/SnabbCo/snabbswitch/milestones{/number}","notifications_url":"https://api.github.com/repos/SnabbCo/snabbswitch/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SnabbCo/snabbswitch/labels{/name}","releases_url":"https://api.github.com/repos/SnabbCo/snabbswitch/releases{/id}","deployments_url":"https://api.github.com/repos/SnabbCo/snabbswitch/deployments","created_at":"2012-07-02T09:06:38Z","updated_at":"2016-03-30T00:03:03Z","pushed_at":"2016-03-30T08:13:17Z","git_url":"git://github.com/SnabbCo/snabbswitch.git","ssh_url":"git@github.com:SnabbCo/snabbswitch.git","clone_url":"https://github.com/SnabbCo/snabbswitch.git","svn_url":"https://github.com/SnabbCo/snabbswitch","homepage":"","size":9541,"stargazers_count":1289,"watchers_count":1289,"language":"Lua","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":161,"mirror_url":null,"open_issues_count":119,"forks":161,"open_issues":119,"watchers":1289,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/SnabbCo/snabbswitch/pulls/847"},"html":{"href":"https://github.com/SnabbCo/snabbswitch/pull/847"},"issue":{"href":"https://api.github.com/repos/SnabbCo/snabbswitch/issues/847"},"comments":{"href":"https://api.github.com/repos/SnabbCo/snabbswitch/issues/847/comments"},"review_comments":{"href":"https://api.github.com/repos/SnabbCo/snabbswitch/pulls/847/comments"},"review_comment":{"href":"https://api.github.com/repos/SnabbCo/snabbswitch/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SnabbCo/snabbswitch/pulls/847/commits"},"statuses":{"href":"https://api.github.com/repos/SnabbCo/snabbswitch/statuses/df8c732af6fbe7b6ba59492a9d5074fc906f9d61"}}}}