{"action":"created","comment":{"url":"https://api.github.com/repos/opencomputeproject/SAI/pulls/comments/85199420","pull_request_review_id":5928615,"id":85199420,"diff_hunk":"@@ -0,0 +1,604 @@\n+# copp_test.${name_test}\n+#\n+# ARPTest\n+# DHCPTest\n+# LLDPTest\n+# BGPTest\n+# LACPTest\n+# SNMPTest\n+# SSHTest\n+# IP2METest\n+# TTlErrorTest\n+#ptf --test-dir PTF_TEST_CASES copp_tests.DHCPTest  --qlen=10000 --platform nn -t \"server='10.3.147.47';port_map_file='default_interface_to_front_map.ini';verbose=True;dst_mac='00:02:03:04:05:00'\" --device-socket 0-3@tcp://127.0.0.1:10900 --device-socket 1-3@tcp://10.3.147.47:10900\n+\n+import ptf\n+from ptf.base_tests import BaseTest\n+from ptf import config\n+import ptf.testutils as testutils\n+from ptf.testutils import *\n+from ptf.dataplane import match_exp_pkt\n+import datetime\n+import subprocess\n+\n+from switch import *\n+import sai_base_test\n+\n+import switch_sai_thrift.switch_sai_rpc as switch_sai_rpc\n+from thrift.transport import TSocket\n+from thrift.transport import TTransport\n+from thrift.protocol import TBinaryProtocol\n+import time\n+\n+#constants\n+SAI_POLICER_MODE_Sr_TCM = 0x00000000\n+SAI_METER_TYPE_PACKETS = 0x00000000\n+SAI_PACKET_ACTION_DROP = 0\n+SAI_PACKET_ACTION_FORWARD = 1\n+SAI_PACKET_ACTION_TRAP = 4\n+\n+SAI_HOSTIF_TRAP_CHANNEL_NETDEV = 2\n+\n+SAI_HOSTIF_TRAP_ID_TTL_ERROR = 0x00004001\n+SAI_HOSTIF_TRAP_ID_BGP = 0x00002006\n+SAI_HOSTIF_TRAP_ID_LACP = 0x00000002\n+SAI_HOSTIF_TRAP_ID_ARP_REQUEST = 0x00002000\n+SAI_HOSTIF_TRAP_ID_ARP_RESPONSE = 0x00002001\n+SAI_HOSTIF_TRAP_ID_LLDP = 0x00000004\n+SAI_HOSTIF_TRAP_ID_DHCP = 0x00002002\n+SAI_HOSTIF_TRAP_ID_IP2ME = 0x00002010\n+SAI_HOSTIF_TRAP_ID_SNMP = 0x00002012\n+SAI_HOSTIF_TRAP_ID_SSH = 0x00002011\n+\n+class ControlPlaneBaseTest(sai_base_test.ThriftInterfaceDataPlane):\n+    MAX_PORTS = 32\n+    POLICER_CIR = 10\n+    PKT_TX_COUNT = 150\n+    \n+    trap_list = [\n+        SAI_HOSTIF_TRAP_ID_TTL_ERROR, \n+        SAI_HOSTIF_TRAP_ID_BGP, \n+        SAI_HOSTIF_TRAP_ID_LACP,\n+        SAI_HOSTIF_TRAP_ID_ARP_REQUEST,\n+        SAI_HOSTIF_TRAP_ID_ARP_RESPONSE,\n+        SAI_HOSTIF_TRAP_ID_LLDP,\n+        SAI_HOSTIF_TRAP_ID_DHCP,\n+        SAI_HOSTIF_TRAP_ID_IP2ME\n+        ]\n+\n+    hostif_id={}\n+    trap_groups=[]\n+    policers=[]\n+\n+    def create_host_interfaces(self):\n+        for interface,front in interface_to_front_mapping.iteritems():\n+            sai_port_id = self.client.sai_thrift_get_port_id_by_front_port(front);\n+            hif_id = sai_thrift_create_hostif(self.client, sai_port_id, front)\n+            self.hostif_id[front]=hif_id\n+            self.client.sai_thrift_set_if_state(front, True)\n+        return\n+\n+    def init_interfaces(self):\n+        self.loadPortMap()\n+        self.createRpcClient()            \n+        switch_init(self.client)\n+        self.create_host_interfaces()\n+        return\n+\n+    def __init__(self):\n+\n+        BaseTest.__init__(self)\n+        \n+        self.test_params = testutils.test_params_get()\n+        \n+        self.mac_map = []\n+        for i in xrange(self.MAX_PORTS):\n+            output = ControlPlaneBaseTest.cmd_run('ip link show dev eth%d' % (i))\n+            second = output.split('\\n')[1]\n+            mac = second.split()[1]\n+            self.mac_map.append(mac)\n+            \n+        self.myip = {}\n+        self.peerip = {}\n+        for i in xrange(self.MAX_PORTS):\n+            self.myip[i] = \"10.0.0.%d\" % (i*2+1)\n+            self.peerip[i] = \"10.0.0.%d\" % (i*2)\n+        \n+        self.init_interfaces()\n+        return\n+\n+    @staticmethod\n+    def cmd_run(cmdline):\n+        cmd = cmdline.split(' ')\n+        process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)\n+        stdout, stderr = process.communicate()\n+        ret_code = process.returncode\n+\n+        if ret_code != 0:\n+            raise Exception(\"ret_code=%d, error message=%s. cmd=%s\" % (ret_code, stderr, cmdline))\n+        return stdout\n+\n+    def setUp(self):\n+\n+        ThriftInterfaceDataPlane.setUp(self)\n+        self.policers=[]\n+        self.trap_groups=[]\n+        return\n+\n+    def tearDown(self):\n+        if config[\"log_dir\"] != None:\n+            self.dataplane.stop_pcap()\n+        for trap_gr in self.trap_groups:\n+            self.client.sai_thrift_remove_hostif_trap_group(trap_group_id=trap_gr)\n+        \n+        for trapid in self.trap_list:\n+            sai_thrift_create_hostif_trap(self.client, trap_id=trapid, action=SAI_PACKET_ACTION_FORWARD)\n+\n+        for policer in self.policers:\n+            status = self.client.sai_thrift_remove_policer(policer_id=policer)\n+        return\n+\n+    def copp_test(self, packet, count, send_intf, recv_intf):\n+\n+        start_time=datetime.datetime.now()\n+        for i in xrange(count):\n+            testutils.send_packet(self, send_intf, packet)\n+\n+        end_time=datetime.datetime.now()\n+\n+        total_rcv_pkt_cnt = 0\n+        while True:\n+            (rcv_device, rcv_port, rcv_pkt, pkt_time) = dp_poll(self, device_number=recv_intf[0], port_number=recv_intf[1], timeout=1)\n+            if rcv_pkt is not None:\n+                if match_exp_pkt(packet, rcv_pkt):\n+                    total_rcv_pkt_cnt += 1\n+            else:\n+                break\n+\n+        time_delta = end_time - start_time\n+        time_delta_ms = (time_delta.microseconds + time_delta.seconds * 10**6) / 10**3\n+        if time_delta_ms == 0:\n+            time_delta_ms = 1\n+        \n+        tx_pps = int(count/(float(time_delta_ms)/1000))\n+        rx_pps = int(total_rcv_pkt_cnt/(float(time_delta_ms)/1000))\n+        return total_rcv_pkt_cnt, time_delta, time_delta_ms, tx_pps, rx_pps\n+\n+    def contruct_packet(self, port_number):\n+        raise NotImplemented","path":"test/saithrift/tests/copp_tests.py","position":null,"original_position":167,"commit_id":"f4f485d670e57c57ef80a68fd6a172e25d1d7fca","original_commit_id":"b72e10642db471891060350537a08bd35ac995fc","user":{"login":"vkochan-mlnx","id":22504264,"avatar_url":"https://avatars.githubusercontent.com/u/22504264?v=3","gravatar_id":"","url":"https://api.github.com/users/vkochan-mlnx","html_url":"https://github.com/vkochan-mlnx","followers_url":"https://api.github.com/users/vkochan-mlnx/followers","following_url":"https://api.github.com/users/vkochan-mlnx/following{/other_user}","gists_url":"https://api.github.com/users/vkochan-mlnx/gists{/gist_id}","starred_url":"https://api.github.com/users/vkochan-mlnx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vkochan-mlnx/subscriptions","organizations_url":"https://api.github.com/users/vkochan-mlnx/orgs","repos_url":"https://api.github.com/users/vkochan-mlnx/repos","events_url":"https://api.github.com/users/vkochan-mlnx/events{/privacy}","received_events_url":"https://api.github.com/users/vkochan-mlnx/received_events","type":"User","site_admin":false},"body":"I suppose it should be construct_packet ?","created_at":"2016-10-26T19:19:41Z","updated_at":"2016-10-26T19:19:41Z","html_url":"https://github.com/opencomputeproject/SAI/pull/247#discussion_r85199420","pull_request_url":"https://api.github.com/repos/opencomputeproject/SAI/pulls/247","_links":{"self":{"href":"https://api.github.com/repos/opencomputeproject/SAI/pulls/comments/85199420"},"html":{"href":"https://github.com/opencomputeproject/SAI/pull/247#discussion_r85199420"},"pull_request":{"href":"https://api.github.com/repos/opencomputeproject/SAI/pulls/247"}}},"pull_request":{"url":"https://api.github.com/repos/opencomputeproject/SAI/pulls/247","id":87582386,"html_url":"https://github.com/opencomputeproject/SAI/pull/247","diff_url":"https://github.com/opencomputeproject/SAI/pull/247.diff","patch_url":"https://github.com/opencomputeproject/SAI/pull/247.patch","issue_url":"https://api.github.com/repos/opencomputeproject/SAI/issues/247","number":247,"state":"open","locked":false,"title":"[copp] Added copp tests","user":{"login":"hrachya-mellanox","id":12867186,"avatar_url":"https://avatars.githubusercontent.com/u/12867186?v=3","gravatar_id":"","url":"https://api.github.com/users/hrachya-mellanox","html_url":"https://github.com/hrachya-mellanox","followers_url":"https://api.github.com/users/hrachya-mellanox/followers","following_url":"https://api.github.com/users/hrachya-mellanox/following{/other_user}","gists_url":"https://api.github.com/users/hrachya-mellanox/gists{/gist_id}","starred_url":"https://api.github.com/users/hrachya-mellanox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hrachya-mellanox/subscriptions","organizations_url":"https://api.github.com/users/hrachya-mellanox/orgs","repos_url":"https://api.github.com/users/hrachya-mellanox/repos","events_url":"https://api.github.com/users/hrachya-mellanox/events{/privacy}","received_events_url":"https://api.github.com/users/hrachya-mellanox/received_events","type":"User","site_admin":false},"body":"* List of tests:\r\n* ARPTest\r\n* DHCPTest\r\n* LLDPTest\r\n* BGPTest\r\n* LACPTest\r\n* SNMPTest\r\n* SSHTest\r\n* IP2METest\r\n* DefaultTest\r\n\r\n* The test closely replicates SONIC's setup for copp, for the trap ids mentioned\r\n* above.\r\n\r\nSigned-off-by: hrachya@mellanox.com","created_at":"2016-09-30T23:47:09Z","updated_at":"2016-10-26T19:19:41Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7d25f4a8a0eb04cbbf0dc313c0e9d3da7e3da6f0","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/opencomputeproject/SAI/pulls/247/commits","review_comments_url":"https://api.github.com/repos/opencomputeproject/SAI/pulls/247/comments","review_comment_url":"https://api.github.com/repos/opencomputeproject/SAI/pulls/comments{/number}","comments_url":"https://api.github.com/repos/opencomputeproject/SAI/issues/247/comments","statuses_url":"https://api.github.com/repos/opencomputeproject/SAI/statuses/f4f485d670e57c57ef80a68fd6a172e25d1d7fca","head":{"label":"hrachya-mellanox:copp","ref":"copp","sha":"f4f485d670e57c57ef80a68fd6a172e25d1d7fca","user":{"login":"hrachya-mellanox","id":12867186,"avatar_url":"https://avatars.githubusercontent.com/u/12867186?v=3","gravatar_id":"","url":"https://api.github.com/users/hrachya-mellanox","html_url":"https://github.com/hrachya-mellanox","followers_url":"https://api.github.com/users/hrachya-mellanox/followers","following_url":"https://api.github.com/users/hrachya-mellanox/following{/other_user}","gists_url":"https://api.github.com/users/hrachya-mellanox/gists{/gist_id}","starred_url":"https://api.github.com/users/hrachya-mellanox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hrachya-mellanox/subscriptions","organizations_url":"https://api.github.com/users/hrachya-mellanox/orgs","repos_url":"https://api.github.com/users/hrachya-mellanox/repos","events_url":"https://api.github.com/users/hrachya-mellanox/events{/privacy}","received_events_url":"https://api.github.com/users/hrachya-mellanox/received_events","type":"User","site_admin":false},"repo":{"id":67741725,"name":"SAI","full_name":"hrachya-mellanox/SAI","owner":{"login":"hrachya-mellanox","id":12867186,"avatar_url":"https://avatars.githubusercontent.com/u/12867186?v=3","gravatar_id":"","url":"https://api.github.com/users/hrachya-mellanox","html_url":"https://github.com/hrachya-mellanox","followers_url":"https://api.github.com/users/hrachya-mellanox/followers","following_url":"https://api.github.com/users/hrachya-mellanox/following{/other_user}","gists_url":"https://api.github.com/users/hrachya-mellanox/gists{/gist_id}","starred_url":"https://api.github.com/users/hrachya-mellanox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hrachya-mellanox/subscriptions","organizations_url":"https://api.github.com/users/hrachya-mellanox/orgs","repos_url":"https://api.github.com/users/hrachya-mellanox/repos","events_url":"https://api.github.com/users/hrachya-mellanox/events{/privacy}","received_events_url":"https://api.github.com/users/hrachya-mellanox/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/hrachya-mellanox/SAI","description":"Switch Abstraction Interface","fork":true,"url":"https://api.github.com/repos/hrachya-mellanox/SAI","forks_url":"https://api.github.com/repos/hrachya-mellanox/SAI/forks","keys_url":"https://api.github.com/repos/hrachya-mellanox/SAI/keys{/key_id}","collaborators_url":"https://api.github.com/repos/hrachya-mellanox/SAI/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/hrachya-mellanox/SAI/teams","hooks_url":"https://api.github.com/repos/hrachya-mellanox/SAI/hooks","issue_events_url":"https://api.github.com/repos/hrachya-mellanox/SAI/issues/events{/number}","events_url":"https://api.github.com/repos/hrachya-mellanox/SAI/events","assignees_url":"https://api.github.com/repos/hrachya-mellanox/SAI/assignees{/user}","branches_url":"https://api.github.com/repos/hrachya-mellanox/SAI/branches{/branch}","tags_url":"https://api.github.com/repos/hrachya-mellanox/SAI/tags","blobs_url":"https://api.github.com/repos/hrachya-mellanox/SAI/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/hrachya-mellanox/SAI/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/hrachya-mellanox/SAI/git/refs{/sha}","trees_url":"https://api.github.com/repos/hrachya-mellanox/SAI/git/trees{/sha}","statuses_url":"https://api.github.com/repos/hrachya-mellanox/SAI/statuses/{sha}","languages_url":"https://api.github.com/repos/hrachya-mellanox/SAI/languages","stargazers_url":"https://api.github.com/repos/hrachya-mellanox/SAI/stargazers","contributors_url":"https://api.github.com/repos/hrachya-mellanox/SAI/contributors","subscribers_url":"https://api.github.com/repos/hrachya-mellanox/SAI/subscribers","subscription_url":"https://api.github.com/repos/hrachya-mellanox/SAI/subscription","commits_url":"https://api.github.com/repos/hrachya-mellanox/SAI/commits{/sha}","git_commits_url":"https://api.github.com/repos/hrachya-mellanox/SAI/git/commits{/sha}","comments_url":"https://api.github.com/repos/hrachya-mellanox/SAI/comments{/number}","issue_comment_url":"https://api.github.com/repos/hrachya-mellanox/SAI/issues/comments{/number}","contents_url":"https://api.github.com/repos/hrachya-mellanox/SAI/contents/{+path}","compare_url":"https://api.github.com/repos/hrachya-mellanox/SAI/compare/{base}...{head}","merges_url":"https://api.github.com/repos/hrachya-mellanox/SAI/merges","archive_url":"https://api.github.com/repos/hrachya-mellanox/SAI/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/hrachya-mellanox/SAI/downloads","issues_url":"https://api.github.com/repos/hrachya-mellanox/SAI/issues{/number}","pulls_url":"https://api.github.com/repos/hrachya-mellanox/SAI/pulls{/number}","milestones_url":"https://api.github.com/repos/hrachya-mellanox/SAI/milestones{/number}","notifications_url":"https://api.github.com/repos/hrachya-mellanox/SAI/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/hrachya-mellanox/SAI/labels{/name}","releases_url":"https://api.github.com/repos/hrachya-mellanox/SAI/releases{/id}","deployments_url":"https://api.github.com/repos/hrachya-mellanox/SAI/deployments","created_at":"2016-09-08T21:30:09Z","updated_at":"2016-09-08T21:30:11Z","pushed_at":"2016-10-26T19:17:05Z","git_url":"git://github.com/hrachya-mellanox/SAI.git","ssh_url":"git@github.com:hrachya-mellanox/SAI.git","clone_url":"https://github.com/hrachya-mellanox/SAI.git","svn_url":"https://github.com/hrachya-mellanox/SAI","homepage":null,"size":30056,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"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":"opencomputeproject:master","ref":"master","sha":"7d5c0882670ebb0b91303fd16fb0907c50fdc302","user":{"login":"opencomputeproject","id":16659405,"avatar_url":"https://avatars.githubusercontent.com/u/16659405?v=3","gravatar_id":"","url":"https://api.github.com/users/opencomputeproject","html_url":"https://github.com/opencomputeproject","followers_url":"https://api.github.com/users/opencomputeproject/followers","following_url":"https://api.github.com/users/opencomputeproject/following{/other_user}","gists_url":"https://api.github.com/users/opencomputeproject/gists{/gist_id}","starred_url":"https://api.github.com/users/opencomputeproject/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/opencomputeproject/subscriptions","organizations_url":"https://api.github.com/users/opencomputeproject/orgs","repos_url":"https://api.github.com/users/opencomputeproject/repos","events_url":"https://api.github.com/users/opencomputeproject/events{/privacy}","received_events_url":"https://api.github.com/users/opencomputeproject/received_events","type":"Organization","site_admin":false},"repo":{"id":43159385,"name":"SAI","full_name":"opencomputeproject/SAI","owner":{"login":"opencomputeproject","id":16659405,"avatar_url":"https://avatars.githubusercontent.com/u/16659405?v=3","gravatar_id":"","url":"https://api.github.com/users/opencomputeproject","html_url":"https://github.com/opencomputeproject","followers_url":"https://api.github.com/users/opencomputeproject/followers","following_url":"https://api.github.com/users/opencomputeproject/following{/other_user}","gists_url":"https://api.github.com/users/opencomputeproject/gists{/gist_id}","starred_url":"https://api.github.com/users/opencomputeproject/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/opencomputeproject/subscriptions","organizations_url":"https://api.github.com/users/opencomputeproject/orgs","repos_url":"https://api.github.com/users/opencomputeproject/repos","events_url":"https://api.github.com/users/opencomputeproject/events{/privacy}","received_events_url":"https://api.github.com/users/opencomputeproject/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/opencomputeproject/SAI","description":"Switch Abstraction Interface","fork":false,"url":"https://api.github.com/repos/opencomputeproject/SAI","forks_url":"https://api.github.com/repos/opencomputeproject/SAI/forks","keys_url":"https://api.github.com/repos/opencomputeproject/SAI/keys{/key_id}","collaborators_url":"https://api.github.com/repos/opencomputeproject/SAI/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/opencomputeproject/SAI/teams","hooks_url":"https://api.github.com/repos/opencomputeproject/SAI/hooks","issue_events_url":"https://api.github.com/repos/opencomputeproject/SAI/issues/events{/number}","events_url":"https://api.github.com/repos/opencomputeproject/SAI/events","assignees_url":"https://api.github.com/repos/opencomputeproject/SAI/assignees{/user}","branches_url":"https://api.github.com/repos/opencomputeproject/SAI/branches{/branch}","tags_url":"https://api.github.com/repos/opencomputeproject/SAI/tags","blobs_url":"https://api.github.com/repos/opencomputeproject/SAI/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/opencomputeproject/SAI/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/opencomputeproject/SAI/git/refs{/sha}","trees_url":"https://api.github.com/repos/opencomputeproject/SAI/git/trees{/sha}","statuses_url":"https://api.github.com/repos/opencomputeproject/SAI/statuses/{sha}","languages_url":"https://api.github.com/repos/opencomputeproject/SAI/languages","stargazers_url":"https://api.github.com/repos/opencomputeproject/SAI/stargazers","contributors_url":"https://api.github.com/repos/opencomputeproject/SAI/contributors","subscribers_url":"https://api.github.com/repos/opencomputeproject/SAI/subscribers","subscription_url":"https://api.github.com/repos/opencomputeproject/SAI/subscription","commits_url":"https://api.github.com/repos/opencomputeproject/SAI/commits{/sha}","git_commits_url":"https://api.github.com/repos/opencomputeproject/SAI/git/commits{/sha}","comments_url":"https://api.github.com/repos/opencomputeproject/SAI/comments{/number}","issue_comment_url":"https://api.github.com/repos/opencomputeproject/SAI/issues/comments{/number}","contents_url":"https://api.github.com/repos/opencomputeproject/SAI/contents/{+path}","compare_url":"https://api.github.com/repos/opencomputeproject/SAI/compare/{base}...{head}","merges_url":"https://api.github.com/repos/opencomputeproject/SAI/merges","archive_url":"https://api.github.com/repos/opencomputeproject/SAI/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/opencomputeproject/SAI/downloads","issues_url":"https://api.github.com/repos/opencomputeproject/SAI/issues{/number}","pulls_url":"https://api.github.com/repos/opencomputeproject/SAI/pulls{/number}","milestones_url":"https://api.github.com/repos/opencomputeproject/SAI/milestones{/number}","notifications_url":"https://api.github.com/repos/opencomputeproject/SAI/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/opencomputeproject/SAI/labels{/name}","releases_url":"https://api.github.com/repos/opencomputeproject/SAI/releases{/id}","deployments_url":"https://api.github.com/repos/opencomputeproject/SAI/deployments","created_at":"2015-09-25T16:19:31Z","updated_at":"2016-10-24T20:21:11Z","pushed_at":"2016-10-26T19:17:06Z","git_url":"git://github.com/opencomputeproject/SAI.git","ssh_url":"git@github.com:opencomputeproject/SAI.git","clone_url":"https://github.com/opencomputeproject/SAI.git","svn_url":"https://github.com/opencomputeproject/SAI","homepage":null,"size":67353,"stargazers_count":51,"watchers_count":51,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":63,"mirror_url":null,"open_issues_count":46,"forks":63,"open_issues":46,"watchers":51,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/opencomputeproject/SAI/pulls/247"},"html":{"href":"https://github.com/opencomputeproject/SAI/pull/247"},"issue":{"href":"https://api.github.com/repos/opencomputeproject/SAI/issues/247"},"comments":{"href":"https://api.github.com/repos/opencomputeproject/SAI/issues/247/comments"},"review_comments":{"href":"https://api.github.com/repos/opencomputeproject/SAI/pulls/247/comments"},"review_comment":{"href":"https://api.github.com/repos/opencomputeproject/SAI/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/opencomputeproject/SAI/pulls/247/commits"},"statuses":{"href":"https://api.github.com/repos/opencomputeproject/SAI/statuses/f4f485d670e57c57ef80a68fd6a172e25d1d7fca"}}}}
{"actor":{"display_login":"vkochan-mlnx"}}