{"action":"created","issue":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/4381","labels_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/4381/labels{/name}","comments_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/4381/comments","events_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/4381/events","html_url":"https://github.com/RIOT-OS/RIOT/pull/4381","id":119918970,"number":4381,"title":"gnrc_sixlowpan_frag: Make fragmentation non-blocking","user":{"login":"PeterKietzmann","id":7765855,"avatar_url":"https://avatars.githubusercontent.com/u/7765855?v=3","gravatar_id":"","url":"https://api.github.com/users/PeterKietzmann","html_url":"https://github.com/PeterKietzmann","followers_url":"https://api.github.com/users/PeterKietzmann/followers","following_url":"https://api.github.com/users/PeterKietzmann/following{/other_user}","gists_url":"https://api.github.com/users/PeterKietzmann/gists{/gist_id}","starred_url":"https://api.github.com/users/PeterKietzmann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PeterKietzmann/subscriptions","organizations_url":"https://api.github.com/users/PeterKietzmann/orgs","repos_url":"https://api.github.com/users/PeterKietzmann/repos","events_url":"https://api.github.com/users/PeterKietzmann/events{/privacy}","received_events_url":"https://api.github.com/users/PeterKietzmann/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/RIOT-OS/RIOT/labels/enhancement","name":"enhancement","color":"f17070"},{"url":"https://api.github.com/repos/RIOT-OS/RIOT/labels/network","name":"network","color":"bfdadc"},{"url":"https://api.github.com/repos/RIOT-OS/RIOT/labels/Ready%20for%20CI%20build","name":"Ready for CI build","color":"bfdadc"}],"state":"open","locked":false,"assignee":{"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},"milestone":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/milestones/10","html_url":"https://github.com/RIOT-OS/RIOT/milestones/Release%202015.12","labels_url":"https://api.github.com/repos/RIOT-OS/RIOT/milestones/10/labels","id":871004,"number":10,"title":"Release 2015.12","description":"This is the next major milestone.","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":23,"closed_issues":245,"state":"open","created_at":"2014-11-18T10:51:58Z","updated_at":"2015-12-08T11:12:38Z","due_on":"2015-12-07T00:00:00Z","closed_at":null},"comments":25,"created_at":"2015-12-02T11:06:06Z","updated_at":"2015-12-08T12:13:39Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/4381","html_url":"https://github.com/RIOT-OS/RIOT/pull/4381","diff_url":"https://github.com/RIOT-OS/RIOT/pull/4381.diff","patch_url":"https://github.com/RIOT-OS/RIOT/pull/4381.patch"},"body":"It turned out that the implementation for 6LoWPAN fragmentation has a blocking behaviour (compare #3008). That means, as long has there are fragments to send, it is impossible to do something else in the 6LoWPAN thread, even not receiving packets. This PR tries to fix that. The main idea behind it: The 6LoWPAN thread sends a message to itself for each fragment that has to be send. This way it should be possible to process other messages in between, even if the fragmentation did not finish.\r\n\r\nHere is some code that I used for testing. But the more important thing would be an evaluation of not so special scenarios like mine:\r\n\r\nA link layer reflector driver that shorts the link. Note that you need to have the same *scr* and *dst* address when doing such kind of loopback. To avoid running into the IPv6 loopback, there is a small workaround in that branch which takes out some loopback checks if `LOOPBACK_MODE` is not defined \r\n[l2_reflector branch](https://github.com/PeterKietzmann/RIOT/tree/add_l2_reflector_driver)\r\n\r\nA manual application that sends UDP packets of different payloads (this is adjustable at the top of main.c)\r\n[plain_udp_test](https://github.com/PeterKietzmann/applications/tree/plain_udp_test/test_for_sixlo_frag)\r\n\r\nAttention! Using the above application might cause hard faults on a board. In that case you might want to apply the following patch to increase the stack size of the main thread\r\n[patch file](https://github.com/PeterKietzmann/applications/blob/plain_udp_test/test_for_sixlo_frag/0001-increased-main-stacksize-for-test-app.patch)"},"comment":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/comments/162863627","html_url":"https://github.com/RIOT-OS/RIOT/pull/4381#issuecomment-162863627","issue_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/4381","id":162863627,"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},"created_at":"2015-12-08T12:13:39Z","updated_at":"2015-12-08T12:13:39Z","body":"Tested in IoT-Lab, ping still works with big payloads and low delay => ACK."}}