{"action":"created","comment":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments/38947029","id":38947029,"diff_hunk":"@@ -0,0 +1,299 @@\n+/*\n+ * Copyright (C) 2015 Martine Lenders <mlenders@inf.fu-berlin.de>\n+ *\n+ * This file is subject to the terms and conditions of the GNU Lesser\n+ * General Public License v2.1. See the file LICENSE in the top level\n+ * directory for more details.\n+ */\n+\n+/**\n+ * @{\n+ *\n+ * @file\n+ */\n+\n+#include \"net/eui64.h\"\n+#include \"net/gnrc/ipv6.h\"\n+#include \"net/gnrc/ndp.h\"\n+#include \"net/gnrc/ndp/internal.h\"\n+#include \"net/gnrc/netif.h\"\n+#include \"net/gnrc/sixlowpan.h\"\n+#include \"net/gnrc/sixlowpan/ctx.h\"\n+#include \"random.h\"\n+#include \"timex.h\"\n+\n+#include \"net/gnrc/sixlowpan/nd.h\"\n+\n+#define ENABLE_DEBUG (0)\n+#include \"debug.h\"\n+\n+static inline void _rtr_sol_reschedule(gnrc_ipv6_netif_t *iface, uint32_t sec_delay)\n+{\n+    vtimer_remove(&iface->rtr_sol_timer);\n+    vtimer_set_msg(&iface->rtr_sol_timer, timex_set(sec_delay, 0), gnrc_ipv6_pid,\n+                   GNRC_SIXLOWPAN_ND_MSG_MC_RTR_SOL, iface);\n+}\n+\n+static inline uint32_t _binary_exp_backoff(uint32_t base_sec, unsigned int exp)\n+{\n+    return genrand_uint32_range(0, (1 << exp) - 1) * base_sec;\n+}\n+\n+static inline void _revert_iid(uint8_t *iid)\n+{\n+    iid[0] ^= 0x02;\n+}\n+\n+void gnrc_sixlowpan_nd_init(gnrc_ipv6_netif_t *iface)\n+{\n+    assert(iface->flags & GNRC_IPV6_NETIF_FLAGS_SIXLOWPAN);\n+    mutex_lock(&iface->mutex);\n+    iface->rtr_sol_count = 0;   /* first will be send immediately */\n+\n+    DEBUG(\"6lo nd: retransmit multicast rtr sol in 10 sec\\n\");\n+    _rtr_sol_reschedule(iface, GNRC_SIXLOWPAN_ND_RTR_SOL_INT);\n+    mutex_unlock(&iface->mutex);\n+    gnrc_ndp_internal_send_rtr_sol(iface->pid, NULL);\n+}\n+\n+void gnrc_sixlowpan_nd_mc_rtr_sol(gnrc_ipv6_netif_t *iface)\n+{\n+    uint32_t interval;\n+    assert(iface->flags & GNRC_IPV6_NETIF_FLAGS_SIXLOWPAN);\n+    mutex_lock(&iface->mutex);\n+    if (iface->rtr_sol_count < GNRC_NDP_MAX_RTR_SOL_NUMOF) {\n+        DEBUG(\"6lo nd: retransmit multicast rtr sol in 10 sec\\n\");\n+        iface->rtr_sol_count++;\n+        interval = GNRC_SIXLOWPAN_ND_RTR_SOL_INT;\n+    }\n+    else {\n+        unsigned int exp = (unsigned int)(iface->rtr_sol_count - GNRC_NDP_MAX_RTR_SOL_NUMOF);\n+        interval = _binary_exp_backoff(1, exp);\n+        if (((1U << exp) - 1U) < GNRC_SIXLOWPAN_ND_MAX_RTR_SOL_INT) {\n+            /* XXX Not sure if this is the correct interpretation of the truncation described in\n+             * https://tools.ietf.org/html/rfc6775#section-5.3. In every source I've read the\n+             * truncating value was the exponent, not the target value, so I'm very confused\n+             * about this sentencing. Anyway, since 60 sec is a maximum value this should only\n+             * affect the energy consumption of the implementation by sending the next RS too fast\n+             * but not its interoperability. */\n+            iface->rtr_sol_count++;\n+        }\n+\n+        DEBUG(\"6lo nd: retransmit multicast rtr sol in %\" PRIu32 \" sec\\n\", interval);\n+        iface->rtr_sol_count--;\n+    }\n+    _rtr_sol_reschedule(iface, interval);\n+    mutex_unlock(&iface->mutex);\n+    gnrc_ndp_internal_send_rtr_sol(iface->pid, NULL);\n+}\n+\n+void gnrc_sixlowpan_nd_uc_rtr_sol(gnrc_ipv6_nc_t *nce)\n+{\n+    assert(gnrc_ipv6_netif_get(nce->iface)->flags & GNRC_IPV6_NETIF_FLAGS_SIXLOWPAN);\n+    /* neighbor is not a router anymore */\n+    if (!(nce->flags & GNRC_IPV6_NC_IS_ROUTER) || ipv6_addr_is_unspecified(&nce->ipv6_addr)) {\n+        /* and there are no routers anymore */\n+        if (gnrc_ipv6_nc_get_next_router(NULL) == NULL) {\n+            /* start search for routers */\n+            gnrc_sixlowpan_nd_init(gnrc_ipv6_netif_get(nce->iface));\n+        }\n+        /* otherwise ignore this call */\n+        return;\n+    }\n+    /* next RS is rescheduled by RA handle function */\n+    gnrc_ndp_internal_send_rtr_sol(nce->iface, &nce->ipv6_addr);\n+}\n+\n+kernel_pid_t gnrc_sixlowpan_nd_next_hop_l2addr(uint8_t *l2addr, uint8_t *l2addr_len,\n+                                               kernel_pid_t iface, ipv6_addr_t *dst)\n+{\n+    ipv6_addr_t *next_hop = NULL;\n+    gnrc_ipv6_nc_t *nc_entry = NULL;\n+\n+#ifdef MODULE_GNRC_IPV6_EXT_RH\n+    ipv6_hdr_t *hdr;\n+    gnrc_pktsnip_t *ipv6;\n+    LL_SEARCH_SCALAR(pkt, ipv6, type, GNRC_NETTYPE_IPV6);\n+    assert(ipv6);\n+    hdr = ipv6->data;\n+    next_hop = ipv6_ext_rh_next_hop(hdr);\n+#endif\n+#ifdef MODULE_FIB\n+    ipv6_addr_t next_hop_actual;    /* FIB copies address into this variable */\n+    /* don't look-up link local addresses in FIB */\n+    if ((next_hop == NULL) && !ipv6_addr_is_link_local(dst)) {\n+        size_t next_hop_size = sizeof(ipv6_addr_t);\n+        uint32_t next_hop_flags = 0;\n+        if ((next_hop == NULL) &&\n+            (fib_get_next_hop(&gnrc_ipv6_fib_table, &iface, next_hop_actual.u8, &next_hop_size,\n+                              &next_hop_flags, (uint8_t *)dst,\n+                              sizeof(ipv6_addr_t), 0) >= 0) &&\n+            (next_hop_size == sizeof(ipv6_addr_t))) {\n+            next_hop = &next_hop_actual;\n+        }\n+    }\n+#endif\n+    /* next hop determination according to: https://tools.ietf.org/html/rfc6775#section-5.6 */\n+    if ((next_hop == NULL) && ipv6_addr_is_link_local(dst)) {   /* prefix is \"on-link\" */\n+        /* multicast is not handled here anyway so we don't need to check that */\n+        next_hop = dst;\n+    }\n+    else if (next_hop == NULL) {                                /* prefix is off-link */\n+        next_hop = gnrc_ndp_internal_default_router();\n+    }\n+\n+    /* address resolution of next_hop: https://tools.ietf.org/html/rfc6775#section-5.7 */\n+    if (ipv6_addr_is_link_local(next_hop)) {\n+        kernel_pid_t ifs[GNRC_NETIF_NUMOF];\n+        size_t ifnum = gnrc_netif_get(ifs);\n+        /* we don't need address resolution, the EUI-64 is in next_hop's IID */\n+        *l2addr_len = sizeof(eui64_t);\n+        memcpy(l2addr, &next_hop->u8[8], sizeof(eui64_t));\n+        _revert_iid(l2addr);\n+#if (GNRC_NETIF_NUMOF == 1)\n+        (void)ifnum;\n+        return ifs[0];\n+#else\n+        for (unsigned i = 0; i < ifnum; i++) {\n+            iface = gnrc_ipv6_netif_get(ifs[i]);\n+            if ((iface != NULL) && (iface->flags & GNRC_IPV6_NETIF_FLAGS_SIXLOWPAN)) {\n+                /* always take the first 6LoWPAN interface we can find */\n+                return ifs[i];\n+            }\n+        }\n+        return KERNEL_PID_UNDEF;    /* no 6LoWPAN interface? Something went wrong. */\n+#endif","path":"sys/net/gnrc/network_layer/sixlowpan/nd/gnrc_sixlowpan_nd.c","position":null,"original_position":165,"commit_id":"5831caacfc80ab53e00036e68dd2ee4a0496518b","original_commit_id":"813eaff4fdd06ecb5086e6bd11a15e60817bc8ce","user":{"login":"authmillenon","id":675644,"avatar_url":"https://avatars.githubusercontent.com/u/675644?v=3","gravatar_id":"","url":"https://api.github.com/users/authmillenon","html_url":"https://github.com/authmillenon","followers_url":"https://api.github.com/users/authmillenon/followers","following_url":"https://api.github.com/users/authmillenon/following{/other_user}","gists_url":"https://api.github.com/users/authmillenon/gists{/gist_id}","starred_url":"https://api.github.com/users/authmillenon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/authmillenon/subscriptions","organizations_url":"https://api.github.com/users/authmillenon/orgs","repos_url":"https://api.github.com/users/authmillenon/repos","events_url":"https://api.github.com/users/authmillenon/events{/privacy}","received_events_url":"https://api.github.com/users/authmillenon/received_events","type":"User","site_admin":false},"body":"Removed \"superfluous\" CPP if, but used input `iface` in case it was set (e.g. by FIB)","created_at":"2015-09-08T16:27:01Z","updated_at":"2015-09-08T16:27:01Z","html_url":"https://github.com/RIOT-OS/RIOT/pull/3748#discussion_r38947029","pull_request_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/3748","_links":{"self":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments/38947029"},"html":{"href":"https://github.com/RIOT-OS/RIOT/pull/3748#discussion_r38947029"},"pull_request":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/3748"}}},"pull_request":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/3748","id":43768315,"html_url":"https://github.com/RIOT-OS/RIOT/pull/3748","diff_url":"https://github.com/RIOT-OS/RIOT/pull/3748.diff","patch_url":"https://github.com/RIOT-OS/RIOT/pull/3748.patch","issue_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/3748","number":3748,"state":"open","locked":false,"title":"gnrc_sixlowpan_nd: initial import of host behavior of 6LoWPAN-ND","user":{"login":"authmillenon","id":675644,"avatar_url":"https://avatars.githubusercontent.com/u/675644?v=3","gravatar_id":"","url":"https://api.github.com/users/authmillenon","html_url":"https://github.com/authmillenon","followers_url":"https://api.github.com/users/authmillenon/followers","following_url":"https://api.github.com/users/authmillenon/following{/other_user}","gists_url":"https://api.github.com/users/authmillenon/gists{/gist_id}","starred_url":"https://api.github.com/users/authmillenon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/authmillenon/subscriptions","organizations_url":"https://api.github.com/users/authmillenon/orgs","repos_url":"https://api.github.com/users/authmillenon/repos","events_url":"https://api.github.com/users/authmillenon/events{/privacy}","received_events_url":"https://api.github.com/users/authmillenon/received_events","type":"User","site_admin":false},"body":"This imports [host behavior](https://tools.ietf.org/html/rfc6775#section-5) for [6LoWPAN-ND](https://tools.ietf.org/html/rfc6775) and adapts GNRC accordingly\r\n\r\nDepends on:\r\n* ~~#3628: address-less link-layer handling for NDP~~ (merged)\r\n* ~~#3744: `gnrc_ipv6_nc` adaption for 6LoWPAN-ND~~ (merged)\r\n* ~~#3745: `gnrc_ipv6_netif` adaptations for router discovery~~ (merged)\r\n* ~~#3746: host-behavior for normal router discovery~~ (merged)\r\n* ~~#3747: adaption of the NA send function to build ARO externally~~ (merged)","created_at":"2015-08-31T14:13:07Z","updated_at":"2015-09-08T16:27:01Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7e2c670199d2f437a84b00fa4a108a735d059b3d","assignee":{"login":"OlegHahm","id":1590423,"avatar_url":"https://avatars.githubusercontent.com/u/1590423?v=3","gravatar_id":"","url":"https://api.github.com/users/OlegHahm","html_url":"https://github.com/OlegHahm","followers_url":"https://api.github.com/users/OlegHahm/followers","following_url":"https://api.github.com/users/OlegHahm/following{/other_user}","gists_url":"https://api.github.com/users/OlegHahm/gists{/gist_id}","starred_url":"https://api.github.com/users/OlegHahm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OlegHahm/subscriptions","organizations_url":"https://api.github.com/users/OlegHahm/orgs","repos_url":"https://api.github.com/users/OlegHahm/repos","events_url":"https://api.github.com/users/OlegHahm/events{/privacy}","received_events_url":"https://api.github.com/users/OlegHahm/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/milestones/12","html_url":"https://github.com/RIOT-OS/RIOT/milestones/Release%202015.09","labels_url":"https://api.github.com/repos/RIOT-OS/RIOT/milestones/12/labels","id":1088995,"number":12,"title":"Release 2015.09","description":"This release aims mainly to include the gnrc network stack as the new default IPv6/6LoWPAN stack.","creator":{"login":"OlegHahm","id":1590423,"avatar_url":"https://avatars.githubusercontent.com/u/1590423?v=3","gravatar_id":"","url":"https://api.github.com/users/OlegHahm","html_url":"https://github.com/OlegHahm","followers_url":"https://api.github.com/users/OlegHahm/followers","following_url":"https://api.github.com/users/OlegHahm/following{/other_user}","gists_url":"https://api.github.com/users/OlegHahm/gists{/gist_id}","starred_url":"https://api.github.com/users/OlegHahm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OlegHahm/subscriptions","organizations_url":"https://api.github.com/users/OlegHahm/orgs","repos_url":"https://api.github.com/users/OlegHahm/repos","events_url":"https://api.github.com/users/OlegHahm/events{/privacy}","received_events_url":"https://api.github.com/users/OlegHahm/received_events","type":"User","site_admin":false},"open_issues":44,"closed_issues":444,"state":"open","created_at":"2015-04-29T10:11:27Z","updated_at":"2015-09-08T09:58:02Z","due_on":"2015-09-17T22:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/3748/commits","review_comments_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/3748/comments","review_comment_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments{/number}","comments_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/3748/comments","statuses_url":"https://api.github.com/repos/RIOT-OS/RIOT/statuses/5831caacfc80ab53e00036e68dd2ee4a0496518b","head":{"label":"authmillenon:gnrc_sixlowpan_nd/feat/initial","ref":"gnrc_sixlowpan_nd/feat/initial","sha":"5831caacfc80ab53e00036e68dd2ee4a0496518b","user":{"login":"authmillenon","id":675644,"avatar_url":"https://avatars.githubusercontent.com/u/675644?v=3","gravatar_id":"","url":"https://api.github.com/users/authmillenon","html_url":"https://github.com/authmillenon","followers_url":"https://api.github.com/users/authmillenon/followers","following_url":"https://api.github.com/users/authmillenon/following{/other_user}","gists_url":"https://api.github.com/users/authmillenon/gists{/gist_id}","starred_url":"https://api.github.com/users/authmillenon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/authmillenon/subscriptions","organizations_url":"https://api.github.com/users/authmillenon/orgs","repos_url":"https://api.github.com/users/authmillenon/repos","events_url":"https://api.github.com/users/authmillenon/events{/privacy}","received_events_url":"https://api.github.com/users/authmillenon/received_events","type":"User","site_admin":false},"repo":{"id":7667624,"name":"RIOT","full_name":"authmillenon/RIOT","owner":{"login":"authmillenon","id":675644,"avatar_url":"https://avatars.githubusercontent.com/u/675644?v=3","gravatar_id":"","url":"https://api.github.com/users/authmillenon","html_url":"https://github.com/authmillenon","followers_url":"https://api.github.com/users/authmillenon/followers","following_url":"https://api.github.com/users/authmillenon/following{/other_user}","gists_url":"https://api.github.com/users/authmillenon/gists{/gist_id}","starred_url":"https://api.github.com/users/authmillenon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/authmillenon/subscriptions","organizations_url":"https://api.github.com/users/authmillenon/orgs","repos_url":"https://api.github.com/users/authmillenon/repos","events_url":"https://api.github.com/users/authmillenon/events{/privacy}","received_events_url":"https://api.github.com/users/authmillenon/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/authmillenon/RIOT","description":"RIOT OS -  The revolutionary IoT OS","fork":true,"url":"https://api.github.com/repos/authmillenon/RIOT","forks_url":"https://api.github.com/repos/authmillenon/RIOT/forks","keys_url":"https://api.github.com/repos/authmillenon/RIOT/keys{/key_id}","collaborators_url":"https://api.github.com/repos/authmillenon/RIOT/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/authmillenon/RIOT/teams","hooks_url":"https://api.github.com/repos/authmillenon/RIOT/hooks","issue_events_url":"https://api.github.com/repos/authmillenon/RIOT/issues/events{/number}","events_url":"https://api.github.com/repos/authmillenon/RIOT/events","assignees_url":"https://api.github.com/repos/authmillenon/RIOT/assignees{/user}","branches_url":"https://api.github.com/repos/authmillenon/RIOT/branches{/branch}","tags_url":"https://api.github.com/repos/authmillenon/RIOT/tags","blobs_url":"https://api.github.com/repos/authmillenon/RIOT/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/authmillenon/RIOT/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/authmillenon/RIOT/git/refs{/sha}","trees_url":"https://api.github.com/repos/authmillenon/RIOT/git/trees{/sha}","statuses_url":"https://api.github.com/repos/authmillenon/RIOT/statuses/{sha}","languages_url":"https://api.github.com/repos/authmillenon/RIOT/languages","stargazers_url":"https://api.github.com/repos/authmillenon/RIOT/stargazers","contributors_url":"https://api.github.com/repos/authmillenon/RIOT/contributors","subscribers_url":"https://api.github.com/repos/authmillenon/RIOT/subscribers","subscription_url":"https://api.github.com/repos/authmillenon/RIOT/subscription","commits_url":"https://api.github.com/repos/authmillenon/RIOT/commits{/sha}","git_commits_url":"https://api.github.com/repos/authmillenon/RIOT/git/commits{/sha}","comments_url":"https://api.github.com/repos/authmillenon/RIOT/comments{/number}","issue_comment_url":"https://api.github.com/repos/authmillenon/RIOT/issues/comments{/number}","contents_url":"https://api.github.com/repos/authmillenon/RIOT/contents/{+path}","compare_url":"https://api.github.com/repos/authmillenon/RIOT/compare/{base}...{head}","merges_url":"https://api.github.com/repos/authmillenon/RIOT/merges","archive_url":"https://api.github.com/repos/authmillenon/RIOT/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/authmillenon/RIOT/downloads","issues_url":"https://api.github.com/repos/authmillenon/RIOT/issues{/number}","pulls_url":"https://api.github.com/repos/authmillenon/RIOT/pulls{/number}","milestones_url":"https://api.github.com/repos/authmillenon/RIOT/milestones{/number}","notifications_url":"https://api.github.com/repos/authmillenon/RIOT/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/authmillenon/RIOT/labels{/name}","releases_url":"https://api.github.com/repos/authmillenon/RIOT/releases{/id}","created_at":"2013-01-17T14:31:57Z","updated_at":"2015-05-01T13:02:29Z","pushed_at":"2015-09-08T16:26:04Z","git_url":"git://github.com/authmillenon/RIOT.git","ssh_url":"git@github.com:authmillenon/RIOT.git","clone_url":"https://github.com/authmillenon/RIOT.git","svn_url":"https://github.com/authmillenon/RIOT","homepage":null,"size":40080,"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":"RIOT-OS:master","ref":"master","sha":"bad1a74b65f5c7add938bdc5e5e676d4508eaacd","user":{"login":"RIOT-OS","id":3079480,"avatar_url":"https://avatars.githubusercontent.com/u/3079480?v=3","gravatar_id":"","url":"https://api.github.com/users/RIOT-OS","html_url":"https://github.com/RIOT-OS","followers_url":"https://api.github.com/users/RIOT-OS/followers","following_url":"https://api.github.com/users/RIOT-OS/following{/other_user}","gists_url":"https://api.github.com/users/RIOT-OS/gists{/gist_id}","starred_url":"https://api.github.com/users/RIOT-OS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RIOT-OS/subscriptions","organizations_url":"https://api.github.com/users/RIOT-OS/orgs","repos_url":"https://api.github.com/users/RIOT-OS/repos","events_url":"https://api.github.com/users/RIOT-OS/events{/privacy}","received_events_url":"https://api.github.com/users/RIOT-OS/received_events","type":"Organization","site_admin":false},"repo":{"id":7370241,"name":"RIOT","full_name":"RIOT-OS/RIOT","owner":{"login":"RIOT-OS","id":3079480,"avatar_url":"https://avatars.githubusercontent.com/u/3079480?v=3","gravatar_id":"","url":"https://api.github.com/users/RIOT-OS","html_url":"https://github.com/RIOT-OS","followers_url":"https://api.github.com/users/RIOT-OS/followers","following_url":"https://api.github.com/users/RIOT-OS/following{/other_user}","gists_url":"https://api.github.com/users/RIOT-OS/gists{/gist_id}","starred_url":"https://api.github.com/users/RIOT-OS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RIOT-OS/subscriptions","organizations_url":"https://api.github.com/users/RIOT-OS/orgs","repos_url":"https://api.github.com/users/RIOT-OS/repos","events_url":"https://api.github.com/users/RIOT-OS/events{/privacy}","received_events_url":"https://api.github.com/users/RIOT-OS/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/RIOT-OS/RIOT","description":"RIOT -  The friendly OS for IoT","fork":false,"url":"https://api.github.com/repos/RIOT-OS/RIOT","forks_url":"https://api.github.com/repos/RIOT-OS/RIOT/forks","keys_url":"https://api.github.com/repos/RIOT-OS/RIOT/keys{/key_id}","collaborators_url":"https://api.github.com/repos/RIOT-OS/RIOT/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/RIOT-OS/RIOT/teams","hooks_url":"https://api.github.com/repos/RIOT-OS/RIOT/hooks","issue_events_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/events{/number}","events_url":"https://api.github.com/repos/RIOT-OS/RIOT/events","assignees_url":"https://api.github.com/repos/RIOT-OS/RIOT/assignees{/user}","branches_url":"https://api.github.com/repos/RIOT-OS/RIOT/branches{/branch}","tags_url":"https://api.github.com/repos/RIOT-OS/RIOT/tags","blobs_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/refs{/sha}","trees_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/trees{/sha}","statuses_url":"https://api.github.com/repos/RIOT-OS/RIOT/statuses/{sha}","languages_url":"https://api.github.com/repos/RIOT-OS/RIOT/languages","stargazers_url":"https://api.github.com/repos/RIOT-OS/RIOT/stargazers","contributors_url":"https://api.github.com/repos/RIOT-OS/RIOT/contributors","subscribers_url":"https://api.github.com/repos/RIOT-OS/RIOT/subscribers","subscription_url":"https://api.github.com/repos/RIOT-OS/RIOT/subscription","commits_url":"https://api.github.com/repos/RIOT-OS/RIOT/commits{/sha}","git_commits_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/commits{/sha}","comments_url":"https://api.github.com/repos/RIOT-OS/RIOT/comments{/number}","issue_comment_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/comments{/number}","contents_url":"https://api.github.com/repos/RIOT-OS/RIOT/contents/{+path}","compare_url":"https://api.github.com/repos/RIOT-OS/RIOT/compare/{base}...{head}","merges_url":"https://api.github.com/repos/RIOT-OS/RIOT/merges","archive_url":"https://api.github.com/repos/RIOT-OS/RIOT/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/RIOT-OS/RIOT/downloads","issues_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues{/number}","pulls_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls{/number}","milestones_url":"https://api.github.com/repos/RIOT-OS/RIOT/milestones{/number}","notifications_url":"https://api.github.com/repos/RIOT-OS/RIOT/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/RIOT-OS/RIOT/labels{/name}","releases_url":"https://api.github.com/repos/RIOT-OS/RIOT/releases{/id}","created_at":"2012-12-29T20:38:40Z","updated_at":"2015-09-07T07:29:30Z","pushed_at":"2015-09-08T16:26:05Z","git_url":"git://github.com/RIOT-OS/RIOT.git","ssh_url":"git@github.com:RIOT-OS/RIOT.git","clone_url":"https://github.com/RIOT-OS/RIOT.git","svn_url":"https://github.com/RIOT-OS/RIOT","homepage":"https://github.com/RIOT-OS/RIOT/wiki","size":127147,"stargazers_count":494,"watchers_count":494,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":370,"mirror_url":null,"open_issues_count":347,"forks":370,"open_issues":347,"watchers":494,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/3748"},"html":{"href":"https://github.com/RIOT-OS/RIOT/pull/3748"},"issue":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/issues/3748"},"comments":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/issues/3748/comments"},"review_comments":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/3748/comments"},"review_comment":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/3748/commits"},"statuses":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/statuses/5831caacfc80ab53e00036e68dd2ee4a0496518b"}}}}