{"action":"created","comment":{"url":"https://api.github.com/repos/FRRouting/frr/pulls/comments/201049136","pull_request_review_id":135471626,"id":201049136,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMTA0OTEzNg==","diff_hunk":"@@ -0,0 +1,308 @@\n+.. _ldp:\n+\n+***\n+Ldp\n+***\n+\n+The *ldpd* daemon is a standardised protocol that permits exchanging MPLS label\n+information between MPLS devices. The Ldp protocol creates peering between\n+devices, so as to exchange that label information. This information is stored in\n+MPLS table of *zebra*, and it injects that MPLS information in the underlying\n+system (Linux kernel or OpenBSD system for instance).\n+*ldpd* provides necessary options to create a Layer 2 VPN across MPLS network.\n+For instance, it is possible to interconnect several sites that share the same\n+broadcast domain.\n+\n+FRR implements Ldp as described in :rfc:`5036`; other Ldp standard are the\n+following ones: :rfc:`6720`, :rfc:`6667`, :rfc:`5919`, :rfc:`5561`, :rfc:`7552`,\n+:rfc:`4447`.\n+Because Mpls is already available, FRR also supports :rfc:`3031`.\n+\n+.. _understanding-ldp:\n+\n+Understanding Ldp principles\n+============================\n+\n+Let's first introduce some definitions that permit understand better the Ldp\n+protocol:\n+\n+- `LSR` : Labeled Switch Router. Networking devices handling labels used to\n+  forward traffic between and through them.\n+\n+- `LER` : Labeled Edge Router. A Labeled edge router is located at the edge of\n+   an MPLS network, generally between an IP network and an MPLS network.\n+\n+\n+``ldp`` aims at sharing label information across devices. It tries to establish\n+peering with remote ldp capable devices, first by discovering using UDP port 646\n+, then by peering using TCP port 646. Once the TCP session is established, the\n+label information is shared, through label advertisements.\n+\n+There are different methods to send label advertisement modes. The\n+implementation actually supports the following : Liberal Label Retention +\n+Downstream Unsolicited + Independent Control.\n+The other advertising modes are depicted below, and compared with the current\n+implementation.\n+\n+- Liberal label retention versus conservative mode\n+  In liberal mode, every label sent by every LSR is stored in the MPLS table.\n+  In conservative mode, only the label that was sent by the best next hop\n+  (determined by the IGP metric) for that particular FEC is stored in the MPLS\n+  table.\n+\n+- Independent LSP Control versus ordered LSP Control\n+  MPLS has two ways of binding labels to FEC’s; either through ordered LSP\n+  control, or independent LSP control.\n+  Ordered LSP control only binds a label to a FEC if it is the egress LSR, or\n+  the router received a label binding for a FEC from the next hop router. In\n+  this mode, an MPLS router will create a label binding for each FEC and\n+  distribute it to its neighbors so long as he has a entry in the RIB for the\n+  destination.\n+  In the other mode, label bindings are made without any dependencies on another\n+  router advertising a label for a particular FEC. Each router makes it own\n+  independent decision to create a label for each FEC.\n+  By default IOS uses Independent LSP Control, while Juniper implements the\n+  Ordered Control. Both modes are interoperable, the difference is that Ordered\n+  Control prevent blackholing during the Ldp convergence process, at cost of\n+  slowing down the convergence itself\n+\n+- unsolicited Downstream versus downstream on demand\n+  Downstream on demand label distribution is where an LSR must explicitly\n+  request that a label be sent from its downstream router for a particular FEC.\n+  Unsolicited label distribution is where a label is sent from the downstream\n+  router without the original router requesting it.\n+\n+.. _configuring-ldpd:\n+\n+Configuring ldpd\n+================\n+\n+The *ldpd* daemon can be invoked with any of the common\n+options (:ref:`common-invocation-options`).\n+\n+The *zebra* daemon must be running before *ldpd* is invoked.\n+\n+Configuration of *ldpd* is done in its configuration file\n+:file:`ldpd.conf`.\n+\n+.. _ldp-configuration:\n+\n+Ldp configuration\n+===================\n+\n+.. index:: [no] mpls ldp\n+.. clicmd:: [no] mpls ldp\n+\n+   Enable or disable Ldp daemon\n+\n+.. index:: [no] router-id A.B.C.D\n+.. clicmd:: [no] router-id A.B.C.D\n+\n+   The following command located under MPLS router node configures the MPLS\n+   router-id of the local device.\n+\n+.. index:: [no] address-family [ipv4 | ipv6]\n+.. clicmd:: [no] address-family [ipv4 | ipv6]\n+\n+   Configure Ldp for IPv4 or IPv6 address-family. Located under MPLS route node,\n+   this subnode permits configuring the Ldp neighbors.\n+\n+.. index:: [no] interface IFACE\n+.. clicmd:: [no] interface IFACE\n+\n+   Located under MPLS address-family node, use this command to enable or disable\n+   Ldp discovery per interface. IFACE stands for the interface name where Ldp is\n+   enabled. By default it is disabled. Once this command executed, the\n+   address-family interface node is configured.\n+\n+.. index:: [no] discovery transport-address A.B.C.D | A:B::C:D\n+.. clicmd:: [no] discovery transport-address A.B.C.D | A:B::C:D\n+\n+   Located under mpls address-family interface node, use this command to set\n+   the IPv4 or IPv6 transport-address used by the Ldp protocol to talk on this\n+   interface.\n+\n+.. index:: [no] neighbor A.B.C.D password PASSWORD\n+.. clicmd:: [no] neighbor A.B.C.D password PASSWORD\n+\n+   The following command located under MPLS router node configures the router\n+   of a LDP device. This device, if found, will have to comply with the\n+   configured password. PASSWORD is a clear text password wit its digest sent\n+   through the network.\n+\n+.. index:: [no] neighbor A.B.C.D holdtime HOLDTIME\n+.. clicmd:: [no] neighbor A.B.C.D holdtime HOLDTIME\n+\n+   The following command located under MPLS router node configures the holdtime\n+   value in seconds of the Ldp neighbor ID. Configuring it triggers a keepalive\n+   mechanism. That value can be configured between 15 and 65535 seconds. After\n+   this time of non response, the Ldp established session will be considered as\n+   set to down. By default, no holdtime is configured for the Ldp devices.\n+\n+.. index:: [no] discovery hello holdtime HOLDTIME\n+.. clicmd:: [no] discovery hello holdtime HOLDTIME\n+\n+.. index:: [no] discovery hello interval INTERVAL\n+.. clicmd:: [no] discovery hello interval INTERVAL\n+\n+   INTERVAL value ranges from 1 to 65535 seconds. Default value is 5 seconds.\n+   This is the value between each hello timer message sent.\n+   HOLDTIME value ranges from 1 to 65535 seconds. Default value is 15 seconds.\n+   That value is added as a TLV in the Ldp messages.\n+\n+.. _show-ldp-information:\n+\n+Show Ldp information\n+====================\n+\n+These commands dump various parts of *ldpd*.\n+\n+.. index:: show mpls ldp neighbor [A.B.C.D]\n+.. clicmd:: show mpls ldp neighbor [A.B.C.D]\n+\n+   This command dumps the various neighbors discovered. Below example shows that\n+   local machine has an operation neighbor with ID set to 1.1.1.1.\n+\n+   ::\n+\n+      west-vm# show mpls ldp neighbor\n+      AF   ID              State       Remote Address    Uptime\n+      ipv4 1.1.1.1         OPERATIONAL 1.1.1.1         00:01:37\n+      west-vm#\n+\n+.. index:: show mpls ldp neighbor [A.B.C.D] capabilities\n+.. clicmd:: show mpls ldp neighbor [A.B.C.D] capabilities\n+\n+.. index:: show mpls ldp neighbor [A.B.C.D] detail\n+.. clicmd:: show mpls ldp neighbor [A.B.C.D] detail\n+\n+   Above commands dump other neighbor information.\n+\n+.. index:: show mpls ldp discovery [detail]\n+.. clicmd:: show mpls ldp discovery [detail]\n+\n+.. index:: show mpls ldp ipv4 discovery [detail]\n+.. clicmd:: show mpls ldp ipv4 discovery [detail]\n+\n+.. index:: show mpls ldp ipv6 discovery [detail]\n+.. clicmd:: show mpls ldp ipv6 discovery [detail]\n+\n+   Above commands dump discovery information.\n+\n+.. index:: show mpls ldp ipv4 interface\n+.. clicmd:: show mpls ldp ipv4 interface\n+\n+.. index:: show mpls ldp ipv6 interface\n+.. clicmd:: show mpls ldp ipv6 interface\n+\n+   Above command dumps the IPv4 or IPv6 interface per where Ldp is enabled.\n+   Below output illustrates what is dumped for IPv4.\n+\n+   ::\n+\n+      west-vm# show mpls ldp ipv4 interface\n+      AF   Interface   State  Uptime   Hello Timers  ac\n+      ipv4 eth1       ACTIVE 00:08:35 5/15           0\n+      ipv4 eth3       ACTIVE 00:08:35 5/15           1\n+\n+\n+.. index:: show mpls ldp ipv4|ipv6 binding\n+.. clicmd:: show mpls ldp ipv4|ipv6 binding\n+\n+   Above command dumps the binding obtained through MPLS exchanges with Ldp.\n+\n+   ::\n+\n+      west-vm# show mpls ldp ipv4 binding\n+      AF   Destination          Nexthop         Local Label Remote Label  In Use\n+      ipv4 1.1.1.1/32           1.1.1.1         16          imp-null         yes\n+      ipv4 2.2.2.2/32           1.1.1.1         imp-null    16                no\n+      ipv4 10.0.2.0/24          1.1.1.1         imp-null    imp-null          no\n+      ipv4 10.115.0.0/24        1.1.1.1         imp-null    17                no\n+      ipv4 10.135.0.0/24        1.1.1.1         imp-null    imp-null          no\n+      ipv4 10.200.0.0/24        1.1.1.1         17          imp-null         yes\n+      west-vm#\n+\n+Ldp debugging commands\n+========================\n+\n+.. index::\n+   simple: debug mpls ldp KIND\n+   simple: no debug mpls ldp KIND\n+\n+.. clicmd:: [no] debug mpls ldp KIND\n+\n+   Enable or disable debugging messages of a given kind. ``KIND`` can\n+   be one of:\n+\n+   - ``discovery``\n+   - ``errors``\n+   - ``event``\n+   - ``labels``\n+   - ``messages``\n+   - ``zebra``\n+\n+Ldp example configuration\n+=========================\n+\n+Below configuration gives a typical MPLS configuration of a device located in a\n+MPLS backbone. Ldp is enabled on two interfaces and will attempt to peer with\n+two neighbors with router-id set to either 1.1.1.1 or 3.3.3.3.\n+\n+::\n+\n+   mpls ldp\n+    router-id 2.2.2.2\n+    neighbor 1.1.1.1 password test\n+    neighbor 3.3.3.3 password test\n+    !\n+    address-family ipv4\n+     discovery transport-address 2.2.2.2\n+     !\n+     interface eth1\n+     !\n+     interface eth3\n+     !\n+    exit-address-family\n+    !\n+\n+\n+Deploying LDP across a backbone generally is done in a full mesh configuration\n+topology. LDP is typically deployed with an IGP like Ospf, that helps discover\n+the remote IPs. Below example is an OSPF configuration extract that goes with\n+Ldp configuration\n+\n+::","path":"doc/user/ldpd.rst","position":275,"original_position":275,"commit_id":"361921e0290d24d9be5448d6a9b818f6f45f87f5","original_commit_id":"361921e0290d24d9be5448d6a9b818f6f45f87f5","user":{"login":"qlyoung","id":6827003,"node_id":"MDQ6VXNlcjY4MjcwMDM=","avatar_url":"https://avatars3.githubusercontent.com/u/6827003?v=4","gravatar_id":"","url":"https://api.github.com/users/qlyoung","html_url":"https://github.com/qlyoung","followers_url":"https://api.github.com/users/qlyoung/followers","following_url":"https://api.github.com/users/qlyoung/following{/other_user}","gists_url":"https://api.github.com/users/qlyoung/gists{/gist_id}","starred_url":"https://api.github.com/users/qlyoung/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qlyoung/subscriptions","organizations_url":"https://api.github.com/users/qlyoung/orgs","repos_url":"https://api.github.com/users/qlyoung/repos","events_url":"https://api.github.com/users/qlyoung/events{/privacy}","received_events_url":"https://api.github.com/users/qlyoung/received_events","type":"User","site_admin":false},"body":"`.. code-block:: frr`","created_at":"2018-07-09T15:38:48Z","updated_at":"2018-07-09T15:39:54Z","html_url":"https://github.com/FRRouting/frr/pull/2640#discussion_r201049136","pull_request_url":"https://api.github.com/repos/FRRouting/frr/pulls/2640","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/FRRouting/frr/pulls/comments/201049136"},"html":{"href":"https://github.com/FRRouting/frr/pull/2640#discussion_r201049136"},"pull_request":{"href":"https://api.github.com/repos/FRRouting/frr/pulls/2640"}}},"pull_request":{"url":"https://api.github.com/repos/FRRouting/frr/pulls/2640","id":200056756,"node_id":"MDExOlB1bGxSZXF1ZXN0MjAwMDU2NzU2","html_url":"https://github.com/FRRouting/frr/pull/2640","diff_url":"https://github.com/FRRouting/frr/pull/2640.diff","patch_url":"https://github.com/FRRouting/frr/pull/2640.patch","issue_url":"https://api.github.com/repos/FRRouting/frr/issues/2640","number":2640,"state":"open","locked":false,"title":"doc: add Ldp user documentation","user":{"login":"pguibert6WIND","id":16295538,"node_id":"MDQ6VXNlcjE2Mjk1NTM4","avatar_url":"https://avatars2.githubusercontent.com/u/16295538?v=4","gravatar_id":"","url":"https://api.github.com/users/pguibert6WIND","html_url":"https://github.com/pguibert6WIND","followers_url":"https://api.github.com/users/pguibert6WIND/followers","following_url":"https://api.github.com/users/pguibert6WIND/following{/other_user}","gists_url":"https://api.github.com/users/pguibert6WIND/gists{/gist_id}","starred_url":"https://api.github.com/users/pguibert6WIND/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pguibert6WIND/subscriptions","organizations_url":"https://api.github.com/users/pguibert6WIND/orgs","repos_url":"https://api.github.com/users/pguibert6WIND/repos","events_url":"https://api.github.com/users/pguibert6WIND/events{/privacy}","received_events_url":"https://api.github.com/users/pguibert6WIND/received_events","type":"User","site_admin":false},"body":"This commit gathers some basic information on how to configure and setup\r\nLdp, as well as depict some main principles for that protocol.\r\n\r\nSigned-off-by: Philippe Guibert <philippe.guibert@6wind.com>","created_at":"2018-07-09T10:30:58Z","updated_at":"2018-07-09T15:39:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"eb519c0d55793d93bce4ec1b0618bdcf951bbdc7","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/FRRouting/frr/pulls/2640/commits","review_comments_url":"https://api.github.com/repos/FRRouting/frr/pulls/2640/comments","review_comment_url":"https://api.github.com/repos/FRRouting/frr/pulls/comments{/number}","comments_url":"https://api.github.com/repos/FRRouting/frr/issues/2640/comments","statuses_url":"https://api.github.com/repos/FRRouting/frr/statuses/361921e0290d24d9be5448d6a9b818f6f45f87f5","head":{"label":"pguibert6WIND:doc_ldp","ref":"doc_ldp","sha":"361921e0290d24d9be5448d6a9b818f6f45f87f5","user":{"login":"pguibert6WIND","id":16295538,"node_id":"MDQ6VXNlcjE2Mjk1NTM4","avatar_url":"https://avatars2.githubusercontent.com/u/16295538?v=4","gravatar_id":"","url":"https://api.github.com/users/pguibert6WIND","html_url":"https://github.com/pguibert6WIND","followers_url":"https://api.github.com/users/pguibert6WIND/followers","following_url":"https://api.github.com/users/pguibert6WIND/following{/other_user}","gists_url":"https://api.github.com/users/pguibert6WIND/gists{/gist_id}","starred_url":"https://api.github.com/users/pguibert6WIND/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pguibert6WIND/subscriptions","organizations_url":"https://api.github.com/users/pguibert6WIND/orgs","repos_url":"https://api.github.com/users/pguibert6WIND/repos","events_url":"https://api.github.com/users/pguibert6WIND/events{/privacy}","received_events_url":"https://api.github.com/users/pguibert6WIND/received_events","type":"User","site_admin":false},"repo":{"id":78088116,"node_id":"MDEwOlJlcG9zaXRvcnk3ODA4ODExNg==","name":"frr","full_name":"pguibert6WIND/frr","owner":{"login":"pguibert6WIND","id":16295538,"node_id":"MDQ6VXNlcjE2Mjk1NTM4","avatar_url":"https://avatars2.githubusercontent.com/u/16295538?v=4","gravatar_id":"","url":"https://api.github.com/users/pguibert6WIND","html_url":"https://github.com/pguibert6WIND","followers_url":"https://api.github.com/users/pguibert6WIND/followers","following_url":"https://api.github.com/users/pguibert6WIND/following{/other_user}","gists_url":"https://api.github.com/users/pguibert6WIND/gists{/gist_id}","starred_url":"https://api.github.com/users/pguibert6WIND/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pguibert6WIND/subscriptions","organizations_url":"https://api.github.com/users/pguibert6WIND/orgs","repos_url":"https://api.github.com/users/pguibert6WIND/repos","events_url":"https://api.github.com/users/pguibert6WIND/events{/privacy}","received_events_url":"https://api.github.com/users/pguibert6WIND/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/pguibert6WIND/frr","description":"FRR - The FreeRangeRouting Protocol Suite forked from Quagga","fork":true,"url":"https://api.github.com/repos/pguibert6WIND/frr","forks_url":"https://api.github.com/repos/pguibert6WIND/frr/forks","keys_url":"https://api.github.com/repos/pguibert6WIND/frr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pguibert6WIND/frr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pguibert6WIND/frr/teams","hooks_url":"https://api.github.com/repos/pguibert6WIND/frr/hooks","issue_events_url":"https://api.github.com/repos/pguibert6WIND/frr/issues/events{/number}","events_url":"https://api.github.com/repos/pguibert6WIND/frr/events","assignees_url":"https://api.github.com/repos/pguibert6WIND/frr/assignees{/user}","branches_url":"https://api.github.com/repos/pguibert6WIND/frr/branches{/branch}","tags_url":"https://api.github.com/repos/pguibert6WIND/frr/tags","blobs_url":"https://api.github.com/repos/pguibert6WIND/frr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pguibert6WIND/frr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pguibert6WIND/frr/git/refs{/sha}","trees_url":"https://api.github.com/repos/pguibert6WIND/frr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pguibert6WIND/frr/statuses/{sha}","languages_url":"https://api.github.com/repos/pguibert6WIND/frr/languages","stargazers_url":"https://api.github.com/repos/pguibert6WIND/frr/stargazers","contributors_url":"https://api.github.com/repos/pguibert6WIND/frr/contributors","subscribers_url":"https://api.github.com/repos/pguibert6WIND/frr/subscribers","subscription_url":"https://api.github.com/repos/pguibert6WIND/frr/subscription","commits_url":"https://api.github.com/repos/pguibert6WIND/frr/commits{/sha}","git_commits_url":"https://api.github.com/repos/pguibert6WIND/frr/git/commits{/sha}","comments_url":"https://api.github.com/repos/pguibert6WIND/frr/comments{/number}","issue_comment_url":"https://api.github.com/repos/pguibert6WIND/frr/issues/comments{/number}","contents_url":"https://api.github.com/repos/pguibert6WIND/frr/contents/{+path}","compare_url":"https://api.github.com/repos/pguibert6WIND/frr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pguibert6WIND/frr/merges","archive_url":"https://api.github.com/repos/pguibert6WIND/frr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pguibert6WIND/frr/downloads","issues_url":"https://api.github.com/repos/pguibert6WIND/frr/issues{/number}","pulls_url":"https://api.github.com/repos/pguibert6WIND/frr/pulls{/number}","milestones_url":"https://api.github.com/repos/pguibert6WIND/frr/milestones{/number}","notifications_url":"https://api.github.com/repos/pguibert6WIND/frr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pguibert6WIND/frr/labels{/name}","releases_url":"https://api.github.com/repos/pguibert6WIND/frr/releases{/id}","deployments_url":"https://api.github.com/repos/pguibert6WIND/frr/deployments","created_at":"2017-01-05T06:56:15Z","updated_at":"2017-01-05T06:56:22Z","pushed_at":"2018-07-09T15:37:59Z","git_url":"git://github.com/pguibert6WIND/frr.git","ssh_url":"git@github.com:pguibert6WIND/frr.git","clone_url":"https://github.com/pguibert6WIND/frr.git","svn_url":"https://github.com/pguibert6WIND/frr","homepage":"","size":42097,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"FRRouting:master","ref":"master","sha":"76f17a8cc4346efabe5f87b5b2578ed6c8ee6fbf","user":{"login":"FRRouting","id":24592672,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI0NTkyNjcy","avatar_url":"https://avatars1.githubusercontent.com/u/24592672?v=4","gravatar_id":"","url":"https://api.github.com/users/FRRouting","html_url":"https://github.com/FRRouting","followers_url":"https://api.github.com/users/FRRouting/followers","following_url":"https://api.github.com/users/FRRouting/following{/other_user}","gists_url":"https://api.github.com/users/FRRouting/gists{/gist_id}","starred_url":"https://api.github.com/users/FRRouting/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FRRouting/subscriptions","organizations_url":"https://api.github.com/users/FRRouting/orgs","repos_url":"https://api.github.com/users/FRRouting/repos","events_url":"https://api.github.com/users/FRRouting/events{/privacy}","received_events_url":"https://api.github.com/users/FRRouting/received_events","type":"Organization","site_admin":false},"repo":{"id":76599439,"node_id":"MDEwOlJlcG9zaXRvcnk3NjU5OTQzOQ==","name":"frr","full_name":"FRRouting/frr","owner":{"login":"FRRouting","id":24592672,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI0NTkyNjcy","avatar_url":"https://avatars1.githubusercontent.com/u/24592672?v=4","gravatar_id":"","url":"https://api.github.com/users/FRRouting","html_url":"https://github.com/FRRouting","followers_url":"https://api.github.com/users/FRRouting/followers","following_url":"https://api.github.com/users/FRRouting/following{/other_user}","gists_url":"https://api.github.com/users/FRRouting/gists{/gist_id}","starred_url":"https://api.github.com/users/FRRouting/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FRRouting/subscriptions","organizations_url":"https://api.github.com/users/FRRouting/orgs","repos_url":"https://api.github.com/users/FRRouting/repos","events_url":"https://api.github.com/users/FRRouting/events{/privacy}","received_events_url":"https://api.github.com/users/FRRouting/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/FRRouting/frr","description":"The FRRouting Protocol Suite","fork":false,"url":"https://api.github.com/repos/FRRouting/frr","forks_url":"https://api.github.com/repos/FRRouting/frr/forks","keys_url":"https://api.github.com/repos/FRRouting/frr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/FRRouting/frr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/FRRouting/frr/teams","hooks_url":"https://api.github.com/repos/FRRouting/frr/hooks","issue_events_url":"https://api.github.com/repos/FRRouting/frr/issues/events{/number}","events_url":"https://api.github.com/repos/FRRouting/frr/events","assignees_url":"https://api.github.com/repos/FRRouting/frr/assignees{/user}","branches_url":"https://api.github.com/repos/FRRouting/frr/branches{/branch}","tags_url":"https://api.github.com/repos/FRRouting/frr/tags","blobs_url":"https://api.github.com/repos/FRRouting/frr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/FRRouting/frr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/FRRouting/frr/git/refs{/sha}","trees_url":"https://api.github.com/repos/FRRouting/frr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/FRRouting/frr/statuses/{sha}","languages_url":"https://api.github.com/repos/FRRouting/frr/languages","stargazers_url":"https://api.github.com/repos/FRRouting/frr/stargazers","contributors_url":"https://api.github.com/repos/FRRouting/frr/contributors","subscribers_url":"https://api.github.com/repos/FRRouting/frr/subscribers","subscription_url":"https://api.github.com/repos/FRRouting/frr/subscription","commits_url":"https://api.github.com/repos/FRRouting/frr/commits{/sha}","git_commits_url":"https://api.github.com/repos/FRRouting/frr/git/commits{/sha}","comments_url":"https://api.github.com/repos/FRRouting/frr/comments{/number}","issue_comment_url":"https://api.github.com/repos/FRRouting/frr/issues/comments{/number}","contents_url":"https://api.github.com/repos/FRRouting/frr/contents/{+path}","compare_url":"https://api.github.com/repos/FRRouting/frr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/FRRouting/frr/merges","archive_url":"https://api.github.com/repos/FRRouting/frr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/FRRouting/frr/downloads","issues_url":"https://api.github.com/repos/FRRouting/frr/issues{/number}","pulls_url":"https://api.github.com/repos/FRRouting/frr/pulls{/number}","milestones_url":"https://api.github.com/repos/FRRouting/frr/milestones{/number}","notifications_url":"https://api.github.com/repos/FRRouting/frr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/FRRouting/frr/labels{/name}","releases_url":"https://api.github.com/repos/FRRouting/frr/releases{/id}","deployments_url":"https://api.github.com/repos/FRRouting/frr/deployments","created_at":"2016-12-15T21:56:38Z","updated_at":"2018-07-09T12:46:57Z","pushed_at":"2018-07-09T15:38:01Z","git_url":"git://github.com/FRRouting/frr.git","ssh_url":"git@github.com:FRRouting/frr.git","clone_url":"https://github.com/FRRouting/frr.git","svn_url":"https://github.com/FRRouting/frr","homepage":"https://frrouting.org/","size":41362,"stargazers_count":559,"watchers_count":559,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":216,"mirror_url":null,"archived":false,"open_issues_count":240,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":216,"open_issues":240,"watchers":559,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/FRRouting/frr/pulls/2640"},"html":{"href":"https://github.com/FRRouting/frr/pull/2640"},"issue":{"href":"https://api.github.com/repos/FRRouting/frr/issues/2640"},"comments":{"href":"https://api.github.com/repos/FRRouting/frr/issues/2640/comments"},"review_comments":{"href":"https://api.github.com/repos/FRRouting/frr/pulls/2640/comments"},"review_comment":{"href":"https://api.github.com/repos/FRRouting/frr/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/FRRouting/frr/pulls/2640/commits"},"statuses":{"href":"https://api.github.com/repos/FRRouting/frr/statuses/361921e0290d24d9be5448d6a9b818f6f45f87f5"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"qlyoung"}}